在請求分頁系統中,可以通過查詢頁表中的狀態位來確定所要訪問的頁面是否存在於記憶體中。每當所要訪問的頁面不在記憶體時,會產生一次缺頁中斷,此時作業系統會根據頁表中的外存位址在外存中找到所缺的一頁,將其調入記憶體。
缺頁本身是一種中斷,與一般的中斷一樣,需要經過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算例為例子。
中斷次數為9,缺頁中斷率為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
yyym=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算例為例子。
中斷次數為7,缺頁中斷率為7/12*100% = 58.3%。p:2
3215
2453
252m=323
2152
4532
5223
2152
4532
5321
5245
33f=7yyy
yyyy
堆疊實現lru:
系統使用特殊的堆疊來存放記憶體中每乙個頁面的頁號。每當訪問一頁時就調整一次,即把被訪問頁面的頁號從棧中移出再壓入棧頂。因此,棧頂始終是最新被訪問頁面的頁號,棧底始終是最近最久未被訪問的頁號。當發生缺頁中斷時,總是淘汰棧底頁號所對應的頁面。
溫靜,計算機作業系統原理,武漢大學出版社
缺頁中斷 LRU OPT FIFO演算法
在請求分頁系統中,可以通過查詢頁表中的狀態位來確定所要訪問的頁面是否存在於記憶體中。每當所要訪問的頁面不在記憶體時,會產生一次缺頁中斷,此時作業系統會根據頁表中的外存位址在外存中找到所缺的一頁,將其調入記憶體。缺頁本身是一種中斷,與一般的中斷一樣,需要經過4個處理步驟 1.保護cpu現場 2.分析中...
詳解缺頁中斷 缺頁中斷處理(核心 使用者)
一 什麼是缺頁中斷?程序線性位址空間裡的頁面不必常駐記憶體,在執行一條指令時,如果發現他要訪問的頁沒有在記憶體中 即存在位為0 那麼停止該指令的執行,並產生乙個頁不存在的異常,對應的故障處理程式可通過從外存載入該頁的方法來排除故障,之後,原先引起的異常的指令就可以繼續執行,而不再產生異常。二 頁面排...
缺頁中斷與頁面置換演算法
1 缺頁中斷 程序線性位址空間裡的頁面不必常駐記憶體,在執行一條指令時,如果發現他要訪問的頁沒有在記憶體中 存在位為0 那麼停止該指令的執行,並產生乙個頁不存在異常,對應的故障處理程式可通過從外存載入該頁到記憶體的方法來排除故障,之後,原先引起的異常的指令就可以繼續執行,而不再產生異常。頁面置換演算...