2

超能课堂(273):电脑开机时都干了些什么

 2 years ago
source link: https://www.expreview.com/79150.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
本文约 2070 字、3 张图表,需 4 分钟阅读

如果你们的主板上有Debug LED等和简易Debug灯的话,在开机的时候可以观察一下,在显示器有东西显示之前这些Debug灯都会在一直跳动,如果卡在某个地方不动的话,恭喜你,有东西出问题了。

amibios.jpg
传统的AMI BIOS自检,图片来源:wikipedia

电脑开机的必备步骤:上电自检

你看到的这个过程其实就是电脑的上电自检Power On Self Test,简称POST,这是计算机接通电源后系统进行的一个自我检查的例行程序,其实许多电子设备都有这个自检过程,当然我们这里只讨论PC的,POST自检是设备预引导序列的一部分,自检成功的话结果会显示在屏幕上,当自检完成后BIOS就会进入下一个步骤,从硬盘、光盘、移动设备或网络驱动器上寻找操作系统进行启动,PC控制权会交给操作系统。

上电自检是有BIOS所执行的,当然有些外围设备自带BIOS的会让他们自己检查,比如显卡和SCSI设备,这时你就会看到自检过程中多了一两个画面。

post.jpg
现在主板的自检界面已经相当简化

上电自检期间主板BIOS的主要基本职责包括:

验证CPU寄存器
验证BIOS自身的完整性
验证一些基本组件,例如DMA、计时器、中断控制器
初始化、调整和验证系统内存
初始化BIOS
把控制器交给其他扩展卡的BIOS
识别与选择可用于引导的设备

而现在设备的主板BIOS上,POST自检还包括:

初始化芯片组
查找、初始化和分类所有系统总线与设备
提供用于系统配置的用户界面
构建目标操作系统所需要的系统环境

上电自检的过程

当你按下电源键后,系统就会启动上电自检程序,在此期间系统的控制权在BIOS上。刚开机的时候电压还不稳定,主板就会通过芯片组向CPU发出一个RESET信号,此时CPU会初始化,同时会等待电源发出的POWER GOOD信号,这段时间其实只有短暂的瞬间,当电压稳定后就会撤去RESET信号。

随后CPU就会从地址FFFF0H处执行指令,而这个地址是在主板BIOS的范围内的,无论是什么哪种BIOS放在这里的都是一条跳转指令,就是跳转到BIOS的启动代码,而这个启动代码要做的第一个事情就是执行上电自检,检查PC的硬件设备工作状态是否正常。

上电自检的大致过程为:Power——CPU——ROM——BIOS——System Clock——DMA——64KB RAM——IRQ——显卡等非关键设备,I/O口、软硬盘驱动器、鼠标键盘、即插即用设备以及CMOS设置等都排在显卡的后面,通常显卡通过测试后屏幕就会亮起,并且在屏幕上显示各种信息。

Z590_ACE-7m.jpg
主板上的DeBug LED

这个过程是逐一进行的,每个设备都有一个POST Code开机自我检测代码,在对某个设备进行检查时就会把这个自我检测代码写入诊断端口,检测通过后就会送入另一个设备的代码,如此重复。

如果某个设备检测没有通过,它的POST Code就会在检测端口保留下来,而检测程序也会终止,并会发出警报,看到这里你应该已经明白DeBug卡上面的两个数字是怎么来的了,如果你有接蜂鸣器的话还能听到警报声,通过DeBug卡或者蜂鸣器的声音就能比较快速的找到问题的所在位置,并进行修理。

其实在早期的电脑上,上电自检其实是会对所有设备进行全面的测试的,包括完整的内存测试。这其实是继承了IBM在大型机上的设计,不过随着PC逐渐发展为一种个人的消费级设备,大多数产品都放弃了这种高可靠性功能,内存的奇偶校验和全面检测被放弃了,因为这一过程非常的长,而且随着内存容量的指数膨胀,这时间只会逐渐让人无法接受。

最初的IBM PC最少内存容量只有16KB,而通常的产品容量是在64到640KB之间,当时使用的8088 CPU频率只有4.77MHz,完成上电自检大概耗时5秒到一分半钟,而且无法跳过内存扫描,从IBM XT开始上电自检期间会显示内存计数器,而不是之前的空白屏幕。在上世纪80年代人们开始关注启动时间,光内存自检就要30到60秒其实是很让人不爽的,所以从哪个时候开始,兼容机的BIOS里面就多了个设置,运行用户通过按一个按键跳过内存自检。

而现在的电脑基本都不会进行内存自检了,现在的内存比以前可靠多,除非BIOS里面有着设置而且你还把它打开了。此外现在的BIOS在执行上电自检前会确定其执行原因,如果是冷启动的话就可能执行全部操作,但如果是休眠唤醒或者开启了快速启动的话,就会跳过标准的上电自检程序,直接从预设的系统设备列表中加载设备即可。

为什么不同主板的自检时间有差异

用过HEDT平台的朋友应该都有体验,就是X99/X299这类主板启动速度明显是要比普通Z字头或者B字头主板要慢的,原因嘛,其实就是HEDT平台的可扩展能力更强,上面的东西更多所以需要自检的时间更长罢了,其实如果把主板的RAID功能开启,或者安装RAID卡,或安装某些PCI-E SSD的话,自检速度会更慢。

此外AMD平台启动要比Intel平台慢这个估计也有许多人发现了,其实在AMD主板上BIOS启动前还有个叫AGESA的东西,在AGESA 1.0.0.4之前开机自检时间确实非常的长,这也导致了大家对AMD平台启动慢的印象,当然现在新版的启动时间已经大幅缩短,不比Intel平台慢多少。

现在的平台开机上电自检时间已经非常短,如果BIOS设置与上次启动是一致的话自检时间是非常快的,再加上现在基本上厂家都用开机Logo替换了自检界面,不把这东西关掉的话根本看不到自检报告画面,这一过程已经逐渐被大家忽略了它的存在,但它每次开机都在默默的运行。

当然如果你感觉到某次自检特别慢,如果你没加任何硬件的话,那多数是什么地方出问题了,比如莫名的超频失败CMOS重置,或者是什么地方松了导致开机卡住,这些时候就就会感觉到上电自检的存在。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK