BIOS  

  BIOS是英文"Basic Input Output System"的缩略词,直译过来后中文名称就是"基本输入输出系统"。在IBM PC兼容系统上,是一种业界标准的固件接口 [1]  BIOS这个字眼是在1975年第一次由CP/M操作系统中出现。 [2]  BIOS是个人电脑启动时加载的第一个软件。

  其实,它是一组固化到计算机主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。
当今,此系统已成为一些病毒木马的目标。一旦此系统被破坏,其后果不堪设想
BIOS在计算机系统中起着非常重要的作用。一块主板性能优越与否,很大程度上取决于主板上的BIOS管理功能是否先进。
  而BIOS程序是由硬件实现了ROM地址到CPU寻址空间的映射,不需要“驱动程序”装载。BIOS调用之所以能“通吃”地访问所有可启动的存储设备,是因为芯片组给存储设备接口制定了标准,所有的存储设备都要符合这个标准。
  BIOS设置程序主要对计算机的基本输入输出系统进行管理和设置,使系统运行在最好状态下,使用BIOS设置程序还可以排除系统故障或者诊断系统问题。有人认为既然BIOS是"程序",那它就应该是属于软件,感觉就像自己常用的Word或Excel。但也有很多人不这么认为,因为它与一般的软件还是有一些区别,而且它与硬件的联系也是相当地紧密。形象地说,BIOS应该是连接软件程序与硬件设备的一座"桥梁",负责解决硬件的即时要求。
    

BIOS芯片中主要存放:
自诊断程序:通过读取CMOSRAM中的内容识别硬件配置,并对其进行自检和初始化;
● CMOS设置程序:引导过程中,用特殊热键启动,进行设置后,存入CMOS RAM中;
● 系统自举装载程序:在自检成功后将磁盘相对0道0扇区上的引导程序装入内存,让其运行引导操作系统;
● 主要I/O设备的驱动程序和中断服务:由于BIOS直接和系统硬件资源打交道,因此总是针对某一类型的硬件系统,而各种硬件系统又各有不同,所以存在各种不同种类的BIOS,随着硬件技术的发展,同一种BIOS也先后出现了不同的版本,新版本的BIOS比起老版本来说,功能更强。
注:CMOS是Complementary Metal Oxide Semiconductor(互补金属氧化物半导体)的缩写。它是指制造大规模集成电路芯片用的一种技术或用这种技术制造出来的芯片,是电脑主板上的一块可读写的RAM芯片。因为可读写的特性,所以在电脑主板上用来保存BIOS设置完电脑硬件参数后的数据,这个芯片仅仅是用来存放数据的。而对BIOS中各项参数的设定要通过专门的程序。BIOS设置程序一般都被厂商整合在芯片中,在开机时通过特定的按键就可进入BIOS设置程序,方便地对系统进行设置。因此BIOS设置有时也被叫做CMOS设置。
在计算机领域,CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片。有时人们会把CMOS和BIOS混称,其实CMOS是主板上的一块可读写的并行或串行FLASH芯片,是用来保存BIOS的硬件配置和用户对某些参数的设定。
BIOS主要功能:
第一个部分是用于电脑刚接通电源时对硬件部分的检测,也叫做加电自检(Power On Self Test,简称POST),功能是检查电脑是否良好,通常完整的POST自检将包括对CPU,640K基本内存,1M以上的扩展内存,ROM,主板,CMOS存储器串并口,显示卡,软硬盘子系统及键盘进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。

