一、前言
接着上篇文章,這次繼續介紹緩存算法。
二、Clock
1、算法思想
盡管上文介紹的Second-chance算法是一個合理的算法,但是它並不是很高效,因為它頻繁需要把對象插入到隊列尾部,要知道位移也是很耗時的。而更高效的算法Clock,采用的是一個循環鏈表,有一個指針指向最早的對象,且每個緩存中的對象都維護一個標記位。
2、工作原理
* 當待緩存對象在緩存中時,無論該對象標記位為0還是1,都設置為1(被使用)。同時,指針指向該對象的下一個對象。
*若不在緩存中時,檢查指針指向對象的標記位。如果是0,則用待緩存對象替換該對象;如果是1,則置為0,指針指向下一個對象。如此直到淘汰一個對象為止。
三、Gclock(Generalized clock page replacement algorithm)
1、算法思想
該算法是Clock的變種。相對於Clock標志位采用的是二進制0和1表示,Gclock的標志位采用的是一個整數,意味着理論上可以一直增加到無窮大。
2、工作原理
* 當待緩存對象在緩存中時,把其標記位的值加1。同時,指針指向該對象的下一個對象。
*若不在緩存中時,檢查指針指向對象的標記位。如果是0,則用待緩存對象替換該對象;否則,把標記位的值減1,指針指向下一個對象。如此直到淘汰一個對象為止。由於標記位的值允許大於1,所以指針可能循環多遍才淘汰一個對象。
四、WSclock(Working set clock page replacement algorithm)
1、算法思想
該算法同樣是clock的變種,可能是實際運用最廣泛的算法。它采用clock的原理,是ws算法(不懂的朋友可以閱讀ws算法)的增強版。算法數據結構為循環鏈表,每個緩存對象保存了"最近使用的時間"rt和"是否引用"的R標志位,使用一個周期計時器t。age表示為當前時間和rt的差值
2、工作原理
*當待緩存對象存在緩存中時,更新rt為當前時間。同時,指針指向該對象的下一個對象。
*若不存在於緩存中時,如果緩存沒滿,則更新指針指向位置的rt為當前時間,R為1。同時,指針指向下一個對象。如果滿了,則需要淘汰一個對象。檢查指針指向的對象,
(1)R為1,說明對象在working set中,則重置R為0,指針指向下一個對象。
(2)R為0。如果age大於t,說明對象不在working set中,則替換該對象,並置R為1,rt為當前時間。如果age不大於t,則繼續尋找淘汰對象。如果回到指針開始的位置,還未尋找到淘汰對象,則淘汰遇到的第一個R為0的對象。
五、LRU-K算法
1、算法思想
LRU-K中的K代表最近使用的次數,因此LRU可以認為是LRU-1。LRU-K的主要目的是為了解決LRU算法“緩存污染”的問題,其核心思想是將“最近使用過1次”的判斷標准擴展為“最近使用過K次”。
2、工作原理
相比LRU,LRU-K需要多維護一個隊列,用於記錄所有緩存數據被訪問的歷史。只有當數據的訪問次數達到K次的時候,才將數據放入緩存。當需要淘汰數據時,LRU-K會淘汰第K次訪問時間距當前時間最大的數據。詳細實現如下
(1). 數據第一次被訪問,加入到訪問歷史列表;
(2). 如果數據在訪問歷史列表里后沒有達到K次訪問,則按照一定規則(FIFO,LRU)淘汰;
(3). 當訪問歷史隊列中的數據訪問次數達到K次后,將數據索引從歷史隊列刪除,將數據移到緩存隊列中,並緩存此數據,緩存隊列重新按照時間排序;
(4). 緩存數據隊列中被再次訪問后,重新排序;
(5). 需要淘汰數據時,淘汰緩存隊列中排在末尾的數據,即:淘汰“倒數第K次訪問離現在最久”的數據。
LRU-K具有LRU的優點,同時能夠避免LRU的缺點,實際應用中LRU-2是綜合各種因素后最優的選擇,LRU-3或者更大的K值命中率會高,但適應性差,需要大量的數據訪問才能將歷史訪問記錄清除掉。
六、Two queues(2Q)
1、算法思想
該算法類似於LRU-2,不同點在於2Q將LRU-2算法中的訪問歷史隊列(注意這不是緩存數據的)改為一個FIFO緩存隊列,即:2Q算法有兩個緩存隊列,一個是FIFO隊列,一個是LRU隊列。
2、工作原理
當數據第一次訪問時,2Q算法將數據緩存在FIFO隊列里面,當數據第二次被訪問時,則將數據從FIFO隊列移到LRU隊列里面,兩個隊列各自按照自己的方法淘汰數據。詳細實現如下:

(1). 新訪問的數據插入到FIFO隊列;
(2). 如果數據在FIFO隊列中一直沒有被再次訪問,則最終按照FIFO規則淘汰;
(3). 如果數據在FIFO隊列中被再次訪問,則將數據移到LRU隊列頭部;
(4). 如果數據在LRU隊列再次被訪問,則將數據移到LRU隊列頭部;
(5). LRU隊列淘汰末尾的數據。
該算法還有完整版的,具體可參考最后一篇論文
七、參考文獻
The Clock Page Replacement Algorithm
Clock page replacement algorithm - Already existing pages
Generalized clock page replacement algorithm
