打开电源启动电脑几乎是电脑用户们每天必做的事情,但计算机在显示启动画面
的时候都在做什么呢?大多数用户都未必清楚。下面就向大家介绍一下从打开电
源到出现Windows 9x的蓝天白云,计算机到底都干了些什么。
电脑的启动过程中有一个非常完善的硬件自检机制。对于采用Award BIOS的
电脑来说,它在上电自检那短暂的几秒钟里,就可以完成100多个检测步骤。首先
我们先来了解两个基本概念:第一个是BIOS(基本输入输出系统),BIOS实际上就
是被“固化”在计算机硬件中、直接与硬件打交道的一组程序,计算机的启动过
程是在主板BIOS的控制下进行的,我们也常把它称做“系统BIOS”(关于BIOS的
相关知识详见本报第30期、36版)。第二个基本概念是内存的地址,通常计算机
中安装有32MB、64MB或128MB的内存,为了便于CPU访问,这些内存的每一个字节
都被赋予了一个地址。32MB的地址范围用十六进制数表示就是0~1FFFFFFH,其中
0~FFFFFH的低端1MB内存非常特殊,因为我们使用的32位处理器能够直接访问的
内存最大只有1MB,因此这1MB中的低端640KB被称为基本内存,而A0000H~BFFFFH
要保留给显示卡的显存使用的,C0000H~FFFFFH则被保留给BIOS使用,其中系统
BIOS一般占用最后的64KB或更多一点的空间,显示卡BIOS一般在C0000H~C7FFFH
处,IDE控制器的BIOS在C8000H~CBFFFH处。了解了这些基本概念之后,下面我们
就来仔细看看计算机的启动过程。
当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还不
稳定,主板控制芯片组会向CPU发出一个Reset(重置)信号,让CPU初始化。当电源
开始稳定供电后,芯片组便撤去Reset信号,CPU马上就从地址FFFF0H处开始执行
指令,这个地址在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放
在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。
在这一步中,系统BIOS的启动代码首先要做的事情就是进行POST(Power On
Self Test,加电自检),POST的主要任务是检测系统中的一些关键设备是否存在
和能否正常工作,如内存和显卡等。由于POST的检测过程在显示卡初始化之前,
因此如果在POST自检的过程中发现了一些致命错误,如没有找到内存或者内存有
问题时(POST过程只检查640K常规内存),是无法在屏幕上显示出来的,这时系统
POST可通过喇叭发声来报告错误情况,声音的长短和次数代表了错误的类型(常见
POST开机代码详见本报第30期、36版)。
接下来系统BIOS将查找显示卡的BIOS,存放显示卡BIOS的ROM芯片的起始地址
通常在C0000H处,系统BIOS找到显卡BIOS之后调用它的初始化代码,由显卡BIOS
来完成显示卡的初始化。大多数显示卡在这个过程通常会在屏幕上显示出一些显
示卡的信息,如生产厂商、图形芯片类型、显存容量等内容,这就是我们开机看
到的第一个画面,不过这个画面几乎是一闪而过的,也有的显卡BIOS使用了延时
功能,以便用户可以看清显示的信息。接着系统BIOS会查找其他设备的BIOS程序
,找到之后同样要调用这些BIOS内部的初始化代码来初始化这些设备。
查找完所有其他设备的BIOS之后,系统BIOS将显示它自己的启动画面,其中
包括有系统BIOS的类型、序列号和版本号等内容。同时屏幕底端左下角会出现主
板信息代码,包含BIOS的日期、主板芯片组型号、主板的识别编码及厂商代码等
。
接着系统BIOS将检测CPU的类型和工作频率,并将检测结果显示在屏幕上,这
就是我们开机看到的CPU类型和主频。接下来系统BIOS开始测试主机所有的内存容
量,并同时在屏幕上显示内存测试的数值,就是大家所熟悉的屏幕上半部分那个
飞速翻滚的内存计数器。
内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,这些
设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备,另外绝大
多数新版本的系统BIOS在这一过程中还要自动检测和设置内存的相关参数、硬盘
参数和访问模式等。
标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系
统中安装的即插即用设备。每找到一个设备之后,系统BIOS都会在屏幕上显示出
设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
到这一步为止,所有硬件都已经检测配置完毕了,系统BIOS会重新清屏并在
屏幕上方显示出一个系统配置列表,其中简略地列出系统中安装的各种标准硬件
设备,以及它们使用的资源和一些相关工作参数。
接下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系
统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的数据,这些数
据被存放在CMOS中。通常ESCD数据只在系统硬件配置发生改变后才会进行更新,
所以不是每次启动机器时我们都能够看到“Update ESCD... Success”这样的信
息。不过,某些主板的系统BIOS在保存ESCD数据时使用了与Windows 9x不相同的
数据格式,于是Windows 9x在它自己的启动过程中会把ESCD数据转换成自己的格
式,但在下一次启动机器时,即使硬件配置没有发生改变,系统BIOS又会把ESCD
的数据格式改回来,如此循环,将会导致在每次启动机器时,系统BIOS都要更新
一遍ESCD,这就是为什么有的计算机在每次启动时都会显示“Update ESCD...
Success”信息的原因。
ESCD数据更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根
据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将
读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分
区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取
并执行IO.SYS,这是DOS和Windows 9x最基本的系统文件。Windows 9x的IO.SYS首
先要初始化一些重要的系统数据,然后就显示出我们熟悉的蓝天白云,在这幅画
面之下,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工
作。
上面介绍的便是计算机在打开电源开关(或按Reset键)进行冷启动时所要完成的各
种初始化工作,如果我们在DOS下按Ctrl+Alt+Del组合键(或从Windows中选择重
启计算机)来进行热启动,那么POST过程将被跳过去,直接从第三步开始,另外第
五步的检测CPU和内存测试也不会再进行。无论是冷启动还是热启动,系统BIOS都
会重复上面的硬件检测和引导过程,正是这个不起眼的过程保证了我们可以正常
的启动和使用计算机