分頁錯誤
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
分頁錯誤(英語: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