CLOCK置换算法:
是一种LRU的近似算法,是一种性能和开销较均衡的算法。由于LRU算法需要较多的硬件支持,采用CLOCK置换算法只需相对较少的硬件支持。又称为最近未用算法(NRU)
简单的CLOCK置换算法
1. 实现方法:
(1)为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列
(2)当某页被访问时,其访问位置为1
(3)当需要淘汰一个页面时,只需检查页的访问位:如果是0,选择此页换出;如果是1,将它置0,暂不换出,继续检查下一个页面
(4)若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0,再进行第二轮扫描,第二轮扫描中一定会有访问位为0的页面,因此简单的CLOCK算法选择一个淘汰页面最多会经过两轮扫描
2. 例子:
假设系统为某进程分配了五个内存块,并考虑到有以下页面号引用串:1,3,4,2,5,6,3,4,7
解析:
第一步:刚开始先将前五个页面装入五个物理块,这时五个页面均已被访问过,所以访问位置为1
第二步:访问到6号页,需要换出一个页面。开始进行扫描,扫描一圈后,物理块中的五个页面的访问位全都置0
第三步:再进行第二轮扫描,1号页(0)淘汰,6号页进来并且将6号页访问位置为1,扫描页指针指向下一位
第四步:按照访问顺序,该访问3号页和4号页,所以将3号页和4号页的访问位置为1,扫描页指针不动(因为没有淘汰)
第五步:按照访问顺序,该访问7号页,7号页没有在物理块中,所以需要淘汰一个页面。扫描页指针从3号页开始扫描,3号页和4号页的访问位都是1,所以继续检查且将3号页和4号页的访问位置为0。2号页的访问位是0,所以淘汰2号页。7号页进入物理块中且将访问位置为1。扫描页指针指向下一位,也就是5号页
改进型的CLOCK置换算法
1. 引入:简单的时钟置换算法仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时,才需要写回外存。
2. 思想:因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。这就是改进型的时钟置换算法的思想。
3. 实现方法:修改位=0,表示页面没有被修改过;修改位=1,表示页面被修改过。为方便讨论,用(访问位,修改位)的形式表示各页面状态。
4. 算法规则:将所有可能被置换的页面排成一个循环队列
第一轮:从当前位置开始扫描到第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于替换。本轮将所有扫描过的帧访问位设为0
第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于替换
5. 注意:由于第二轮已将所有帧的访问位设为0,因此经过第三轮、第四轮扫描一定会有一个帧被选中,因此改进型CLOCK置换算法选择一个淘汰页面最多会进行四轮扫描
6. 例子:
第一轮扫描,没有(0,0),结束
第二轮扫描,没有(0,1),将所有扫描过的帧访问位设为0,全部都是(0,1)
第三轮扫描,没有(0,0),结束
第四轮扫描,第一个就是(0,1),进行替换