虛擬記憶體 頁面置換演算法案例 演算法

2021-08-20 05:01:25 字數 3850 閱讀 1000

【概念介紹&案例解析】

>最佳(optimal)置換演算法

最佳置換演算法是由belady於2023年提出的一種理論上的演算法。

其所選擇的被淘汰頁面,將是以後永不使用的,或是在最長(未來)時間內不再被訪問的頁面

。採用最佳置換演算法,通常可保證獲得最低的缺頁率。

但由於人們目前還無法預知乙個程序在記憶體的若干個頁面中,哪乙個頁面是未來最長時間內不再被訪問的,因而該演算法是無法實現的,但可以利用該演算法去評價其它演算法。現舉例說明如下。 

假定系統為某程序分配了三個物理塊,並考慮有以下的頁面號引用串:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

>採用最佳(optimal)置換演算法的結果如下

>缺頁率=缺頁次數/頁面的總個數=6/20=30%(有的教材把前面三個也加進來了算出的缺頁率為9/20=45%,一般情況下我們還是以大多數教材為主選擇前面那種演算法,除非教材明確規定才用後者)

【解析】

>首先將前面三個頁面裝進3個物理塊中,當程序要訪問頁面2時,將會產生缺頁中斷,所以此時需要按照最佳置換演算法將其中最長時間未被訪問的頁面7置換出來,當程序訪問下乙個頁面0時,由於物理塊含有頁面0此時不會產生中斷,當訪問頁面3時又會產生缺頁中斷,所以需要將頁面1置換出去,當程序訪問頁面0時,由於物理塊含有頁面0也不會產生缺頁中斷,所以排在最上面的頁面2不需要被置換出去,接下來就是訪問頁面4,由於物理塊不包含頁面4,所以會將物理塊中長時間未被訪問的0置換出去,後面的一次類推。

>我的總結:對於這類題目,我們只需要抓住核心就是首先看物理塊中有沒有包含被訪問的頁面,如果包含,則物理塊最先進來的(最長時間未被訪問的)無需替換,接下來當程序訪問下乙個頁面的時候,在判斷物理塊是否含有這個被訪問的介面,如果沒有則看物理塊中著三個頁面哪個頁面與程序此時訪問的頁面的後面不常用的頁面就將這個頁面置換出來,比如:

圖示第五個物理塊2,0,3,當要訪問下乙個頁面也就是0,因為物理塊包含所以不需要置換出來,接下來訪問頁面4因為物理塊不包含頁面4,所以需要看看頁面4後面的哪些頁面在物理塊長時間未出現通過比較我們知道了頁面4後面0是相對於2,3最晚出現所以將0替換就變成了2,4,3,後面的以此類推。

>先進先出(fifo)頁面置換演算法:

fifo演算法是最早出現的置換演算法、該演算法總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最久的頁面給予淘汰。

假定系統為某程序分配了三個物理塊,並考慮有以下的頁面號引用串:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

>採用fifo置換演算法的結果如下

缺頁率=缺頁次數/頁面的總個數=12/20=60%

【解析】

我們從第四個物理塊也就是2,0,1開始,因為fifo置換演算法的特點就是淘汰停留最久的頁面,當程序訪問頁面2時,因為頁面7最先進入停留的時間最久,所以把7置換出來,當訪問頁面0,因為2,0,1含有頁面0所以不需要置換,當訪問頁面3的時候,因為物理塊不含頁面3則需要淘汰停留時間最久的頁面0,所以此時的物理塊變為2,3,1接下來程序訪問頁面0因為物理塊不含頁面0所以需要淘汰停留時間最長的頁面1也就變成2,3,0,

這裡需要注意的乙個問題就是物理塊從0,2,3----->0,1,3,因為在4,2,3——————>0,2,3的時候最上面的頁面置換一次所以當訪問到頁面1的時候不是置換0而是置換2

>最近最久未使用(lru)置換演算法:

fifo置換演算法效能之所以較差,是因為它所依據的條件是各個頁面調入記憶體的時間,而頁面調入的先後並不能反映頁面的使用情況。最近最久未使用(lru)的頁面置換演算法,是根據頁面調入記憶體後的使用情況進行決策的。由於無法**各頁面將來的使用情況,只能利用「最近的過去」作為「最近的將來」的近似,因此,

lru置換演算法是選擇最近最久未使用的頁面予以淘汰。

假定系統為某程序分配了三個物理塊,並考慮有以下的頁面號引用串:

7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

>採用lru置換演算法的結果如下

>缺頁率=缺頁次數/頁面的總個數=9/20=45%

【解析】

>對於lru置換演算法我們採用的時選擇最近最久未使用的頁面給予淘汰,但這個最近最久該如何理解呢,這時候我們可以想到之前的最佳置換演算法,它選擇的時最遠最久未使用的頁面給予淘汰,所以呢我們可以這樣理解lru中的最近最久,就是當訪問某個頁面時候我們往左邊看,比如我們就拿這個例子來進行剖析:我們從2,0,1看起,之前是7,0,1,我們往頁面2的左邊看有7,0,1,這三個頁面所以最近的最久的就是7了所以將7置換出去,當程序訪問頁面3時,我們看頁面3最左邊 的那幾個頁面7,0,1,2,0在於物理塊中的2,0,1作比較,那麼最近最久未使用的不就是1嗎,所以我們將1替換,以此類推....

好了上述就是虛擬記憶體的三種置換演算法的題目解析了,接下來我們通過**來驗證下乙個習題(注意:下面的**執行在vc++下的,用devc++則會報錯)

【**展示】

標頭檔案fifo.h

#include#include "iostream.h"

const int maxnumber=100;

const int blocknum=10;

typedef struct page_structpage;

page p;

bool pageshowenable[blocknum][maxnumber]; //用於儲存陣列中的資料是否需要顯示

int n; //頁面個數

int m; //最小物理塊數

int lackcount; //缺頁計數

void pinput()

cout<

cin>>n;

while(n > maxnumber) //大於資料個數

cout

}void poutput()

if(option != 1 && option != 2 && option != 3)

break;

} return 0;

}

【執行結果】

>缺頁次數:8

>缺頁率:40%

>缺頁次數:12

>缺頁率:60%

>缺頁次數:14

>缺頁率:70%

虛擬記憶體之頁面置換演算法

四種頁面置換演算法 一 最佳置換演算法 opt 策略選擇置換下次訪問距當前時間最長的那些頁,可以看出該演算法能導致最少的缺頁中斷,但是由於它要求作業系統必須知道將來的事件,顯然這是不可能實現的。但它仍然能作為一種標準來衡量其他演算法的效能。二 最近最少使用演算法 lru 策略置換記憶體中上次使用距當...

記憶體頁面置換演算法

一丶 1.部分概念 記憶體抖動 每次頁面置換都要耗費很多時間 置換演算法呼叫選擇被置換的頁面 髒頁判定,寫會被置換的頁面 io中斷,寫入記憶體,磁碟尋道,讀寫速度相比cpu速度,其效率極低 多次頻繁的頁面置換,會使等待時間增長,cpu使用率降低,且多次讀寫,占用匯流排,也不利於其他程式執行,緩解記憶...

作業系統實驗之虛擬記憶體頁面置換演算法

設計程式模擬先進先出fifo 最佳置換opi和最近最久未使用lru頁面置換演算法的工作過程。假設記憶體中分配給每個程序的最小物理塊數為m,在程序執行過程中要訪問的頁面個數為n,頁面訪問序列為p1,pn,分別利用不同的頁面置換演算法排程程序的頁面訪問序列,給出頁面訪問序列的置換過程,計算每種演算法缺頁...