揭秘系统引导

时间:2023-04-29 17:12:03 公文范文 来源:网友投稿

高手论技

编者按:启动,是可以正常使用的前奏汽车的启动、手机的启动、计算机的启动……日常生活中随处可见的启动,你可曾关注过?这其中,计算机的启动尤为复杂。在此,主持人和嘉宾将分两期揭秘系统启动时的引导工作。

当按下计算机的电源开关键,等待系统启动时,可能我们并没有留意屏幕上不断变化的英文,也没有思考过,为什么安装在硬盘中的操作系统能够启动。看似理所当然的背后,其实隐藏着不少“秘密”。

● 声名显赫的BIOS

1.BIOS是如何引导系统的

BIOS是英文“Basic Input Output System”的缩略语,直译过来后中文名称就是“基本输入输出系统”。其实,它是一组固化到计算机主板上的ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

当我们接通电源或系统被重置时,处理器会执行一个位于BIOS的代码。CPU会调用这个重置向量来启动一个位于BIOS芯片ROM(只读存储器)中的已知地址处的程序。通常,它执行一个启动自测(POST)来检查机器。然后,它从引导驱动器上的主引导记录(MBR)加载第一个扇区。

引导程序就位于硬盘或软盘中 MBR的第一个扇区里。此时引导程序被装入RAM(随机读写存储器)并执行。这个引导加载程序小于 512 字节(一个扇区)。

BIOS自检完成之后,将MBR的代码读入内存,管理权交给主引导记录MBR,MBR再读取DPT(Disk Partition Table,硬盘分区表),从 DPT中找出硬盘的所有分区哪一个是激活的主分区。DPT读完并找到主分区之后便开始找这个主分区的PBR(Partition Boot Record,分区引导记录),PBR位于激活主分区的第一个扇区。不同的操作系统PBR是不同的,Windows XP的PBR写进的代码是去找NTLDR,而Windows Vista和Windows 7的PBR里写进的就是去找 Bootmgr。

Bootmgr被找到之后管理权就交给了Bootmgr。Boot Manager调用Bootmgr与相应语言的bootmgr.exe,然后显示器上显示引导管理器,也就是选择多操作系统的那个文字界面。选择了相应的操作系统后,Bootmgr就去寻找系统分区Windows/System32下的Winload.exe加载操作系统内核。如果操作系统没有问题,之后我们就可以看到登录界面或桌面了。

2.BIOS的基本功能

我们已经了解了BIOS是如何引导操作系统的,那它具体有哪些功能呢?

(1)检测硬件(POST)。对计算机的基本硬件进行检测,看能不能正常工作,如我们看到的内存数不断跳动,这就是在做内存检测(Memory Test)。

(2)初始化硬件,设置其基本状态,使得整个计算机达到所谓的“可用状态”(Ready State)。硬件的设计厂家往往为了通用市场的考虑,不愿意将硬件设计成定制的状态。为了使硬件能够按照PC的架构工作,BIOS必须要按照由独立硬件供应商提供的手册将硬件设置好,如写几个必须的寄存器之类的,做一些Enable的工作。如果一个硬件没有Enable,那么在OS下将不可见。

(3)启动OS Loader加载操作系统。系统启动的方式是由BIOS规定的,操作系统必须按照BIOS的要求来设计。这也是为什么操作系统从DOS一直到Vista,都只能把自己的loader放在MBR,因为BIOS只读MBR。当然,在EFI时代,这一点有所改变,EFI支持的Boot From File不再需要MBR。

(4)在操作系统启动起来以后,一部分继续驻留内存,向操作系统以及其他软件提供基本的系统级的服务,如磁盘读写等。

(5)修复硬件缺陷。Intel在它的CPU里专门留了一个叫System Management Mode的模式,拥有最高的权限。SMM中断的时候,就连号称无所不能的Windows也不知道,这时就可以给CPU补bug了。事实上,每次BIOS开机的时候,都会更新CPU Microcode,同样是用来给CPU补bug的。

3.BIOS存储介质的变迁

计算机内存可以根据不同的标准进行不同的分类。如果以是临时还是永久存储为衡量标准,我们可以用下面的图来展示计算机的存储体系。

一张图看懂计算机存储体系

