1. 程式人生 > >作業系統——頁面置換演算法詳解

作業系統——頁面置換演算法詳解

    頁面置換演算法的功能:當出現缺頁異常,需調入新頁面而記憶體已滿時,置換演算法選擇被置換的物理頁面

    頁面置換演算法的設計目標:儘可能減少頁面的調入調出次數,把未來不再訪問或短期內不訪問的頁面調出。

    接下來,我們介紹幾種常用的頁面置換演算法:

    先進先出演算法(First-In First-Out, FIFO)

思路:選擇在記憶體駐留時間最長的頁面進行置換

    實現:維護一個記錄所有位於記憶體中的邏輯頁面連結串列,連結串列元素按駐留記憶體的時間排序,鏈首最長,鏈尾最短,出現缺頁時,選擇鏈首頁面進行置換,新頁面加到鏈尾

    特點:實現簡單;效能較差,調出的頁面可能是經常訪問的

    詳細的置換過程可以通過下圖進行理解,圖中共產生了5次缺頁

   

    最近最久未使用演算法 (Least Recently Used, LRU)

    思路:選擇最長時間沒有被引用的頁面進行置換,因為如果某些頁面長時間未被訪問,則它們在將來還可能會長時間不會訪問

    實現:缺頁時,計算記憶體中每個邏輯頁面的上一次訪問時間,選擇上一次使用到當前時間最長的頁面

    特點:可能達到最優的效果,維護這樣的訪問連結串列開銷比較大

    詳細的置換過程見下圖,圖中只產生了3次缺頁

   

    最不常用演算法(Least Frequently Used, LFU)

    思路:缺頁時,置換訪問次數最少的頁面

    實現:每個頁面設定一個訪問計數,訪問頁面時,訪問計數加1,缺頁時,置換計數最小的頁面

    特點:演算法開銷大,開始時頻繁使用,但以後不使用的頁面很難置換

    詳細的置換過程見下圖:執行在4個頁幀中,假定最初的訪問次數a->8 b->5 c->6 d->2

   

    時鐘置換演算法(Clock)

    思路:僅對頁面的訪問情況進行大致統計

    實現:在頁表項中增加訪問位,描述頁面在過去一段時間的內訪問情況,將各頁面組織成環形連結串列,指標指向最先調入的頁面,訪問頁面時,在頁表項記錄頁面訪問情況,缺頁時,從指標處開始順序查詢未被訪問的頁面進行置換

    特點:時鐘演算法是LRU和FIFO的折中

    時鐘置換演算法過程如下圖: