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

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

相关文章

Flutter监听当前页面可见与隐藏状态的代码详解

《Flutter监听当前页面可见与隐藏状态的代码详解》文章介绍了如何在Flutter中使用路由观察者来监听应用进入前台或后台状态以及页面的显示和隐藏,并通过代码示例讲解的非常详细,需要的朋友可以参考下... flutter 可以监听 app 进入前台还是后台状态,也可以监听当http://www.cppcn

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

一文教你使用Python实现本地分页

《一文教你使用Python实现本地分页》这篇文章主要为大家详细介绍了Python如何实现本地分页的算法,主要针对二级数据结构,文中的示例代码简洁易懂,有需要的小伙伴可以了解下... 在项目开发的过程中,遇到分页的第一页就展示大量的数据,导致前端列表加载展示的速度慢,所以需要在本地加入分页处理,把所有数据先放

Redis存储的列表分页和检索的实现方法

《Redis存储的列表分页和检索的实现方法》在Redis中,列表(List)是一种有序的数据结构,通常用于存储一系列元素,由于列表是有序的,可以通过索引来访问元素,因此可以很方便地实现分页和检索功能,... 目录一、Redis 列表的基本操作二、分页实现三、检索实现3.1 方法 1:客户端过滤3.2 方法

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)