UEFI和BIOS启动流程

简介

之前一直是大概知道UEFI和BIOS的区别,没对它们的具体启动流程做对比,别人问起来也说不出个所以然,下面粗线条地介绍这两个的启动流程。

BIOS是Basic Input/Output System的缩写,即基本输入输出系统;UEFI是Unified Extensible Firmware Interface的缩写,即可扩展固件接口

BIOS

通电之后BIOS初始化,然后是开机自检(POST),这些都是固件相关,感觉和我关系不大,略去不讲。然后BIOS就开始把bootloader载入内存,具体过程如下:

按照设定的启动顺序,依次尝试从各个磁盘启动,具体地说,把磁盘的起始扇区(512K)整个载入到内存地址0x7c00处,然后从0x7c00处开始执行。

BIOS只能和MBR格式的分区表结构一起使用,由于MBR占一个扇区,在MBR中四个分区表项又占去4x16=64B,可启动标志0x55 0xAA标志又占去2B,所以在MBR中可以存放的代码最多只有512B-64B-2B=446B

这446B大小的代码就是bootloader了,或者说bootloader的一部分。

之所以说是一部分,是因为446B实在是小得可怜,可能连bootloader都放不下,又怎么指望它把操作系统给拉起来?于是就可以把bootloader分成两部分,一部分放在MBR中,一部分放在磁盘的其它位置,MBR中的部分负责把bootloader载入内存运行,然后bootloader把OS拉起来。

往后就是操作系统的具体启动流程了。

UEFI

对于UEFI,大概流程:
通电->UEFI初始化->加载bootloader

可以看出UEFI没有开机自检的过程,开机过程就能加快一些。不过其实并不是真的什么都检查,只是是弱化了检查这个过程。试想,你买了一台新电脑,大概率一年之内不会出故障,但是使用BIOS方式的话,你电脑每次开机都要检查,如果检查耗时1s,每天开机,那就是365s啊,生命中宝贵的6分钟啊!

不过具体是怎么个弱化法,很遗憾我没有搜到相关资料,也没有兴趣深入研究固件。

往下说,由于UEFI的启动方式使用的是GPT的分区表,启动时并不是简单地把MBR往内存中一装,这里有必要说明一下它加载bootloader的具体过程。

使用UEFI方式启动时,固件先会找到EFI分区,然后执行分区下面对应的.efi文件,这个efi文件的功能就是把bootloader加载进内存,然后bootloader再把OS拉起来。


参考资料

Understanding the Boot process — BIOS vs UEFI
MBR
UEFI和Legacy及UEFI+Legacy启动的区别
(译)UEFI 启动:实际工作原理

你可能感兴趣的:(Linux)