缺頁中斷 FIFO LRU OPT這三種置換演算法

2021-08-05 21:32:55 字數 4382 閱讀 9904

在請求分頁系統中,可以通過查詢頁表中的狀態位來確定所要訪問的頁面是否存在於記憶體中。每當所要訪問的頁面不在記憶體時,會產生一次缺頁中斷,此時作業系統會根據頁表中的外存位址在外存中找到所缺的一頁,將其調入記憶體。 

缺頁本身是一種中斷,與一般的中斷一樣,需要經過4個處理步驟: 

1. 保護cpu現場 

2. 分析中斷原因 

3. 轉入缺頁中斷處理程式進行處理 

4. 恢復cpu現場,繼續執行 

但是缺頁中斷時由於所要訪問的頁面不存在與記憶體時,有硬體所產生的一種特殊的中斷,因此,與一般的中斷存在區別: 

1. 在指令執行期間產生和處理缺頁中斷訊號 

2. 一條指令在執行期間,可能產生多次缺頁中斷 

3. 缺頁中斷返回時,執行產生中斷的那一條指令,而一般的中斷返回時,執行下一條指令

程序執行過程中,如果發生缺頁中斷,而此時記憶體中有沒有空閒的物理塊是,為了能夠把所缺的頁面裝入記憶體,系統必須從記憶體中選擇一頁調出到磁碟的對換區。但此時應該把那個頁面換出,則需要根據一定的頁面置換演算法

(page replacement algorithm)來確定。

置換以後不再被訪問,或者在將來最遲才回被訪問的頁面,缺頁中斷率最低。但是該演算法需要依據以後各業的使用情況,而當乙個程序還未執行完成是,很難估計哪乙個頁面是以後不再使用或在最長時間以後才會用到的頁面。所以該演算法是不能實現的。但該演算法仍然有意義,作為很亮其他演算法優劣的乙個標準。

採用固定分配區域性置換的策略,嘉定系統為某程序在記憶體中分配了3個物理塊,頁面訪問順序為2、3、2、1、5、2、4、5、3、2、5、2。假定系統未採用預調頁策略,即未事先調入任何頁面。程序執行時,一次將2、3、1三個頁面調入記憶體,發生3次缺頁中斷。當第一次訪問頁面5時,產生第4次缺頁中斷,根據opt演算法,淘汰頁面1,因為它在以後不會在使用了;第5次缺頁中斷時,淘汰頁面2,因為它在5、3、2三個頁面中,是在將來最遲才會被頁面訪問的頁面。以此類推: 

注意:第4次中斷時將最後不會訪問的1剔除,將最後才訪問的3放入最下面的記憶體塊中,以後的排程過程中,最後不會訪問或最後才被訪問的頁面總是放在最下面的記憶體塊中。記憶體塊從上到下依次存放最先訪問的頁面。 

中斷次數為6,缺頁中斷率為6/12*100% = 50%。p:2

3215

2453

252m=322

2225

5355

2233

3533

5425

5132

4434

44f=5yyy

yyy置換最先調入記憶體的頁面,即置換在記憶體中駐留時間最久的頁面。按照進入記憶體的先後次序排列成佇列,從隊尾進入,從隊首刪除。但是該演算法會淘汰經常訪問的頁面,不適應程序實際執行的規律,目前已經很少使用。

仍然以opt算例為例子。 

中斷次數為6,缺頁中斷率為9/12*100% = 75%。p:2

3215

2453

252m=323

3152

4433

5222

3152

2443

5231

5522

43f=9yyy

yyyy

y一般來說,分配給程序的物理塊越多,執行時的缺頁次數應該越少,使用fifo時,可能存在相反情況,分配4個物理塊的缺頁竟然比3個物理塊的缺頁次數還多! 

例如:程序訪問順序為0、2、1、3、0、2、4、0、2、1、3、4。 

m=3時,缺頁中斷9次。缺頁中斷率9/12*100% = 75%。p:0

2130

2402

134m=302

1302

4441

3302

1302

2241

1021

3000

244f=9yy

yyyy

yyy

m=4時,缺頁中斷10次。缺頁中斷率10/12*100% = 83.3%。p:0

2130

2402

134m=402

1333

4021

3402

1113

4021

3022

2134

0210

0021

3402

f=10yy

yyyy

yyyy

置換最近一段時間以來最長時間未訪問過的頁面。根據程式區域性性原理,剛被訪問的頁面,可能馬上又要被訪問;而較長時間內沒有被訪問的頁面,可能最近不會被訪問。 

lru演算法普偏地適用於各種型別的程式,但是系統要時時刻刻對各頁的訪問歷史情況加以記錄和更新,開銷太大,因此lru演算法必須要有硬體的支援。

仍然以opt算例為例子。 

中斷次數為6,缺頁中斷率為7/12*100% = 58.3%。p:2

3215

2453

252m=323

2152

4532

5223

2152

4532

5321

5245

33f=7yyy

yyyy

堆疊實現lru: 

