蓝屏死机

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日查阅

外部链接

编辑