以前 Windows 经常用着用着就蓝屏了,现在很少发生
图片:Chen Zhao / CC BY
为什么早期的 Windows 经常死机蓝屏,而现在却很少发生了?
经常蓝屏是 95/98 那系列的内核,为了混合使用 16 和 32 做了很多奇怪的事情,为了能在 4M 内存的 386 上跑,做了更多奇怪的事情。很多有趣的老东西可以在这里看到 The Old New Thing (当然,该作者最近开始评论他老婆看非诚勿扰的事情,忽略就是了)。为了达到这一点,kernel 的验证比较少(为了低配置的效率),程序的崩溃很容易造成 kernel 级别的崩溃,也就是蓝屏。再加上当时的驱动基本都是内核态的,第三方驱动的实现经常很差,驱动崩溃也蓝屏。
2k 以后用了 nt 内核,就好得多了。nt 内核原先的目标就是服务器等需要可靠计算的地方。从创立初期就把 debug 能力和稳定性放入要求中,比 95 稳定是必然的。但 2k/xp 的驱动模型还是以内核态为主,后期才大量引入用户态驱动。
到了 vista+ 的时候,驱动已经是用户态为主,内核态就留一个和硬件打交道的小模块。并且连显存分配之类本来应该有驱动完成的事情,都变成由 windows 完成,降低了不同厂商的驱动质量造成的差别。虽然一开始很痛苦,但过了这个坎之后 win7+ 就好了很多。用户态驱动崩溃的话,也就是程序关闭,不会蓝屏。再加上有 TDR 机制,系统检测到设备驱动有问题,就强制重启那个驱动,而不是由它蓝屏。
其实到现在(Win10),根据统计,98% 的蓝屏来自于第三方驱动。以后发展的目标是,尽量减少第三方驱动的影响,不管是通过把驱动模型变成 windows 为主第三方只负责具体和硬件打交道的接口,还是让第三方提供驱动源代码。以后蓝屏会进一步减少。比如,3D 打印机驱动里面,绝大部分代码,包括把模型分解成 voxel、模型拼接、喷点路径之类,都是属于 windows,厂商提供的驱动也就是把一个 voxelize 过的路径喷出来。
(顺便吐槽一下猪队友 Intel,搞的什么驱动,sp4 的显卡驱动和网卡驱动,简直是用脚趾头写的,出厂不测啊)
转载请注明:微图摘 » 以前 Windows 经常用着用着就蓝屏了,现在很少发生