clock缓存置换算法

clock缓存置换算法

简介

  • clock缓存置换算法(时钟置换算法)是LRU算法的一个变种,其使用环形数组代替链表;
  • clock缓存置换算法的性能比普通的LRU算法要好;

基本思想

  • 每个缓存槽都有一个对应的状态,每当这个缓存槽中的数据被访问后,将状态至为 1,否则为0;
  • 设置两个指针A,B;
  • A:指向下一个将要被淘汰的位置,每次需要淘汰缓存中,A指针顺时针遍历,找到第一个状态为0的槽,将其淘汰;
  • B:指针会定时顺时针遍历,把所有的缓存槽的状态为都重置为0

即逐出的页面都是最近没有使用的那个。给每一个页面设置一个标记位u,

u=1:最近有使用

u=0:该页面最近没有被使用,应该被逐出。

capacity=4, 1->2->3->4->5

改进

时钟置换算法的基础上可以做一个改进,就是增加一个标记为m,

修改过标记为1,没有修改过则标记为0。

那么u和m组成了一个元组,有四种可能,其被逐出的优先顺序也不一样:

  • (u=0, m=0) 没有使用也没有修改,被逐出的优先级最高;
  • (u=1, m=0) 使用过,但是没有修改过,优先级第二;
  • (u=0, m=1) 没有使用过,但是修改过,优先级第三;
  • (u=1, m=1) 使用过也修改过,优先级第四。

参考

  1. 页面置换算法之Clock算法 - wingsless - 博客园

  2. LRU算法/最近最久未使用算法 与Clock算法 - 简书

updatedupdated2024-08-252024-08-25