页面置换算法之CLOCK算法和改进型CLOCK算法

1.前言

对于这方面的知识,找了很多视频和文章,个人感觉都没有详细地讲清楚这两个算法,特别是对改进型CLOCK算法,大部分的视频和文章都是引用王道课程的内容,缺乏题目的讲解和清晰的做题流程。为此,我主要是通过讲解两道例题的方式捋清楚置换流程,如有不正确的地方,还请大家在评论区指正,后续将不断改进。

2.CLOCK算法

又称最近未用算法(NRU)。该算法将内存中所有页面都通过链接指针链接成一个循环队列,设置访问位,1表示被访问过,0表示未被访问过;如果访问位是0,则选择该页换出,如果访问位是1,则将访问位置0,暂不换出,再按照FIFO算法检查下一个页面,重复上述步骤。

注意:(1)某一页装入主存时,要将访问位置为1,如果该页之后又被访问到,访问位也还是标记成1。

(2)只有发生缺页中断,指针才会移动。

例子:以下面这个页面置换过程为例,访问的页面依次是:1,3,4,2,5,4,7,4。主存有4个空闲的帧 

由于有4个空闲帧,最开始访问的4页面依次进入主存,将访问位置为1,没有页面置换,指针不动,此时缺页中断为4;

当页面5进入主存时,主存没有空余的帧且页面5不存在主存中,所以指针向下扫描,依次将访问位修改为0,一轮下来后,指针指向页面1,发现访问位已经为0,将1置换出去,页面5换入主存,修改访问位为1,指针下移到页面3,此时缺页中断为5;

当页面4进入主存时,页面4存在主存中,修改访问位为1,指针不动,不存在缺页中断;

当页面7进入主存时,页面7不在主存中,将3置换出去,页面7换入主存,修改访问位为1,指针下移,此时缺页中断为6;

当页面4进入主存时,页面4存在主存中,指针不动,不存在缺页中断。


3.改进型CLOCK算法

简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页避免I/O操作,这就是改进型的时钟置换算法的思想。

修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。为方便讨论,用(访问位,修改位)的形式表示各页面状态。分为以下四种情况:

(0,0):最近没有使用也没有修改,最佳状态!

(0,1):修改过但最近没有使用,将会被写

(1,0):使用过但没有被修改,下一轮将再次被用

(1,1):使用过也修改过,下一轮页面置换最后的选择

步骤:(1)从指针所指示的当前位置开始,扫描循环队列,寻找A=0且M=0的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位A。
(2)如果第一步失败,即查找一轮后未遇到第一类页面,则开始第二轮扫描,寻找A=0且M=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置0。
(3)如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将统所有的访问位复0。然后重复第一步,即寻找A=0且M=0的第一类页面,如果仍失败,
必要时再重复第二步,寻找A=0且M=1的第二类页面,此时就一定能找到被淘汰的页。

总结:先替换(0,0),再替换(0,1),然后是(1,0),最后是(1,1)

例子:访问的页面依次是:0,1,3,6,2,4,5,2,5,0,3,1,2,5,4,1,0,主存有4个空闲块,其中红色数字表示将要修改的页面,即修改位将被置成1

当页面2进入主存时,页面2不在主存中,指针下移扫描找到(0,0)置换(第一轮扫描不改变任何标志位),扫描一轮后,不存在(0,0),指针回到开始位置,开始第二轮扫描,寻找(0,1),本轮扫描将访问位修改为0,经过此轮扫描后,所有访问位都变为0,由于未能找到(0,1),再开始寻找(0,0)页面置换,发现页面0访问位为0,将0置换出去,2换进来,修改访问位为1,指针下移到页面1,由于2为要修改的页面,修改为也要改为1;其他以此类推,第一个例子基本包含所有事项,因此不再赘述。

其他页面置换算法或关于此算法更详细的内容可以参照以下博文:操作系统-CLOCK置换算法_clock算法_橙橘先生的博客-CSDN博客页面置换算法-CLOCK置换算法及其改进版算法_改进的clock置换算法_xzhws的博客-CSDN博客页面置换算法(OPT、FIFO、LRU、CLOCK、改进的时钟置换算法)_请求分页存储时钟算法-CSDN博客

  • 45
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值