分页虚拟存储管理——页面置换算法

2023-11-25 15:30

本文主要是介绍分页虚拟存储管理——页面置换算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

页面置换算法

  • 最佳置换算法(Optimal,OPT)
  • 先入先出置换算法(First-In First-Out,FIFO)
  • 最近最久未使用置换算法(Least Recently Used,LRU)

最佳置换算法(Optimal,OPT)

最佳置换算法是一种理想化的算法。要求从内存中淘汰以后永远不使用的页,若无这样的页,则淘汰在最长时间内不再被访问的页。采用最佳置换算法,可以保证获得最低的缺页率。但是人们无法预知一个进程在内存的若干个页面,哪一个页面是未来最长时间不再被访问的,因此这种算法是无法实现的,只能作为其他置换算法的衡量标准。

【例题】在一个分页式虚拟存储管理的系统中,一个作业的页面走向为1,2,1,0,4,1,3,4,2,1,4,1每调进一个新页就发生一次缺页中断。设分配给该作业的物理块数M=3,采用最佳置换算法求缺页中断次数F和缺页率f。
分析题目
页面走向为:1,2,1,0,4,1,3,4,2,1,4,1
缺页中断原则:每调进一个新页就发生一次缺页中断
分配给该作业的物理块数M=3,意思是:内存中最多可放置3页。
解:页面置换情况如下表所示。
为了好看,先写一个空表
在这里插入图片描述
访问顺序就是按照页面走向来排的,
1 进来时,内存尚为空,1 进来后占据1页。由于在 1 进来之前内存块中事先没有 1 的存在,所以此时 1 对于内存而言是一个新页,按照题目缺页中断的原则
每调进一个新页就发生一次缺页中断
,那么缺页数相应的加1,此时缺页数=1。
在这里插入图片描述
2进来时,内存已经被1占据了1块,此时内存剩余容量为2。当2进来后占据1页。由于在2进来之前内存中事先没有2的存在,所以此时 2 对于内存而言是一个新页,按照题目缺页中断的原则每调进一个新页就发生一次缺页中断,那么缺页数相应的加1,此时缺页数=2。
在这里插入图片描述
1进来时,内存已经被12占据了2块,此时内存剩余量为1。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
0进来时,内存已经被12、占据了2块,此时内存剩余量为1,0 是一个新页,所以缺页数应该加1,此时缺页数=3。
在这里插入图片描述
4进来时,内存已经被120占据了3块,此时内存无剩余量,且4 是一个新页,4想要进来就必须替换掉1,2,0中的一个,替换的规则就是看4后面的访问顺序 1,3,4,2,1,4,1那么究竟要替换哪一个数呢?答案是0,最佳置换算法的原理是:淘汰在最长时间内不再被访问的页,4要替换掉1,2,0中的在最长时间内不再被访问的页,当然就是0啦,4后面的访问顺序里都没有0被访问了,所以就让4替换掉0,与此同时缺页数加1,此时缺页数=4。
在这里插入图片描述
1进来时,内存已经被1,2,4占据了3块,此时内存剩余量为0。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
3进来时,内存已经被1,2,4占据了3块,此时内存剩余量为0。且3 是一个新页,3想要进来就必须替换掉1,2,4中的一个,替换的规则就是看3后面的访问顺序 4,2,1,4,1那么究竟要替换哪一个数呢?答案是1,最佳置换算法的原理是:淘汰在最长时间内不再被访问的页,3要替换掉1,2,4中的在最长时间内不再被访问的页,当然就是1啦,3后面的访问顺序相比较于4,21被访问的时候还早着呢!所以3要去置换1,与此同时缺页数加1,此时缺页数=5。
在这里插入图片描述
4进来时,内存已经被3,2,4占据了3块,此时内存剩余量为0。当4进来后,由于在4进来之前内存中事先有4的存在。所以此时的4对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
2进来时,内存已经被3,2,4占据了3块,此时内存剩余量为0。当2进来后,由于在2进来之前内存中事先有2的存在。所以此时的2对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
1进来时,内存已经被3,2,4占据了3块,此时内存剩余量为0。且1 是一个新页,1想要进来就必须替换掉3,2,4中的一个,替换的规则就是看1后面的访问顺序 4,1那么究竟要替换哪一个数呢?答案是3,最佳置换算法的原理是:淘汰在最长时间内不再被访问的页,1要替换掉3,2,4中的在最长时间内不再被访问的页,我们发现在后续的访问顺序中32都不会被访问到了,那么究竟要替换它们两个中的哪一个呢答案是3,(通过上一步2进入内存的时候3就已经存在了,32来得更早,换句话说32更早访问,那么相比23再被访问的时间就会晚一点),与此同时缺页数加1,此时缺页数=6。
在这里插入图片描述
4进来时,内存已经被1,2,4占据了3块,此时内存剩余量为0。当4进来后,由于在4进来之前内存中事先有4的存在。所以此时的4对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
1进来时,内存已经被1,2,4占据了3块,此时内存剩余量为0。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
至此所有的页面都访问完毕了,对应的页面置换情况表也成功出炉了:
在这里插入图片描述
缺页中断次数:F=6
缺页率:f=6/12=50%

