藍屏死機

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
Blue Screen of Death」的各地常用名稱
中國大陸藍屏死機、藍屏
臺灣藍螢幕當機、藍白當機
港澳藍屏死機、藍畫面當機
Windows 10中的藍屏死機畫面(版本 1607-21H2),它包含了一個悲傷顏文字和一個用於快速排查錯誤的QR碼
深圳地鐵5號線大學城站的深圳通充值機藍屏死機
整間電腦教室出現藍色畫面的情況
首爾地鐵車廂內的藍屏死機

藍屏死機(英語:Blue Screen of Death,縮寫為:BSoD)指的是微軟Windows作業系統在無法從一個系統錯誤中恢復過來時所顯示的熒幕圖像。

Windows 9x出現BSOD錯誤時,通常會顯示兩次BSOD畫面。

Windows NT系列(包括Windows 2000Windows XP等)的穩定性高於Windows 9x,當Windows NT出現致命錯誤而必須重新啟動時,會顯示BSoD畫面。BSOD畫面上所顯示的資訊會有偵錯碼,例如:STOP: 0x0000004e,以及其簡短的錯誤訊息,用戶可以在微軟的技術支援網站頁面存檔備份,存於互聯網檔案館)搜尋此偵錯碼出現時可能是什麼原因。但有時錯誤碼並不能讓用戶很快的找到導致藍畫面死機的原因,反而會誤導用戶,因此可能要以試誤法(trial and error)才能找出原因。

Windows 9x/ME發生之BSoD允許用戶選擇繼續或者重新啟動。但是,VxD一般不隨便顯示BSoD──它們一般只在一個不透過重新啟動就無法修復的錯誤發生時才顯示BSoD,因此當BSoD顯示時,系統已經不穩定或死機。在Windows 9x時代,出現藍屏的最常見原因是DLL衝突,意即同一個DLL的多個版本造成的不相容;當應用程式需要使用這些DLL時,Windows將它們載入到記憶體;如果替換了DLL,下一次應用程式載入DLL時它可能不是該應用程式所希望的版本,且這種不相容性隨着安裝更多的新軟件而增加。Windows NT系列的穩定性明顯優於Windows 9x,發生藍畫面死機的概率遠低於Windows 9x。

歷史[編輯]

Windows 1.02.0中的藍屏死機
2019年一家藥店門前的藍屏死機
發生在納什維爾國際機場的Windows 98藍屏死機
發生在CNIT的一次藍屏死機
發生在Vélo'v的藍屏死機

藍屏死機自Windows 1.0就已經存在。在Windows 1.x-2.x中,當Windows發現了版本過高的DOS系統時,它將會在繼續啟動前顯示一個藍底白字的介面「Incorrect DOS version」和一個列有內核模組及它們各自記憶體地址的列表。不過,這個藍屏死機仍並非真正的系統錯誤;當真正的錯誤發生時,系統反而會鎖死,或直接退出到DOS。Windows 3.0中設計了一個專門用來顯示重要系統資訊的對話方塊,這些資訊通常會來自386增強模式下的驅動程式,或其他無法正常執行的程式。[1][2]

在Windows 3.1中,這一對話方塊由黑色改為了藍色,並且會在按下Ctrl+Alt+Del(用於打開工作管理員)時出現,如果當時沒有無響應的程式。當系統錯誤足夠嚴重時,Windows 3.x仍然會直接退出到DOS。[1]

現在通常所說的藍屏死機介面在Windows NT 3.1Windows NT系列的首個系統,發佈於1993年)中首次出現,並延續到了之後的所有Windows系統中。藍屏死機介面通常由編寫不良的驅動程式或故障的硬件引起,如記憶體故障、供電問題、過熱或超出其規格限制的硬件。在Windows 9x的時代,系統內核中不完整的動態連結庫或bug也會導致藍屏死機。Windows 9x相比於後續的Windows版本,藍屏死機非常常見。[3]

格式[編輯]

在Windows 9x時代,可通過修改SYSTEM.ini來改變藍屏的顏色