第二个部分是初始化,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等,其中很重要的而对BIOS中各项参数的设定要通过专门的程序。BIOS设置程序一般都被厂商整合在芯片中,在开机时通过特定的按键就可进入BIOS设置程序,方便地对系统进行设置。因此BIOS设置有时也被叫做CMOS设置。一部分是BIOS设置,主要是对硬件设置的一些参数,当电脑启动时会读取这些参数,并和实际硬件设置进行比较,如果不符合,会影响系统的启动。
第三个部分是引导程序,功能是引导DOS或其他操作系统。BIOS先从软盘或硬盘的开始扇区读取引导记录,如果没有找到,则会在显示器上显示没有引导设备,如果找到引导记录会把电脑的控制权转给引导记录,由引导记录把操作系统装入电脑,在电脑启动成功后,BIOS的这部分任务就完成了。
EFI&UEFI
  可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是英特尔公司推出的一种在未来的类PC的电脑系统中替代BIOS的升级方案。
 
  EFI,是Extensible Firmware Interface的词头缩写,直译过来就是可扩展固件接口,它是用模块化、高级语言(主要是C语言)构建的一个小型化系统,它和BIOS一样,主要在启动过程中完成硬件初始化,但它是直接利用加载EFI驱动的方式(而BIOS程序是由硬件实现了ROM地址到CPU寻址空间的映射,不需要“驱动程序”装载),识别系统硬件并完成硬件初始化,彻底摒弃读各种中断执行。EFI驱动并不是直接面向CPU的代码,而是由EFI字节码编写成,EFI字节码是专用于EFI的虚拟机器指令,需要在EFI驱动运行环境DXE下解释运行,这样EFI既可以实现通配,又提供了良好的兼容。此外,EFI完全是32位或64位,摒弃16位实模式,在EFI中就可以实现处理器的最大寻址,因此可以在任何内存地址存放任何信息。另外,由于EFI的驱动开发非常简单,基于EFI的驱动模型原则上可以使EFI接触到所有硬件功能,在EFI上实现文件读写,网络浏览都是完全可能的。BIOS上的的CMOS设置程序在EFI上是作为一个个EFI程序来执行的,硬件设置是硬件设置程序、而启动管理则是另一个程序,保存CMOS又是另一个程序,虽然它们在形式的Shell上是在一起的。
   EFI在概念上非常类似于一个低阶的操作系统,并且具有操控所有硬件资源的能力。不少人感觉它的不断发展将有可能代替现代的操作系统。事实上,EFI的缔造者们在第一版规范出台时就将EFI的能力限制于不足以威胁操作系统的统治地位。首先,它只是硬件和预启动软件间的接口规范;其次,EFI环境下不提供中断的访问机制,也就是说每个EFI驱动程序必须用轮询的方式来检查硬件状态,并且需要以解释的方式运行,较操作系统下的驱动效率更低;再则,EFI系统不提供复杂的存储器保护功能,它只具备简单的存储器管理机制,具体来说就是指运行在x86处理器的段保护模式下,以最大寻址能力为限把存储器分为一个平坦的段,所有的程序都有权限存取任何一段位置,并不提供真实的保护服务。当EFI所有组件加载完毕时,系统可以开启一个类似于操作系统Shell的命令解释环境,在这里,用户可以调入执行任何EFI应用程序,这些程序可以是硬件检测及除错软件,引导管理,设置软件,操作系统引导软件等等。理论上来说,对于EFI应用程序的功能并没有任何限制,任何人都可以编写这类软件,并且效果较以前MS-DOS下的软件更华丽,功能更强大。一旦引导软件将控制权交给操作系统,所有用于引导的服务代码将全部停止工作,部分运行时代服务程序还可以继续工作,以便于操作系统一时无法找到特定设备的驱动程序时,该设备还可以继续被使用。

