页面置换算法

CPU访问的内容不在物理内存时就会产生缺页中断。
缺页中断处理的流程:
1.在CPU中访问某个页面,去页表查找这个页面。
2.如果该页表有效就直接使用,否则CPU发送缺页中断请求。
3.操作系统收到了缺页中断,操作系统执行缺页中断处理函数,先会查找该页面在磁盘中的位置。
4.找到磁盘中对应的页面,需要把页面放到物理内存中。在换入之前应该先找到空白页。
5.页面从磁盘换入内存后把页表状态位改为有效。
6.CPU重新执行导致缺页中断的指令。
页面置换算法就是发生在第四步找不到空白页面的情况。
页表
页表包含的信息有:
页号和物理页号:虚拟页号和物理页号对应。
状态位:表示该页是否在物理内存。
访问字段:记录该页面被访问的次数,用于页面置换算法。
修改位:记录页面进入到内存是否修改过。
硬盘地址:供调入使用。
最佳页面置换算法
最佳页面置换算法的思想是置换未来最长时间不访问的页面。实际上做不到只是用来衡量其他的算法。
先入先出置换算法
置换算法置换在内存中停驻时间最长的页面。简单但是性能很差。
最近最久未使用
发生缺页时最先置换最长时间没被访问的页面,利用局部性原理,假设最久未使用未来也是很长一段时间不会使用。算法理论上很优,但是要实现需要维护一个使用的链表,开销很大,所以不常使用。
时钟页面置换算法
把所有页面保存在一个环形链表中,一个指针指向最老的页面,当发生缺页中断时,首先检查指针指向的页面,如果访问位是0就置换出去,否则就清除访问位,把指针向前移,重复操作。
最不常用算法
淘汰访问次数最少的那个页面。想更好的工作需要定期更新。