Windows 8Windows Server 2012之前,藍屏死機都以皇室藍為背景色顯示銀色的文字,這些文字包含了當前記憶體和暫存器的值。Windows Server 2012、Windows 8和Windows 10則使用了蔚藍色作為背景。

Windows 95、98和ME的藍屏死機介面顯示使用了80×25的文字模式。Windows NT系列使用的是720×400解像度、80×50的文字模式。Windows XP、Vista和7的藍屏死機中使用了Lucida Console字型。Windows 8、Windows Server 2012使用Segoe UI,並使用引導幀緩衝(the boot framebuffer)來顯示內容,在UEFI的機器上使用最高的可用圖形輸出協定模式(Graphics Output Protocol mode),在傳統BIOS的機器上使用1024×768(假設顯示器是扁平橫向放置的)或最高的VESA基本輸入輸出系統擴充模式(如果引導組態資料庫中設置了最高模式,'highestmode')。Windows 10版本 1607以後的藍屏死機介面與Windows 8相同,但多了一個通向微軟公司官網的二維條碼,網頁主要是微軟公司對藍屏死機原因的群眾調查。

雖然名叫「藍屏死機」,但在Windows 9x時代,藍屏畫面的顏色可以由用戶自訂;而在2016年9月及之後的Windows預覽版本中,藍屏死機變成了深綠色,以和正式版本的Windows藍屏做區分,方便開發人員快速分辨版本。

Windows NT[編輯]

在Windows NT的系列作業系統中,當內核或者執行在內核模式中的驅動程式發生無法修復的錯誤時,就會發生藍屏死機。此處的藍屏死機官方名稱為停止錯誤(stop error),在Windows的軟件開發套件(SDK)與驅動開發工具包(DDK)文件中也被稱為「錯誤檢查」(bug check)。它通常是被一般保護錯誤引起的。此時,作業系統能採取的唯一安全手段只有重新啟動電腦;而作為結果,用戶甚至沒有機會來儲存未儲存的數據。

藍屏畫面中顯示的文字包括了錯誤碼和它的名稱(如「0x0000001E, KMODE_EXCEPTION_NOT_HANDLED」),並在隨後用括號括住四個與錯誤相關的值以方便維修。根據錯誤的不同,它可能還會顯示問題發生的記憶體地址,以及在該地址下載入的驅動程式。此外,在熒幕的第二和第三部分可能還會分別顯示所有已經載入的驅動程式和堆疊轉儲資訊,而所給的驅動程式資訊分為三列,每一列分別是驅動程式的基地址、驅動程式的建立日期和驅動程式的名稱。[4]

預設情況下,Windows會在錯誤發生時建立一個記憶體轉儲檔案,根據Windows版本的不同它可以小至64kB(小型轉儲),也可以大至RAM的完整複製(完全轉儲)。這個檔案稍後可以使用除錯器(一般是WinDbg[5])進行除錯。除錯器是進行堆疊追蹤所必需的;並且由於藍屏中的資訊很有限,可能會造成誤導或隱藏真正的原因,因此確定藍屏的真正原因也需要它的參與。

在預設情況下,Windows XP被組態為只儲存64kB的迷你轉儲檔案,然後自動重新啟動電腦。由於這一過程發生的非常迅速,藍屏可能只會一閃而過甚至完全看不到,因此用戶也很容易把它當作電腦隨機重新啟動的故障,直到重新啟動完成後Windows提示剛剛曾發生過嚴重的錯誤。當然,可以通過關閉控制面板中「系統屬性—進階—啟動和故障恢復—系統失敗」中的自動重新啟動來達到顯示藍屏的目的。

Windows還可以被設置為將除錯資訊即時傳送到在另一台電腦上執行的內核除錯器。如果此時發生了停止錯誤,Windows將會暫停執行並且中斷除錯器,而不是顯示藍屏;之後,就可以用除錯器檢查記憶體的內容並尋找問題的原因了。

