详解UEFI和传统BIOS(Legacy)以及它们的区别
Part 1:传统BIOS(Legacy)
首先让我们回顾一下传统BIOS(Legacy)启动的流程:
上电自检(POST)
读取主引导记录(MBR)
读取分区引导记录(PBR)
拉起启动管理器

梦回408 @w@

Q:这样做有什么缺点?
1. 单个分区容量最高只支持2TB
为什么?
不妨让我们看看MBR的结构

(来自 c.biancheng.net/view/1015.html)
可以看到,MBR只给了4个字节用来存储本分区总扇区数,通常一个扇区大小只有512字节,稍加计算就可以得到MBR单个分区的最大容量为2T
2. 启动慢
为什么?
众所周知,传统的BIOS启动流程有一个开机自检的环节,一次完整的开机自检需要检查如下几个硬件:



(来自 https://blog.51cto.com/bule201/1588548)
由于现在的硬件普遍偏“大”(例如RAM,我不知道该用什么形容词好@w@)完全检完其实需要大量的时间!!!
现在的POST自检一般会加快和简化(这就是为什么我开头强调是完整的POST自检)

Part 2:UEFI
接下来看UEFI
UEFI,即统一可扩展固件接口(Universal Extensible Firmware Interface)
让我们看看UEFI的启动流程:
初始化
执行ESP分区下的引导程序
拉起启动管理器

这里备注一下,ESP是EFI系统分区(EFI system partition),这是UEFI特有的一个分区,通常是FAT32格式,里面会放一些引导程序,这个分区一般是隐藏的,开DiskGenius才可以看到


Q:相比于传统BIOS,UEFI有什么区别?
1. 砍掉了POST自检
相比于传统BIOS,UEFI已经没有了自检的独立流程!
这意味着UEFI变得更快了!!!
(虽然相比于现在阉割POST的传统BIOS好像没什么区别 -_- )
但这并不代表UEFI不会自检!出问题的时候会检一下
详细可以看看这篇文章:https://www.zhihu.com/question/28815746
2. 砍掉了MBR转而使用了GPT
UEFI抛弃了传统的主引导记录(MBR),引进了GUID分区表(GPT)的概念,看看GPT的结构:


(这是网上找的图但我忘了出处可恶啊)
可以看到,GPT没了记录总扇区的位置,取而代之的是记录结束扇区的位置,稍加计算可以得到GPT下单个分区的大小最大可以达到惊人的18EB!
要是我有18EB的硬盘那该有多爽
3. 砍掉了16位实模式
UEFI只在32位/64位的环境下运行
4. 采用了EFI字节码
类似Java,UEFI的驱动编译出来是一堆EFI字节码,它需要在一个叫做DXE
(Driver eXecution Environment,驱动执行环境)的环境下运行。
DXE会在一开始的初始化的环节下加载(回去看UEFI启动流程的那张图)
5. 更多的接口
UEFI提供了更多的接口,支持图形界面、鼠标操作之类的东西(不信你看看现在的UEFI BIOS)

这篇专栏到这里就结束了
以上都是UP自己学习的见解,欢迎到评论区发表意见,让我们友善讨论!