您的位置:首页 > 理论基础

计算机启动过程

2013-05-16 11:51 295 查看
今天被室友问起计算机的启动过程,突然想起大一的时候做过一个ppt,讲计算机的维修,那里面详细的讲述了计算机的启动过程。当时,没有博客所以也就没有写出来。现在,有博客了,就想把它博客化了。

关于计算机是如何启动的这个话题,总让我有一种很古老的感觉,虽然,直到今日PC依然以这样的方式来启动。只能说,现在的程序越写越高层,这样底层的事情确实无需关心。结果也就是像这方面的内容在网络上并不好找,很多资料也不是很详细。但是,总有一些喜欢“考古”的人,比如我,就喜欢看这些古老的东西。在此分享一下我所知道的。但难免有我不知道的,或理解错误的。

计算机上电

当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还不太稳定,主板上的控制芯片组会向CPU发出并保持一个RESET(重置)信号,让CPU内部自动恢复到初始状态,但CPU在此刻不会马上执行指令。当芯片组检测到电源已经开始稳定供电了(当然从不稳定到稳定的过程只是一瞬间的事情),它便撤去RESET信号(如果是手工按下计算机面板上的Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号),CPU马上就从地址FFFF0H处开始执行指令,从前面的介绍可知,这个地址实际上在系统BIOS的地址范围内,无论是Award
BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。(这里有个小小的bug,CPU从0xFFFF_FFF0开始执行,0xFFFF_FFF0位置是将BIOS中的ROM中映射到那里,那里其实也就是一条跳转指令,它会跳转到1M一下的地址来执行。实际情况可能更加复杂。BIOS的ROM其实只映射到了最高的内存地址上,而且它的大小可能超过了64K(据说是3M差不多),也就是底下的1M空间是不够它映射的。如果是这样,那么它为什么要跳到下面去执行呢?它执行的又是什么呢?之所以要跳到下面去执行是为了兼容8086的机器,因为它的BIOS就是在1M以下的地址。它执行的也是BIOS中的代码,只不过在机器开启的时候,他就已经将BIOS中的一部分代码映射到了1M以下的地址上,但是不是全部BIOS代码。跳到这个代码执行后,这部分的代码会将BIOS中的代码从最高地址空间的BIOS代码拷贝到1M以下来执行。这里还有一个技术叫shadow
memory。本来很多1M以下的内存地址空间的都是映射到ROM上的。但是,ROM的读速度是比较慢的。BIOS的代码中会将它这部分的地址空间映射到一段RAM,拷贝代码到它上面,将其改为只读。)总之,它会表现的像8086那样启动,所以,就算是想象成之前说的那种简单的启动模式,也没有什么太大的问题。

加电后自检

系统BIOS的启动代码首先要做的事情就是进行POST(Power-On Self Test,加电后自检),POST的主要任务是检测系统中一些关键设备是否存在和能否正常工作,例如内存和显卡等设备。由于POST是最早进行的检测过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了一些致命错误,例如没有找到内存或者内存有问题(此时只会检查640K常规内存),那么系统BIOS就会直接控制喇叭发声来报告错误,声音的长短和次数代表了错误的类型。在正常情况下,POST过程进行得非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整的硬件检测。

BIOS

先跳开介绍一下bios。

BIOS全名叫(basic input output system)即基本输入/输出系统,是计算机中最基础的而最重要的程序。它为计算机提供最低级的、最直接的硬件控制,计算机的原始操作都是依照固化在BIOS里的内容来完成的。



BIOS是由Firmware(固件)和ROM(Read Only Memory,只读存储器)芯片组成的。Firmware 是一个软件,但与普通软件完全不同,它是固化在集成电路内部的程序代码,集成电路的功能就是由这些程序决定的。ROM是这些程序的载体。也就是Firmware被写入(也叫固化)到ROM中。(例子:CIH)

CMOS和BIOS关系

CMOS的本意是互补金属氧化物半导体存储器,是一种大规模应用于集成电路芯片制造的原料。在计算机中是主板上的一块可读写的RAM芯片,用来保存当前系统的硬件配置和用户对某些参数的设置。CMOS由主板的电池供电(还供电主板实时时钟)。它只有数据保存功能。早期的CMOS设置程序驻留在软盘上,使用不方便。现在厂家将CMOS设置的程序做到了BIOS芯片中,开机按相应的键就可以进入CMOS设置(同时也叫做BIOS设置)。

BIOS设置



BIOS报警声音大全

AWARD的BIOS报警声:
次数 内涵
1短: 系统正常启动。这是我们每天都能听到的,也表明机器没有任何问题。
2短: 常规错误,请进入CMOS Setup,重新设置不正确的选项。
1长1短: RAM或主板出错。换一条内存试试,若还是不行,只好更换主板。

1长2短: 显示器或显示卡错误。

1长3短: 键盘控制器错误。检查主板。

1长9短: 主板Flash RAM或EPROM错误,BIOS损坏。换块Flash RAM试试。

不断地响(长声): 内存条未插紧或损坏。重插内存条,若还是不行,只有更换一条内存。

不停地响: 电源、显示器未和显示卡连接好。检查一下所有的插头。

重复短响: 电源问题。

无声音无显示: 电源问题。

系统设备初始化:

回来继续讲启动过程。

接下来系统BIOS将查找显卡的BIOS。存放显卡BIOS的ROM芯片的起始地址通常设在C0000H处,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码,由显卡BIOS来初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容,不过这个画面几乎是一闪而过。(对于笔记本而言,一般这个时候会有一张厂商的LOGO,将这些输出都盖掉了,所以什么也看不到。但是,可以进bios设置,改掉这个。)系统BIOS接着会查找其它设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。