由于BIOS与硬件系统集成在一起,所以有时候也被称为固件。由于BIOS在系统启动前就要获得控制权,所以必须将其保存在永久存储区域中,一般保存在只读存储器(ROM)中。

在计算机发展初期,BIOS都存放在ROM中。ROM内部的资料是在ROM的制造工序中,在工厂里用特殊的方法烧录进去的,其中的内容只能读不能改,一旦烧录进去,用户只能验证写入的资料是否正确,不能再作任何修改。

EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了ROM芯片只能写入一次的弊端。EPROM芯片有一个很明显的特征:在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据,完成芯片擦除的操作要用到EPROM擦除器。EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线照射而使资料受损。

由于EPROM操作的不便,586以后的主板上BIOS ROM芯片大部分都采用EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程ROM)。通过跳线开关和系统配带的驱动程序盘,可以对EEPROM进行重写,方便地实现BIOS升级。

4.BIOS修复

BIOS负责引导系统的启动,一旦出现错误,可以想象得到,计算机系统就会瘫痪。臭名昭著的CIH病毒就是对BIOS进行破坏,从而使计算机无法启动。另外,不适当的升级BIOS也可能导致BIOS被破坏。只要BIOS芯片本身没损坏,都可以对其进行修复。现在大多数BIOS厂家都提供了启动引导块保护功能。这个启动引导块在一般情况下会被自动写保护,只有当刷新程序接收到对EPROM进行写入的明确命令后,启动引导块才能够被覆盖。此外,启动引导块还支持一些最基本的BIOS功能,如支持符合ISA协议的显卡、软盘驱动和键盘输入等。所以,只要系统具备了这几项条件,就完全可以使主板的其他BIOS功能得到重新恢复。

(1)热插拔修复。

热插拔的工作原理:BIOS是由POST上的电自检程序、系统启动自举程序、BIOS中断调用、BIOS系统设置程序四部分组成的,当BIOS完成POST上的电自检程序、系统启动自举程序后,由操作系统接管系统的控制权,完成机器的启动过程。在此之后,除了相关的程序要调用BIOS中的中断程序外,BIOS已完成了它的历史使命,如果此时我们冒险把BIOS芯片拔下来,根本不会影响系统的正常工作。这时,把损坏的BIOS芯片插回主板,运行相应的刷新程序就可以重新把BIOS文件刷回来。

修复BIOS时采用热插拔是危险的,原因很简单,即任何元件都有一定的功率限额,ROM芯片也不例外。在带电热插拔元器件时,由于各管脚的工作电压不同,热插拔过程中,各管脚不可能同时插上或拔下,因此电路中会不可避免地出现浪涌过电压和过电流,过高的浪涌电压会击穿芯片内的晶体管,而过大的浪涌电流会使芯片内的铝膜引线被熔断,从而导致芯片毁坏型失效。

(2)刷新修复。

如果BIOS的启动引导模块没有损坏,我们可以利用纯DOS启动盘来引导修复。因为软驱已经退出历史,可以用U盘制作启动盘,再将BIOS文件和刷新程序复制到启动盘,修改autoexec.bat文件,以便系统启动时自动载入并运行BIOS刷新程序。如果主板支持ISA显卡并且还有这样的古董的话,用户甚至可以将电脑启动到安全模式,从容刷新BIOS。

(3)用编程器修复。

如果BIOS引导模块已经被破坏,那么用编程器修复是既安全又方便的方法。用户可以在任何一台计算机上用编程器来升级或修复BIOS,当烧录好后,只要插在主板上即可使用。而且如果发现不正常可以重新烧录,省去了升级过程中怕出错的担忧,也避免了“热插拔”带来的危险。

(4)双BIOS的修复。

为了避免BIOS损坏而导致系统故障,有些主板厂商使用了双BIOS技术。其中备份BIOS平时并不工作,但当主BIOS出现问题时,重启电脑后主板自动由备份BIOS接手修复主BIOS,修复完成后重启由已修复好的主BIOS开机。可谓非常安全。还有一种情况,当BIOS出现错误导致电脑反复重启,此时主板不认为主BIOS有错误,因而无法自动启动修复程序。这时就要手动短接主BIOS的1、8脚,造成主BIOS错误从而启动修复程序。

(5)工具修复。

