程序執行時,若其訪問的頁面不在記憶體而需將其調入,但記憶體已無空閒空間時,就需要從記憶體中調出一頁程式或資料,送入磁碟的對換區,其中選擇調出頁面的演算法就稱為頁面置換演算法。
好的頁面置換演算法應有較低的頁面更換頻率,也就是說,應將以後不會再訪問或者以後較長時間內不會再訪問的頁面先調出
(優先淘汰最早進入記憶體的頁面)
fifo 演算法是最簡單的頁面置換演算法。fifo 頁面置換演算法為每個頁面記錄了調到記憶體的時間,當必須置換頁面時會選擇最舊的頁面
「fifo 演算法當程序分配到的頁面數增加時,缺頁中斷的次數可能增加也可能減少」
fifo 演算法基於佇列實現,不是堆疊類演算法
注意,並不需要記錄調入頁面的確切時間,可以建立乙個 fifo 佇列,來管理所有的記憶體頁面。置換的是佇列的首個頁面。當需要調入頁面到記憶體時,就將它加到佇列的尾部
fifo 頁面置換演算法易於理解和程式設計。然而,它的效能並不總是十分理想:
(淘汰以後不會使用的頁面)
發現 belady 異常的乙個結果是尋找最優頁面置換演算法,這個演算法具有所有演算法的最低的缺頁錯誤率,並且不會遭受 belady 異常。這種演算法確實存在,它被稱為 opt 或 min
這種頁面置換演算法確保對於給定數量的幀會產生最低的可能的缺頁錯誤率
fifo 和 opt 演算法的區別在於:除了在時間上向後或向前看之外,fifo 演算法使用的是頁面調入記憶體的時間,opt 演算法使用的是頁面將來使用的時間
(淘汰最近沒有使用的頁面)
選擇最近最長時間未訪問過的頁面予以淘汰,它認為過去一段時間內未訪問過的頁面,在最近的將來可能也不會被訪問。該演算法為每個頁面設定乙個訪問字段,來記錄頁面自上次被訪問以來所經歷的時間,淘汰頁面時選擇現有頁面中值最大的予以淘汰
opt 和 lru 演算法的區別在於:lru 演算法根據各頁以前的情況,是「向前看」的,而最佳置換演算法則根據各頁以後的使用情況,是「向後看」的
lru 效能較好,但需要暫存器和棧的硬體支援
lru 是堆疊類的演算法,理論上可以證明,堆疊類演算法不可能出現 belady 異常
簡單的 clock 演算法是給每一幀關聯乙個附加位,稱為使用位。
當某一頁眉次裝入主存時,該幀的使用位設定為1;
當該頁隨後再被訪問到時,它的使用位也被置為1。
對於頁替換演算法,用於替換的候選幀集合看做乙個迴圈緩衝區,並且有乙個指標與之相關聯。
當某一頁被替換時,該指標被設定成指向緩衝區中的下一幀。
當需要替換一頁時,作業系統掃瞄緩衝區,以查詢使用位被置為0的一幀。
每當遇到乙個使用位為1的幀時,作業系統就將該位重新置為0;
如果在這個過程開始時,緩衝區中所有幀的使用位均為0,則選擇遇到的第乙個幀替換;
如果所有幀的使用位均為1,則指標在緩衝區中完整地迴圈一周,把所有使用位都置為0,並且停留在最初的位置上,替換該幀中的頁。
由於該演算法迴圈地檢查各頁面的情況,故稱為 clock 演算法,又稱為最近未用( not recently used, nru )演算法。
最不經常使用(lfu)頁面置換演算法要求置換具有最小計數的頁面。
這種選擇的原因是,積極使用的頁面應當具有大的引用計數。然而,當乙個頁面在程序的初始階段大量使用但是隨後不再使用時,會出現問題。由於被大量使用,它有乙個大的計數,即使不再需要卻仍保留在記憶體中。一種解決方案是,定期地將計數右移 1 位,以形成指數衰減的平均使用計數。
最經常使用(mfu)頁面置換演算法是基於如下論點:具有最小計數的頁面可能剛剛被引入並且尚未使用。
mfu 和 lfu 置換都不常用。這些演算法的實現是昂貴的,並且它們不能很好地近似 opt 置換。
頁面置換演算法
常用的頁面置換演算法有三種 先進先出演算法fifo first in first out 該演算法的基本思想是首先淘汰那些駐留在主存時間最長的頁面。最近最久未用演算法 lru 該演算法的基本思想是 如果某一頁被訪問了,那麼它很可能馬上又被訪問 反之,如果某一頁很久沒被訪問,那麼最近也不會再訪問。lr...
頁面置換演算法
include using namespace std int process 100 頁面佇列 int memory 3 塊數 int optqueue 100 opt演算法的佇列 int fifoqueue 100 fifo演算法佇列 int lruqueue 100 lru演算法佇列 int ...
頁面置換演算法
位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體選擇乙個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。常見的置換演算法有 1 最佳置換演算法 opt 理想置換演算法 這是一種理想情況下的頁...