先入先出置换算法(First-In First-Out,FIFO)

原理:淘汰最早进入内存的那个页面。因为,最早进入的页面,其不再使用的可能性比最近调入的页面要大。这种置换算法实现简单,只要把各个调入内存的页按其进入内存的现后顺序连成一个队列即可,总是淘汰队首的那一页。
【例题】在一个分页式虚拟存储管理的系统中,一个作业的
页面走向为1,2,1,0,4,1,3,4,2,1,4,1
每调进一个新页就发生一次缺页中断。设分配给该作业的物理块数M=3时,采用先入先出置换算法求缺页中断次数F和缺页率f。
分析题目
页面走向为:1,2,1,0,4,1,3,4,2,1,4,1
缺页中断原则:每调进一个新页就发生一次缺页中断
分配给该作业的物理块数M=3,意思是:内存中最多可放置3页。
解:分配给该作业的物理块数M=3时,页面置换情况如下表所示。
为了好看,先写一个空表在这里插入图片描述
访问顺序就是按照页面走向来排的,
1 进来时,内存尚为空,1 进来后占据1页。由于在 1 进来之前内存块中事先没有 1 的存在,所以此时 1 对于内存而言是一个新页,按照题目缺页中断的原则
每调进一个新页就发生一次缺页中断
,那么缺页数相应的加1,此时缺页数=1。
在这里插入图片描述
2进来时,内存已经被1占据了1块,此时内存剩余容量为2。当2进来后占据1页。由于在2进来之前内存中事先没有2的存在,所以此时 2 对于内存而言是一个新页,按照题目缺页中断的原则每调进一个新页就发生一次缺页中断,那么缺页数相应的加1,此时缺页数=2。
在这里插入图片描述
1进来时,内存已经被12占据了2块,此时内存剩余量为1。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
0进来时,内存已经被12、占据了2块,此时内存剩余量为1,0 是一个新页,所以缺页数应该加1,此时缺页数=3。
在这里插入图片描述
4进来时,内存已经被120占据了3块,此时内存无剩余量,且4 是一个新页,4想要进来就必须替换掉1,2,0中的一个,替换的规则就是看1,2,0谁是最先进入内存的,答案是1,先进先出置换算法的原理是:淘汰最早进入内存的那个页面,4要替换掉1,2,0中最早进入内存的页面,当然就是1啦,所以就让4替换掉1,与此同时缺页数加1,此时缺页数=4。
在这里插入图片描述
1进来时,内存已经被420占据了3块,此时内存无剩余量,且1 是一个新页,1想要进来就必须替换掉4,2,0中的一个,替换的规则就是看4,2,0谁是最先进入内存的,答案是2,先进先出置换算法的原理是:淘汰最早进入内存的那个页面,1要替换掉4,2,0中最早进入内存的页面,当然就是2啦,所以就让1替换掉2,与此同时缺页数加1,此时缺页数=5。
在这里插入图片描述
3进来时,内存已经被410占据了3块,此时内存无剩余量,且 3 是一个新页,3想要进来就必须替换掉4,1,0中的一个,替换的规则就是看4,1,0谁是最先进入内存的,答案是0,先进先出置换算法的原理是:淘汰最早进入内存的那个页面,3要替换掉4,1,0中最早进入内存的页面,当然就是0啦,所以就让3替换掉0,与此同时缺页数加1,此时缺页数=6。
在这里插入图片描述

4进来时,内存已经被4,1,3占据了3块,此时内存剩余量为0。当4进来后,由于在4进来之前内存中事先有4的存在。所以此时的4对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
2进来时,内存已经被413占据了3块,此时内存无剩余量,且2 是一个新页,2想要进来就必须替换掉4,1,3中的一个,替换的规则就是看4,1,3谁是最先进入内存的,答案是4,先进先出置换算法的原理是:淘汰最早进入内存的那个页面,2要替换掉4,1,3中最早进入内存的页面,当然就是4啦,所以就让2替换掉4,与此同时缺页数加1,此时缺页数=7。
在这里插入图片描述
1进来时,内存已经被2,1,3占据了3块,此时内存剩余量为0。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
4进来时,内存已经被213占据了3块,此时内存无剩余量,且4 是一个新页,4想要进来就必须替换掉2,1,3中的一个,替换的规则就是看2,1,3谁是最先进入内存的,答案是1,先进先出置换算法的原理是:淘汰最早进入内存的那个页面,4要替换掉2,1,3中最早进入内存的页面,当然就是1啦,所以就让4替换掉1,与此同时缺页数加1,此时缺页数=8。
在这里插入图片描述
1进来时,内存已经被243占据了3块,此时内存无剩余量,且1 是一个新页,1想要进来就必须替换掉2,4,3中的一个,替换的规则就是看2,4,3谁是最先进入内存的,答案是3,先进先出置换算法的原理是:淘汰最早进入内存的那个页面,1要替换掉2,4,3中最早进入内存的页面,当然就是3啦,所以就让1替换掉3,与此同时缺页数加1,此时缺页数=9。
在这里插入图片描述

至此所有的页面都访问完毕了,对应的页面置换情况表也成功出炉了:
在这里插入图片描述
缺页中断次数:F=9
缺页率:f=9/12=75%

最近最久未使用置换算法(Least Recently Used,LRU)

原理:选择在最近一段时间内最久没有使用过的页,把它淘汰掉
【例题】在一个分页式虚拟存储管理的系统中,一个作业的页面走向为1,2,1,0,4,1,3,4,2,1,4,1每调进一个新页就发生一次缺页中断。设分配给该作业的物理块数M=3时,采用最近最久未使用置换算法求缺页中断次数F和缺页率f。
分析题目
页面走向为:1,2,1,0,4,1,3,4,2,1,4,1
缺页中断原则:每调进一个新页就发生一次缺页中断
分配给该作业的物理块数M=3,意思是:内存中最多可放置3页。
解:分配给该作业的物理块数M=3时,页面置换情况如下表所示。
为了好看,先写一个空表在这里插入图片描述
访问顺序就是按照页面走向来排的,
1 进来时,内存尚为空,1 进来后占据1页。由于在 1 进来之前内存块中事先没有 1 的存在,所以此时 1 对于内存而言是一个新页,按照题目缺页中断的原则
每调进一个新页就发生一次缺页中断
,那么缺页数相应的加1,此时缺页数=1。
在这里插入图片描述
2进来时,内存已经被1占据了1块,此时内存剩余容量为2。当2进来后占据1页。由于在2进来之前内存中事先没有2的存在,所以此时 2 对于内存而言是一个新页,按照题目缺页中断的原则每调进一个新页就发生一次缺页中断,那么缺页数相应的加1,此时缺页数=2。
在这里插入图片描述
1进来时,内存已经被12占据了2块,此时内存剩余量为1。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
0进来时,内存已经被12、占据了2块,此时内存剩余量为1,0 是一个新页,所以缺页数应该加1,此时缺页数=3。
在这里插入图片描述
4进来时,内存已经被120占据了3块,此时内存无剩余量,且4 是一个新页,4想要进来就必须替换掉1,2,0中的一个,替换的规则就是看4左边的访问过了的顺序 1,2,1,0,找到离4最近的要替换的数字120,那么究竟要替换哪一个数呢?答案是2最近最久未使用置换算法的原理是:淘汰在最近一段时间内最久没有使用的页,(可以给个度量来看,如:上一秒刚访问了0,上上一秒访问了1,上上上一秒访问了2)所以最近最久未使用的就是2,所以就让4替换掉2,与此同时缺页数加1,此时缺页数=4。
在这里插入图片描述

