6. 页面置换算法
页面置换算法的功能:出现缺页异常但是内存已满,我们需要从物理内存中选出一个物理页面换出到磁盘。
1️⃣最佳页面置换算法:
选出未来等待时间最长的页面。但是因为程序访问页面时动态的,所以无法预知每个页面在下一次访问前的等待时间,所以此算法只用来衡量别的算法。
2️⃣先进先出置换算法:
选择在内存中滞留时间最长的页面。性能差。
3️⃣最近最久未使用的置换算法:
选择最长时间没有被访问的页面。理论上可行,但是实现起来开销比较大——我们需要在内存中维护一个计算所有页面没有被访问过的最长时间的链表,每次访问内存前都需要更新整个链表。
4️⃣时钟页面置换算法:
把所有的页面都保存在一个环形链表中,指针指向最老的页面。
当调用置换算法时,算法首先检查指针指向的页面:
- 如果访问位是0就将该页面换出到磁盘中,并将新的页面插入到这个位置,然后把表针前移一个位置。
- 如果访问位为1则清除该访问位,将指针前移一个位置,重复这个过程直到找到访问位为0的页面。
5️⃣最不常用算法:
选择访问次数最少的页面换出到磁盘中。
实现方式:在每个页面内设置一个『访问计数器』,当一个页面被访问时,计数器+1,当调用置换算法时淘汰计数器数值最少的页面。
缺点:选择一个要淘汰的页面需要遍历所有页面的计数器,比较耗时。另一方面,如果某些页面虽然在过去访问次数比较低,但是在未来一段时间需要经常访问,这就又是一个问题。