有些病毒会感染BIOS,如BMW病毒能够连环感染BIOS(主板芯片程序)、MBR(硬盘主引导区)和Windows系统文件,使中毒计算机无论重装系统、格式化硬盘,还是换掉硬盘都无法彻底清除病毒,这种病毒要彻底清除非常困难。这时我们可以下载病毒的专杀工具来清除。它的原理其实也很简单,用软件把BIOS读出来,检查里面是否有病毒代码,有的话,用工具清除后,再将BIOS代码写回即可。

5.BIOS的局限

BIOS既是操作系统和计算机硬件之间通讯的桥梁,更是充当了翻译的角色,从DOS时代起,微软的操作系统一直都是建立在“中断”这个概念上的,程序的切换依靠中断,系统的开关依靠中断,甚至我们按下了机箱上“Reset”键强制重启计算机,也还是中断在后台起的作用。为了延续整套的16位中断系统,无论是CPU开发还是软件升级,都得考虑中断模式。

在X86系列处理器进入32位时代后,由于兼容性的原因,新的处理器保留了16位的运行方式,此后多次处理器的升级换代都保留了这种运行方式。甚至在含64位扩展技术的至强系列处理器中,处理器加电启动时仍然会切换到16位的实模式下运行。BIOS程序以16位汇编代码、寄存器参数调用方式、静态链接以及1MB以下内存固定编址的形式存在了十几年,虽然各大BIOS厂商近年来努力地对其进行改进,加入了许多新元素到产品中,如ACPI、USB支持等,但BIOS的根本性质没有得到任何改变,16位的运行工作环境是其最为致命的缺点。

现有的BIOS不但在工作方式上存在令人不满之处,在工作能力上也令人颇有微词。BIOS发展到现在,用来存放BIOS程序的芯片最大不过2MB,换成实际字节就是256KB,面对这个数值,即使用户想为BIOS编写一些新的功能,BIOS芯片中也没有足够的空间让用户写入。这也是BIOS这十几年来一直停滞不前的原因之一。

所以BIOS经过了这些年的辉煌期,已经逐渐脱离了时代的发展,成为了PC功能和性能进一步提升的瓶颈,寻求BIOS的接任者已是必然。而BIOS,必将在璀璨光环的环绕中落下帷幕,成为历史的纪录。

● 继往开来的EFI和UEFI

正是由于BIOS已经老态龙钟,英特尔在2006年提出了EFI的概念,并且在它的推动下,各大硬件厂商联合升级了UEFI标准,使得BIOS终于可以突破瓶颈,具有无限的想象力。

EFI就是可扩展固件接口(Extensible Firmware Interface),是英特尔公司推出的一种在未来的类PC的计算机系统中替代BIOS的升级方案。

UEFI是统一的可扩展固件接口(Unified Extensible Firmware Interface),是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。UEFI是以EFI1.10为基础发展起来的,它的所有者是一个称作Unified EFI Form的国际组织。

1.EFI的特点

那么,EFI是如何解决传统BIOS所面临的棘手问题的呢?

(1)EFI以全新的图形操作界面代替BIOS的文字界面,支持高级显示模式,而且支持鼠标操作,使它在设置方面比传统BIOS直观、简单,更易上手,非常适合非专业的技术人员和英文不太好的用户。

(2)EFI像一个被简化了的操作系统,介于硬件设备及操作系统间,可以操作计算机的各种硬件。另外,由于符合TCP/IP网络协议,PC用户可以不进入操作系统,就能在EFI界面下使用网络资源,进行远程诊断、更换驱动、排除故障等。如果系统死机,用户可以通过EFI修改配置或者安装新的驱动,这是BIOS不能想象的。

(3)EFI采用模块化结构,将固件分为硬件控制与OS软件管理两部分,可以支持新外围设备、省略硬件检测实现高速启动,针对某模块单独对固件升级等。

(4)安全性的问题。相比BIOS的1M存储空间,EFI需要更大的存储空间,于是在硬盘中隔离出一个小分区作为存储空间。这样虽可装入更多实用的工具,如硬盘分区、多操作系统引导、系统备份和恢复等,甚至能作为数字版权控制工具和电子安全防范工具。但硬盘是相当脆弱的配件之一,如果出现问题,后果不堪设想。EFI不再采用BIOS的机器汇编语言,而是使用了通用性比较强的C语言,尽管在技术更新上比BIOS有很大优势,但对病毒、网络攻击等问题,与BIOS相比不一定更安全。

