頁面置換算法詳解


一、什么是頁面置換算法

進程運行時,若其訪問的頁面不在內存而需將其調入,但內存已無空閑空間時,就需要從內存中調出一頁程序或數據,送入磁盤的對換區,其中選擇調出頁面的算法就稱為頁面置換算法

好的頁面置換算法應有較低的頁面更換頻率,也就是說,應將以后不會再訪問或者以后較長時間內不會再訪問的頁面先調出

 

 

二、常見的頁面置換算法

 

1、FIFO(先進先出算法)

優先淘汰最早進入內存的頁面

FIFO 算法是最簡單的頁面置換算法。FIFO 頁面置換算法為每個頁面記錄了調到內存的時間,當必須置換頁面時會選擇最舊的頁面

“FIFO 算法當進程分配到的頁面數增加時,缺頁中斷的次數可能增加也可能減少”

FIFO 算法基於隊列實現,不是堆棧類算法

注意,並不需要記錄調入頁面的確切時間,可以創建一個 FIFO 隊列,來管理所有的內存頁面。置換的是隊列的首個頁面。當需要調入頁面到內存時,就將它加到隊列的尾部

FIFO 頁面置換算法易於理解和編程。然而,它的性能並不總是十分理想:

  • 其一,所置換的頁面可以是很久以前使用過但現已不再使用的初始化模塊
  • 其二,所置換的頁面可以包含一個被大量使用的變量,它早就初始化了,但仍在不斷使用

 

2、OPT(最佳置換算法)

淘汰以后不會使用的頁面

發現 Belady 異常的一個結果是尋找最優頁面置換算法,這個算法具有所有算法的最低的缺頁錯誤率,並且不會遭受 Belady 異常。這種算法確實存在,它被稱為 OPT 或 MIN

這種頁面置換算法確保對於給定數量的幀會產生最低的可能的缺頁錯誤率

FIFO 和 OPT 算法的區別在於:除了在時間上向后或向前看之外,FIFO 算法使用的是頁面調入內存的時間,OPT 算法使用的是頁面將來使用的時間

 

3、LRU(最近最少使用算法)

淘汰最近沒有使用的頁面

選擇最近最長時間未訪問過的頁面予以淘汰,它認為過去一段時間內未訪問過的頁面,在最近的將來可能也不會被訪問。該算法為每個頁面設置一個訪問字段,來記錄頁面自上次被訪問以來所經歷的時間,淘汰頁面時選擇現有頁面中值最大的予以淘汰

OPT 和 LRU 算法的區別在於:LRU 算法根據各頁以前的情況,是“向前看”的,而最佳置換算法則根據各頁以后的使用情況,是“向后看”的
LRU 性能較好,但需要寄存器和棧的硬件支持

LRU 是堆棧類的算法,理論上可以證明,堆棧類算法不可能出現 Belady 異常

 

4、Clock(時鍾置換算法)

簡單的 CLOCK 算法是給每一幀關聯一個附加位,稱為使用位。

當某一頁首次裝入主存時,該幀的使用位設置為1;

當該頁隨后再被訪問到時,它的使用位也被置為1。

對於頁替換算法,用於替換的候選幀集合看做一個循環緩沖區,並且有一個指針與之相關聯。

當某一頁被替換時,該指針被設置成指向緩沖區中的下一幀。

當需要替換一頁時,操作系統掃描緩沖區,以查找使用位被置為0的一幀。

每當遇到一個使用位為1的幀時,操作系統就將該位重新置為0;

如果在這個過程開始時,緩沖區中所有幀的使用位均為0,則選擇遇到的第一個幀替換;

如果所有幀的使用位均為1,則指針在緩沖區中完整地循環一周,把所有使用位都置為0,並且停留在最初的位置上,替換該幀中的頁。

由於該算法循環地檢查各頁面的情況,故稱為 CLOCK 算法,又稱為最近未用( Not Recently Used, NRU )算法。

 

5、LFU(最不常用算法)

最不經常使用(LFU)頁面置換算法要求置換具有最小計數的頁面。

這種選擇的原因是,積極使用的頁面應當具有大的引用計數。然而,當一個頁面在進程的初始階段大量使用但是隨后不再使用時,會出現問題。由於被大量使用,它有一個大的計數,即使不再需要卻仍保留在內存中。一種解決方案是,定期地將計數右移 1 位,以形成指數衰減的平均使用計數。

 

6、MFU(最常使用算法)

最經常使用(MFU)頁面置換算法是基於如下論點:具有最小計數的頁面可能剛剛被引入並且尚未使用。

MFU 和 LFU 置換都不常用。這些算法的實現是昂貴的,並且它們不能很好地近似 OPT 置換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM