我们每天使用计算机必须要经过的一个步骤就是启动了,但是,你是否知道计算
机到底是怎样启动的呢?或许,你会认为这并不重要,是的,对于我们一般人而
言,它确实不重要,事实上,我们更关心它启动得有多快,但是,这却实在是一
个很“基本”的问题,每天都在用计算机,却不知道它是怎样启动的,似乎总感
觉有些别扭(当然了,多数人都不知道的话也就没什么好别扭的了)。下面就为
大家介绍一下我们使用的计算机到底是怎样启动起来的,由于这个问题比较大,
我将它分为了两部分来介绍,这样可能比较好接受一些。这次只介绍前半部分(即
和操作系统无关的部分)。另外,为方便大家理解,我特意制作了相关的流程图,
建议大家对照着看。
如果你愿意了解一下,希望你能通过下面的介绍弄懂这个问题,如果你没
什么兴趣,也没关系,毕竟,它是个比较边缘的东西,不太了解也行。
像大多数介绍此知识的文章一样,这里还是需要先介绍一下两个基本而重
要的概念。
BIOS:即“Basic Input/Output System”(基本输入输出系统),它是
一组被“固化”在计算机主板上的一块 ROM 中直接关联硬件的程序,保存着计算
机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动
程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制,它包括
系统 BIOS(主板 BIOS).其它设备 BIOS(例如 IDE 控制器 BIOS、显卡 BIOS 等)
其中系统 BIOS 占据了主导地位.计算机启动过程中各个 BIOS 的启动都是在它的
控制下进行的.
内存地址:我曾在虚拟内存的介绍中提到过它,我们知道,内存空间的最
基本单位是位,8 位视为一个字节,即我们常用的单位 B,内存中的每一个字节
都占有一个地址(地址是为了让 CPU 识别这些空间,是按照 16 进制表示的),
而最早的 8086 处理器只能识别 1MB(2 的 20 次方 B)的空间,这 1MB 内存中低
端(即最后面)的 640KB 就被称为基本内存,而剩下的内存(所有的)则是扩展
内存。这 640KB 的空间分别由显存和各 BIOS 所得。
现在正式开始介绍计算机的启动过程(从打开电源到操作系统启动之前)
1、当电源开关按下时,电源开始向主板和其他设备供电,此时电压并不
稳定,于是,当主板认为电压并没有达到 CMOS 中记录的 CPU 的主频所要求的电
压时,就会向 CPU 发出 RESET 信号(即复位,不让 CPU 进一步运行),不过仅一
瞬间不稳定的电压就能达到符合要求的稳定值,此时复位信号撤销,CPU 马上从
基本内存的 BIOS 段读取一条跳转指令,跳转到 BIOS 的真正启动代码处,如此,
系统 BIOS 启动,此后的过程都由系统 BIOS 控制。
2、系统 BIOS 启动后会进行加电自检 POST(Power On Self Rest)。不
过这个过程进行得很快,它主要是检测关键设备(如电源、CPU 芯片、BIOS 芯片、
基本内存等电路是否存在以及供电情况是否良好。如果自检出现了问题,系统喇
叭会发出警报声(根据警报声的长短和次数可以知道到底出现了什么问题)。
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
3、如果自检通过,系统 BIOS 会查找显卡 BIOS,找到后会调用显卡 BIOS
的初始化代码,此时显示器就开始显示了(这就是为什么自检失败只能靠发声进
行提醒了)。显卡 BIOS 会在屏幕上显示显卡的相关信息(不过现在的笔记本似
乎并不显示这个)。
4、显卡检测成功后会进行其他设备的测试,通过后系统 BIOS 重新执行自
己的代码,并显示自己的启动画面,将自己的相关信息显示在屏幕上,而后会进
行内存测试(这些在现在的计算机上也看不到了),仅仅是短暂出现系统 BIOS
设置页面,此时就可以对系统 BIOS 进行需要的设置了,完成后会重新启动。
5、此后 BIOS 会检测系统的标准硬件(如硬盘、软驱(虽然现在很多计算
机已没有软驱了)、串行和并行接口等),检测完成后会接着检测即插即用设备,
如果有的话就为该设备分配中断、DMA 通道和 I/O 端口等资源,到了这里,所有
的设备都已经检测完成了,老机会进行一次清屏并显示一个系统配置表,如果和
上次启动相比出现了硬件变动,BIOS 还会更新 ESCD,即“Extended System
Configuration Data”(扩展系统配置数据),它是系统 BIOS 用来与操作系统
交换硬件配置信息的数据,这些数据被存放在 CMOS 中。现在的机器则不再显示
这些了。
6、当上面的所有步骤都顺利进行以后,BIOS 将执行最后一项任务:按照
用户指定的启动顺序进行启动(即我们经常需要用到的设置系统从哪里启动,一
般默认是硬盘,如果需要安装系统,还会设置为光驱或 USB 设备),注意,这里
是指的启动顺序,如果设置为从光驱启动,而光驱中又没有光盘的话,系统还是
会接着从硬盘启动的。
至此,操作系统启动之前的所有启动步骤都完成了,如果从硬盘启动的话,
接着就是操作系统的启动过程了,关于这一部分,不同的系统也是存在差别的,
我们谨以 xp 和 vista 为例,由于内容较多,就下一次再介绍吧。
下面是上面的启动过程的流程图,对照此图理解上面的内容可能会更方便
些:
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
操作系统启动之前的计算机启动过程我已经在《计算机启动过程图文详解(一)----计算机初始化启动过
程》一文中详细介绍过,今天就介绍一下初始化启动后的操作系统的启动过程。
我们只介绍 Windows 系统的启动,由于 vista 和 windows7 操作系统的启动采用了全新的方式,所
以这里需要对 xp 和 Vista(Windows7 与之基本相同)分别介绍。为了不至于导致大家看不明白,我只
介绍一个大概的过程。
xp 系统的启动
当系统 BIOS 完成初始化后,会将控制权交给主引导纪录(即 MBR:Master Boot Record),MBR
会检查硬盘分区表,找到硬盘上的引导分区,然后将引导分区上的操作系统引导扇区调入内存,并执行其
NTDLR 文件。
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
NTDLR 会将微处理器从实模式(此模式下计算机认为内存为 64KB,其他未扩展内存)转换为 32 位
的平面内存模式(此模式下认为 CPU 可识别的所有内存均是可用内存)。然后,NTDLR 启动 mini-file
system drivers 以便它能够识别所有采用 NTFS 和 FAT(FAT32)文件系统的硬盘分区。
此后 NTLDR 会读取 boot.ini 文件,以决定应该启动哪一个系统,如果 boot.ini 中仅显示了一个系统
或者将 timeout(系统选择页面停留时间)参数设为 0 的话,这个系统选择页面就不会出现而是直接启动
默认的系统。
而如果 boot.ini 中含有多个启动引导项,当选择了不同的系统后计算机接下来的启动流程就会产生区
别,如果选择的不是 xp,NTLDR 会读取 bootsect.dos 来启动相应系统,如果选择了 xp 的话,就会接着
转入硬件检测阶段。
在这个阶段,ntdetect.com 会收集计算机的硬件信息列表并将其返回到 NTLDR 中,以便以后将这些
信息写入注册表(具体而言是 HKEY_LOCAL_MACHINE 下的 hardware)中。
然后会进行硬件配置选择,如果计算机含多个硬件配置,会出现配置选择页面,如果仅有一个的话,
系统直接进入默认配置。
此后开始加载 xp 内核,NTLDR 首先加载 ntoskrnl.exe(即 xp 系统内核),不过此时并未初始化内
核,而是紧接着加载了硬件抽象层(即 HAL,一个 hal.dll 文件),然后加载底层设备驱动程序和需要的
服务。
完成这些后才开始初始化内核,此时我们就能看到 xp 的 LOGO 和启动进度条了,在进度条运动的过
程中,内核使用刚才 ntdetect.com 收集到的意见配置信息创建 HKEY_LOCAL_MACHINE 的 hardware
键。然后创建计算机数据备份,初始化并加载设备驱动程序,Session Manager 启动 xp 的高级子系统及
其服务并有 win32 子系统启动 Winlogon 进程。
Winlogon.exe 会启动 Local Security Authority,此时会显示 xp 的欢迎屏幕或者登陆确认框(如果
设置了多账户或密码的话)。这个时候,系统还在继续初始化刚才没有完成的驱动程序。
欢迎屏幕结束或者用户正确登陆后, Service Controller 最后还需要检查是否还有服务需要加载并进
行加载。此后 xp 桌面出现,系统启动完成。
Vista(Windows7)的启动
Vista 和 Windows7 的启动过程就简单多了(其实是将启动步骤进行了简化),它采用了全新的启动
方式。具体如下:
MBR 得到控制权后,同样会读取引导扇区,以便启动 Windows 启动管理器的 bootmgr.exe 程序,
Windows 启动管理器的 bootmgr.exe 被执行时就会读取 Boot Confi guration Data store(其中包
含了所有计算机操作系统配置信息)中的信息,然后据此生成启动菜单,当然,如果只安装了一个系统,
启动引导选择页不会出现,而如果安装并选择了其他系统,系统就会转而加载相应系统的启动文件。
启动 Vista 时,同样会加载 ntoskrnl.exe 系统内核和硬件抽象层 hal.dll,从而加载需要的驱动程序和
服务。
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com
内核初始化完成后,会继续加载会话管理器 smss.exe(注意,正常情况下这个文件存在于
Windows/system32 文件夹下,如果不是,很可能就是病毒)。
此后,Windows 启动应用程序 wininit.exe(正常情况下它也存在于 Windows/system32 文件夹下,
如果不是,很可能是病毒)会启动,它负责启动 services.exe(服务控制管理器)、lsass.exe(本地安全授权)
和 lsm.exe(本地会话管理器),一旦 wininit 启动失败,计算机将会蓝屏死机。
当这些进程都顺利启动之后,就可以登录系统了。至此,Vista(Windows7)启动完成。
另外,补充一点小知识:我们知道,在 Vista 或 Windows7 系统下安装 xp 后,开机时就会直接启动
xp,并不出现系统启动的选择页,这是因为安装 xp 时,它会重写 MBR 而将 Vista 或 Windows7 的引导
记录覆盖掉,而在xp下安装Vista 或 Windows7 后就不存在这个问题了,这是因为虽然Vista 和 Windows7
虽然也会覆盖引导记录,但是它也会将原有的引导程序保存,引导权虽然同样被 Vista 或 Windows7 抢夺,
但由于它们支持跳转到以前的引导程序上,所以可以直接显示多系统页面。
最后,由于时间关系,我没有专门制作流程图,就附上找到的一张系统启动流程图吧。此图比较简单,
并没有列出全部的启动流程,但附带了计算机初始化启动的过程,比较全面了。如图:
Created with SmartPrinter trail version www.i-enet.com
Created with SmartPrinter trail version www.i-enet.com