1进来时,内存已经被140占据了3块,此时内存剩余量为0。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
3进来时,内存已经被140占据了3块,此时内存无剩余量,且3 是一个新页,3想要进来就必须替换掉1,4,0中的一个,替换的规则就是看3左边的访问过了的顺序 1,2,1,0,4,1,找到离3最近的要替换的数字1,4,0那么究竟要替换哪一个数呢?答案是0最近最久未使用置换算法的原理是:淘汰在最近一段时间内最久没有使用的页,(可以给个度量来看,如:上一秒刚访问了1,上上一秒访问了4,上上上一秒访问了0)所以最近最久未使用的就是0,所以就让3替换掉0,与此同时缺页数加1,此时缺页数=5。
在这里插入图片描述
4进来时,内存已经被143占据了3块,此时内存剩余量为0。当4进来后,由于在4进来之前内存中事先有4的存在。所以此时的4对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
2进来时,内存已经被143占据了3块,此时内存无剩余量,且2 是一个新页,2想要进来就必须替换掉1,4,3中的一个,替换的规则就是看2左边的访问过了的顺序 1,2,1,0,4,1,3,4,找到离2最近的1,4,3那么究竟要替换哪一个数呢?答案是1最近最久未使用置换算法的原理是:淘汰在最近一段时间内最久没有使用的页,(可以给个度量来看,如:上一秒刚访问了4,上上一秒访问了3,上上上一秒访问了1)所以最近最久未使用的就是1,所以就让2替换掉1,与此同时缺页数加1,此时缺页数=6。
在这里插入图片描述

1进来时,内存已经被243占据了3块,此时内存无剩余量,且** 1** 是一个新页,1想要进来就必须替换掉2,4,3中的一个,替换的规则就是看1左边的访问过了的顺序1,2,1,0,4,1,3,4,2,找到离1最近的2,4,3那么究竟要替换哪一个数呢?答案是3最近最久未使用置换算法的原理是:淘汰在最近一段时间内最久没有使用的页,(可以给个度量来看,如:上一秒刚访问了2,上上一秒访问了4,上上上一秒访问了3)所以最近最久未使用的就是3,所以就让1替换掉3,与此同时缺页数加1,此时缺页数=7。
在这里插入图片描述

4进来时,内存已经被241占据了3块,此时内存剩余量为0。当4进来后,由于在4进来之前内存中事先有4的存在。所以此时的4对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
1进来时,内存已经被241占据了3块,此时内存剩余量为0。当1进来后,由于在1进来之前内存中事先有1的存在。所以此时的1对于内存而言不是一个新页。内存块无需被多占据1页,相应的缺页数也无需变化。
在这里插入图片描述
至此所有的页面都访问完毕了,对应的页面置换情况表也成功出炉了:
在这里插入图片描述
缺页中断次数:F=7
缺页率:f=7/12=58%

相关拓展练习请转到:

这篇关于分页虚拟存储管理——页面置换算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/424048

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Mybatis的分页实现方式

《Mybatis的分页实现方式》MyBatis的分页实现方式主要有以下几种,每种方式适用于不同的场景,且在性能、灵活性和代码侵入性上有所差异,对Mybatis的分页实现方式感兴趣的朋友一起看看吧... 目录​1. 原生 SQL 分页(物理分页)​​2. RowBounds 分页(逻辑分页)​​3. Page

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

Mysql中的用户管理实践

《Mysql中的用户管理实践》:本文主要介绍Mysql中的用户管理实践,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录13. 用户管理13.1 用户 13.1.1 用户信息 13.1.2 创建用户 13.1.3 删除用户 13.1.4 修改用户

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-