複製鏈接
請複製以下鏈接發送給好友

缺頁中斷

鎖定
缺頁中斷就是要訪問的頁不在主存,需要操作系統將其調入主存後再進行訪問。在這個時候,被內存映射的文件實際上成了一個分頁交換文件。
中文名
缺頁中斷
外文名
missing page interruption
應用領域
計算機
釋    義
訪問的頁不在主存
調整方式
將其調入主存後再進行訪問

缺頁中斷頁缺失

頁缺失(英語:Page fault,又名硬錯誤硬中斷分頁錯誤尋頁缺失缺頁中斷頁故障等)指的是當軟件試圖訪問已映射在虛擬地址空間中,但是並未被加載在物理內存中的一個分頁時,由中央處理器內存管理單元所發出的中斷
通常情況下,用於處理此中斷的程序是操作系統的一部分。如果操作系統判斷此次訪問是有效的,那麼操作系統會嘗試將相關的分頁從硬盤上的虛擬內存文件中調入內存。而如果訪問是不被允許的,那麼操作系統通常會結束相關的進程
雖然其名為“頁缺失”錯誤,但實際上這並不一定是一種錯誤。而且這一機制對於利用虛擬內存來增加程序可用內存空間的操作系統(比如Microsoft Windows和各種類Unix系統)中都是常見且有必要的。
微軟在較新版Windows的資源監視器中使用“硬錯誤”(Windows Vista及以上)、“硬中斷”(Windows 8及以上)這一術語來指代“頁缺失”。

缺頁中斷分類

缺頁中斷軟性

軟性頁缺失指頁缺失發生時,相關的頁已經被加載進內存,但是沒有向MMU註冊的情況。操作系統只需要在MMU中註冊相關頁對應的物理地址即可。
發生這種情況的可能性之一,是一塊物理內存被兩個或多個程序共享,操作系統已經為其中的一個裝載並註冊了相應的頁,但是沒有為另一個程序註冊。
可能性之二,是該頁已被從CPU的工作集中移除,但是尚未被交換到磁盤上。比如OpenVMS這樣的使用次級頁緩存的系統,就有可能會在工作集過大的情況下,將某頁從工作集中去除,但是不寫入硬盤也不擦除(比如説這一頁被讀出硬盤後沒被修改過),只是放入空閒頁表。除非有其他程序需要,導致這一頁被分配出去了,不然這一頁的內容不會被修改。當原程序再次需要該頁內的數據時,如果這一頁確實沒有被分配出去,那麼系統只需要重新為該頁在MMU內註冊映射即可。

缺頁中斷硬性

與軟性頁缺失相反,硬性頁缺失是指相關的頁在頁缺失發生時未被加載進內存的情況。這時操作系統需要:
  1. 尋找到一個空閒的頁。或者把另外一個使用中的頁寫到磁盤上(如果其在最後一次寫入後發生了變化的話),並註銷在MMU內的記錄
  2. 將數據讀入被選定的頁
  3. 向MMU註冊該頁
硬性頁缺失導致的性能損失是很大的。以一塊7200rpm的主流機械硬盤為例,其平均尋道時間為8.5毫秒,讀入內存需要0.05毫秒。相對的,DDR3內存的訪問延遲通常在數十到100納秒之間,性能差距可能會達到8萬到22萬倍。
另外,有些操作系統會將程序的一部分延遲到需要使用的時候再加載入內存執行,以此來提升性能。這一特性也是通過捕獲硬性頁缺失達到的。
當硬性頁缺失過於頻繁的發生時,稱發生系統顛簸

缺頁中斷無效

當程序訪問的虛擬地址是不存在於虛擬地址空間內的時候,則發生無效頁缺失。一般來説這是個軟件問題,但是也不排除硬件可能,比如因為內存故障而損壞了一個正確的指針
具體動作與所使用的操作系統有關,比如Windows會使用異常機制向程序報告,而類Unix系統則會使用信號機制。如果程序未處理相關問題,那麼操作系統會執行默認處理方式,通常是轉儲內存、終止相關的程序,然後向用户報告。

缺頁中斷中斷

是指計算機在執行程序的過程中,當出現異常情況或特殊請求時,計算機停止現行程序的運行,轉向對這些異常情況或特殊請求的處理,處理結束後再返回現行程序的間斷處,繼續執行原程序。

缺頁中斷缺頁中斷的次數

中斷次數=進程的物理塊數+頁面置換次數。

缺頁中斷缺頁中斷的順序

缺頁中斷髮生時的事件順序如下:
1) 硬件陷入內核,在內核堆棧中保存程序計數器。大多數機器將當前指令的各種狀態信息保存在特殊的CPU寄存器中。
2) 啓動一個彙編代碼例程保存通用寄存器和其他易失的信息,以免被操作系統破壞。這個例程將操作系統作為一個函數來調用。
3) 當操作系統發現一個缺頁中斷時,嘗試發現需要哪個虛擬頁面。通常一個硬件寄存器包含了這一信息,如果沒有的話,操作系統必須檢索程序計數器,取出這條指令,用軟件分析這條指令,看看它在缺頁中斷時正在做什麼。
4) 一旦知道了發生缺頁中斷的虛擬地址,操作系統檢查這個地址是否有效,並檢查存取與保護是否一致。如果不一致,向進程發出一個信號或殺掉該進程。如果地址有效且沒有保護錯誤發生,系統則檢查是否有空閒頁框。如果沒有空閒頁框,執行頁面置換算法尋找一個頁面來淘汰。
5) 如果選擇的頁框“髒”了,安排該頁寫回磁盤,併發生一次上下文切換,掛起產生缺頁中斷的進程,讓其他進程運行直至磁盤傳輸結束。無論如何,該頁框被標記為忙,以免因為其他原因而被其他進程佔用。
6) 一旦頁框“乾淨”後(無論是立刻還是在寫回磁盤後),操作系統查找所需頁面在磁盤上的地址,通過磁盤操作將其裝入。該頁面被裝入後,產生缺頁中斷的進程仍然被掛起,並且如果有其他可運行的用户進程,則選擇另一個用户進程運行。
7) 當磁盤中斷髮生時,表明該頁已經被裝入,頁表已經更新可以反映它的位置,頁框也被標記為正常狀態。
8) 恢復發生缺頁中斷指令以前的狀態,程序計數器重新指向這條指令。
9) 調度引發缺頁中斷的進程,操作系統返回調用它的彙編語言例程。
10) 該例程恢復寄存器和其他狀態信息 [1] 
參考資料