2.EFI的组成和存储

由于EFI要实现比传统的BIOS更多的功能,主板ROM芯片中的512KB的空间是远远不够的。因此,除了最基本的引导模块保留在ROM芯片中,EFI还要在硬盘上单独保留一个分区作为专用,以充分展现其功能。

EFI的存储空间为50~100MB,具体视驱动文件多少而定。在这部分空间中,包含有Pre-EFI初始化模块、EFI驱动执行环境、EFI驱动程序、兼容性支持模块(CSM)、EFI高层应用及GUID 磁盘分区等几个部分。

3.EFI引导系统过程

EFI在开机时的作用和BIOS一样,就是初始化PC,但在细节上却又不一样。BIOS对PC的初始化,只是按照一定的顺序对硬件通电,简单地检查硬件是否能工作,而EFI不但检查硬件的完好性,还会加载硬件在EFI中的驱动程序,不用操作系统负责驱动的加载工作。EFI的创新之处,是颠覆了BIOS的界面概念,让操作界面和Windows一样易于上手。在EFI的操作界面中,鼠标成为替代键盘的输入工具,各功能调节的模块也做得和Windows程序一样,可以说,EFI就是一个小型化的Windows系统。

在现实中,EFI初始化模块和驱动执行环境通常被集成在一个只读存储器中。Pre-EFI初始化程序在系统开机时最先执行,它负责最初的CPU、主桥及存储器的初始化工作,紧接着载入EFI驱动执行环境(DXE)。当DXE被载入运行时,系统便具有了枚举并加载其他EFI驱动的能力。在基于PCI架构的系统中,各PCI桥及PCI适配器的EFI驱动会被相继加载及初始化。此时,系统枚举并加载各桥接器及适配器后面的各种总线及设备驱动程序,周而复始,直到最后一个设备的驱动程序被成功加载。正因如此,EFI驱动程序可以放置于系统的任何位置,只要能保证它可以按顺序被正确枚举。

4.EFI的优势

对于操作系统来说,如果主板使用的是BIOS,那么操作系统就必须面对所有的硬件,大到主板显卡,小到鼠标键盘,每次重装系统或者系统升级,都必须手动安装新的驱动,否则硬件很可能无法正常工作。而基于EFI的主板则方便了很多,因为EFI架构使用的驱动基于EFI Byte Code。EFI Byte Code有些类似于Java的中间代码,并不由CPU直接执行操作,而是需要EFI层进行翻译。对于不同的操作系统来说,EFI将硬件层很好地保护了起来,所有操作系统看到的,都只是EFI留给EFI Byte Code的程序接口,而EFI Byte Code又直接和Windows的API联系,这就意味着无论操作系统是Windows还是Linux,只要有EFI Byte Code的支持,只需要一份驱动程序就能“吃遍”所有操作系统平台。

更为神奇的是,EFI Byte Code驱动还能绕过操作系统,直接安装在EFI环境中,这样对硬件的控制就由EFI层负责,EFI向操作系统直接提供硬件操作的接口,不需要操作系统再调用驱动。这种方式的优点是不需要进入操作系统,只需要进入EFI界面更新驱动程序就可以完成,而且不需要对每一个操作系统进行驱动升级,只要在EFI界面中升级一次,所有上层的操作系统都可以直接调用新的EFI接口。

EFI在开机之始就能够驱动所有的硬件,网络当然也不例外,所以在EFI的操作界面中,程序可以直接连接互联网,向外界求助操作系统的维修信息或者在线升级驱动程序。

5.BIOS和EFI的对比

对比BIOS和EFI,它们有以下区别:①EFI编码99%都是由C语言完成,而BIOS基本上是用汇编语言完成;②BIOS采用中断、硬件端口操作的方法,EFI采用了Driver/protocal的新方式;③BIOS支持X86模式,EFI直接采用Flat mode(也就是不能用DOS了,现在有些EFI能用是因为做了兼容,但实际上这部分不属于EFI的定义);④BIOS采用二进制code,EFI采用Removable Binary Drivers;⑤BIOS启动调用Int19,EFI直接利用protocol/device Path;⑥对于第三方的开发,BIOS基本上做不到,EFI却便利得多了;⑦EFI弥补了BIOS对新硬件支持不足的毛病。