同时按下Shift+Pause即可将画面停留,按任意键继续

系统设备测试

CPU & RAM

查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BIOS的类型、序列号和版本号等内容。

接着系统BIOS将检测和显示CPU的类型和工作频率,然后开始测试所有的RAM,并同时在屏幕上显示内存测试的进度,我们可以在CMOS设置中自行决定使用简单耗时少或者详细耗时多的测试方式。





标准设备

内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。

即插即用设备

标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。



资源列表

到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。



更新ESCD

接下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中。通常ESCD数据只在系统硬件配置发生改变后才会更新,所以不是每次启动机器时我们都能够看到“Update ESCD… Success”这样的信息,不过,某些主板的系统BIOS在保存ESCD数据时使用了与Windows 9x不相同的数据格式,于是Windows
9x在它自己的启动过程中会把ESCD数据修改成自己的格式,但在下一次启动机器时,即使硬件配置没有发生改变,系统BIOS也会把ESCD的数据格式改回来,如此循环,将会导致在每次启动机器时,系统BIOS都要更新一遍ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。

选择设备启动

ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从U盘、软盘、硬盘、网络或光驱启动。这是BIOS代码中的最后一个步骤。

磁盘逻辑结构

MBR

又跳开讲点别的。

MBR,全称为Master Boot Record,即硬盘的主引导记录。 为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区(引导程序、分区表及分隔标识),也就是上面所说的主引导记录;而狭义的MBR仅指引导程序而言。

硬盘的0柱面、0磁头、1扇区称为主引导扇区(也叫主引导记录MBR)。它由三个部分组成,主引导程序、硬盘分区表DPT(Disk Partition table)和硬盘有效标志(55AA)。在总共512字节的主引导扇区里主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。





OBR

OBR(OS Boot Record)即操作系统引导扇区,通常位于硬盘的0柱面1磁头1扇区(这是对于DOS来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB(BIOS Parameter Block)的本分区参数记录表。其实每个逻辑分区都有一个OBR,其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件(例如MSDOS或者起源于MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一个文件读入内存,并把控制权交予该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元(Allocation
Unit,以前也称之为簇)的大小等重要参数。OBR由高级格式化程序产生(例如DOS 的Format.com)。

也有叫DBR(Disk Boot Record),PBR(Partition Boot Record),都是差不多的概念。

分区问题

主分区,也称为主磁盘分区,和扩展分区、逻辑分区一样,是一种分区类型。主分区中不能再划分其他类型的分区,因此每个主分区都相当于一个逻辑磁盘(在这一点上主分区和逻辑分区很相似,但主分区是直接在硬盘上划分的,逻辑分区则必须建立于扩展分区中)。

实际上在早期的硬盘分区中并没有主分区、扩展分区和逻辑分区的概念,每个分区的类型都是现在所称的主分区。由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故主引导扇区中总计只能存储4个分区的数据。也就是说,一块物理硬盘只能划分为4个逻辑磁盘。在具体的应用中,4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,引入了扩展分区和逻辑分区,并把原来的分区类型称为主分区。 在扩展分区中,逻辑分区通过链表的方式连接在一起。

整个磁盘的结构



启动磁盘

继续回来启动过程,这里以最常用的的磁盘作为启动设备为例。

BIOS中最后一项,就是将控制权交给第一启动盘的MBR中的引导程序,(此处为磁盘,因为磁盘也有可能有多个,所以bios设置里面还需要设置哪个磁盘是第一启动盘。)引导程序会在分区表中寻找活动分区,并将控制权交给活动分区的第一个扇区的引导程序(boot Loader),也就是上面的DBR中的boot loader。boot Loader 会执行相应的代码,不同操作系统不相同。

不同bootloader的加载方式

ntldr(使用在NT5(win 2000,XP))

OBR中的引导程序(boot Loader)会寻找并加载根目录下的ntldr,ntldr会打开根目录下的boot.ini,boot.ini中有各种操作系统的位置和选择项。当选择NT 5系列的操作系统时,ntldr会去加载相应windows的内核,否则会将控制权交给相应的文件。

下面是一个boot.ini的例子。

[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /usepmtimer



bootmgr(使用在NT6(Win vista Win7))

Bootloader会到分区中寻找bootmgr,并将控制权交给它,bootmgr会到bcd文件中寻找多系统引导的信息,并显示出来。如果选择win nt6.x那么bootmgr就会将控制权交给winload.exe 让他加载系统内核。若是选择早期window,那么就将控制权交给ntldr,继续nt 5的引导过程。



grub or lilo(使用在Linux)

linux中一般使用grub或者lilo来进行linux操作系统的加载。

一种是grub或者lilo直接接管了MBR,也就是他将程序写到MBR里面去,一开始就运行了,就运行了它的程序,然后它会去加载相应的配置文件,然后让你选择进入那个操作系统。如果,选择windows,它会将控制权交给windows分区的OBR。如果是linux,它会加载linux的内核和ramdisk。在装ubuntu的时候,默认它就是这么干的,然后我们既可以用windows,也可用linux。

另一种是grub或者lilo只接管OBR,那么也就是系统的MBR会去调用它,如果它在激活分区。调用之后,就和上面说的一样了。这样一种加载方式方式叫做chain load,链式加载。

操作系统内核启动

接下来就是操作系统内核得到了控制权,然后就…………





启动过程概览(以win7为例)



参考

因为年代久远,已经找不到当时使用到的参考文档了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: