核心錯誤
維基百科,自由的 encyclopedia
核心錯誤(英語:Kernel Panic)是指作業系統在監測到內部的致命錯誤,且無法安全處理此錯誤時採取的動作。這個概念主要被限定在Unix以及類Unix系統中;對於Microsoft Windows系統,等同的概念通常被稱為藍白當機。
作業系統核心中處理Kernel panic的子程式(在AT&T衍生類以及BSD類Unix中,通常稱為panic()
)通常被設計用來向控制台輸出錯誤資訊,向磁碟儲存一份核心記憶體的轉儲,以便事後的除錯,然後等待系統被手動重新引導,或自動重新引導。該程式提供的技術性資訊通常是用來幫助系統管理員或者軟體開發者診斷問題的。
作業系統試圖讀寫無效或不允許的記憶體位址是導致核心錯誤的一個常見原因。核心錯誤也有可能在遇到硬體錯誤或作業系統BUG時發生。在不同情況中,作業系統可以在記憶體訪問違例發生時繼續執行。然而,系統處於不穩定狀態時,作業系統通常會停止工作以避免造成破壞安全和資料損壞的風險,並提供錯誤的診斷資訊。
核心錯誤在早期的Unix系統中被引入,顯示了在Unix與Multics在設計哲學上的主要差異之一。Multics的開發者Tom van Vleck曾引述了一段在這個問題上與Unix開發者Dennis Ritchie的討論:
我提醒Dennis說,我在Multics中寫的近半數代碼都是錯誤恢復代碼。他說:「我們不需要這些。我們有稱為panic的子程式,如果發生了錯誤就可以呼叫這個函式,使得系統崩潰,然後你可以在大廳裡面大叫:『嘿,重新啟動機器』。」[1]
原始的panic()
函式從UNIX第五版開始到基於VAX的UNIX 32V期間幾乎沒有變化,只是輸出一條錯誤資訊,然後就使系統進入NOP的無窮迴圈中。當改進UNIX的基礎代碼的時候,panic()
函式也有所改進,可以向控制台輸出多種格式的除錯資訊。