通过计算机的启动过程了解BIOS和UEFI


本文属于学习笔记,如有侵权,请联系博主删除,如有错误之处也请多多指正,谢谢!


一、基本概念解释

说到计算机启动,绕不开的两个东西叫做BIOS和UEFI,BIOS 和 UEFI 都是计算机的固件类型。BIOS 固件(主要)用于 IBM PC 兼容计算机。UEFI 的通用性更强,可用在非“IBM PC 兼容”系列的计算机上。

1、BIOS

BIOS 全名为 Basic Input Output System,即基本输入/输出系统,在上一篇对存储器的认识中提到了,它是一个固化到电脑主板上的一种 ROM 或者NOR FLASH芯片上的程序。老式主板上有一个黑色的小芯片就是存储BIOS的芯片,也叫做BIOS芯片,其中的BIOS程序也叫做系统BIOS,对于其他硬件设备(如显卡)也有各自的BIOS。系统BIOS这段程序包含了四个部分:

(1)硬件I/O和中断服务程序

系统BIOS中包含很多中断服务程序,例如显示服务、键盘服务等,给上层计算机软件提供了和底层硬件连接的接口,操作系统对外围设备的管理即建立在系统BIOS的中断基础上。程序员也可以直接调用BIOS中断服务程序。在硬件检测过程中,对硬件设备的中断、I/O端口等资源的分配也是中断服务程序完成的。

(2)POST硬件检测程序

系统BIOS代码第一件要做的事情就是POST(Power-OnSelfTest,加电自检),检测系统关键设备能否正常工作(如显卡、内存等),若检测到致命错误,BIOS会控制喇叭发出警告(没有屏幕显示信息,因为显卡在POST阶段不会初始化)。在POST完成后,系统BIOS会查找显卡和其他设备的BIOS及其相应的初始化代码进行硬件初始化,然后系统BIOS进行CPU、内存的检测和信息显示,检测系统中安装的一些标准硬件设备和即插即用设备并进行资源分配。

(3)CMOS设置程序

CMOS设置也就是我们常说的BIOS设置,需要按键进入(不同电脑进入BIOS设置界面的按键不一致),设置结束后,若进行保存操作,则更新后的硬件信息会存入CMOS中并重新进行自检,否则继续完成本次自检后续的过程。我理解的CMOS设置程序就相当于是通过中断触发(用户通过按键),在不进行BIOS设置时,CMOS中的设置是默认的,在硬件初始化完成后的ESCD更新阶段就会直接读取CMOS中存储的硬件配置数据。

COMS是个RAM芯片,里面存的是电脑硬件配置信息和电脑其他有关的东西,电脑启动了就由电脑电源为其供电,电脑关闭则由一个后备电池供电保证数据不丢失。这个芯片一般都是集成到主板的南桥芯片组里,看不见。CMOS和BIOS之间应该描述为:用存储在BIOS芯片中的BIOS程序中的CMOS设置程序段对CMOS进行设置。所以正确的说法应该是“CMOS设置”。BIOS程序本身不需要任何设置,但为了跟上对硬件的支持,需要对BIOS芯片进行更新(老式的BIOS芯片是ROS更新不了,目前而言,NOR FLASH完全替代了ROM成为了可以刷新的BIOS芯片),这区别于CMOS设置。

(4)系统启动引导程序

在ESCD检测或更新结束后,BISO会读取你在BIOS设置中设置的启动顺序(硬盘、U盘等设备),排在第一位的存储设备得到控制权后,计算机会读取该设备的第一个扇区,大小是512字节,倘若该扇区最后两个字节为0x55和0xAA则表明这个设备可以用于启动;否则将控制权交给你在设置的“启动顺序”中的下一个设备。启动什么系统(Windows或Linux)就取决于这512字节了,几乎就跟BIOS没啥关系了。

2、MBR

