1. 程式人生 > >2、頁面置換演算法

2、頁面置換演算法

置換的東西是頁,當頁的空間不夠時,我們需要將一些記憶體中的頁置換到外存中但是到底如何選擇,需要使用演算法實現

一、區域性置換演算法

置換頁面的選擇範圍只侷限於當前程序佔用的物理頁。

1、最優頁面置換演算法(OPT)

把最後要使用的頁置換出來。
評價:
- 無法實現,因為無法預知未來。但是可以用來評估其他演算法的效率

2、先入先出演算法(FIFO)

連結串列記錄每一頁,鏈首記錄的頁在實體記憶體中呆的時間最長,鏈尾最短。把鏈首元素置換出去,新加的頁加在鏈尾
評價:
- 實現簡單
- 效能較差,置換出去的可能是使用最多的頁

3、最近最久未使用演算法(LRU)

選擇最長時間沒有被引用的頁面的頁面
缺頁時計算記憶體每個頁面最近一次的使用的時間,使用連結串列或棧的壓入抽出,連結串列首最近的
評價:
- 使用棧和連結串列維護開銷很大(在抽出棧和連結串列中的元素的時候需要遍歷棧和連結串列)
- 很像最優置換演算法
- 無法實現

以上演算法基本無法實現

1、時鐘置換演算法(Clock)

對頁面訪問情況進行大致訪問
在頁表項增加訪問位
頁面組織成環形

  1. 頁面裝入記憶體,訪問位初始為0
  2. 訪問記憶體(讀/寫)時,訪問位置1
  3. 缺頁時,從指標當前位置順序檢查環形連結串列,訪問位為0,置換該頁,新裝入的頁的訪問位置1;訪問位為1,置訪問位為0,指標移動到下一頁,直到找到可置換的頁面

這裡寫圖片描述

2、改進後的時鐘置換演算法

新增一個修改位,當修改位和訪問位都為0的時候置換,其他與原來的時間置換演算法相同,這個以後再看看

3、最不常用演算法(LFU)

使用次數最少的頁被置換

Belady現象:

採用FIFO等演算法時,可能出現分配的物理頁面增加,缺頁次數反而升高的異常現象
原因:
FIFO演算法的置換特徵與

LRU演算法沒有Belady想想

總結

LRU & FIFO & Clock

二、全域性置換演算法