一般认为,EFI由以下几个部分组成:
  1. Pre-EFI初始化模块
  2. EFI驱动执行环境
  3. EFI驱动程序
  4. 兼容性支持模块(CSM)
  5. EFI高层应用
  6. GUID 磁盘分区
  新型UEFI,全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织。
  值得注意的是,一种突破传统MBR(主引导记录磁盘分区结构限制的GUID(全局唯一标志符)磁盘分区系统将在UEFI规范中被引入。MBR结构磁盘只允许存在4个主分区,而这种新结构却不受限制,分区类型也改由GUID来表示。在众多的分区类型中,UEFI系统分区用来存放驱动和应用程序。很多朋友或许对这一点感到担心:当UEFI系统分区遭到破坏时怎么办?而容易受病毒侵扰更是UEFI被人诟病的一大致命缺陷。事实上,系统引导所依赖的UEFI驱动通常不会存放在UEFI系统分区中,当该分区的驱动程序遭到破坏,我们可以使用简单方法加以恢复,根本不用担心。
 

1 必须搞清的几个UEFI问题
(1) UEFI启动模式 与 legacy启动模式
legacy启动模式: 就是这么多年来PC一直在使用的启动方式(从MBR中加载启动程序),UEFI BIOS作为一种新的BIOS自然也应该兼容这种老的启动方式;

UEFI启动模式: UEFI
BIOS下新的启动技术。如果你的PC在UEFI启动模式下预装了Win8,你会发现有两个很小的隐藏分区。一个叫ESP(EFI系统分区),另一个MSR(Microsoft保留分区,通常为128MB)。MSR是windows要求的。ESP对UEFI启动模式很重要,UEFI的引导程序是以后缀名为.efi的文件存放在ESP分区中的,ESP分区采用fat32文件系统。此外,可能还存在一个小分区叫WinRE

Tools,这个是win8的恢复分区,体积也很小。所以千万不要手贱把这三个分区删了。但对我们有意义的是ESP分区,windows下想访问ESP分区需用分区工具给它分配盘符并取消隐藏;而Ubuntu则直接将这个分区挂载到/boot/efi,直接用文件夹浏览器进去就可以看到各种.efi文件了。

因此第一个关键问题就是确定自己的启动模式,方法是进入BIOS,然后你会发现有一项叫"boot mode",选中"UEFI
boot"就是UEFI启动模式,选中"Legacy boot"就是Legacy启动模式。

(2) UEFI启动模式只支持64位的系统,所以预装的win8是64位的,ubuntu(kylin)也需要64位的。

(3) UEFI BIOS 和 Legacy BIOS
我们都知道可以在传统的bios中调整设备的启动优先级,UEFI
BIOS在UEFI启动模式下不但可以调整设备的优先级,还可以调整设备中引导程序的优先级,安装完ubuntu之后,你再进BIOS就会发现多了一个可选择的启动项叫ubuntu。

(4) UEFI启动模式下如何从u盘或移动硬盘引导
只要u盘或移动硬盘上有一个fat32的分区,分区的根目录下有个文件夹叫EFI,UEFI就会自动去查找相应的启动文件(.efi)
如果你刚制作了ubuntu(kylin)-13.04-64位的启动u盘,可以打开它,你会发现分区的文件系统是fat32,确实有一个EFI文件夹,进去看看就是各种.efi引导文件(这里再次强调64位,32位下你是找不到这个文件夹的)。因此现在想制作可启动的u盘或移动硬盘就简单了,只需要复制粘贴就行了。
部分UEFI BIOS还支持从NTFS分区中查找启动文件。

Q:GPT与(U)EFI有何关系?
A:这点通过百科即可了解。GPT本来可算是(U)EFI的衍生品,但是两者并无绝对的彼此依赖关系。也就是说,在BIOS/MBR分区表使用(U)EFI,或者在GPT使用BIOS/MBR都是可能的。这点也是大多数初级接触的用户的误区,认为两者是共生关系,缺一不可,事实上却完全不是如此。

Q:操作系统对GPT的支持如何?
A:这点也可以通过查找百科了解。现有的主流操作系统皆可支持GPT。但是,我在这里要把所谓的支持分成两部分来说,一部分是对GPT作为数据盘的支持,一部分是对从GPT磁盘启动的支持。如果仅将GPT用作数据盘,几乎都不存在问题。如果要从GPT启动,对于Windows而言,由于其依赖(U)EFI,因此仅有64位的Windows可实现。而在Linux等非Windows系统,通常不存在此限制。

Q:GPT有何优势?
A:首先最明显的优势自然是对于大容量硬盘(2.2TB或者2.0TiB以上)的原生支持。现在虽然厂商各自针对大容量硬盘推出了在BIOS/MBR分区表的访问方案,不过总觉得有点别扭。
其次,GPT不存在扩展分区和逻辑分区,所有分区全都是主分区,且理论上可存在的主分区个数是无限的(大多数操作系统会将主分区个数限制为128个,此处可能有谬误)。由此带来的好处显而易见,不必纠结于分区个数的限制和扩展分区/逻辑分区和主分区的转换了。而且这两年分区工具日渐成熟,对GPT的支持也已经算是良好了。
第三,GPT的分区表在GPT头部和磁盘尾部各存一份,这种机制使得GPT的分区表不容易破坏或丢失,像我这样没有备份分区表习惯的人也不怕丢分区了。

Q:我没有(U)EFI主板,能否从GPT启动Windows?
A:事实上是可以的,不过需要Hackintosh的Clover EFI
Loader,这个Loader可以在不支持(U)EFI的主板模拟(U)EFI,从而骗过操作系统。只不过Clover似乎并不能单独提取出来,因此差不多只有需要Hackintosh和Windows双系统的用户才会用到。

Q:为何Linux/BSD等操作系统不需要(U)EFI即可从GPT启动?
A:仔细研究下GPT的组成结构就不难发现,GPT的第一个扇区是一份出于兼容考虑而保留的保护性MBR(PMBR)。有些操作系统从GPT启动依赖的就是这份PMBR,而不是(U)EFI。在涉及PMBR时,其操作和BIOS/MBR完全一样。因此,Linux/BSD等操作系统是“以传统MBR方式”从GPT启动的。

BIOS与UEFI的更多相关文章

  1. BIOS与UEFI、MBR和GPT介绍

    操作步骤: UEFI是取代传统BIOS的,全称“统一的可扩展固件接口”.MBR则是传统的分区表类型,最大的缺点则是不支持容量大于2T的硬盘.GPT则弥补了MBR这个缺点,最大支持18EB的硬盘,是基于 ...

  2. 如何确定windows启动类型是bios还是uefi

    原文地址:http://www.kqidong.com/bios/3728.html 如何确定windows启动类型是bios还是uefi?随着装机越来越简单,大家对安装系统充满信心,但是了解到启动类 ...

  3. BIOS + MBR > UEFI + GPT

    BIOS + MBR > UEFI + GPT硬件接口系统与磁盘分区UEFI用于取代老旧的BIOS,而GPT则取代老旧的MBR. 名词解释: BIOS (Basic Input/Output S ...

  4. 操作系统的启动与引导问题 BIOS、UEFI、MBR、GPT

    关于ISO.WIM.GHO三者的正确理解. ISO(Isolation)文件一般以ISO为扩展名,是复制光盘上全部信息而形成的镜像文件. WIM是英文Microsoft Windows Imaging ...

  5. BIOS/MBR UEFI/GPT关系与区别-资料整理

    ---恢复内容开始--- 关于 BIOS/MBR UEFI/GPT他们之间的关系一直比较疑惑, 首先一点前提 BIOS UEFI 是一类,是控制硬件,引导启动的:MBR GPT是硬盘的分区定义.. 后 ...

  6. 【我所认知的BIOS】—> uEFI AHCI Driver(8) — Pci.Read()

    [我所认知的BIOS]-> uEFI AHCI Driver(8) - Pci.Read() LightSeed 6/19/2014 社会一直在变.不晓得是不是社会变的太苦开,而我没变所以我反而 ...

  7. Linux磁盘管理——BIOS和UEFI

    参考:BIOS and UEFI - CompTIA A+ 220-901 - 1.1 BIOS and UEFI As Fast As Possible 严格上来说BIOS和UEFI除了在搜索boo ...

  8. BIOS、UEFI、Boot Loader都是些什么

    BIOS.UEFI.Boot Loader都是些什么 目录 BIOS.UEFI.Boot Loader都是些什么 什么是BIOS 基本的输入输出是什么 自检程序"检"了什么 系统自 ...

  9. 【干货】BIOS、UEFI、MBR、GPT、GRUB 到底是什么意思?

    公众号关注 「开源Linux」 回复「学习」,有我为您特别筛选的学习资料~ 01 前言 在学习 Linux 系统启动原理之前,我们先了解下与操作系统启动相关的几个概念. 02 与操作系统启动相关的几个 ...

随机推荐

  1. obtainFreshBeanFactory方法源码跟踪

    看这篇文章之前可以先了解之前的跟踪流程,https://www.jianshu.com/p/4934233f0ead 代码过宽,可以shift + 鼠标滚轮 左右滑动查看 AbstractApplic ...

  2. GoJS实例4

    此示例更改链接数据的“to”属性,使链接连接到不同的节点.复制如下内容保存到空白的.html文件中,用浏览器打开即可查看效果 <!DOCTYPE html> <html> &l ...

  3. 实验吧-web-Once More(php ereg()漏洞)!!!

    题目:啊拉?又是php审计.已经想吐了. hint:ereg()函数有漏洞哩:从小老师就说要用科学的方法来算数. 给我们提示:1)ereg()函数漏洞 2)科学计数法 viewsource: < ...

  4. UVA - 524 Prime Ring Problem(素数环)(回溯法)

    题意:输入n,把1~n组成个环,相邻两个数之和为素数. 分析:回溯法. #pragma comment(linker, "/STACK:102400000, 102400000") ...

  5. sourceTree 生成公钥和私钥 然后拉项目代码

    第一步 用sourceTree生成公钥pub和私钥文件ppk    打开sourceTree -> 工具 -> 创建或导入ssh密钥 -> 点击generate -> 上面会显 ...

  6. 福州大学2020年春软工实践W班第二次作业

    作业描述 这个作业属于哪个课程 福州大学2020年春软工实践W班 这个作业要求在哪里 寒假作业(2/2) 这个作业的目标 开发一个疫情统计程序 作业正文 福州大学2020年春软工实践W班第二次作业 其 ...

  7. docker 后台运行和进入后台运行的容器

    先创建并进入一个新的被命名为newos的新容器    docker run -it --name newos docker.io/centos #创建并指定端口号映射 docker run -d -p ...

  8. .nerCore-RabbitMQDemo消息队列

    1.定义:MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.MQ是消费- ...

  9. 033-PHP取1-100的随机数

    <?php // 生成一个随机数 // 从1到100中取得随机数 for ($index = 0; $index < 100; $index++) { $number = (rand() ...

  10. ICE使用记录

    在使用ice中间件的过程中 如果A继承了 ****Disp_类 在使用A类的时候 ****Disp_类会浅表克隆该类出一个新的对象a 在调用重写的接口的时候是使用a 在主动调用A类的对象的时候使用的才 ...