BIOS和UEFI简介

Author:
内容纲要

背景

BIOS(Basic Input/Output System)和UEFI(Unified Extensible Firmware Interface )是不同的计算机引导固件,

BIOS启动流程

file

上电

当计算机按下电源键时,主板上各组件通,此时,CPU的指令寄存器是一个默认的值,指向存有BIOS固件的ROM芯片地址(ROM芯片和内存是统一编址的,可以直接执行指令),随着时钟信号的输入,ROM芯片的BIOS固件被CPU执行,系统的控制权交给了BIOS。

选择引导设备

BIOS程序完成基本外设的初始化和自检后,需要进行引导设备的选择,主要是确定计算机从哪个设备启动,通常是硬盘或可移动设备。这一步也是我们常说的BIOS下的启动顺序,计算机需要知道下一个阶段要启动的程序具体放在了哪一个设备上。

加载引导程序

从BIOS设计角度来讲,BIOS只有足够简单才能足够通用,所以BIOS不关心引导设备上数据本身,只负责将主引导设备上符合要求的引导程序加载进内存执行。具体的执行流程是按照COMS中设定的顺序,依次读取设备的前512字节,判断若以0x55aa结尾,则认为是有效的MBR并跳入MBR执行。

MBR

MBR存在于储存设备的第一个扇区(大小512个字节),它存放了用于启动操作系统的引导程序代码和分区表。
主引导记录由三个部分组成:

  • 占446个字节:主引导程序(也叫Boot+Loader),如果启动管理器grub是直接写进mbr硬盘的主引导记录中的,计算机BIOS在启动时,按照预定的方式,将MBR内的代码加载至内存指定位置,然后跳转至那里,mbr的代码就开始运行了。
  • 占64个字节:记录分区表,由于硬盘可以分区,每个区可以安装不同的操作系统,所以主引导记录必须知道将控制权转交给哪个区。
  • 占2个字节:主引导记录的签名(0x55和0xAA)%2C如果这512字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。如果到最后还是没找到符合条件的,直接报出一个无启动区的error。
    file

BootLoader

由于 MBR 仅有 512 字节,无法完成过多的任务,因此通常的设计是由 MBR 从硬盘上读取第二阶段的 boot loader,由其来完成后续的系统环境初始化、载入操作系统内核等工作。

UEFI启动

我们知道在 UEFI 之前的 BIOS 时代,操作系统的 bootlloader 是存放在主引导记录(MBR)中的,容量受限,所以 UEFI 中引入了一个新的系统分区 ESP (EFI System Partition) ,该分区用来存储操作系统的 bootloader 和 EFI 驱动程序等数据,当计算机启动后,UEFI 固件从该分区中加载所需要的硬件驱动,执行 bootloader 启动指定的操作系统。在 Windows 系统中默认该分区不可见,可以参照 如何查看 EFI 分区内容 查看 EFI 分区中的内容。
它也不仅仅是BIOS替换。UEFI本质上是一个运行在PC固件之上的微型操作系统,它可以做的比BIOS多得多。它可以存储在主板的闪存中,也可以在启动时从硬盘或网络共享加载。一般的UEFI系统仅能识别FAT32,不同于BIOS只能识别固定位置的磁盘引导块。这意味着只要将引导程序放到FAT32分区里,UEFI系统就能通过分区表的指引找到这个保存着引导程序的FAT32分区。UEFI系统是由模块化的C语言程序写出来的,所以通过添加或修改程序模块就能获得更多的功能。例如支持更多的文件系统,图形界面,甚至能使用浏览器浏览网页。

硬盘分区表

磁盘分区表格式目前主要有两种,分别是MBR分区表和GPT分区表。

MBR分区表

MBR格式的分区表主要是BIOS使用,由三部分组成:

  • MBR:主引导记录位置在磁盘的第一个逻辑扇区,即LBA0的位置。一个逻辑扇区仅有512B(字节) ,MBR引导代码占446B,MBR分区表占64B,最后的magic number占2B(即上述以0x55 0xAA结尾的标识符)。因为每个分区只有16B大小的分区表记录,所以寻址最大只能到2.2TB,并且由于分区表总共只占64B,所以MBR分区表最多4个分区。下图的绿色部分。
  • PBR:即Partition Boot Record,对应主引导记录,每个分区都存在引导记录,位置在每个磁盘分区的开始部分,占用扇区不定。这个扇区一般保存着操作系统引导程序的所在位置。下图的红色部分。
  • File System:操作系统对磁盘的所有操作都需要经过文件系统,删除文件指的是在文件系统里删除文件的索引条目,创建文件就是在在文件系统里添加索引条目并将具体数据写入磁盘。常见的文件系统格式有:FAT、ext4、NTFS。文件系统位置一般在PBR之后。下图黄色部分。

file

GPT分区表

上面提到BIOS分区表类型为MBR,只能管理最大2.2T的硬盘,并且分区数上限最大为4个,尽管后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念,但是换汤不换药,满足不了硬盘容量和分区数目急速增长的需求。而UEFI采用GPT分区表的方式后,硬盘容量和分区数目几乎没有上限(目前windows支持最大128个分区)。

GPT,即Globally Unique Identifier Partition Table,全局唯一标识码分区表,简称GPT或GUID分区表,它是UEFI规范的一部分。由于MBR分区表 的局限性(还有BIOS的),而UEFI BIOS的推广也为GPT的实现打下了坚实的技术基础,GPT应运而生。GPT由GPT头和GPT主体,GPT备份组成。起始于磁盘LBA1的位置,相对的LBA0仍然为MBR,但是这个MBR是被保护的,没有引导代码,仅仅有一个被标识为未知的分区,当支持GPT分区表的操作系统检索到这个MBR后就会自动忽略并跳到LBA1读取GPT分区表。如下图,由于篇幅的关系,表的长度比例不等同与实际在磁盘地址里的实际比例。
file

相较于MBR,GPT具有以下优点:

  • 得益于LBA提升至64位,以及分区表中每项128位设定,GPT可管理的空间近乎无限大,假设一个扇区大小仍为512字节,可表示扇区数为,算下来,可管理的硬盘容量=18EB(1EB=1024PB=1,048,576TB),2.2T在它面前完全不在话下。按目前的硬盘技术来看,确实近乎无限。
  • 分区数量几乎没有限制,由于可在表头中设置分区数量的大小,如果愿意,设置分区也可以(有人愿意管理这么多分区吗),不过,目前windows仅支持最大128个分区。
  • 自带保险,由于在磁盘的首尾部分各带一个GPT表头,任何一个受到破坏后都可以通过另一份恢复,极大地提高了磁盘的抗性。循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率。
  • 尽管目前分区类型不超过百数,GPT仍提供了16字节的GUID来标识分区类型,使其更不容易产生冲突。
  • 每个分区都可以拥有一个特别的名字,最长72字节,足够满足种奇葩命名需求。
  • 完美支持UEFI,毕竟它就是UEFI规范的衍生品。在将来全行业UEFI的情境下,GPT必将更快淘汰MBR。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注