启动存储器以硬盘为例:这512字节就是硬盘的第一个扇区(LBA0)也叫做主引导记录MBR(Master boot record )或引导扇区,==“启动装载程序”==便存在这个扇区里面。将主引导记录的内容加载到内存中并将控制权交给“启动装载程序”。(偷这位老哥一张图):
MBR

  • “启动装载程序”占446B(图中“MBR代码”),MBR分区表占64B,最后的Magic Number占2B(即以0x55 0xAA结尾的标识符)。
  • 因为每个分区只有16B大小的分区表记录,所以寻址最大只能到2.2TB,并且由于分区表总共只占64B,所以MBR分区表最多4个分区,即硬盘最多4个主分区。分区表中16个字节中的第一个字节表示该分区是否为激活分区,若该字节为0x80则代表该分区为”活动分区“,要将控制权交给这个分区,因此四个主分区里面只能有一个是激活的。后面的15个字节用于保存对应分区的大小和位置信息。
  • PBR:即Partition Boot Record,每个分区都存在各自的引导记录,位置在每个磁盘分区的开始部分,占用扇区不定。这个扇区一般保存着操作系统引导程序(例如Windows的bootmgr或Linux的grub)的所在位置。上图的红色部分。PBR会在“启动装载程序”控制下被加载到内存。
  • File System:操作系统对磁盘的所有操作都需要经过文件系统,删除文件指的是在文件系统里删除文件的索引条目,创建文件就是在在文件系统里添加索引条目并将具体数据写入磁盘。文件系统位置一般在PBR之后。上图黄色部分。

MBR通过“启动装载程序”加载“PBR”,“PBR”在运行后加载操作系统的引导程序到内存运行,当操作系统引导程序运行后,操作系统内核就会被加载运行。这就是标准化的操作系统启动的过程,完成了两个核心任务:一是让计算机知道系统存储在那个存储设备上(由BIOS完成);另一个就是让计算机知道那个分区是“活动分区”,好去引导操作系统内核(这一步由MBR完成)。在上面描述的传统的BIOS+MBR启动方式中,不难看出计算机会读唯一的活动分区的第一个扇区,这种也叫做"卷引导记录"启动方式。

但是问题来了,硬盘不同的分区可以安装不同的操作系统,难道还是采用“活动分区”来引导操作系统的方法吗,这好像存在硬盘到底哪个区是“活动分区”的问题?

所以设置“活动分区”是单一启动方式,为什么单一,因为多个操作系统不好设置“活动分区”,所以出现了启动管理器(BOOT Loader),让计算器读取MBR的前446字节的机器码之后,不把控制权交个某一个分区,而是运行“启动管理器”(boot loader),由用户自行选择启动哪一个操作系统,这样就可以放弃“活动分区”的概念了,广义上认为MBR的“启动装载程序”这段空间不足以容纳某些启动装载程,这些启动装载程序会将自身的一小部分安装在 MBR 中,而将其他部分安装到磁盘上的可用空间中,所以常常把两部分合起来称为boot loader,MBR中只占一部分。NTLOADER、lilo、grub都属于boot loader,在x86架构中,用grub引导不同操作系统(windows、linux)是主流。

3、UEFI

Intel宣布在2020之前实现在芯片上将传统BIOS全部替换为UEFI

既然都要替代了,那上面讲传统BIOS那些不都是废话吗,我觉得也是。。。哈哈哈,我觉得了解一下还是好的。

