计算机的启动是一个复杂而完善的过程。
1:基本概念
BIOS:固化在计算机硬件中的一组程序(系统BIOS)。系统的启动是在BIOS的控制下进行的。
内存地址:仅仅讲述1M内的内存情况。这1M内存是计算机能直接访问的,其中1M的低端640K称为常规(基本)内存,其中A0000H~
BFFFFH用于给显示卡的显存使用,C0000H~FFFFFH保留给BIOS使用,系统BIOS一般占用最后的64K,显卡BIOS一般在C0000H~C7FFFH处,IDE控制器的BIOS在C8000H~CBFFFH处。
2:加电
按下电源开关时,电源开始供应电源,但是此时电压不稳定,主板控制芯片组向CPU发送一个Reset信号,CPU开始初始化。但电压稳定后,芯片组撤销Reset信号,CPU立即从地址FFFF0H处开始执行指令。这个地址在系统BIOS内,一般地不管那种BIOS(Award,AMI),这里都只是保存一个JMP指令,用来跳转到真正的启动代码保存的地方。
3:POST
跳转之后,系统BIOS的启动代码首先进行加电自检(Power On Self Test),POST过程是在显示卡初始化之前,因此屏幕上面不能有输出,所以只好用声音来提示是否有错误等信息了。POST仅仅检查640K的基本内存。如果POST在对内存和显卡等关键设备检查的时候出现错误,将用PC喇叭来提醒,根据错误的不同,PC喇叭的声音的长短和次数都不同。如果没有错误,PC喇叭就发出清脆的"嘟"的一声!
3:显示卡的初始化
"嘟"的一声之后,系统BIOS查找显示卡的BIOS,存放显示卡的BIOS的ROM芯片的地址通常在C0000H处,系统找到之后,调用它的初始化代码,由显示卡BIOS来进行显卡的初始化。一般显示卡会在这个时候显示显卡的一些基本的信息例如生产厂家,图形芯片的类型,显存容量等等。这就是我们看到的第一个画面,不过一般这个画面速度很快,一闪而过。
4:其他设备的初始化
显示卡初始化之后,系统BIOS查找其他设备的BIOS,调用他们的BIOS来进行初始化!过程类似显示卡的初始化。
5:BIOS启动画面
初始化其他所有的设备之后,系统BIOS显示自己的启动画面,例如BIOS的版本,类型,序列号等等。同时在屏幕的下面显示BIOS的日期、主板芯片组型号、主板编码和厂商代码等等。
6:CPU和内存自检
接下来系统BIOS将检测CPU的型号和工作频率,并且显示在屏幕上面,就是我们开机看到的那个关于CPU的信息了。检测CPU之后,系统BIOS检测所有的内存,同时在屏幕上面显示内存测试的数值(大家非常熟悉的那个快速翻滚的计数器了),不过可以在CMOS中进行设置时候检测所有的内存,就是那个Quick POST On Power了。也有的CMOS中显示为禁止检测1M以上的内存。一般如果检测内存的话,需要检测3次,如果内存很多,将耗费大量的时间。
7:标准设备检测
内存测试之后,系统BIOS开始检测系统中安装的一些标准硬件设备,例如硬盘、CD-ROM、软驱、串口和并口,新版的BIOS还要检测内存的固化的一个芯片,里面保存了内存的一些相关参数,还有硬盘的一个固化的芯片,里面保存了硬盘的缓存容量、参数和访问模式等等。
8:PNP设备配置
标准设备检测完成之后,系统BIOS内支持PNP设备的代码开始检测和配置系统中的PNP设备,每找到一个设备,系统都会显示设备的名称和型号等信息,同时为这个设备分配中断、DMA通道和I/O端口等资源。
9:显示检测结果
OK,到这一步,系统可以说基本上已经引导完毕了,系统BIOS会清除屏幕,并给出一个系统配置列表,就是在启动OS之前的那个简单的表格了。
10:ESCD
接下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据),ESCD是用来和OS交换硬件配置信息的。ESCD数据保存在CMOS中。通常ESCD数据只是在系统硬件配置发生改变才会更新的,所以不是每次开机都能开到那个检测结果表格下面的那个"Update ESCD...Success"信息的。需要注意的是,有的BIOS使用和OS不同的ESCD数据格式,因此OS在启动的时候会改变CMOS中的ESCD数据,这样系统在下次启动的时候发现ESCD数据不相同了,于是又更新ESCD数据,这就是为什么有的机器每次启动的时候都能看到"Update ESCD...Success"的原因了。
11:Load OS
完成上面的复杂的步骤之后,系统BIOS进行最后一部的工作。根据用户在CMOS中设定的启动顺序,从软盘或者光盘或硬盘的引导操作系统。例如以硬盘为例,系统BIOS读取并且执行硬盘的主引导程序,主引导程序从分区表中找到第一个活动分区,然后读取这个分区的引导记录,分区引导程序负责读取系统的引导程序,完成系统的引导!以DOS(Win9x)为例:分区引导记录读取并且执行IO.SYS,IO.SYS负责下面的一系列同样复杂的引导工作!有空的时候给大家讲解一下OS的Load过程吧。:)
12:写在后面的话
关于热启动,热启动的话,系统不过进行POS过程,内存和CPU自检也被忽略,其他的都一样。
本文根据 郭兆颖的《详细了解计算机的启动过程》整理而成。原载:《电脑界隐用文萃》20001.5期