自適應Lru(最近最少使用)演算法

2021-04-02 00:37:46 字數 1059 閱讀 4876

在快取管理演算法中,lru 幾乎是公認的最優的演算法。然而它也有一些缺陷,主要是因為:它假定對實體的訪問有區域性特性。當訪問模式沒有區域性特性的時候,它就會退化為fifo(先進先出)演算法。

在我寫乙個檔案系統的實現時,這種現象很讓我頭疼,因為很多時候,對乙個檔案的訪問大多是順序的,前面讀取過的內容幾乎不會被再次讀取。苦思冥想之後,我終於找到了一種方案:

就是在快取擊中率降低時,移動將被換出的快取結點,當擊中率很低時,此演算法就變成了lifo(後進先出)。在順序訪問,和完全隨機訪問時,比lru有很大的優越性。而在擊中率比較高的時侯,它就是 lru 演算法。

以下是演算法的關鍵**:

// insert p to lru-list...

// but fixed item can not be swaped(can not goes into lru list)..

// const named bf_*** or bm_***, see its definition..

void lrumap_release(lrumap* self, lrumapnode* p)

#endif

if (sig_true(p->flag, bf_fixed))

return;

if (sig_true(p->flag, bf_hited))

else // not hited..

else if (self->tmap.ncount > self->worksetsize)

iter = iter->next;

++i;

}if (iter != headprev)

}break; }

case bm_lru: // insert as most recent used..

insert_node_next(_m_lruhead, p);

break;

case bm_acc_once: // insert as most unrecent used..

insert_node_prev(p, _m_lruhead);

break;}}

return;

}

LRU最近最少淘汰演算法

lru least recently used,最近最少使用 最常的實現就是使用乙個鍊錶來儲存快取資料,最常用在例如 最近閱讀 經常訪問的 等等等!其核心的思想就是 如果資料最近被訪問過,那麼將來被訪問的機率也會更高!上張圖來看下其儲存資料的是想!1.將資料插入到鍊錶的頭部 2 每當快取資料被訪問時...

什麼是LRU(最近最少使用)演算法?

lru least recently used 最近最少使用。是一種 記憶體管理 演算法。lru演算法基於一種假設 長期不被使用的資料,在未來被用到的機率也不大。因此,當資料所佔記憶體達到一定閾值時,要移除掉最近最少使用的資料。lru演算法使用了一種有趣的資料結構,叫做 雜湊鍊錶 1 雜湊表 是由若...

最近最少使用演算法(LRU) 頁面置換

原創 還是辣個栗子 現記憶體頁面為 15 31 24 17 18 5 9 26 4 21 部分位址流為 4 31 24 17 18 26 17 5 5 9 31 18 18 21 15 8 頁面 8 為下乙個需要調入進去的頁面,由於記憶體頁面已滿,需要使用lru調出乙個最近未被使用頁面。尋找淘汰頁面...