LIRS快取替換演算法

2021-06-27 07:34:10 字數 1703 閱讀 2386

lirs快取替換演算法

lirs (low inter-reference recency set)是乙個頁替換演算法,相比於lru(least recently used)和很多其他的替換演算法,lirs具有較高的效能。這是通過使用兩次訪問同一頁之間的距離(本距離指中間被訪問了多少非重複塊)作為一種尺度去動態地將訪問頁排序,從而去做乙個替換的選擇。這個演算法由宋江和張曉東實現。

量化區域性性

再訪問間隔和新近訪問時間的概念如下圖所示:

其中:t1為該頁的倒數第二次訪問時刻

t2為該頁的上一次訪問時刻

t3為此時時刻

選擇替換頁

lirs管理快取頁和非快取頁的元資料資訊,結合下圖,可以描述其替換操作:

1、快取塊被分為lir和hir兩部分。lir部分用於儲存最經常被訪問的一些頁面(lir頁面),hir部分用於儲存hir頁面

2、lir部分儲存了快取的大部分頁面,所有的lir頁面都是常駐快取的

3、所有最近被訪問的頁面被放置於棧s,所有的常駐hir頁面被放 置於棧q(有可以實現為佇列q)

4、當棧s中的乙個頁面被訪問時,其就會被移至棧s的頂部,同時要確保棧s的尾部是乙個lir塊,(這就會進行「棧剪枝」操作)在圖(a)的情況下,頁面b被訪問,就會得到圖(b)

5、當棧s中的的乙個hir頁面被訪問時,該hir頁面就會轉變為lir頁面,相應的棧s底部的lir頁面會轉變為hir頁面,並移至棧q的頂部,在圖(a)的情況下,頁面e被訪問,就會得到圖(c)

6、當棧s和棧q中的頁面都不命中時,就得考慮常駐頁面的替換, 首先被替換出去的是處於棧q底部的常駐hir頁面。在圖(a)的情況下,頁面d被訪問,就會得到圖(d);在圖(a)的情況下,頁面c被訪問,就會得到圖(e)

我們在lirs棧s上定義一種操作,「棧剪枝」,即移除棧底的所有的hir塊直到遇到乙個lir塊。

這個操作有兩個目的:

1、確保棧底的一定是個lir塊

2、當棧底的lir塊被移除後,它上面的hir塊一直到下乙個lir塊是沒有機會變為lir塊的,因為他們的recency要大於lir塊最大的recency。

棧s中儲存了三種塊,棧q中儲存了所有的駐留在cache中的hir塊。但是沒有表示不在cache中又不在s中的hir塊。

(總結)對於以上儲存、沒儲存的所有塊,存在三種訪問情況:

1、訪問乙個lir塊x:這次訪問一定命中,簡單的將這個塊移動棧頂,如果這個lir塊以前是在棧底,那麼就需要一次「棧剪枝」操作。

2、訪問乙個駐留在cache中的hir塊x:這次訪問也會命中,然後將它移動到棧頂。然後分兩種情況:如果x原本在s中,需要將他的狀態改為lir,還需要將其從q移除。棧底的lir塊狀態改為hir,加入q的棧頂,最後執行一次「棧剪枝」;如果x不在棧s中,保持它的hir狀態,在q中把它移動到棧頂(注意q中是有這個塊的)。

3、訪問乙個非駐留cache中的hir塊x:這次會發生不命中,我們需要將q棧底的hir塊從cache中替換掉,改變其狀態為非駐留態。然後將x讀入cache中剛分配的空閒塊,並將x移動到s棧頂。下面分兩種情況:如果x在棧s中,改變其狀態為lir,移動棧底lir塊到q的尾部並更改狀態為hir,最後執行「棧剪枝」;如果x不在s中,保持它的狀態為hir然後把它加入到q的棧頂。

Cache替換演算法

cache替換演算法是影響 快取系統效能的乙個重要因素,乙個好的cache替換演算法可以產生較高的命中率。目前已經提出的演算法可以劃分為以下三類 1 傳統替換演算法及其直接演化,其代表演算法有 lru least recently used 演算法 將最近最少使用的內容替換出cache lfu le...

LRU快取替換演算法介紹與程式設計實現

快取中容量是有限的,當要查詢的資料不在快取中時,我們要用新資料替換掉 部分原有得資料,有很多種替換策略,lru就是最近最少使用的被替換,我們想要 將來被使用的資料保留下來,但我們不知道將來會使用那些資料,就按照最近使用資料近似將來也會使用的資料。我們要如何體現最近最少使用呢?採用乙個佇列,新加入的資...

LRU與LFU快取替換演算法C 實現

lfu實現 資料結構unordered map dqueue unordered map的鍵為key,值為node 方便快速訪問資料 dqueue雙端佇列,快速刪除 插入node 簡單的lru是存在缺點的,比如有某一次快取操作是完全隨機的,但是lru快取中替換為了這一次隨機的訪問資料 指的是,只有這...