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

一般保護錯誤

鎖定
一般保護錯誤是在PC機用户程序企圖訪問不可訪問地址時出現的錯誤。
中文名
一般保護錯誤
外文名
General protection fault
簡    寫
GPF
定    義
不嚴重的錯誤

一般保護錯誤簡介

一般保護錯誤(英語:General protection fault,縮寫:GPF)是在英特爾x86AMDx86-64架構和其它架構中的一種錯誤(或者一種中斷),指正在運行的程序(內核用户態程序)違反處理器架構中的保護措施的情況。此機制最初在1986年英特爾80386處理器的程序員參考手冊第9.8.13節中描述。一般保護錯誤通過中斷向量值13)實現。
若處理器偵測到保護違例,會停止當前代碼的執行,併發出GPF中斷。大多數情形下,操作系統會簡單地關閉觸發GPF的進程,告知用户,並繼續執行其它程序。但如果操作系統沒能捕獲這一錯誤(如在操作系統從GPF中斷處理例程中返回前發生了另一次違例),處理器會發出雙重錯誤(中斷向量值8,一種常見的藍屏情形)。如果再次發生了違例,則處理器會關閉(參見三重錯誤),其後只會響應復位(即按下機器的復位按鈕)、啓動(重新啓動系統)或不可屏蔽中斷(除非其之前在處理此類中斷時出錯)。 [1] 

一般保護錯誤內容

操作系統一般將內存劃分為不同的區域,有的區域只供操作系統使用,而有的系統是供應用程序使用的。當應用程序企圖在分配給它的內存區域進行訪問操作時,操作系統將中止這個程序的運行,用户得到的是一行錯誤碼,告訴用户程序出現了一般保護錯,用户只能再次啓動程序,希望這次程序在執行時會一切正常,隨此以外沒有什麼辦法可想。如果允許應用程序在分配給它的區域以外進行讀寫操作,就會使其它程序(或操作系統)的數據被破壞,如果破壞了操作系統的數據,系統就會崩潰,這樣損失就太大了,倒不如關閉一個程序而保護整個系統的安全。
在64位模式,CR0和CR4的高32位被保留並且必須被寫0。對高32位的任何一位進行寫的結果是引起一般性保護異常,#GP(0)。
一般保護錯誤出現時可採取的辦法:1、拔下多餘的內存只留下兼容性最強和質量最好的一根內存。2、拔下並仔細清理擦拭內存的金手指。3、不斷重啓電腦直到可以正常使用。 [1] 

一般保護錯誤操作系統行為

在一些版本的Microsoft Windows中,一般保護錯誤確實會被報告為“一般保護錯誤”。
  但在大部分版本中,Windows會給出如下錯誤:
  • Unrecoverable Application Error.(Windows 3.0
  • [程序] has caused a General Protection Fault in module [模塊] at [內存地址].(Windows 3.1和3.1x)
  • 該程序執行了非法操作,即將關閉。(Windows 9x&Windows NT 4.0
  • [程序]產生了錯誤,會被Windows關閉。(Windows 2000
  • [程序] has caused an error in [模塊]. [程序] will now close.(Windows Me
  • [程序/描述]遇到問題需要關閉。我們對此引起的不便表示抱歉。(Windows XP
  • [程序/描述]已停止工作。(Windows VistaWindows 7
在類Unix的系統中,此錯誤會被分別報告(比如Linux下的段錯誤等) [1] 
參考資料
  • 1.    "Troubleshooting "Unrecoverable Application Error" in DrWatson". Support. Microsoft. 27 February 2014.