UEFI与BIOS的比较_2020-05-11

BIOS

  学习UEFI前先简单了解一下BIOS。
BIOS功能:

  • 加电自检程序,用于开机时对硬件的检测。
  • 系统初始化代码,包括硬件设备的初始化,创建 BIOS 中断向量等。
  • 基本的外围I/O处理的子程序代码。
  • CMOS程序设置。

BIOS工作流程:

  1. 加电自检(Power On Self Test,POST):检测关机设备是否正常工作,设备设置是否与CMOS(CMOS是是电脑主板上的一块可读写的RAM芯片,常用来保存BIOS设置完电脑硬件参数后的数据)中的设置一致。如果出现硬件错误则发出警报(鸣笛)。POST检测通过后进行初始化
  2. 初始化:初始化显示设备、显示显卡信息,然后初始化其他设备。
  3. 检查CPU和内存并显示检测结果。进行标准设备检测(如:硬盘、光驱、串口设备等)。结束标准设备检测后进行即插即用设备,并为其分配中断号、I/O端口号和DMA通道等资源。硬件设备发生改变时将变化记录到CMOS中。
  4. 根据配置的启动顺序从设备启动,将启动设备主引导记录的启动代码通过BIOS终端读入内存,然后将控制权交至引导程序,最终引导进入操作系统。

BIOS缺点:

  1. 开发效率较低:大部分BIOS使用汇编语言开发,使用汇编语言开发与硬件的耦合度过高,使得开发出来的BIOS严重受硬件影响。
  2. 性能差:BIOS基本输入/输出服务需要依靠中断来完成,而且BIOS没有异步工作模式,有大量的时间被消耗在等待。
  3. 不易进行功能扩展:在添加硬件功能时,必须将16位的代码放置在0x0C0000~0x0DFFFF间,初始化时才能将其设置为约定的中断处理程序。而且BIOS不能动态的加载设备驱动方案。
  4. 安全性较差:BIOS没有考虑运行过程中执行代码的安全性。
  5. 不支持从硬盘2 TB及以上的地址进行引导:BIOS硬盘采用32位地址,因此引导扇区的最大逻辑块地址是232(字节地址为:(232)*512=2 TB)

UEFI(Unified Extensible Firmware Interface)

UEFI简介:

  • UEFI是统一可扩展固件接口,定义了操作系统和平台固件之间交互的接口,它是UEFI Forum发布的一种标准,并没有提供实现。
  • UEFI的实现可以分为两部分:
    1. 平台初始化。
    2. 固件-操作系统接口。

UEFI系统组成:

  • UEFI供系统调用的接口:

    • 启动时服务(Boot Service,BS)

    • 运行时服务(Runtime Service,RT)

  • 隐藏在BS后的Protocol

    其中BS和RT以表的形式(C语言中的结构体)存在,UEFI驱动和服务以Protocol的形式通过BS提供给操作系统。

UEFI模式的启动的几个阶段:

  1. 操作系统加载器(OS Loader)被加载。

  2. OS Loader执行ExitBootServices()。

    从1->2的过程是从UEFI环境向操作系统过渡的过程,在该过程中,OS Loader可以通过BS和RT使用UEFI提供的服务,将计算机资源逐渐从UEFI转至操作系统。该过程被称为TSL(Transient System Load)

    当OS Loader完全掌握计算机系统资源是,BS便完成了其使命。OS Loader调用ExitBootServices()结束BS并回收BS占用的资源。计算机系统进入UEFI Runtime阶段。在Runtime阶段中只有RT继续为OS提供服务,BS已经被计算机系统销毁。

TSL阶段系统通过BS管理系统资源,此时BS提供的服务有:

  • 事件服务:事件是异步操作的基础。有了事件的支持,才可以在UEFI系统内执行并发操作。
  • 内存管理:主要提供内存的分配与释放,管理系统的内存映射。
  • Protocol管理:提供了安装Protocol与卸载Protocol的服务,以及注册Protocol通知函数(该函数会在Protocol安装时调用)的服务。【UEFI驱动和服务通过Protocol的形式通过BS提供给系统】
  • Protocol的实用类服务:包括Protocol的打开与关闭,查找支持Protocol的控制器。(比如:需要读写某个PCI设备的寄存器,可以通过OpenProtocol服务打开这个设备上的PciIo Protocol,用PciIo->Io.Read()服务读取这个设备上的寄存器。
  • 驱动管理:包括用于将驱动安装到控制器的connect服务,及将驱动从控制器上卸载的disconnect服务。(例如:如果我们启动时需要网络支持,则可以通过loadImage将驱动加载到内存,然后通过connect服务将驱动安装到设备)。
  • Image管理:此类服务包括加载、卸载、启动和推出UEFI应用程序或驱动。
  • ExitBootServices:用于结束启动服务,注销BS。

RT主要提供以下几个方面的业务:

  • 时间服务:读取/设置系统时间
  • 读写UEFI系统变量:读取/设置系统变量。(例如:BootOrder用于指定启动项顺序)更改这些系统变量可以改变系统配置。
  • 虚拟内存服务:将物理地址转换为虚拟地址。
  • 其它服务:重启系统、获取系统提供的下一个单调单增值等。

UEFI的优点

  1. UEFI具有较高的开发效率:BIOS一般采用汇编语言,代码多是与硬件相关的代码。而UEFI中大部分的代码可以用C语言进行编写,UEFI的应用程序和驱动也可以用C++编写。UEFI通过固件-操作系统接口(BS和RT服务)为OS和OS Loader屏蔽了底层硬件细节,使UEFI的上层应用可以重用。
  2. UEFI系统的可扩展性:UEFI系统的可扩展性主要体现在 驱动的模块化设计以及软硬件升级的兼容性。UEFI模式中驱动的模块化设计在于,大部分硬件的初始化通过UEFI驱动实现。每个驱动都是一个独立的模块,可以包含在固件中,也可以放在设备上,运行时根据需要来动态加载。软硬件升级的兼容性体现在,UEFI中每个表、每个Protocol(包括驱动)都有版本号,这使得系统可以很方便的进行平滑升级。
  3. UEFI系统的性能较高:相比于BIOS,UEFI有很大的性能提升,从启动到进入操作系统的事件大大缩短。原因主要有一下几点
    • 1、UEFI支持基于事件的异步操作,提高了CPU的效率,减少了总的等待时间;
    • 2、关于中断,UEFI仅保留了时钟中断,舍弃了其余的中断操作外部设备的方式,改为“事件+异步操作”;
    • 3、高效遍历设备的方式,启动时可以仅遍历启动所需的设备,从而加速系统启动;
    • 4、UEFI具有更高的安全性:相比于BIOS,UEFI的一个重要突破就是其在安全性方面的考虑。在系统的安全启动模式下UEFI在执行应用程序和驱动前会先检测程序和驱动的证书,仅当证书被信任时才会执行该程序或驱动。(UEFI的应用程序和驱动采用PE/COFF格式,其签名放在签名块中)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值