最佳页面置换算法 OPT算法
最佳页面置换算法是Belady于1966年提出的一种理论上的算法。是一种保证最少的缺页率的理想化算法。
算法描述
输入页面号引用串:
- 如果页框中的某个页面P以后永不使用,则该页面为淘汰页面Pt。
- 如果每个P都会再次被访问,那么其中最长未来时间内不再被访问的页面为淘汰页面Pt。
先进先出页面置换算法 FIFO算法
算法描述
优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。
第二次机会算法 SCR算法
第二次机会算法的基本思想是与FIFO相同的,但是有所改进,避免把经常使用的页面置换出去。
算法描述
- 设置一个访问位
- 当淘汰一个页面时,要检查其访问位:若访问位是1,给它第二次机会,选择下一个FIFO页面,并将其访问位置为0;若访问位是0,则淘汰它
- 另外,访问到访问位为0的页面,将其访问位重新置为1
Clock页面置换算法
算法描述
- 当某一页首次装入内存中时,则将该页框的使用位设置为1;当该页随后被访问到时(在访问产生缺页中断之后),它的使用位也会被设置为1
- 置换条件是当前使用位为0;当一页被置换时,该指针被设置成指向缓冲区中的下一页框(不修改下一页框的使用位)
- 当需要置换一页时,操作系统扫描缓冲区,以查找使用位被置为0的一页框。每当遇到一个使用位为1的页框时,操作系统就将该位重新置为0
- 如果在这个过程开始时,缓冲区中所有页框的使用位均为0时,则选择遇到的第一个页框置换
- 如果所有页框的使用位均为1时,则指针在缓冲区中完整地循环一周,把所有使用位都置为0,并且停留在最初的位置上,置换该页框中的页
其他博主见解
每一次进行替换指针的位置就从替换数移到下一个位置;每一次进行访问时,则指针保持不动 (原文链接: https://blog.csdn.net/springtostring/article/details/85331177 )
概括说就是,替换指针后移一位(循环),不替换指针不动。
流程图
注(个人理解,不喜勿喷,欢迎指教hhh)
Clock算法看上去和SCR算法很像,但它们还是有区别的,其中一点区别在于:clock算法做得是循环扫描,淘汰的是下一个遇到的使用位为0的页;而SCR算法是FIFO算法的改进版,淘汰的是最先进入的访问位为0的页。
改进型的Clock算法
改进型的Clock算法需要综合考虑某一内存页面的访问位和修改位来判断是否置换该页面
设访问位为A、修改位为M
M为0 | M为1 | |
---|---|---|
A为0 | 该页面既为被访问,又未被修改,是最佳淘汰页 | 该页面最近s未被访问,但已被修改,并不是很好的淘汰页 |
A为1 | 该页面最近已被访问,但未被修改,该页有可能在被访问 | 该页最近已被访问并且被修改,该页可能再被访问 |
1类(A=0,M=0):表示该页最近既未被访问、又未被修改,是最佳淘汰页。
2类(A=0,M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。
3类(A=1,M=0):最近已被访问,但未被修改,该页有可能再被访问。
4类(A=1,M=1):最近已被访问且被修改,该页有可能再被访问。
算法描述
- 从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A。
- 如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有经过的页面的访问位置0。
- 如果第二步也失败,即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0。(此时已无3类、4类页框)然后,重复第一步,如果仍失败,必要时再重复第二步,此时就一定能够找到被淘汰的页。