缺頁中斷

缺頁中斷就是要訪問的頁不在主存,需要作業系統將其調入主存後再進行訪問。在這個時候,被記憶體映射的檔案實際上成了一個分頁交換檔案。

基本介紹

  • 中文名:缺頁中斷
  • 外文名: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) 該例程恢復暫存器和其他狀態信息

相關詞條

熱門詞條

聯絡我們