新手入门,电脑BIOS的那些事儿
一说到BIOS,很多人脑海里面都会浮现出那些专业的名词、复杂的代码。其实这个电脑里面的“基本输入输出系统”,并没有大家想象中那般神秘、那么高不可攀。今天我们要做的事情就是带着大家一起去揭开它那神秘的面纱,看看BIOS都有哪些功用,它是如何构成,又是如何来维持系统最底层运作的呢?
抽丝剥茧:BIOS的基本功能
很多人都知道BIOS是工作在计算机最底层的的基本输入输出系统,它是英文Basic Input/
Output System的首字母缩写。从本质上来讲,狭义的BIOS就是指加载在电脑硬件系统上的最基本的软件程式码,如果我们按照功能来划分,BIOS有5大功能:
1 .开机自我测试:检查中央处理器 (CPU) 及各控制器的状态是否正常;
2.初始化动作:针对内存、主板芯片组、显卡及周边装置做初始化动作;
3.记录系统设定值:提供各元件的基本设定,如显示器、键盘、处理器、内存等;
4.提供常驻程式库:提供操作系统或应用程式呼叫的中断常驻程式,如INT 10H等;
5.加载操作系统:从储存装置中加载操作系统到随机存取内存。
通俗来讲,我们可以将BIOS看作是专门与硬件沟通的微型操作系统,通常使用与CPU相容的组合语言来编写(机械语言+高级语言)。但在笔者看来,BIOS既是英文的首字母缩写,同时也具有希腊文字“βιοζ”(生命)的寓意。
追根溯源:BIOS诞生与EFI横空出世
真正的BIOS技术起源于IBM PC/AT机器的流行,以及第一台由康柏公司研制生产的“克隆”PC。在启动的过程中,BIOS担负著初始化硬件、检测硬件功能以及引导操作系统的责任。在早期,BIOS还需要提供一套运行时的服务程序给操作系统或者应用软件来使用。
可以说,BIOS是整台计算机最核心的灵魂,所以必须找到一个合适的容器来妥善保管;否则一旦魂飞魄散,那整台计算机也就失去了工作的能力。由于特殊的工作要求,BIOS中的微代码程序必须存放在一个断电后能够不丢失信息的只读存储器中,当系统加电或者被重置时,处理器的第一条指令会将地址定位到BIOS存储器中,让初始化程序开始执行。
目前大多数主板都采用的EFI
英特尔公司在2000年的时候开发出可扩展固件接口(Extensible Firmware Interface),这是一种与BIOS功能上类似,但是编程语言更加高级的开发与控制界面,后被称为EFI规范;由于BIOS在计算机用户的印象中根深蒂固,所以很多时候大家又将EFI称为“EFI BIOS”。为了推广EFI,业界很多著名公司走到一起并成立了统一可扩展固件接口论坛(UEFI Forum),之后英特尔将EFI 2.1规范分享给业界,用以制定新的国际标准UEFI规范,其目前最新的版本为2.1b。根据英特尔公司的预测,今后几年将有超过半数的计算机主板使用EFI来编写最底层的操作语言。EFI不同于传统的使用16位编译的BIOS程序,它是基于32位程序的,因此与我们平常使用的操作系统更为接近,可以提供更友好的操作项目与菜单。
UEFI BIOS界面
目前,大部分都是采用的UEFI界面。EFI是UEFI的前身。通俗地说,EFI相当于早期版本,UEFI可以看做是升级版。
沧海桑田:BIOS容器的变化
对于熟悉硬件的朋友们来讲,一说到BIOS除了前面提到的软件代码,我们还会联想到主板或者是显卡上的芯片—从某种意义上来讲,软件代码是Firmware(固件),而“硬件BIOS”则是存放Firmware的芯片。之前较早期的BIOS芯片是不能够被修改的,也就是一次固化成型;而后使用的是可以用紫外线擦除的EEPROM,发展到现在通常使用的是可以反复擦写的Flash材料。
早期LPC总线封装的BIOS芯片
早期比较常见的BIOS封装芯片有两种。一种是PLCC封装的具有32个针脚的BIOS芯片,采用LPC总线(Low Pin Count总线),由于该总线已经比较落后,不论是传输速率还是运行频率已经没有优势,因此正逐步被SPI总线取代。32针BIOS芯片多见于比较早的型号,AWARD BIOS也比较偏好使用该型BIOS。
SPI总线封装的BIOS芯片
第二种便是具有8个针脚的基于SPI总线(Serial Peripheral Interface Bus)的BIOS,是一种串行总线。相比LPC总线的32针BIOS,SPI总线具有更高的传输速率,而且需要的针脚数也大为减少。如果我们要实现EFI BIOS等诸多需要高带宽的应用需求时,就是使用SPI总线的BIOS。
刨根问底:BIOS如何来工作?
在下图中大家可以看到BIOS的基本工作时序图,这个过程从电源给主板供电时就开始了。我们按下计算机电源按钮的那一步,实际上是这个过程中的第三步,BIOS会将主板上的开机信号线与地线短接— 将PWRBTN#信号拉低,以此来开启ATX电源。经过一系列的信号传输之后,到第十步BIOS就会接管整个系统,这个过程由主板上的快闪存储器(Flash Memory)执行,并将芯片以及内存子系统初始化。
典型的Intel平台的开机时序图
接着,BIOS会将自身的微代码从快闪存储器解压到系统的主内存,并在那边开始执行。这些微代码中首先包含的是诊断功能,以保证某些重要的元器件,像是键盘、磁盘以及各种输入输出埠(接口),可以正常运作并正确的初始化。几乎所有的BIOS都会选择性地执行 CMOS 内存的设定程式,也就是BIOS会自动读取使用者自定义的很多材料,如时间、日期、硬盘启动细节等。这里尤其要提到的一点是硬盘启动细节,现在所有的BIOS都可以让用户选择从哪个设备开始引导启动,或者从哪块硬盘上加载操作系统,这对与安装操作系统或者使用多个操作系统的用户来讲非常方便。
BIOS中的Firmware
讲到这里,大家对BIOS的原理、硬件以及工作方式有了大致的了解。下面我们再来看看BIOS里面的固件,也就是Firmware信息。
从某种意义上来讲,Firmware就是使用编程的语言来诠释硬件的功能。相对于最终消费者而言,Firmware的使用意义并不大,而对于硬件设备本身而言,Firmware就是不可或缺的了。规律性的固件升级可以提升硬件效能以及可靠性,而且当电子产品售出之后,用户还可以通过升级Firmware的方法让设备得到更新。例如智能手环升级固件之后能实现支持更多的平台或者手机型号一样。对于计算机的主板而言,Firmware的作用无疑是让主板能够对硬件的性能支持更好。
当然,不适当地执行或者终止BIOS更新可能导致电脑或者其他电子设备无法正常使用。例如很多年前爆发的CIH病毒,就是针对主板BIOS进行攻击,让BIOS失效进而整台计算机也就无法正常运作。为了减少或者避免因BIOS损坏而造成的“怠机”事故,很多主板采用了备份BIOS的办法,也就是常说的“双BIOS主板”。
写在最后
随着技术的发展,BIOS也经历了从无到有,从小大大,从简单到复杂的发展变迁。作为计算机最底层默默奉献的“最底层工作人员”,BIOS也见证了PC硬件一日千里的发展速度。在很多人看来深不可测的BIOS,经过我们的讲解之后各位是否发现其实并不神秘。
在BIOS的研发过程中,工程师们也使用了很多人性化以及模块化的设计,这样经过层层抽丝剥茧之后,大家甚至会觉得BIOS触手可及。在经过简单的研究之后,我们甚至可以自行修改一些简单的项目,例如更改开机LOGO,或者把自己DIY的电脑变成你想要的“品牌机”,DIY的精神就是发挥自己的智慧,充分发挥BIOS的功用,让它尽可能为我们所用。
【硬件天下】微信公众号:硬件天下(yingjiantianxia)