1.固件的初始化,尝试进入BIOS
当按下电源键,电源向主板以及其它设备开始供电;由于当前电压不够稳定,主板控制芯片组会向CPU发送一个RESET信号对CPU内部进行初始化,当芯片组检测到电源稳定供电后撤除RESET信号,CPU开始执行指令。电源刚接通后,处理器处于实模式(real mode)并且禁止了内存分页机制,且只有1MB的可用存储地址空间。启动时寄存器的初始化,保存着CPU执行指令地址的地址寄存器(EIP)指向的是0xFFFFFFF0(4GB存储空间的最后16字节),这个地址被称为reset vector,是一条到BIOS程序入口的跳转指令。(此处无论任何厂商的架构都是一样的)
2.执行BIOS程序
2.1.进行通电自检(Power-on Self Test – POST)
POST的主要任务是检查系统中一些关键设备是否存在和是否正常工作,例如内存和显卡等设备
2.2.关键设备测试
POST会首先进行关键设备(电源、CPU芯片、BIOS芯片、定时器芯片、数据收发逻辑电路、DMA控制器、中断控制器以及基本的64K内存和内存刷新电路等)测试,检查这些设备是否存在和能否正常工作。由于POST是最早进行的检查过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了些致命错误,例如没有找到内存或内存有问题(此时只会检查640KB常规内存),那么系统BIOS就会直接控制嗽叭发生声音来报告错误,声音的长短和次数代表了错误的类型.在正常情况下,POST过程进行的非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整的硬件检测。
2.3.初始化各种组件
等待关键设备测试结束后会按照如下流程检测计算机的众多组件,并进行初始化。显卡->其它控制卡->CPU内存->其它设备。整理所有可用的资源——中断、内存大小、PCI设备的I/O端口。
2.3.1系统BIOS将首先查找显卡的BIOS,存放显卡BIOS的ROM芯片的初始地址通常设在C0000H,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码来初始化显卡,此时多数显卡都在屏幕上显示出一些初始化信息,介绍生产厂商,图形芯片类型等内容,不过这个画面几乎是一闪而过。
2.3.2系统BIOS接着会查找其它设备的BIOS程序,找到之后同样会调用这些BIOS内部的初始化代码来初始化相关的设备。
2.3.3查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BISO的类型,序列号和版本号等内容.。
2.3.4接着系统BIOS将检查和显示CPU的类型和工作频率,然后开始测试所有RAM,并同时在屏莫显示内存测试的速度,用户可以在CMOS设置中自行决定使用简单耗时少或详细耗时多的测试方式.
2.3.5内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘,CD-ROM,串口,并口,软驱等设备,另外绝大数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数,硬盘参数和访问模式等.
2.3.6标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
2.7标准设备检查完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断,DMA通道和I/O端口等资源。
到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其它概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
2.4更新ESCD
接下来系统BIOS会更新ESCD(Extended systemconfiguration data,扩展系统配置数据.)ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS之中,通常ESCD数据只在系统配置发生改变后才会更新,所以不是每次启动电脑时都能够看到"updata ESCD …Success"这样的信息,
不过某些主板的系统BIOS在保存ESCD数据时使用了与widnwos 9x不相同的数据格式,于是widnwos 9x在启动过程中会把ESCD数据修改成自己的格式,但在下一次启动时,既使硬件配置没有发生改变,系统BIOS也会把ESCD的数据格式修改回来,如此循环,将会导致在每次启动电脑时,系统BIOS都要更新一遍ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。
2.5引导进入系统
ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软件,硬件或光驱启动,以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的引导记录,而分区引导记录将负责读取并执行IO.SYS这是DOS和widnows 9x的IO.SYS(或NT的NTLDR)首先要初始化一些重要的系统数据,然后将显示出我们熟悉的蓝天白云,在这幅画面之下,widnwos将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作.
完成POST之后,BIOS需要在硬盘、光驱、软驱等地方搜寻操作系统内核的位置以启动操作系统。
若是从硬盘启动,则将主引导记录(硬盘的第一个扇区)载入到内存地址0x7c00的位置并且跳转到这一地址开始执行MBR中的指令。
3.内容总结
上面介绍的便是计算机在打开电源开关(或按Reset键)进行冷启动时所要完成的各种初始化工作,如果我们在DOS下按Ctrl +Alt+Del组合键(或从Windows中选择重新计算机)来进行热启动,那么POST过程将被跳过去,另外检测CPU和内存测试也不会再进行。无论是冷启动还是热启动,系统BIOS都会重复上面的硬件检测和引导过程,正是这个不起眼的过程保证了我们可以正常的启动和使用计算机。