电脑启动时都发生了什么?

splash

每次看电脑启动,屏幕上总是划出一道道英文,之后就进入了Windows系统的启动画面,可是在按下电源键后电脑是怎么启动系统的呢?今天我将会讲解电脑的启动过程。

提前声明一下,电脑启动的英文是Boot,并不是Turn on,所以说启动电脑的英语应该是Boot up the computer。Boot这个词在计算机启动时很重要,之后将会有讲解。

总的来说电脑启会经历以下几个阶段:BIOS,主引导记录(MBR),硬盘启动,操作系统载入

第一阶段:BIOS

电脑启动后,供电系统会进行自检 Power-On Self Test (POST) ,检查通过后会把供电通过的信号传递给中中央处理器CPU(Central Processing Unit),下图为主板的硬件自检过程。

asus-a7n8x-deluxe-bios-post13

之后CPU开始读取BIOS芯片中的信息,BIOS是英文Basic Input Output System的缩写,中文翻译是基本输入输出系统,BIOS程序是存放在主板中的一个ROM芯片上的,BIOS的主要功能就是为主板提供最基本的硬件设置和控制功能,而且这个芯片保存着电脑最基本的输入和输出程序,硬件自检,开机启动顺序等信息。下图中有BIOS芯片在主板上的位置。

mb_components

 

BIOS的交互图
BIOS Interaction

 

接下来的任务交给了BIOS,BIOS将会检查电脑的启动顺序(Boot Sequence),它会检查顺序中第一个可引导(Bootable)的设备进行启动。举个例子,如果你想重装系统,那么需要系统盘,怎么启动系统盘安装呢?就需要在BIOS里面设置光驱为第一启动设备(First Boot Device)。下图为BIOS中设置启动顺序的界面。

Boot Sequence

 

通常情况下,你的第一启动设备就是你的硬盘,BIOS会读取你的硬盘的启动扇区,进入到下一阶段。

第二阶段:启动设备的主引导记录 

BIOS根据启动顺序将控制权交给了第一个可引导的设备上。这时计算机会读取这个设备的第一个扇区,也就是引导扇区(Boot sector),这个扇区就是你硬盘中最前面的512个字节。如果这512字节的最后两个字节的16进制序列式 0x55 和0xAA (这两个16进制序列也被叫做boot sector signature),那么证明这个设备将是可以启动的,如果不是,将会跳到下一个启动顺序检查。

以上所说的这最前面的512字节就是主引导记录,一般叫做MBR(Master Boot Record),MBR的作用就是告诉计算机去哪找操作系统。

一个MBR由以下4个部分组成,主引导程序,出错信息数据区,分区表(Partition Table)结束标志字(就是0x55 和0xAA )

分区表都知道吧,你的硬盘被分为C盘,D盘,E盘,F盘,那就是分区表的功劳,分区表长度有64字节,里面分成了4项,每项16字节,所以每个硬盘里面只能分4个一级分区,也叫做主分区,只有主分区才能被引导启动。剩下的就是逻辑分区,扩展分区(二级分区),在扩展分区上可以划分出逻辑分区,逻辑分区没有这个数量上的限制。这个下文也会提到。
Partition

第三阶段:硬盘启动

到了这个阶段,计算机的控制权就要交给硬盘的某个分区了,这里面又有三个情况

情况1:卷引导记录(VBR)Volume Boot Record

上面说个可以建立四个主分区,都可以装系统,但是电脑怎么知道去启动哪个主分区呢?四个主分区里面,只有一个是激活的!所以说电脑只会去启动那个激活的主分区,下图是我的电脑上的磁盘管理器,可以看出我的电脑内置了两个硬盘,每个硬盘里都是主分区,可是BIOS有怎么知道那一个硬盘里面有系统盘呢,那就是激活啦,看我对Disk 1点击右键,那个里面有个选项是 Mark Partition as Active就是激活当前分区的意思,那个系统分区已经被激活过了所以是灰色的,这样就能系统启动啦。

Disk MGR

 

情况2:扩展分区和逻辑分区

随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成”扩展分区”(Extended partition)。

所谓”扩展分区”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做”逻辑分区”(logical partition)。

计算机先读取扩展分区的第一个扇区,叫做扩展引导记录(Extended boot record,缩写为EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。

计算机接着读取第二个逻辑分区的第一个扇区,再从里面的分区表中找到第三个逻辑分区的位置,以此类推,直到某个逻辑分区的分区表只包含它自身为止(即只有一个分区项)。因此,扩展分区可以包含无数个逻辑分区。

很少通过这种方式启动操作系统。如果操作系统确实安装在扩展分区,一般采用下一种情况启动。

情况3:启动管理器 (Boot Loader)

如果没有活动分区或者引导扇区无效,计算机读取MBR后不把控制权交给一个特定的分区,而是加载第二启动管理器(secondary boot loader ),让用户选择操作系统,启动哪个分区的操作系统由启动管理器负责安排。

首先启动管理器开始寻找活动分区中的BCD文件夹,这个文件夹又来存放启动的配置数据。找到BCD后,Bootmgr首先从BCD 中读取启动管理器bootmgr菜单的语言版本信息,然后再调用BOOTMGR与相应语言的BOOTMGR.EXE.MUI (在boot文件夹对应语言文件夹中)组成相应语言的启动菜单,之后在显示器上显示多操作系统选择画面。

如果存在多个操作系统而且系统设置的等待时间不是0,那么屏幕就显示多个操作系统的选择界面。如果没有多系统,那么直接进入windows 7系统,不显示选择界面。

下图为win7 的启动管理器
7 Boot loader

下图为Windows 8的
The-Windows-8-boot-loader-screen
还有Linux GRUB引导菜单
grub

 

第四阶段:操作系统加载

当以上三个阶段完成之后,操作系统开始加载,操作系统内核被加载进入内存并且执行:

在第三阶段选择windows 7系统后,bootmgr就会读取BCD里win7系统所在的盘里的windows\system32\winload.exe文件(64位系统位于C:\Windows\WinSxS\下),并且将控制权交给winload.exe。

Winload.exe加载windows7内核、硬件、服务等,之后加载桌面等信息,从而启动整个windows 7系统。
Start

以上几个步骤就是电脑启动的过程,前三个阶段一般是在数秒钟就会完成,操作系统加载时间稍长点,不过随着硬件能力的提升,这个时间在不断被缩短。

随着UEFI的出现,现在MBR启动方式已经几乎成为历史了。

UEFI,即“统一可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。

现在的硬盘可以采用最新的GPT分区, GPT全名为Globally Unique Identifier Partition Table Format,即全局唯一标示磁盘分区表格式。GPT还有另一个名字叫做GUID分区表格式,我们在许多磁盘管理软件中能够看到这个名字。而GPT也是UEFI所使用的磁盘分区格式。这种分区已经可以替代了传统的MBR启动方式了。

只要主板电脑支持UEFI,并且操作系统支持GPT的情况下(Windows 8),就可以达到快速开机(我的电脑可以在10秒内通过UEFI完成快速启动)

uefi启动,就是先经由uefi启动系统,再由uefi来加载操作系统,好处在于使开机程序化繁为简,节省时间(uefi已经帮助完成硬件初始化)。

下图为我的Thinkpad T440P UEFI启动设置界面
UEFI

现在UEFI已经被看做是有20多年历史的BIOS的继任者了。

此文章作者为周毅刚,归属于其个人网站miketech.it,未经允许,不得转载。

 

 

打赏

Leave a Reply

Your email address will not be published. Required fields are marked *