参考书籍:左万利《计算机操作系统教程(第4版)》
6.页面置换算法
6.6 最近不用的先淘汰(Not Used Recently)
淘汰策略:淘汰最近一段时间未用到的页面。
实现:每页增加一个访问标志,访问置1,定时清0,淘汰时取标志为0的。
① 5个页框内:2,3,5,6,4.
② 假如再访问到 2 号页时,设定的时间如20 ms到了,页框内访问标志全部清0。
③ 这时接着访问5,6,4,5,6。这些都是页框内存在的页面,没有缺页,于是5,6,4的访问标志全置1。
④ 当访问到 8 号页时,发生缺页,而此时设定的 20ms 未到,就选择所有访问标志位为0的页面(2号或3号)任意一个淘汰。
如图,该算法的页故障率(缺页率)与LRU算法(最近最少使用算法)相近。
6.7 最不经常使用的先淘汰(least frequently used,LFU)
淘汰策略:淘汰使用次数最少的页面。
实现:记数器,调入清0,访问增1,淘汰最小者。
依据:活跃访问页面应有较大的访问次数
缺陷:(1)前期使用多的页面,后期即使不使用,也难以换出。
(2)刚调入的页面引用肯定少,被换出的可能最大。
6.8 最频繁使用的先淘汰(most frequently used,MFU)
淘汰策略:淘汰使用次数最多的页面。
实现:记数器,调入清0,访问增1,淘汰记数器中最大者。
依据:使用多的可能已经用完了。
缺陷:程序有些成分是在整个程序运行中都使用的,使用次数肯定高。如公共子程序。
6.9 二次机会算法(second chance)
淘汰策略:淘汰装入最久且最近未被访问的页面。
实现:采用拉链数据结构。
① 一开始分配8个页框,其中存在页面:6,3,4,8,5,9,0,1.
② 假设之后就到了设定的时钟周期,就将所有页面的访问位清0.
③ 清0以后,在下一个时钟周期内,发生缺页之前访问过6,3,5,1.
④ 假设之后访问 2 号页面,发生缺页。则执行:
- 检查链头,若访问位为1,则将其置0,并放入链尾。
- 直到链头的访问位为0,将其淘汰,新进入的页面 2 放入链尾,且访问位置1。
为什么被叫为二次机会?
假设页框内所有页面访问位都为1,且此时还在时间周期内发生了缺页,那么就会进行两轮:
- 第一轮:所有的页都访问位置0,同时放在链尾。
- 第二轮:链头肯定是访问位为 0 的页面。
(第一遍找不到的话,第二次肯定能找到)