1. 程式人生 > 其它 >快取淘汰算法系列(一)【轉】

快取淘汰算法系列(一)【轉】

轉自:https://www.cnblogs.com/junyuhuang/p/5805168.html

一、前言

  快取演算法歷史已經很久了,但在樓主查詢相關資料時,發現知識零碎,且原理介紹的很不詳細,遂有了總結常用快取演算法文章的想法,以供廣大朋友們查閱。本文是快取系列的第一篇,知識側重於初略的介紹,並未深入。

二、NRU(Not recently used)

  1、演算法思想

    NRU演算法的思想是保留最近使用過的物件。

  2、工作原理

    快取維護兩個標記位,初始值為0。一個標記位R標識物件是否被使用過,另一個M用來標識物件是否被修改過。當一個物件在快取中找到時,R置為1(referenced);當一個物件被修改時,M置為1(modified)。一個物件擁有的標記位有4種狀態:

    3. referenced, modified

    2. referenced, not modified

    1. not referenced, modified

    0. not referenced, not modified

    當快取已滿,但新的物件需要加入快取時,從等級(上面狀態最左邊的數字代表等級)最低的物件中隨機淘汰一個。

    同時,快取還有一個週期性的時鐘,它在每個時間間隔會把所有物件的R標記為清零(這樣就知道該物件最近,也就是一個時間間隔,是否被使用),但M不會清零。所以上面not referenced, modified狀態看似不可能,但在經歷過一個時間間隔,R位被清零時將有可能發生。

    注意,該演算法認為,最近被使用過的物件,比最近被修改過的物件更重要。

三、FIFO(First-in, first-out)

  1、演算法思想

    該演算法是最簡單的快取淘汰演算法,其原理正如它名字一樣,最近使用過的物件放到快取佇列的末尾,佇列頭部儲存的是最早使用的物件。

四、Second-chance

  1、演算法思想

    這是FIFO演算法的改進版,相對於FIFO演算法立刻淘汰物件,該演算法會檢查待淘汰物件的引用標誌位。如果物件被引用過,該物件引用位清零,重新插入佇列尾部,像新的物件一樣;如果該物件未被引用過,則將被淘汰。

  2、工作原理

    在FIFO演算法的基礎上,

    *為快取中的所有物件增加一個“引用標誌位”

    *每次物件被使用時,設定標誌位為1

    *新物件加入快取時,設定其標誌位為0

    *在淘汰物件時,檢視它的標誌位。如果為0,則淘汰該物件;如果為1,則設定其標誌位為0,重新加入佇列末尾。         

  

五、LRU(Least recently Used)

  1、演算法思想

  LRU演算法的核心思想是基於“如果資料最近被訪問過,它在未來也極有可能訪問過”。因此如果資料的變化趨勢符合這個思想,效果會比較好。

  2、工作原理

    (1)資料結構:連結串列,用於儲存需要快取的資料;HashMap,用來讀取快取中的資料,保證時間複雜讀為O(1)

    (2)實現:

    當資料讀取時,有兩種情況:

   a、資料在快取中,則把該資料從新移到連結串列頭部

   b、資料不在快取中,則把資料插入到連結串列中。

    如何插入:

   a、如果連結串列不滿,則把資料插入連結串列頭部

   b、如果連結串列滿了,則把尾部的資料刪除,同時把其插入連結串列頭部

六、參考文獻

  Page replacement algorithm

  The Second Chance Page Replacement Policy

  The Not Recently Used Page Replacement Algorithm

  Operating Systems Virtual Memory Paging

  Page Replacement Algorithms

【作者】張昺華 【出處】http://www.cnblogs.com/sky-heaven/ 【部落格園】 http://www.cnblogs.com/sky-heaven/ 【知乎】 http://www.zhihu.com/people/zhang-bing-hua 【我的作品---旋轉倒立擺】 http://v.youku.com/v_show/id_XODM5NDAzNjQw.html?spm=a2hzp.8253869.0.0&from=y1.7-2 【我的作品---自平衡自動循跡車】 http://v.youku.com/v_show/id_XODM5MzYyNTIw.html?spm=a2hzp.8253869.0.0&from=y1.7-2 【大餅教你學系列】https://edu.csdn.net/course/detail/10393 【新浪微博】 張昺華--sky 【twitter】 @sky2030_ 【微信公眾號】 張昺華 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利.