藍屏死機

Windows操作系统在遭遇无法恢复的系统错误时显示的屏幕

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

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

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月及之後(Build 14997以上)的Windows預覽版本中,藍屏死機變成了深綠色,以方便開發人員快速分辨版本。[4]Windows Insider內測主管多納·薩爾卡爾稱:「為了更好地區分Windows Insider內測用戶與正式版用戶的報告,我們將錯誤檢查頁面的背景(從藍色)換成了綠色。Windows 10正式版會繼續使用經典的藍色,包括Windows 10 創意者更新的最終版本。」[5]

Windows NT

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

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

默認情況下,Windows會在錯誤發生時創建一個內存轉儲文件,根據Windows版本的不同它可以小至64kB(小型轉儲),也可以大至RAM的完整複製(完全轉儲)。這個文件稍後可以使用調試器(一般是WinDbg[7])進行調試。調試器是進行堆棧追蹤所必需的;並且由於藍屏中的信息很有限,可能會造成誤導或隱藏真正的原因,因此確定藍屏的真正原因也需要它的參與。

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

Windows還可以被設置為將調試信息實時發送到在另一台計算機上運行的內核調試器。如果此時發生了停止錯誤,Windows將會暫停執行並且中斷調試器,而不是顯示藍屏;之後,就可以用調試器檢查內存的內容並尋找問題的原因了。

藍屏死機也可能由嚴重的引導加載程序錯誤引起。在該錯誤中,Windows由於存儲驅動程序錯誤、文件系統損壞或其他類似的問題而無法訪問引導分區。它的錯誤碼是STOP 0x0000007B (INACCESSIBLE_BOOT_DEVICE)。[8]在這種情況下,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更嚴重的紅白當機畫面,常見於驅動程序故障。[9] 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. ^ “蓝屏死机”说再见?微软Win10正测试“绿屏”死机. 新浪數碼. [2020-08-17]. (原始內容存檔於2016-12-31). 
  5. ^ Windows 10正式加入死机“绿屏”. 快科技. [2020-08-17]. (原始內容存檔於2017-12-04). 
  6. ^ Microsoft Windows NT Workstation Resource Kit  1st. Redmond, WA: Microsoft Press. 29 October 1996. ISBN 1-57231-343-9. 
  7. ^ DOMARS. Getting Started with WinDbg (Kernel-Mode). msdn.microsoft.com. [15 June 2018]. (原始內容存檔於2016-03-14). 
  8. ^ Stop error code 0x0000007B (INACCESSIBLE_BOOT_DEVICE). support.microsoft.com. 2018-04-17 [2020-01-16]. (原始內容存檔於2021-03-28). 
  9. ^ 怎樣解決cs紅屏死機現象_系統優化/輔助使用問題_PConline快問頁面存檔備份,存於網際網路檔案館),2009年6月25日查閱

外部連結