紧接着发生的是POST加电自检。POST的主要任务是检测系统中的一些关键设备是否存在、能否正常工作,比如内存和显卡等。由于POST在显卡初始化之前进行,如果发现没有找到内存或内存有问题这类致命错误,屏幕无法显示,系统POST就通过喇叭发声报告错误情况,声音的长短和次数代表错误类型。要注意的是,POST过程只检查640K常规内存。
按下电源键电脑启动的原理是什么?
这一整套流程对应的是计算机打开电源开关或按Reset键进行冷启动时所要完成的各种初始化工作。
CPU和内存的信息会出现在后面。系统BIOS会检测CPU的类型和工作频率,并把结果显示在屏幕上,这就是开机看到的CPU类型和主频。接下来系统BIOS开始测试主机所有的内存容量,同时在屏幕上显示内存测试的数值,也就是屏幕上半部分那个飞速翻滚的内存计数器。
标准硬件检测这一块包括硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备。内存测试通过之后,系统BIOS就开始检测系统中安装的这些标准硬件设备。另外,绝大多数新版本的系统BIOS在这一过程中还会自动检测和设置内存的相关参数、硬盘参数和访问模式等。
其他设备也不能落下。系统BIOS会接着查找其他设备的BIOS程序,找到之后同样调用这些BIOS内部的初始化代码来初始化这些设备。查找完所有其他设备的BIOS后,系统BIOS会显示自己的启动画面,包括系统BIOS的类型、序列号和版本号等内容。屏幕底端左下角还会出现主板信息代码,包含BIOS日期、主板芯片组型号、主板识别编码以及厂商代码等。
先把时间拉回到按下电源键的瞬间:电源开始向主板和其它设备供电,但此时电压还不稳定,主板控制芯片组会向CPU发出Reset信号,让CPU先初始化。等电源供电稳定后,芯片组撤去Reset信号,CPU就从地址FFFF0H开始执行指令。这个地址在系统BIOS范围内,无论是Award BIOS还是AMI BIOS,放在这里的是一条跳转指令,用来跳到系统BIOS真正的启动代码处。
最后才是操作系统启动顺序。ESCD更新完毕后,系统BIOS根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录。分区引导记录负责读取并执行IO.SYS,这是DOS和Windows 9x最基本的系统文件。Windows 9x的IO.SYS首先初始化一些重要的系统数据,然后显示蓝天白云,之后Windows继续进行DOS部分和GUI图形用户界面部分的引导和初始化工作。
即插即用设备的处理方式不同。标准设备检测完毕后,系统BIOS内部的支持即插即用的代码开始检测和配置系统中安装的即插即用设备。每找到一个设备,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。到这一步为止,所有硬件都已经检测配置完毕,系统BIOS会重新清屏,并在屏幕上方显示出系统配置列表,简略列出各种标准硬件设备、它们使用的资源和一些相关工作参数。
显卡这边会由系统BIOS先查找显示卡的BIOS。存放显卡BIOS的ROM芯片起始地址通常在C0000H处,系统BIOS找到显卡BIOS后调用它的初始化代码,由显卡BIOS完成显示卡初始化。大多数显卡这时会在屏幕上显示生产厂商、图形芯片类型、显存容量等信息,这就是开机看到的第一个画面。这个画面常常一闪而过,也有显卡BIOS使用延时功能,方便用户看清显示信息。
有个容易忽略的点是ESCD更新。ESCD是扩展系统配置数据,系统BIOS用它和操作系统交换硬件配置信息,这些数据存放在CMOS中。通常ESCD只在系统硬件配置发生改变后才更新,所以不是每次启动机器都能看到“Update ESCD... Success”这样的信息。但如果某些主板的系统BIOS保存ESCD时使用了与Windows 9x不同的数据格式,Windows 9x启动时会转换格式,下次启动即使硬件没变,BIOS又改回去,就会导致每次启动都要更新一遍ESCD并显示该信息。