UEFI(Unified Extensible Firmware Interface)即统一的可扩展固件接口,EFI是UEFI的前身和基础。UEFI可以说是传统BIOS的继承者,目的是提高互操作性以及解决BIOS的局限性,两者对比如下:

  • BIOS的核心理念是16位汇编语言代码,1M内存寻址,调用中断执行硬件初始化等任务。UEFI相当于是小型OS,由高级语言实现,它的任务也是完成硬件初始化,但是它是直接利用加载EFI驱动的方式,识别系统硬件并完成硬件初始化,彻底摒弃读各种中断执行。
  • BIOS只能在16位模式下运行,而UEFI可以在32位或64位模式下运行,意味着UEFI有更大的寻址范围,所以可以在任意内存地址存放任何信息,一般UEFI系统仅能识别FAT32,这意味着只要将引导程序放到FAT32分区里,UEFI系统就能通过分区表的指引找到这个保存着引导程序的FAT32分区,引导过程更快。区别于BIOS只能识别固定位置的磁盘引导块。
  • BIOS上的的CMOS设置程序在UEFI上是作为一个个UEFI程序来执行的,硬件设置是硬件设置程序、而启动管理则是另一个程序,保存CMOS又是另一个程序。
  • UEFI拥有传统BIOS所不具备的诸多功能,比如图形化界面、多种多样的操作方式、允许植入硬件驱动等。
  • BIOS的分区表类型为MBR,只能管理最大2.2T的硬盘,分区数上限最大为4个;而UEFI采用GPT分区表的方式后,硬盘容量和分区数目几乎没有上限。
  • UEFI向下兼容,许多 UEFI 固件可以像 BIOS 固件一样启动系统,也就是支持类型BIOS模式的启动,但是BIOS不能支持UEFI模式的启动。

4、GPT

前面描述了MBR这种分区和引导,主要是适用于BIOS的启动方式,而GPT是UEFI规范的一部分,主要用于解决MBR的局限性。再偷老哥一张图:
GPT格式

GPT由GPT头和GPT主体,GPT备份组成。起始于磁盘LBA1的位置。

  • Protect MBR还是处于第一个扇区(绿色),当不支持GTP的分区模式时,提供BIOS+MBR的操作兼容性,当支持GPT分区表的操作系统检测到这个MBR中的标识符后就会自动忽略并跳到LBA1读取GPT分区表。
  • GPT表头(淡蓝色)定义了分区表中分区数及每个分区大小、硬盘的容量信息、分区表头位置(总是LBA1)和大小,也包含了备份分区表头和分区表的位置和大小信息、还储存着它本身和分区表的CRC32校验。
  • 分区表(蓝色)包含每个分区的类型GUID、名称、起始终止地址以及分区属性等。
  • 备份分区表和备份GPT头(红色)在CRC32校验出错时用于恢复整个分区表。

二、计算器启动过程

通过上面的分析,由于UEFI向下兼容,所以UEFI可以支持MBR和GPT两种分区方式,而BIOS启动只支持MBR分区方式。简单例子:装windows或装LInux系统过程中,使用刻录软件进行系统盘制作时可以选择MBR或者GPT方式,然后在COMS设置中选择启动存储器时,对于MBR方式可以选择BOOT或者UEFI方式(在CMOS中设置CSM兼容enable),但是GPT只能选择BEFI方式启动,若选择BOOT会出现问题。(亲测)

  • 传统BIOS引导流程

BIOS+MBR:
在这里插入图片描述

  • UEFI引导流程

整个UEFI的启动详细流程描述如下:

  • 开机后,固化在ROM里的UEFI BIOS就会被加载到内存运行。
  • UEFI BIOS将引导EFI系统进行运行。
  • 在EFI系统启动后,GUID分区表就会被识别,之后EFI系统就会通过.efi文件启动Boot Loader程序加载操作系统内核。

UEFI+GPT:
UEFI+GPT
UEFI+MBR:

在这里插入图片描述

参考

https://kknews.cc/code/2vzgyjy.html
https://blog.csdn.net/yanghaitao_1990/article/details/51636777
https://www.ithome.com/html/digi/317426.htm
https://www.ithome.com/html/win10/318460.htm
https://www.yisu.com/zixun/82989.html
https://www.tony-yin.site/2019/01/10/Talk_BIOS_UEFI_MBR_GPT_GRUB/
https://www.jianshu.com/p/75ded1a5a0bf
https://www.jianshu.com/p/75ded1a5a0bf
https://blog.csdn.net/JackLiu16/article/details/79881207

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值