BIOS与EFI对比

 

一、BIOS(维基百科:http://en.wikipedia.org/wiki/BIOS)

BIOS来由

BIOS是CP/M操作系统一部分。CP/M是IBM X86(intel 8080/85)微型计算机上最早的操作系统,由Digital Research Inc公司的Gary Kildall领导,微软的PC-DOS系统基于CP/M开发。BIOS主要功能是屏蔽底层硬件细节,为操作系统提供统一固件接口。

BIOS主要功能

· 硬件自检

按下电源键自动重置CPU寄存器,CPU从CMOS芯片加载BIOS系统,BIOS系统系统硬件(通常就是进入BIOS配置页面之前,在屏幕上所看到的信息)的检测。

· 硬件配置

进入BIOS配置页面,完成硬件参数配置(比如CPU超频,CPU虚拟化功能开启,芯片组和硬件设备相关功能开启等)。

· 引导操作系统

BIOS读取加载位于启动磁盘MBR里面的boot loader,由boot loader完成操作系统引导。

BIOS主要厂商:

Phoenix,AMI,Insyde,Byosoft

传统BIOS缺点:

· 16位寻址

传统BIOS最大的缺点就是16位寻址模式,16位寻址最大支持1MB内存,远远小于现有主流计算机内存大小。CPU出于兼容性考虑,在BIOS引导过程中只能运行在实模式。

· 硬件扩展性不好

由于BIOS有限的寻址空间。硬件厂商采用汇编语言编程驱动,对代码大小要求很高,功能实现非常有限。在BIOS引导过程中只能完成硬件部分初始化,完整的驱动只能安装在操作系统里面,由操作系统完成硬件初始化和配置。

· 磁盘寻址

BIOS通过MBR方式完成磁盘寻址,然后将控制权交给boot loader完成操作系统引导。MBR最大支持4个主分区,每个分区最大大小2TB;这样一定层度上限制大容量磁盘的普及。

 

二、EFI(维基百科:http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface)

 

EFI产生历史背景:

Intel开发,1998年发布,专门用在安腾(IA64)处理器上,替换BIOS。所有HP-UX机器都是使用EFI固件接口。UEFI是第二个版本,2005年intel联合BIOS厂商、软硬件厂商建立,用来替换X86、X86_64、IA64架构上面的BIOS。

EFI架构介绍:

1、基于EFI的IBM-PC架构图

EFI负责管理硬件设备,驱动可以安装在EFI下面。操作系统不需要直接安装硬件驱动,直接从EFI调用接口访问。这种框架下,使得硬件厂商一份驱动可以在所有操作系统上面使用。

2、基于EFI的IBM-PC架构启动流程

传统BIOS启动流程是:设备加电->BIOS初始化/自检->boot loader引导->OS启动。

EFI启动流程如下(参考下图 ):

首先EFI初始化,EFI平台加载,设备驱动与EFI应用程序加载,boot manager启动,OS loader启动,OS启动。

由于EFI框架比BIOS要大得多,其启动过程也比BIOS要复杂。于BIOS最大的区别就是EFI首先需要EBC虚拟机,然后再启动设备驱动和EFI应用程序,最后通过EFI boot manager加载操作系统引导程序。

EFI程序使用EBC (EFI byte code) 编写而不是汇编,EBC是一种类似C的语言。所有EBC都通过EBC虚拟机解释运行。

EFI的boot manager使用GPT(guid partition table)替换MBR(mater boot record)分区格式,但是同时兼容MBR。GPT解决BIOS下小于2TB寻址限制。

GPT详细资料可以参考:

http://en.wikipedia.org/wiki/GUID_Partition_Table,

MBR相关资料可以参考:

http://en.wikipedia.org/wiki/Master_boot_record。

GPT分区自身并不存放OS引导程序,EFI单独在磁盘上面创建一个分区用来存储OS引导程序,这个分区又叫system partion table,使用的FAT32文件系统格式。所有EFI的boot manager自身已经集成fat32文件系统访问功能。

3、EFI主要组成部分

EFI整体框架模型参考下图。

        EFI主要组成部分包括:服务、驱动、协议、EFI shell。

服务:

从上图可以看到,EFI提供两种类型的服务。EFI BOOT SERVICES和EFI RUNTIME SERVICES,BOOT SERVICES在操作系统启动之前提供的服务,操作系统启动后终止。RUNTIMERSERVICES在操作系统启动依然可以访问,这个类似与BIOS环境中的SMBIOS table。比如:日期、时间、NVRAM访问。EFI服务通过GUID区分。

驱动:

        EFI驱动是指硬件设备驱动,由于EFI突破BIOS模式下CPU 16位寻址模式,足够大的内存寻址空间使得ROM的大小也不需要像BIOS那么要求严格。EFI设备驱动使用EBC编写,通过EBC虚拟机解释执行。设备驱动通过EBC对操作系统提供访问接口,由于EFI驱动运行在EBC虚拟机上,所以不同操作系统(比如Linux和Windows)可以共享一份驱动。

协议:

协议用来规范不同设备、不同EFI程序之间访问/调用规范。所有设备服务都需要通过协议来提供。

EFI shell:

EFI shell是EFI一个命令行管理工具,可以用来执行EFI应用程序。

EFI优势(与传统BIOS对比):

1、EFI提供BIOS功能,解决BIOS模式下遇到的主要问题(CPU 16位寻址、1M内存限制)。

2、兼容性。EFI框架下,OS并不直接访问硬件;由EFI提供接口。EFI可以屏蔽操作系统与物理硬件之间细节。

3、扩展性。所有EFI程序/模块都使用EBC编写,通过EBC虚拟机解释执行。因此可以在EFI里面自行编写应用程序。比如:直接在EFI模式下访问因特网。

4、虚拟化支持。EFI不需要进入操作系统就可以访问/管理所有硬件资源,理论可以将所有硬件资源分割成不同单元。

 

你可能感兴趣的:(硬件)