● 革新的GPT硬盘分区模式

除了针对BIOS缺陷的革命,EFI还带来了新的磁盘分区模式GPT。GPT分区模式的一个最明显的改进就是对硬盘容量2TB限制的突破。

1.硬盘容量限制又来了

硬盘容量限制其实一直伴随着我们。最初是528MB、2.1GB,后来是3.2GB、4.2GB,直到8.4G和137G的限制。这主要是由于操作系统及寻址方式的局限造成的。 

随着硬盘的容量不断增加,价格不断下降。如果我们新买了一个3TB的硬盘,在分区时又会出现新问题:怎么硬盘只能分出2.2TB,剩余部分没办法管理呢?有没有办法解决?2.2TB容量限制是传统的MBR硬盘分区模式引起的,而EFI方案中的GPT分区表能完美解决这个问题。

传统的分区方案(称为MBR分区方案)是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中,每个分区项占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等内容。由于MBR扇区只有64个字节用于分区表,所以只能记录4个分区的信息。这就是硬盘主分区数目不能超过4个的原因。后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念。但每个分区项仍用16个字节存储。

在MBR分区表中最多能有4个主分区或者3个主分区+1个扩展分区:从主引导记录的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Primary partition)。

MBR分区方案无法支持超过2TB容量的磁盘。因为这一方案用4个字节存储分区的总扇区数,最大能表示2的32次方的扇区个数,按每扇区512个字节计算,每个分区最大不能超过2TB。磁盘容量超过2TB以后,分区的起始位置也就无法表示了。(前面讲到MBR硬盘最多管理2.2TB容量,是对应厂商以1000为步进单位来说的,而这里是以1024作为步进单位来讨论,所以换算成容量为2TB。)

2.革新的GPT分区模式

为解决上述问题,微软和英特尔在EFI方案中开发了GPT分区模式。

GPT,即全局唯一标识分区表(Globally Unique Identifier Partition Table Format),它还有一个名字叫GUID分区表(GUID Partition Table) 。GPT是EFI方案的一部分,但并不依赖于EFI主板,在BIOS主板的PC中也可使用GPT分区。与MBR最大4个分区表项的限制相比,GPT对分区数量没有限制,但Windows最大仅支持128个GPT分区。GPT可管理硬盘大小达到了18EB(1EB=1024PB=1,048,576TB),不过NTFS格式最大仅支持256TB。在目前来看GPT可管理的硬盘容量还是一个天文数字,如果硬盘超过256TB,那就是NTFS格式逐渐被淘汰的时候了。

GPT的分区信息是在分区中,而不像MBR一样在主引导扇区。为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一个保护分区,这种分区的类型标识为0xEE,这个保护分区的大小在Windows下为128MB,Mac OS X下为200MB,在Window磁盘管理器里名为GPT保护分区,可让MBR类磁盘管理软件把GPT看成一个未知格式的分区,而不是错误地当成一个未分区的磁盘。

GPT分区的一大优势就是针对不同的数据建立不同的分区,同时为不同的分区创建不同的权限。就如其名字一样,GPT能够保证磁盘分区的GUID的唯一性,所以GPT不允许对整个硬盘进行复制,从而保证了磁盘内数据的安全。

3.操作系统对GPT的支持

从以上两个表中可见,所有32位的Windows系统都是无法使用GPT分区格式的硬盘作为启动盘的,而最常使用的32位Windows XP甚至不能读写GPT硬盘,所以如果使用32位的Vista或更早的Windows系统,那GPT硬盘只能挂载为从盘作为数据盘使用。而Vista以后的64位Windows系统都既支持GPT硬盘的读写,也在UEFI支持下可以作为启动盘使用。当然,我们知道BIOS在引导系统时会去硬盘的MBR中读取引导记录,所以要从GPT硬盘启动,我们就必须要有UEFI的支持,否则是不能成功的。另外,Linux和MacOSX10.6+对GPT提供了完美支持。

在计算机的引导过程中,BIOS在二十多年来作出了举足轻重的贡献。随着硬件和操作系统的不断发展,BIOS已经无法适应时代的潮流,EFI和UEFI取代BIOS是大势所趋。目前,使用UEFI和BIOS兼容的主板大量出现,可以预见,UEFI完全取代BIOS已经为期不远了。

推荐访问:揭秘 引导 系统