1. 程式人生 > >作業系統虛擬記憶體中的四種典型頁替換演算法(OPT,LRU,FIFO,Clock)

作業系統虛擬記憶體中的四種典型頁替換演算法(OPT,LRU,FIFO,Clock)

 頁面置換:在地址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷(page fault)。當發生缺頁中斷時作業系統必須在記憶體選擇一個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。

典型的置換演算法有四種,如下所示:

 OPT:最佳替換演算法(optional replacement。替換下次訪問距當前時間最長的頁。opt演算法需要知道作業系統將來的事件,顯然不可能實現,只作為一種衡量其他演算法的標準。

 分析:(F表示頁幀最初填滿時出現page fault)

 a.需要頁面2,記憶體中還有空閒位置,直接加入頁面2

 b.需要頁面3,記憶體中還有空閒位置,直接加入頁面3


 c.需要頁面2,記憶體中已經存在頁面2,不加入任何頁面

 d.需要頁面1,記憶體中還有空閒位置,直接加入頁面1

 e.需要頁面5,頁面2距離下次訪問之間的距離為1,頁面3距離下次訪問距離為3,頁面1沒有下次訪問(距離為無窮             大),所以替換掉頁面1

 f.需要頁面2,記憶體中已經存在頁面2,不加入任何頁面

 g.需要頁面4,頁面2,3,5距離下次訪問的距離依次是3,2,1,所以替換掉頁面2

 h.需要頁面5,記憶體中存在頁面5,不改變

 i.需要頁面3,記憶體中存在頁面3,不改變

 j.需要頁面2,頁面4,3,5距離下次訪問的距離依次是無窮大,無窮大,1,此時按照先後順序替換掉頁面4

 k.需要頁面5,記憶體中存在頁面5,不改變

 L.需要頁面2,記憶體中存在頁面2,不改變

LRU:最近最少使用(Least Recently Used).替換上次使用距離當前最遠的頁。根據區域性性原理:替換最近最不可能 訪問到的頁。效能最接近OPT,但難以實現。可以維護一個關於訪問頁的棧或者給每個頁新增最後訪問的時間標籤,但開銷都很大。

 分析:(F表示頁幀最初填滿時出現page fault)

 a.需要頁面2,記憶體中還有空閒位置,直接加入頁面2

 b.需要頁面3,記憶體中還有空閒位置,直接加入頁面3

 c.需要頁面2,記憶體中已經存在頁面2,不加入任何頁面,這裡重置了2的最近歷史訪問記錄


 d.需要頁面1,記憶體中還有空閒位置,直接加入頁面1

 e.需要頁面5,頁面2,3,1距離最近一次歷史訪問的距離依次為2,3,1(步驟c中重置了2的訪問記錄).所以替換掉頁        面3.

 f.需要頁面2,記憶體中已經存在頁面2,不加入任何頁面,重置頁面2的訪問記錄

 g.需要頁面4,頁面2,5,1距離最近一次歷史訪問的距離依次是1,2,3,所以替換掉頁面1

 h.需要頁面5,記憶體中存在頁面5,不改變,重置頁面5的訪問記錄

 i.需要頁面3,頁面2,5,4距離最近一次歷史訪問的距離依次為3,1,2,所以替換掉頁面2

 j.需要頁面2,頁面3,5,4距離最近一次歷史訪問的距離依次為1,2,3,所以替換掉頁面4

 k.需要頁面5,記憶體中存在頁面5,不改變

 L.需要頁面2,記憶體中存在頁面2,不改變

FIFO:先進先出(First In First Out),將頁面看做一個迴圈緩衝區,按迴圈方式替換。這是實現最為簡單的演算法,隱含的邏輯是替換駐留在記憶體時間最長的頁。但由於一部分程式或資料在整個程式的生命週期中使用頻率很高,所以會導致反覆的換入換出。

分析:

策略極為簡單,如果記憶體中有空閒位置,則直接替換。否則,可以先想象有一個指標,開始指向第一個位置,沒發生替換則指標位置不變,每次需要替換時替換指標所指的位置,然後將指標向後移動一位(若指標位於最後,則移動到記憶體第一個位置)。

Clock:時鐘替換演算法(Clock),給每個頁幀關聯一個使用位。當該頁第一次裝入記憶體或者被重新訪問到時,將使用位置為1。每次需要替換時,查詢使用位被置為0的第一個幀進行替換。在掃描過程中,如果碰到使用位為1的幀,將使用位置為0,在繼續掃描。如果所謂幀的使用位都為0,則替換第一個幀。

 分析:(表示說明:頁面:“2(1)”表示頁面2的使用位為1。"p(n)"表示掃描指標指向第n個的位置)

首先掃描指標p指向第一個幀位置p(1),每次發生替換(或者記憶體中有空閒位置時進行的替換),指標加1。

 a.需要頁面2,記憶體中還有空閒位置,直接加入頁面2,得到2(1),p(2).

 b.需要頁面3,記憶體中還有空閒位置,直接加入頁面3,得到2(1),3(1),p(3).

 c.需要頁面2,記憶體中已經存在頁面2,不加入任何頁面,且這不是頁面2的第一次放置,得到2(1),3(1),p(3).

 d.需要頁面1,直接加入頁面1,得到2(1),3(1),1(1),p(1)

 e.需要頁面5,第一輪掃描將2,3,1的使用位都置為0,然後替換掉頁面2,得到5(1),3(0),1(0),p(2)

 f.需要頁面2,掃描到頁面3的使用位為0,所以替換頁面3,得到5(1),2(1),1(0),p(3)

 g.需要頁面4,掃描到頁面1的使用位為0,所以替換頁面1,得到5(1),2(1),4(1),p(1)

 h.需要頁面5,記憶體中存在頁面5,不改變,得到5(1),2(1),4(1),p(1)

 i.需要頁面3,第一輪掃描將5,2,4的使用位都置為0,然後替換到頁面5,得到3(1),2(0),4(0),p(2)

 j.需要頁面2,掃描到頁面2的使用位為0,由於2被重新訪問,所以將2的使用位置為1,得到3(1),2(1),4(0),p(2),注       意此時由於未發生頁錯誤,p指標不加1.只是重置了使用位(記住:每次新加入的頁使用位都為1)

 k.需要頁面5,第一輪掃描將2的使用位置為0,替換掉頁面4,得到3(1),2(0),5(1),p(1)

 L.需要頁面2,重置頁面2的使用位為1,指標p不變,得到3(1),2(1),5(1),p(1)

總結:

1.記憶體中不存在頁面n,而記憶體中有空閒位置時,直接加入頁面n(1),p加1

2.記憶體中不存在頁面n,且記憶體中沒有空閒位置時,發生替換n(1), p加1

3.記憶體中存在頁面n,,p不變,將頁面n重置為n(1)(不管頁面n之前使用位為1或0)

改進後的時鐘演算法:設定使用位u,修改位m

1.最近未被訪問,未被修改(u=0,m=0)

2.最近被訪問,未被修改(u=1,m=0)

3.最近未被訪問,被修改(u=0,m=1)

4.最近被訪問,被修改(u=1,m=1)

a.從指標當前位置開始掃描,不修改使用位,對找到的第一個(u=0,m=0)進行替換

b.如果a失敗,找到第一個(u=0,m=1)進行替換,掃描過程中,將使用位u置為0

c,如果b失敗,此時指標回到起始位置,且所有幀的使用位為0,重複步驟a,如果有必要,重複步驟b,直到找到為止