分頁錯誤
分頁錯誤(英語:Page fault,又名硬錯誤、硬中斷、頁缺失、尋頁缺失、缺頁中斷、頁故障等)指的是當軟件試圖訪問已映射在虛擬地址空間中,但是目前並未被加載在物理內存中的一個分頁時,由中央處理器的內存管理單元所發出的中斷。
通常情況下,用於處理此中斷的程序是操作系統的一部分。如果操作系統判斷此次訪問是有效的,那麼操作系統會嘗試將相關的分頁從硬盤上的虛擬內存文件中調入內存。而如果訪問是不被允許的,那麼操作系統通常會結束相關的進程。[1]
雖然其名為「頁缺失」錯誤,但實際上這並不一定是一種錯誤。而且這一機制對於利用虛擬內存來增加程序可用內存空間的操作系統(比如Microsoft Windows和各種類Unix系統)中都是常見且有必要的。
微軟在較新版Windows的資源監視器中使用「硬體錯誤」(Windows Vista及以上)、「硬體中斷」(Windows 8及以上)這一術語來指代「頁缺失」。[2]
分類
編輯軟性
編輯軟性頁缺失指頁缺失發生時,相關的頁已經被加載進內存,但是沒有向MMU註冊的情況。操作系統只需要在MMU中註冊相關頁對應的物理地址即可。[1]
發生這種情況的可能性之一,是一塊物理內存被兩個或多個程序共享,操作系統已經為其中的一個裝載並註冊了相應的頁,但是沒有為另一個程序註冊。
可能性之二,是該頁已被從CPU的工作集中移除,但是尚未被交換到磁盤上。比如OpenVMS這樣的使用次級頁緩存的系統,就有可能會在工作集過大的情況下,將某頁從工作集中去除,但是不寫入硬盤也不擦除(比如說這一頁被讀出硬盤後沒被修改過),只是放入空閒頁表。除非有其他程序需要,導致這一頁被分配出去了,不然這一頁的內容不會被修改。當原程序再次需要該頁內的數據時,如果這一頁確實沒有被分配出去,那麼系統只需要重新為該頁在MMU內註冊映射即可。[3]
硬性
編輯與軟性頁缺失相反,硬性頁缺失是指相關的頁在頁缺失發生時未被加載進內存的情況。這時操作系統需要:[4]
- 尋找到一個空閒的頁。或者把另外一個使用中的頁寫到磁盤上(如果其在最後一次寫入後發生了變化的話),並註銷在MMU內的記錄
- 將數據讀入被選定的頁
- 向MMU註冊該頁
硬性頁缺失導致的性能損失是很大的。以一塊7200rpm的主流機械硬盤為例,其平均尋道時間為8.5毫秒,讀入內存需要0.05毫秒。相對的,DDR3內存的訪問延遲通常在數十到100納秒之間,性能差距可能會達到8萬到22萬倍。
另外,有些操作系統(如Linux)會將程序的一部分延遲到需要使用的時候再加載入內存執行,以此來提升性能。這一特性也是通過捕獲硬性頁缺失達到的。[5]
當硬性頁缺失過於頻繁的發生時,稱發生系統顛簸。
無效
編輯當程序訪問的虛擬地址是不存在於虛擬地址空間內的時候,則發生無效頁缺失。一般來說這是個軟件問題,但是也不排除硬件可能,比如因為內存故障而損壞了一個正確的指針。
具體動作與所使用的操作系統有關,比如Windows會使用異常機制向程序報告,而類Unix系統則會使用信號機制。如果程序未處理相關問題,那麼操作系統會執行默認處理方式,通常是轉儲內存、終止相關的程序,然後向用戶報告。[4][6]
參考與延伸閱讀
編輯- ^ 1.0 1.1 Red Hat Enterprise Linux 3: Introduction to System Administration, 4.4. Virtual Memory: The Details. RedHat. [2013-02-11].[永久失效連結]
- ^ 參見英文Windows資源監視器幫助
- ^ HP OpenVMS Systems Documentation, Chapter 7 Evaluating the Memory Resource. HP. [2013-02-11]. (原始內容存檔於2013-03-01).
- ^ 4.0 4.1 So What Is A Page Fault?. OSR Online. 2003-05-07 [2013-02-11]. (原始內容存檔於2013-01-16).
- ^ Red Hat Enterprise Linux 3: Introduction to System Administration, 4.5. Virtual Memory Performance Implications. RedHat. [2013-02-11].[永久失效連結] See note.
- ^ UnhandledExceptionFilter function. Microsoft MSDN. [2013-02-11]. (原始內容存檔於2018-12-22).
- John L. Hennessy, David A. Patterson, Computer Architecture, A Quantitative Approach (ISBN 1-55860-724-2)
- Tanenbaum, Andrew S. Operating Systems: Design and Implementation (Second Edition). New Jersey: Prentice-Hall 1997.
- Intel Architecture Software Developer's Manual–Volume 3: System Programming