页面置换算法

276 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第20天,点击查看活动详情

前面我们已经学习了页面置换,那么页面置换的遵循的算法都有什么呢?这就是我们本次学习的目的。

页面置换算法的功能与目标:

功能:需要调入页面时,选择内存中哪个物理页面被置换,称为replacement policy。

目标:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测。
但是在置换过程中还要避免出现抖动现象。

什么是抖动

在虚存中,页面在内存与外存之间频繁调度,以至于进程在运行中,将把大部分时间花费在完成页面置换的工作上,此时系统效率急剧下降,甚至导致系统崩溃,这种现象称为“抖动”。

现象:缺页率急剧增加,内存有效存取时间加长,系统吞吐量骤减,外设繁忙,CPU利用率降低,但系统已基本不能完成什么任务。

原因: 1)页面置换算法不合理 2)分配给进程的物理块数太少

一、最佳置换算法(OPT)

选择永不再用或者在最长时间内不再被访问的页面换出。

优点:缺页率最低,性能最好。

缺点:依赖于对将来页面访问序列的了解,因此无法实现。所以此算法只是一 个理想的算法,或称为“目标”,只能用来评价其它的算法。

二、先进先出页面置换算法(FIFO)

选择最先进入内存,即在内存中驻留时间最久的页面换出, 可把页面按先后次序链接成一个队列,并设置一替换指针,总是指向最老页面。

优点:实现简单;

缺点:不考虑程序的动态性,与进程实际运行的规律不相适应。并且有Belady现象 。

三、最近最久未用LRU置换算法

即选择最近一段时间内最久不用的页面予以淘汰。性能接近最佳算法。页表的访问字段,用以记录自上次访问以来所经历的时间T。每次都选择现有页面中T值最大的页面置换。

四、Clock置换算法

(1)Clock置换算法

思想:置换最近一段时间内没有被使用过的页面

过程:每页设置一个访问位,记录该页是否被访问

将所有页面链接成一个循环链表中(可按到来的时间链接), 由一个指针指向最老的页面,置换时从当前指针位置开始先后检查各页。 当某页被访问时,其访问位被置为1。

置换算法寻找访问位=0的页面作为被置换页。

若各页的访问位都是1,则从指针处修改该页的访问位为0,再找下一个访问位是0的页,作为置换页。最后指针停留在被置换页的下一个页。

(2)改进型Clock置换算法

思想:考虑置换代价。选择换出页面时,既要是未使用过的页面,又要是未被修改过的页面。把同时满足两条件的页面作为首选淘汰的页。

由访问位A和修改位M可以组合为四种类型的页面:

1 类(A=0, M=0)。该页最近既未被访问、又未被修改,最佳淘汰页。

2 类(A=0, M=1)。该页最近既未被访问,但被修改,不是很好的淘汰页。由访问位A和修改位M可以组合为四种类型的页面:

3 类(A=1, M=0)。最近已被访问,但未被修改,该页有可能再被访问。

4 类(A=1, M=1)。最近已被访问且被修改,该页可能再被访问。

执行过程:

1)从指示位置开始,找A=0且M=0的,遇到的第一个为选中页。访问位A值不变。

2)若1)失败,找A=0且M=1,找到的第一个选中。同时将所有经过页面的A置为0。

3)若2)失败,重复回到1)2)

优点:减少磁盘I/O操作;

缺点:多次扫描。

以上内容就是对页面置换算法的简单介绍。