藍屏死機也可能由嚴重的引導載入程式錯誤引起。在該錯誤中,Windows由於儲存驅動程式錯誤、檔案系統損壞或其他類似的問題而無法訪問引導分區。它的錯誤碼是STOP 0x0000007B (INACCESSIBLE_BOOT_DEVICE)。[6]在這種情況下,Windows將不會儲存任何記憶體轉儲檔案。由於此時Windows無法從硬碟啟動,因此要想修復這種錯誤就需要使用在Windows安裝盤中所附帶的工具。

細節[編輯]

Windows Server 2012之前,藍屏死機介面會顯示一個大寫的錯誤名稱(例如APC_INDEX_MISMATCH)、一個十六進制的錯誤碼(如0x00000001)和四個參數。一般的顯示格式如下:

錯誤碼(參數 1, 參數 2, 參數 3, 參數 4)錯誤名稱

根據錯誤碼及其性質,參數可能會指出錯誤的原因和/或位置。此外,藍屏介面上還會顯示四段一般性的解釋與建議,有時也會指出其他的技術資訊,例如出錯檔案的名稱和記憶體地址。

而隨着Windows Server 2012的發佈,藍屏死機的介面大幅改動並刪去了以上的所有資訊,只留下了錯誤名稱和一段簡短的描述。Windows 8加入了一個哭臉的顏文字。不過,十六進制的錯誤碼和參數仍然能在事件檢視器和記憶體轉儲檔案中被查詢到。從Windows 10 版本 14393開始,增加了一個用於快速故障排除的二維條碼。

不同版本的Windows發生藍屏[編輯]

在Windows XP中,程式發生較小問題時不會出現BSoD,而只會出現「程式發生錯誤」熒幕。圖為在香港維多利亞公園的一個LED熒幕上顯示的錯誤資訊

預設情況下,BSoD的顯示是藍(0x01或#0000AA,Windows 8/10則是#2067B2)底白(0x0F或#FFFFFF)字。顯示的資訊包括了當前的記憶體值以及暫存器值。

BSoD已經極少出現在Windows NT家族中。當在較輕微的軟件錯誤出現時,雖然程式依然可能崩潰,但由於新系統中更好的記憶體管理,類似錯誤並不會損害到整個作業系統。在這些系統中,「真正的」BSoD只在整個系統崩潰時才會出現。

BSoD最早出現在Windows 1.0中。另外,在微軟遊戲主機XBOX出現的畫面不是藍色,而是綠色。而在XP/Vista/7中,存在一種比BSoD更嚴重的紅屏死機畫面,常見於驅動程式故障。[7] Windows Insider Preview有綠屏死機畫面和藍屏死機畫面。

在中文版本的作業系統中,Windows 3.2與Windows 95(不包括OSR2)中藍屏內容為中文,之後版本的藍屏均為英文提示,直到Windows 8之後才重新換回中文。

相關條目[編輯]

參考文獻[編輯]

  1. ^ 1.0 1.1 Blue screen of death. BetaWiki. [2020-08-31]. (原始內容存檔於2021-01-24) (英語). 
  2. ^ Steve Ballmer did not write the text for the blue screen of death. The Old New Thing. 2014-09-09 [2020-08-31]. (原始內容存檔於2020-10-25) (美國英語). 
  3. ^ Garmon, Jay. Geek Trivia: Death by operating system. TechRepublic. 2007-04-16 [2021-06-01]. (原始內容存檔於2022-03-10) (英語). 
  4. ^ Microsoft Windows NT Workstation Resource Kit需要免費註冊 1st. Redmond, WA: Microsoft Press. 29 October 1996. ISBN 1-57231-343-9. 
  5. ^ DOMARS. Getting Started with WinDbg (Kernel-Mode). msdn.microsoft.com. [15 June 2018]. (原始內容存檔於2016-03-14). 
  6. ^ Stop error code 0x0000007B (INACCESSIBLE_BOOT_DEVICE). support.microsoft.com. 2018-04-17 [2020-01-16]. (原始內容存檔於2021-03-28). 
  7. ^ 怎樣解決cs紅屏死機現象_系統最佳化/輔助使用問題_PConline快問頁面存檔備份,存於互聯網檔案館),2009年6月25日查閱

外部連結[編輯]