機器檢查異常

機器檢查異常(英語:Machine Check Exception,簡稱MCE)是計算機中央處理器檢測到一個硬件問題發生的計算機硬件錯誤。

現代版本的Microsoft Windows通過Windows硬件錯誤架構英語Windows Hardware Error Architecture處理機器檢查異常。當該架構檢測到機器檢查異常(MCE)時,它會以藍屏死機顯示該錯誤,附以下列參數(數值可能變化,但機器檢查異常導致的首個參數始終為0x0):[1]

 *** STOP: 0x00000124 (0x0000000000000000, 0x0000000000000000, 0x0000000000000000, 0x0000000000000000) 

Linux上,進程(例如klogd[2])會向內核日誌和/或控制台屏幕寫入消息(通常僅在錯誤不可恢復且機器因此崩潰時,消息才會發送到控制台):

CPU 0: Machine Check Exception: 0000000000000004
Bank 2: f200200000000863
Kernel panic: CPU context corrupt

該錯誤通常是由於硬件組件的故障或過負載而發生,其中的錯誤不能用更具體的錯誤消息來識別。診斷其錯誤消息可能很困難,儘管英特爾奔騰處理器確實生成更具體的代碼,可以聯繫製造商進行解碼。[來源請求]

大多數機器檢查異常需要重啟系統才能繼續為用戶正常運行。[來源請求]

問題類型

這些錯誤大多明確與奔騰處理器家族有關[來源請求]。其他處理器上也可能出現類似的錯誤以及導致類似的問題。

導致機器檢查異常的一些主要的硬件問題包括:

可能的原因

機器檢查異常的一般原因包括系統過熱、硬件安裝不正確。具體的因操作引起的原因有:

  • 超頻(增加了熱量輸出)。
  • 錯誤安裝散熱片/散熱風扇英語Computer fan(CPU風扇灰塵過多或故障也可能導致)
  • 內部或外部電源過載(可通過升級電源解決)

計算機軟件也可能導致機器檢查異常錯誤(通常因為程序讀取或寫入了損壞的數據)。例如,軟件讀或寫不存在的內存區域可能導致處理器或系統總線的失措。[來源請求]訪問被UEFI標記為限制的內存也可能機器檢查異常錯誤。[3]

解碼MCE

如前所述,機器檢查錯誤的準確解碼存在難度。通常來說,製造商(尤其是中央處理器的製造商)能夠提供有關特定代碼的信息。參閱「Intel 64和IA-32架構軟件開發人員手冊」[4]第14章(機器檢查架構),或微軟知識庫文章 - Windows 異常。[5]

解碼MCE的程序

  • mcat:AMD的一個Windows命令行程序,可解碼AMD K8,家族0x100x11的處理器的MCE。
  • mcelog[6]:Andi Kleen製作的一個Linux守護進程,它處理現代x86處理器的MCE。mcelog也可解碼機器檢查。
  • parsemce[7]:Dave Jones製作的一個Linux程序,解碼AMD K7處理器的MCE。
  • mced[8]:Tim Hockin製作的一個Linux程序,從內核收集MCE並提醒感興趣的應用程序。它不會嘗試解釋MCE數據,只是提醒其他程序。

參見

參考資料

  1. ^ Bug Check 0x124: WHEA_UNCORRECTABLE_ERROR. MSDN. 2016-09-29 [2016-10-26]. (原始內容存檔於2016-12-23). 
  2. ^ Steve Lord, Greg Wettstein. klogd(8) - Linux man page. [2016-10-26]. (原始內容存檔於2019-10-24). klogd is a system daemon which intercepts and logs Linux kernel messages. 
  3. ^ Bug 47121: UEFI boot panics on a new Samsung Series 9 laptop throwing a machine check exception. Linux kernel bug tracker. 2012-10-13 [2016-10-26]. (原始內容存檔於2019-04-04). 
  4. ^ Intel 64 and IA-32 Architectures Software Developer's Manual: Volume 3A: System Programming Guide, Part 1 (PDF). Intel. May 2011 [2016-10-26]. (原始內容 (PDF)存檔於2008-12-21). 
  5. ^ Stop error message in Windows XP that you may receive: "0x0000009C (0x00000004, 0x00000000, 0xb2000000, 0x00020151)". MSDN. 2015-12-07 [2016-10-26]. (原始內容存檔於2017-01-08). 
  6. ^ mcelog: Advanced hardware error handling for x86 Linux. 2015-04-20 [2016-10-26]. (原始內容存檔於2021-02-25). 
  7. ^ parsemce: Linux Machine check exception handler parser.. 2003-07-22 [2016-10-26]. (原始內容存檔於2013-06-22). 
  8. ^ GitHub上的mcedaemon頁面

外部連結