开启掘金成长之旅!这是我参与「掘金日新计划 · 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操作;
缺点:多次扫描。
以上内容就是对页面置换算法的简单介绍。