天天看点

fifo算法_clock页面置换算法

介绍clock算法之前先介绍一下二次机会算法(SCR,Second Chance Replacement Policy)。二次机会算法是FIFO算法的升级版,而clock算法可以认为是二次机会算法的升级版本。

二次机会算法SCR

该算法仍然使用标准的FIFO队列。

  • 每个帧(frame)有一个second chance位,也叫做引用位。
  • 当一个frame被引用到,它的second chance位设置为1。这表示该frame后面还有可能会被引用到,所以下次置换先跳过这个frame,也就是再给它一次机会留在内存中。这样可以减少frame置换,提高页面操作效率。
  • 当一个新的页面被读到内存中时,它的second chance被设置为0。
  • 当你需要替换内存中的一个页面时,使用轮询的方式来查找可以被替换的页面:
    • 如果页面的second chance是1,那么置为0,继续查找;
    • 如果页面的second chance是0,那么将这个页面置换出去。

下面是具体实例:

fifo算法_clock页面置换算法

上图中,红色箭头表示发生缺页中断,将页面置换到物理块中;粉色箭头表示下次发生缺页中断时开始检查的地方,如果可以发生置换,则在该位置置换,不能的话就向前挪;蓝色箭头表示页面已经存在与物理块中,直接进行访问并且将 second chance 置为1。绿色块表示空闲块,黄色块表示占用。所谓 second chance 是指,发生缺页中断时,如果置换指针所指的位置的 second chance 位为1,则跳过该块检查其他的块,同时该块的 second chance 位置为1。

clock算法

clock算法采用循环队列,

相对于SCR的标准的FIFO队列操作代价小

。clock算法中仍然使用到了引用位,并且

增加了使用规则,其他规则一样

  • 一个页面首次装入内存时,引用位被置为1。
  • 需要替换页面时,替换引用位为0的页面。如果引用位全部为1,则全部清0。

下面是具体实例:

fifo算法_clock页面置换算法

上图中,星号表示引用位为1;灰色块表示占用,蓝色块表示可以置换;箭头指向的是下次发生缺页中断时开始检查的地方,如果可以发生置换,则在该位置置换,不能的话就向前挪;红色框表示下次置换发生的位置。

看看上图的最后3个页面的访问:

  • 访问2号页面,由于2号页面存在,所以箭头位置不变,且将2号引用位置为1;
  • 访问5号页面,5号页面不存在,产生缺页中断,此时箭头指向2号页面,2号页面的引用位为1,所以不能置换,此时将2号页面的引用位置为0,并且将箭头挪向下一个位置4号页面,它的引用位为0,则将4置换为5,箭头指向3号页面。
  • 访问2号页面,由于2号页面存在,所以箭头位置不变,且将2号引用位置为1。

继续阅读