虛擬記憶體-頁式儲存管理演算法
在請求分頁儲存管理系統中,由於使用了虛擬儲存管理技術,使得所有的程序頁面不是一次性地全部調入記憶體,而是部分頁面裝入。
這就有可能出現下面的情況:要訪問的頁面不在記憶體,這時系統產生缺頁中斷。作業系統在處理缺頁中斷時,要把所需頁面從外存調入到記憶體中。如果這時記憶體中有空閒塊,就可以直接調入該頁面;如果這時記憶體中沒有空閒塊,就必須先淘汰一個已經在記憶體中的頁面,騰出空間,再把所需的頁面裝入,即進行頁面置換
-
先進先出法(FIFO)
演算法描述:由於認為最早調入記憶體的頁不再被使用的可能性要大於剛調入記憶體的頁,因此,先進先出法總是淘汰在記憶體中停留時間最長的一頁,即先進入記憶體的頁,先被換出。先進先出法把一個程序所有在記憶體中的頁按進入記憶體的次序排隊,淘汰頁面總是在隊首
【例1】
考慮下述頁面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。當記憶體塊數量分別為3,5時,試問先進先出置換演算法(FIFO)的缺頁次數是多少?(注意,所有記憶體塊最初都是空的,凡第一次用到的頁面都產生一次缺頁。)
解:當記憶體塊數量分別為3時,FIFO演算法的執行過程如下圖所示。
頁面 |
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
塊1 |
1 |
1 |
1 |
4 |
4 |
4 |
6 |
6 |
6 |
3 |
3 |
3 |
2 |
2 |
2 |
6 |
||||
塊2 |
2 |
2 |
2 |
1 |
1 |
1 |
2 |
2 |
2 |
7 |
7 |
7 |
1 |
1 |
1 |
|||||
塊3 |
3 |
3 |
3 |
5 |
5 |
5 |
1 |
1 |
1 |
6 |
6 |
6 |
3 |
3 |
||||||
缺頁 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
打叉的表示發生了缺頁,共缺頁16次。
提示:當FIFO演算法執行到藍色的4號頁面時,這時記憶體中有三個頁面,分別是1,2,3。按照FIFO演算法,在記憶體中停留時間最長的頁面被淘汰。三個頁面在記憶體中的停留時間用綠色區域標記出來了,可見,1號頁面是停留時間最長的,因此要淘汰1號頁面。
當記憶體塊數量分別為5時,共缺頁10次。FIFO演算法的執行過程如下。
頁面 |
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
塊1 |
1 |
1 |
1 |
1 |
1 |
6 |
6 |
6 |
6 |
6 |
||||||||||
塊2 |
2 |
2 |
2 |
2 |
2 |
1 |
1 |
1 |
1 |
|||||||||||
塊3 |
3 |
3 |
3 |
3 |
3 |
2 |
2 |
2 |
||||||||||||
塊4 |
4 |
4 |
4 |
4 |
4 |
3 |
3 |
|||||||||||||
塊5 |
5 |
5 |
5 |
5 |
5 |
7 |
||||||||||||||
缺頁 |
|
|
|
|
|
|
|
|
|
|
優缺點:先進先出法(FIFO)簡單易於實現,但是效能不好,存在Belady現象(分配的頁面數增多,缺頁率反而增高)。例如對於以下頁面:1,2,3,4,1,2,5,1,2,3,4,5,當記憶體塊為3時,出現9次缺頁中斷;當記憶體塊為4時,出現10次缺頁中斷。缺頁率隨著記憶體塊增加而增加的現象,稱為Belady現象。
-
最佳置換法(OPT)
演算法描述:最佳置換演算法(OPT)在為調入新頁面而必須預先淘汰某個老頁面時,所選擇的老頁面應在將來不被使用,或者是在最遠的將來才被訪問。採用這種演算法,能保證有最小缺頁率。
考慮下述頁面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。當記憶體塊數量分別為3,5時,試問最佳置換法(OPT)的缺頁次數是多少?(注意,所有記憶體塊最初都是空的,凡第一次用到的頁面都產生一次缺頁。)
解:當記憶體塊數量分別為3時,OPT演算法的執行過程如下圖所示。
頁面 |
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
塊1 |
1 |
1 |
1 |
1 |
1 |
1 |
3 |
3 |
3 |
3 |
6 |
|||||||||
塊2 |
2 |
2 |
2 |
2 |
2 |
2 |
7 |
2 |
2 |
2 |
||||||||||
塊3 |
3 |
4 |
5 |
6 |
6 |
6 |
6 |
1 |
1 |
|||||||||||
缺頁 |
|
|
|
|
|
|
|
|
|
|
|
打叉的表示發生了缺頁,共缺頁11次。
提示:當OPT演算法執行到藍色的4號頁面時,這時記憶體中有三個頁面,分別是1,2,3。按照OPT演算法,在最遠的將來才被訪問的頁面先淘汰。這三個頁面在未來頁面走向序列的位置用綠色區域標記出來了,可見,3號頁面是最晚被訪問到的,因此要淘汰3號頁面。到了最後一個6號頁面時,由於沒有後續的頁面序列了,可以隨機選擇一個頁面淘汰。
當記憶體塊數量分別為5時,共缺頁7次。OPT演算法的執行過程如下。
頁面 |
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
塊1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|||||||||||||
塊2 |
2 |
2 |
2 |
2 |
2 |
2 |
||||||||||||||
塊3 |
3 |
3 |
3 |
3 |
3 |
|||||||||||||||
塊4 |
4 |
4 |
6 |
6 |
||||||||||||||||
塊5 |
5 |
5 |
7 |
|||||||||||||||||
缺頁 |
|
|
|
|
|
|
|
優缺點:OPT演算法因為要需要預先知道一個程序在整個執行過程中頁面走向的全部情況,因此只是一種理想狀態,實際是行不通的。一般用演算法來衡量(如通過模擬實驗分析或理論分析)其他演算法的優劣。
-
最近最少使用置換法(LRU)
演算法描述:最近最少使用置換法(LRU)是選擇在最近一段時間裡最久沒有使用過的頁面予以淘汰。借鑑FIFO演算法和OPT演算法,以“最近的過去”作為“不久將來”的近似。
在每次頁面命中後,該頁面的優先順序會調到最高,之所以會預設採用這個策略,是因為一般的程式記憶體訪問具有較高的區域性性,這種策略會很有效。
區域性性不僅僅侷限於虛擬記憶體管理上,只要有cache的地方,都會考慮區域性性。
LRU確定最後使用時間的順序:
(1)計數器:每個頁表項一個使用時間欄位,並給CPU增加一個計數器。每次儲存訪問時鐘+1。每當訪問一個頁面時,時鐘暫存器的內容就被複制到頁表對應項的時間