【现代操作系统】之页面置换算法

什么是页面置换算法

当发生缺页中断时,操作系统必须选择一块页面将其换出内存,以便为即将调入的页面腾出空间。页面置换算法就是用来高效地进行这种页面置换操作的算法。

最优页面置换算法

在发生缺页中断时,内存中的有些页面将很快被访问,而有些页面则会在很久后才被访问,我们只要定量地知道这些页面什么时候会被访问,然后选择其中最晚被访问的并将它换出内存就可以实现最优页面置换算法,但是这种方法是无法实现的。因为操作系统无法知道一个页面将在什么时候被访问。

最近未使用页面置换算法

在页表项中有两个标志位,当页面被访问时设置R位,当页面被写入时,也只M位,这些位一直保持,直到操作系统将它们复位,当启动一个进程时,它的所有页面的两个位都被操作系统设置成0,R被定期地清零,以区别最近没有被访问的页面和被访问的页面。可以通过这两个位来构建一个简单的页面置换算法,当发生缺页中断时,操作系统会优先淘汰没有被访问,当时已经被修改的页面,这里的没有被访问不是真的没有被访问,而是R位被定期的时钟中断清零了。

先进先出页面置换算法

系统按照进入内存先后的顺序将页面进行排序(具体实现是用一个与当前内存中页面对应的链表),当发生缺页中断时,就把最先进入内存的页面换出去,单纯地使用这种FIFO方法不好,因为这可能导致一些先进入内存但一直被频繁使用的页面也被换出内存,所以很少有纯粹使用这种方法的。

第二次机会页面置换算法

在FIFO算法上进行了一些改进,不是简单地按照时间的顺序进行淘汰。当发生缺页中断时,系统会按照FIFO原则检查最古老的页面,如果这个页面的R位被清零,那么说明它最近没有被访问,如果R位被置1说明它最近被访问了,R位清零并将这个页面送到链表的起始端让它成为最新的页面。

时钟页面置换算法

把上面的FIFO单向链表换成循环链表。一个表针指向最老的页面,当发生缺页中断时,算法首先检查表针指向的页面,如果它的R位是0就淘汰,并把新的页面放到这个位置,然后把表针前移一个位置,如果R位为1就清除R位并把指针前移一个位置。

最近最少使用页面置换算法

基于这样一种观察:在前面一些指令中被频繁使用的页面在未来很可能也会被使用,反过来,很长一段时间没有被使用的指令很可能在未来相当长的一段时间也不会被使用,前人想出了LRU页面置换算法:在缺页中断发生时,置换未使用时间最长的页面,虽然LRU理论上可行,但是代价很高,因为这种算法需要再表中维护一个所有页面的链表,每次访问内存都需要更新整个链表。

软件模拟LRU

虽然硬件LRU在理论上是可实现的,但很少有真实的机器拥有这种硬件,因此前人使用了一种软件解决方案,其中一个叫做NFU ,工作机制是:每个页面与一个软件计数器关联,计数器的初值是0,每次时钟中断由操作系统扫描内存中的所有页面,将每个页面的R位加到它的计数器上,这个计数器大体上跟踪了页面被访问的频繁程度,发生缺页中断时,置换计数器值最小的那个。
但是NFU(Not Frequently used)有一个问题,那就是它不会忘记任何事情,比如说,一个被频繁使用的页面在使用期间在它的计数器中积累了很大的数值,一个有用的页面在刚刚被调用的时候计数器中的数值却很少,这就导致了,即使之前那个老旧的已经不被使用的页面仍然可能拥有比新的正在被使用的页面有用更大的计数器数值,这就导致了新的有用的页面被误置换出界面。
只需要做一个小小的修改就可以解决这个问题:首先在R位被加进去之前将计数器右移一位,其次将R位放到计数器的最左端位,而不是最右端位。如下是具体操作的展示。
在这里插入图片描述

工作集页面置换算法

工作集时钟页面置换算法

页面置换算法小结

算法注释
最优算法不可实现,但可作为其它算法可衡量基准
NRU(最近未使用)LRU的很粗糙地近似
FIFO(先进先出)可能抛弃重要页面
第二次机会算法比FIFO有较大改进
时钟算法现实的
LRU(最近最少使用)算法很优秀,但很难实现
NFU(最不经常使用)算法LRU的相对粗略的近似
老化算法非常近似LRU的算法
工作集算法实现起来开销很大
工作集时钟算法好的有效算法

老化算法和工作集时钟算法是最好的两种算法。还有其它算法,但这应该是最重要的两种算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值