一、頁面置換算法
不適當的算法可能會導致進程發生“抖動”:即剛被換出的頁很快又要被訪問,需要將他重新調入,此時又需要再選一頁調出。而此剛被調出的頁面很快又被訪問,又需將它調入,如此頻繁地更換頁面,以致一個進程在運行中把大部分時間都花費在頁面置換工作上,我們稱該進程發生了“抖動”。
一個好的頁面置換算法應該具有較低地頁面更換頻率。從理論上講,應將哪些以后不再會訪問地頁面換出,或把那些在較長時間內不會再訪問的頁面調出。目前已有多種置換算法,他們都試圖更接近於理論上的目標。下面介紹幾種常用的置換算法。
二、常用的頁面置換算法
1.最佳(Optimal)置換算法
其所選擇的被淘汰頁面將是以后永不使用的,或者是在最長時間內不再被訪問的頁面,是理想化的算法(因為我們很難預知未來要訪問哪些頁面),可以用來評測其他實際應用算法的好壞。
2.先進先出(FIFO)置換算法
總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面給予淘汰(由於與頁面的使用規律不符,可能是性能最差的算法)。
3.最近最久未使用LRU(Least Recently Used)置換算法
選擇最近最久未使用的頁面予以淘汰。
4.最少使用LFU(Least Frequently Used)置換算法
選擇在最近時期使用最少的頁面作為淘汰頁(當使用次數相同時,誰最先來淘汰誰)。
5.Clocks置換算法
(1)簡單的Clocks置換算法(最近未使用NRU(Not Recently Used)算法)
為每一頁設置一個訪問位,再將內存中所有頁面通過指針鏈接成一個循環隊列。當某頁被訪問時,其訪問位置1。在選擇某一頁淘汰時,只需檢查頁的訪問位。如果是0,就選擇該頁換出,若為1,則重新將他置0,暫不換出,給予該頁第二次駐留內存的機會,再檢查下一個頁面。當檢查到隊列中最后一個頁面時,若訪問位仍為1,則再返回隊首去檢查第一個頁面。
圖為簡單Clocks算法的流程示意圖
(2)改進型Clocks置換算法
在簡單型的基礎上再增加一個修改位M,組合成四類頁面:
①(A=0,M=0):表明該頁最近既未被訪問,又未被修改,是最佳淘汰頁
②(A=0,M=1):表明該頁最近未被訪問,但已被修改,並不是很好的淘汰頁
③(A=1,M=0):表明該頁最近已被訪問,但未被修改,該頁有可能再被訪問
④(A=1,M=1):表明該頁最近已被訪問且被修改,該頁可能再被訪問
算法執行過程可以總結如下:
<1>指針從當前位置開始,掃描循環隊列,尋找A=0且M=0的第一類頁面,將遇到的第一個頁面作為所選中的淘汰頁。在第一次掃描期間不改變訪問位A
<2>第一步失敗,則進行第二輪掃描,尋找A=0且M=1的第二頁頁面,將所遇到的第一個這類頁面作為淘汰頁,在第二輪掃描期間,將所有掃描過的頁面的訪問位都置0
<3>第二步失敗,則指針返回開始位置,並將所有訪問位復0,重復第一步,若仍失敗,再重復第二步,一定能找到被淘汰的頁
三、頁面置換算法舉例
1.最佳分配置換算法
插入順序 |
1 |
2 |
3 |
4 |
1 |
2 |
5 |
1 |
2 |
3 |
4 |
5 |
內存 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
3 |
3 |
3 |
|
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
4 |
4 |
|
|
|
3 |
4 |
4 |
4 |
5 |
5 |
5 |
5 |
5 |
5 |
|
是否缺頁 |
+ |
+ |
+ |
+ |
|
|
+ |
|
|
+ |
+ |
|
理想條件下缺頁次數為7次,缺頁率為7/12
2.先進先出置換算法
插入順序 |
1 |
2 |
3 |
4 |
1 |
2 |
5 |
1 |
2 |
3 |
4 |
5 |
內存 |
1 |
1 |
1 |
4 |
4 |
4 |
5 |
5 |
5 |
5 |
5 |
5 |
|
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
3 |
3 |
3 |
|
|
|
3 |
3 |
3 |
2 |
2 |
2 |
2 |
2 |
4 |
4 |
|
是否缺頁 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
|
+ |
+ |
|
缺頁次數為9次,缺頁率為3/4
3.最久未使用置換算法
插入順序 |
1 |
2 |
3 |
4 |
1 |
2 |
5 |
1 |
2 |
3 |
4 |
5 |
內存 |
1 |
1 |
1 |
4 |
4 |
4 |
5 |
5 |
5 |
3 |
3 |
3 |
|
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
4 |
4 |
|
|
|
3 |
3 |
3 |
2 |
2 |
2 |
2 |
2 |
2 |
5 |
|
是否缺頁 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
|
+ |
+ |
+ |
缺頁率次數為10次,缺頁率為5/6
4.簡單Clocks置換算法
插入順序 |
1 |
2 |
3 |
4 |
1 |
2 |
5 |
1 |
2 |
3 |
4 |
5 |
內存 |
1 A=0 |
1 A=0 |
1 A=0 |
4 A=0 |
4 A=0 |
4 A=0 |
5 A=0 |
5 A=0 |
5 A=0 |
3 A=0 |
4 A=0 |
4 A=1 |
A=0 |
2 A=0 |
2 A=0 |
2 A=0 |
1 A=0 |
1 A=0 |
1 A=0 |
1 A=1 |
1 A=1 |
1 A=1 |
1 A=0 |
5 A=0 |
|
A=0 |
A=0 |
3 A=0 |
3 A=0 |
3 A=0 |
2 A=0 |
2 A=0 |
2 A=0 |
2 A=1 |
2 A=1 |
2 A=0 |
2 A=0 |
|
是否缺頁 |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
|
|
+ |
+ |
+ |
缺頁次數為10次,缺頁率為5/6