这是以前两篇文章的节选(2003年第22期、2004年21期),感觉对蓝屏发生的原因分析得还算透彻和清楚,在这里与大家分享一下。
蓝屏对Windows用户来说,根本就是“灾难”的代名词,尽管Windows 2000/XP比前辈们稳定得多,但有时仍然得屈服于有问题的第三方软件、外围设备的驱动程序、微软的BUG,用蓝色屏幕来宣告自己的崩溃和死机。爱好者博墅lnu#W0mV3Ye$jR
大多数用户,甚至是一些高手都不知道蓝屏中提供的信息的含义,如果你幸运,只要重启一下电脑可能一切都恢复正常了,如果你不幸运,那么可能每次启动或进行某个特定操作时(比如:插入新的软盘)就会再次遭遇蓝屏。
要知蓝屏背后事 NT架构必知晓
1.NT基础架构爱好者博墅U~pb-@x.L,W
如果要理解蓝屏,最好首先对NT基础架构有些了解。NT内核的操作系统(Windows 2000/XP)采用的是分层结构,它的两个层又称作模式,分别为:用户模式(User Mode)和内核模式(Kernal Mode)。
9y5]yotu0为了便于理解,我们可以打个形象的比喻,整个电脑(包括系统、软件和硬件)被NT架构组成了一个有机的社会,用户层是实现各种功能的平台,各种应用程序在这里运行,而电脑硬件就像一个动力和资源库,应用程序必须要从那里取得实现不同功能的资源,但如果没有严格管理,谁都能直接访问和控制硬件,那么肯定会出现混乱,而内核层就担当起了守护、分配硬件资源的职责,在用户层与硬件之间进行隔离,达到保护硬件的目的。它运行的是管理硬件的NT Executive部件。这样,整个电脑才有机、高效地运转起来。
,Vz,_[z$uq0也就是说,内核层具有高特许级别的处理模式,能直接访问所有硬件和内存,而用户层则是相对较低权限的模式,不能直接访问硬件和有限地访问内存,这也正是某些具有直接硬件访问操作的Windows 3.1和DOS的应用程序(比如:某些游戏程序)无法在Windows 2000/XP上运行的原因。
Xj|'BW%p
O~/a8I0名词解释
Tc+Vv h_Ke}6L4W0NT Executive部件爱好者博墅3I&y5G+u5X n0@)@Q
它是对运行在内核模式下的一些操作系统子系统和部件的统称。主要作用是控制一组基本的操作系统功能,包括:进程和线程管理、输入/输出管理、安全管理、内存管理等。比如:虚拟内存管理器、进程管理器、对象管理器、本地进程调用工具等。
2.应用程序要在盒子里面运行
:bM\iyx
X/h0为了让程序规规矩矩地在用户层运行,只做它该做的事,而不去擅自使用不该它用的硬件和资源,Windows在程序运行时会为它创建一个被严格限制的运行盒子,以实现以下限制:爱好者博墅+A[Y9v^
★内存(物理内存和虚拟内存)该怎么用,以什么方式用。爱好者博墅7?k/i.w;g:?
小提示爱好者博墅$I0nS pC*Jm
Windows对虚拟内存进行了分开管理,低端部分会专门用于应用程序,而高端部分则完全保留给内核层的NT Executive部件,所以应用程序也是被严格禁止访问内核层的虚拟内存的。
★限制程序直接访问硬件设备,尽管有些应用程序本身能够直接访问硬件设备,但Window绝对不允许它这样做,如果要访问,那么只有借助硬件的驱动程序才行。
3.跳出盒子会怎么样?爱好者博墅K(XOJT.LB?$z+w/POm
如果应用程序不听话,跳出盒子并越界直接使用不该它使用的内存或直接访问硬件,一般情况下,Windows内核层的处理管理器或虚拟内存管理器便会发现该程序做了违法的事,并通知我们熟悉的Dr. Watson,让它弹出提示窗口,并终止那个程序的运行。不过,这一般不会影响我们继续使用Windows。
4.蓝屏:如果内核层也出了问题!爱好者博墅 I#zlb
@
虽然NT架构设计比较合理,但它并不完善,应用程序出错还好办,可怕的是,应用程序、驱动程序等严重出错,导致内核层也会出现问题,并且时有严重到不能自动恢复的情况,在这种情况下,为防止因内核层出错,导致硬件资源失控,Windows就会停止系统运行,并启用名为KeBugCheck的功能,它通过检查所有中断的处理进程,并同预设的停止代码和参数比较后,就会切换显示为著名的蓝屏,其中就包括了对应的停止码和相关信息。因此这条信息意味着死机,所以被称为“致命的蓝色屏幕”(Blue Screen of Death,简写为BSOD),同时由于这条信息中都会包含有“STOP”字样,所以专家们叫它“STOP信息”或“停止信息”。
形象比喻解读蓝屏
为了便于大家理解,首先在这里对原来讲解过的知识进行一下复习。
F-^L
h B%p,q,G0NT内核的操作系统采用的是分层管理结构(层又称为模式),主要有用户层(User Mode)和内核层(Kernel Mode),我们可以下面这个形象的比喻。
u9]5mZyG v"H0汽车制造厂:整个电脑(包括操作系统、硬件和软件)爱好者博墅#eu@,`2{?m4[%zbH
厂领导:内核层
x'fn4IQ2^9g0生产小组:用户层(软件、驱动程序)爱好者博墅_'t
Tv-Dc(b
汽车装配零件:电脑硬件
KgeF$IpX0值班员:Dr.Watson
+^)Gk$i(n.w0保卫科:KeBugCheck爱好者博墅&T
rX3ZN(_B
平时汽车制造厂运行得有序而高效,每个生产小组加班加点制造各种性能的汽车,但工厂里有个极为严格的规定,那就是不管要用什么装配零件,都必须经过直接控制所有零件的厂领导(具有高特许级别,可以直接访问所有硬件和内存)的批准,之后才能到仓库中提取相应零件,而生产小组只负责生产(只拥有较低权限,不能直接访问硬件和有限地利用内存)。
K6{-v_!?,y(b0有一天,A生产小组没有经过厂领导批准,偷偷跑到仓库里面想拿一个装配零件,但马上就被年年被评为先进的值班员Dr.Watson发现了,于是Dr.Watson立即通知厂领导,这个生产小组的工作马上被停止,而且还在厂宣传栏贴出一个告示:XXX生产小组出现了错误,厂领导决定马上将其关闭、整顿,并会记录在案,以观后效。
u)C)b
|#b7i}8}d[P?0但A生产小组的错误似乎没有引起大家的注意,一天,D生产小组居然闯进仓库哄抢装配零件,为了防止零件资源失控,产生更严重的混乱,厂领导立即决定停止整个工厂的工作,并命令保卫科对所有生产小组进行全面检查,保卫科在检查后为厂领导提交了一份用蓝色纸写的报告(也就是著名的蓝屏信息),这个报告主要分为三部分:爱好者博墅lp@%jg`3h3V
1.故障检查信息
FA
t'zAH0***STOP 0×0000001E(0×c0000005, 0×FDE38AF9, 0×00000001, 0×7E8B0EB4)
-IxFy(m-l"FR0KMODE_EXCEPTION_NOT_HANDLED ***
"|x9G9~{?:T:X0其中错误的第一部分是停机码(Stop Code)也就是0×0000001E(也可以缩写为0×1E),用于识别已发生错误的类型。错误第二部分是被括号括起来的四个数字集,表示随机的开发人员定义的参数(这个参数对于普通用户根本无法理解,只有驱动程序编写者或微软操作系统的开发人员才懂)。第三部分是错误名。信息第一行通常用来识别产生错误的驱动程序或设备。这种信息多数很简洁,但停机码可以作为搜索项在微软知识库和其他技术资料上使用。
,v1P}FX^o|JV02.推荐操作
;FvW0w#ViY,]w0蓝屏第二部分是推荐用户进行的操作信息。有时,推荐的操作仅仅是一般性建议(比如:到销售商网站查找BIOS的更新等);有时,也就是显示一条与当前问题相关提示。一般来说,唯一的建议就是重启电脑。有时,这些蓝屏似乎是随机的,无规则地被那些难得再现的瞬间不兼容性触发。
ESd5xH!T03.调试端口信息爱好者博墅pQGH\,Fa;B?"Lt
告诉用户内存转储映像是否写到磁盘上了,使用内存转储映像可以确实发生的问题性质,还会告诉用户调试信息是否被传到另一台电脑上,以及使用什么端口完成这次通讯。不过,这里的信息对于我们普通用户来说,没有什么意义。爱好者博墅G2v2F,E'C-T ['zG,~
有时候保卫科可以顺利查到是哪个生产小组的问题,会在第一部分明确报告是哪个文件犯的错,但常常它也只能查个大概范围,而无法明确指出问题所在。由于工厂全面被迫停止,只有重新整顿开工,有时,那个生产小组会意识到错误,不再重犯。但有时仍然会试图哄抢零件,于是厂领导不能不重复停工决定(不能启动并显示蓝屏信息,或在进行相同操作时再次出现蓝屏)