系統使用特殊的堆疊來存放記憶體中每乙個頁面的頁號。每當訪問一頁時就調整一次,即把被訪問頁面的頁號從棧中移出再壓入棧頂。因此,棧頂始終是最新被訪問頁面的頁號,棧底始終是最近最久未被訪問的頁號。當發生缺頁中斷時,總是淘汰棧底頁號所對應的頁面。 

考慮下述頁面走向:1,

2,3,

4,2,

1,5,

6,2,

1,2,

3,7,

6,3,

2,1,

2,3,

6當記憶體塊數量分別為

3時,試問

fifo

、lru

、opt

這三種置換演算法的缺頁次數各是多少

?答:缺頁定義為所有記憶體塊最初都是空的,所以第一次用到的頁面都產生一次缺頁。

當記憶體塊數量為3時:

發生缺頁中斷的次數為16。

在fifo

演算法中,先進入記憶體的頁面被先換出。當頁

6要調入時,記憶體的狀態為4、

1、5,考查頁

6之前調入的頁面,分別為5、

1、2、

4,可見

4為最先進入記憶體的,本次應換出,然後把頁

6調入記憶體。

發生缺頁中斷的次數為15。

lru是least recently used的縮寫,即最近最少使用頁面置換演算法,是為虛擬頁式儲存管理服務的。該演算法的初衷是有記憶體管理而被提出來的,其目的是為解決「如何節省利用容量不大的記憶體為最多的程序提供資源」時如何減少過多的讓程序去讀取外存。 

這裡以煉表法來實現lru: 

一點介紹 

作業系統為每個程序維護一條鍊錶,鍊錶的每個結點記錄一張頁面的位址。呼叫一次頁面,則把該頁面的結點從鏈中取出,放到鏈尾;要裝入新頁,則把鏈頭的頁面調出,同時生成調入頁面的結點,放到鏈尾。  在

lru演算法中,最近最少使用的頁面被先換出。當頁

6要調入時,記憶體的狀態為5、

2、1,考查頁

6之前調入的頁面,分別為5、

1、2,可見

2為最近一段時間內使用最少的,本次應換出,然後把頁

6調入記憶體。

發生缺頁中斷的次數為11。

在opt

演算法中,在最遠的將來才被訪問的頁面被先換出。當頁

6要調入時,記憶體的狀態為1、

2、5,考查頁

6後面要調入的頁面,分別為2、

1、2、

…,可見

5為最近一段時間內使用最少的,本次應換出,然後把頁

6調入記憶體。

最不經常使用(least frequently used --lfu) 頁置換演算法,要求在頁置換時置換引用計數最小的頁,因為經常使用的頁應該有乙個較大的引用次數。但是有些頁在開始時使用次數很多,但以後就不再使用,這類頁將會長時間留在記憶體中,因此可以將引用計數暫存器定時右移一位,形成指數衰減的平均使用次數。

注意lfu與lru的區別,lfu一定是使用次數最少並且最近的被淘汰,而lru被淘汰的是離上一次使用時間最長的。。

opt演算法因為要知道後面請求的頁框,因此我覺得這個演算法有個小小的bug,如果在某個請求中,若在該請求的頁框之後的頁框序列中至少存在乙個和當前記憶體塊中不匹配的頁框,則按照記憶體塊的順序(從上往下)替換沒有出現的頁框。比如上面那個opt例子。對於最後乙個頁框請求,因為6未命中,且6之後沒有請求的序列,因此應該替換3,所以替換後的序列為6 , 2 ,1   當然,這只是針對做題而言。

處理缺頁中斷(FIFO LRU OPT置換演算法)

缺頁中斷就是要訪問的頁不在主存,需要作業系統將其調入主存後再進行訪問。在這個時候,被記憶體對映的檔案實際上成了乙個分頁交換檔案。置換最先調入記憶體的頁面,即置換在記憶體中駐留時間最久的頁面。按照進入記憶體的先後次序排列成佇列,從隊尾進入,從隊首刪除。但是該演算法會淘汰經常訪問的頁面,不適應程序實際執...

缺頁中斷 FIFO LRU OPT這三種置換演算法

在請求分頁系統中,可以通過查詢頁表中的狀態位來確定所要訪問的頁面是否存在於記憶體中。每當所要訪問的頁面不在記憶體時,會產生一次缺頁中斷,此時作業系統會根據頁表中的外存位址在外存中找到所缺的一頁,將其調入記憶體。缺頁本身是一種中斷,與一般的中斷一樣,需要經過4個處理步驟 1.保護cpu現場 2.分析中...

缺頁中斷 FIFO LRU OPT這三種置換演算法

1.缺頁中斷 在請求分頁系統中,可以通過查詢頁表中的狀態位來確定所要訪問的頁面是否存在於記憶體中。每當所要訪問的頁面不在記憶體時,會產生一次缺頁中斷,此時作業系統會根據頁表中的外存位址在外存中找到所缺的一頁,將其調入記憶體。缺頁本身是一種中斷,與一般的中斷一樣,需要經過4個處理步驟 1.保護cpu現...