提到BIOS,就不得不提IBM这个行业巨头,它不仅发明了BIOS,同时催生了一个商业模式:IBV(Independent BIOS Vendor)独立BIOS供应商;时至今日,IBV已成为了计算机产业生态中重要的一个组成部分。
IBM起初只是生产计时器、穿孔卡、统计分类机等产品的小公司,在经过创始人Thomas J. Watson和他儿子Thomas J. Watson Jr的苦心经营下,逐渐成长为计算机行业的巨头,并开创了个人计算机的新时代。很多计算机领域的技术都来自于IBM,比如制造了第一个硬盘驱动器、第一个软盘驱动器、第一个广泛使用的高级编程语言FORTRAN、关系数据库、第一台超级科学计算机、第一个RISC设计和第一块DRAM芯片等等。
第二次世界大战期间,由于美国军方在计算导弹弹道轨迹的过程中涉及流体力学的海量数据计算已无法通过手工方式完成,因此产生了通用计算机的现实需求。此时以冯·诺伊曼(Von Neumann)、毛奇莱(John Mouchly)和艾科特(Presper Eckert)为首的科学家为美国军方设计了世界第一台存储程序通用电子计算机EDVAC,这其中就包含影响至今的“冯·诺伊曼-电子计算机体系结构”,由此开启了通用计算机的时代。
19世纪30年代,刚起步的IBM主要从事收银机、制表机和穿孔卡的研发和销售,由于其制表机主要面向政府和公司,因此IBM平安渡过了1929-1939的经济大萧条并发展壮大,到1940年,IBM员工上万,营业收入达到4500万美元。二战过后,掌权的小沃森(Thomas J. Watson Jr)看到了电子计算机在今后社会中的重要作用和深远影响;因此在1951年,IBM决定开发商用电脑,并聘请冯·诺伊曼担任科学顾问,于1952年研制出了IBM第一台存储程序计算机,即通常意义上的电脑:IBM 701, 这台大型计算机使得IBM成功在计算机领域站稳了脚跟,IBM又相继推出了702、704、705等多款机型,将计算机全面引入商业领域,通过不断的发展壮大,最后成为行业巨头,到今天为止,IBM也是大型计算机和小型计算机的巨头,最大的开源Linux设备的提供商。
1978年,Intel发布了自己的首枚16位微处理器8086;当时IBM占有了大型机和小型机的绝大部分市场,IBM为了短而快的推出个人电脑产品,决定放弃自己研发,转而采用组装第三方软硬件的方案;于是在1981年8月12日,基于Intel-8086处理器和微软的MS-DOS 1.14等第三方的软硬件,推出了自己的首款个人电脑产品IBM 5150,又称为IBM Personal Computer,简称IBM PC;IBM PC一经推出,就得到了市场的欢迎,广受好评,而且销量巨大,短短两年时间,销售就突破了750000台。IBM PC的诞生具有划时代的意义,它不仅创造了Personal Computer的概念,同时也为PC(个人计算机)制订了全球通用的工业标准。
IBM PC及其兼容计算机的组成框图--《Linux内核完全注释》
在IBM PC 5150中,所有的硬件包括CPU(处理器)以及操作系统都来自第三方,但IBM也有自己的技术,自研了BIOS,即基本输入输出系统,其主要的作用是在计算机开机时,进入操作系统之前,对硬件进行状态检测和初始化,BIOS在检测CPU(处理器)、内存、键盘等硬件一切正常后,才会加载操作系统的引导代码,并将控制权转交给操作系统,即通过IBM的BIOS,将上下游的处理器和操作系统,以及其他的外设硬件连接起来,就像粘合剂一样,让所有的硬件软件一起有效的运行。
在推出5150的同时,IBM还出售《IBM PC Technical Reference Manual》这本技术手册,而这份资料中包括一段ROMBIOS源代码。同时因为BIOS由汇编语言编写,且代码量不算大,于是乎,很多公司通过这份手册中的源码参考和对BIOS程序的逆向工程,“山寨”了IBM的BIOS,再组装上软硬件,推出了更加便宜的PC(个人计算机)兼容机,对IBM的市场形成了极大的冲击。虽然后来IBM通过法律途径告倒了一大批山寨企业,但也因此摧毁了自己在PC(个人计算机)领域的大好形势。
虽然众多山寨公司都被IBM成功阻断了发展道路,但仍有一家名为康柏的公司,通过参考IBM的技术手册,采用“净室(Clean Room)”的方法自研了兼容的自主BIOS,包括后来的Phoenix也通过“净室”方法自研了第一个独立的PC BIOS,并于1984年发布。独立BIOS供应商(IBV, Independent BIOS Vendor)就此诞生,一众的公司也由此崛起,如AMI、Award、Chips & Technologies、General 电脑 Software、Microid Research、Quadtel、Unicore等;IBV也渐渐形成产业链中的重要一环,直到后来Intel、AMD和微软联合推出了更加开放和更加安全的UEFI行业标准,BIOS才慢慢退出了历史的舞台。
X86体系有着开放的生态环境, 有OS(操作系统)厂商,如Windows、Ubuntu等;有CPU(处理器)厂商如AMD、Intel;有硬盘、显示器、主板、内存等各种不同的硬件厂商;Wintel的之所以能够大放异彩,同样也是因为这开放的生态,众多的企业都能从中分一杯羹,IBV(BIOS独立供应商)的成功壮大同样如此。
BIOS被称作计算机产业链中的盐,IBV一端面向CPU(处理器)厂商,一端面向各种硬件厂商,还有一端面向操作系统厂商;BIOS可通过中断控制器告诉CPU(处理器)各类硬件的中断号,以便CPU(处理器)知道硬件中断该交给哪个中断服务例程处理,因此CPU(处理器)厂商也乐于IBV的存在,因为不用去考虑兼容市面上众多的硬件,从而能专心自己的技术研究,由IBV负责整合所有的硬件。另一方面,BIOS能与各类硬件直接交互,通过扫描探测获取所有硬件信息,并将操作系统所需要的硬件信息传递给操作系统,包括可用的物理内存映射,硬盘参数、ACPI(Advanced Configuration and Power Interface:高级电源管理接口)表等信息。由此可见,BIOS在CPU(处理器)和操作系统之间充当着桥梁的角色,起着承上启下的过渡作用。
BIOS的主要功能BIOS有三大主要功能:开机检查、引导操作系统和提供中断服务;
在开机后,首先由BIOS检查硬件的状态是否正常,并对硬件设备相关寄存器进行适当的初始化,让其进入到Enable的状态;通过BIOS也能设置各种硬件参数,比如系统时间,启动设备的先后检测顺序、电源管理参数的配置,IDE(Integrated Drive Electronics:电子集成驱动器)接口设置等电脑。
在使用Legacy BIOS(传统BIOS)启动计算机的过程中,CPU(处理器)上电复位后,CS段寄存器被置为0xFFFF,IP寄存器被置为FFF0,即CPU(处理器)第一条加载的指令地址为0xFFFFFFF0h,而这个地址就是BIOS的入口地址,之后由BIOS完成CPU(处理器)和内存等硬件一系列检测和初始化,之后BIOS会转到内存地址0x7C00处加载整个磁盘的MBR(主引导记录),然后在MBR(主引导记录)的分区表中找到活动分区,由活动分区中最开始的扇区,即OBR(操作系统引导记录),也称为OS内核加载器,引导CPU(处理器)一步步进入操作系统,最终由操作系统接管整个计算机的资源。
在实模式下,由于能够寻址的范围只有1M,能够给操作系统使用的也只有640K,所加载的程序有限,因此一些基本的硬件I/O操作需要借助BIOS来完成;BIOS在硬件之上形成一层软件抽象,通过端口号与硬件直接交互;CPU(处理器)通过INT软中断,调用BIOS对应的中断服务例程,完成相应的硬件操作,比如屏幕显示,读写硬盘,软盘的马达操作等。
Legacy BIOS(传统BIOS)的不足随着X86的越来越繁荣而被暴露出来, Legacy BIOS(传统BIOS)主要存在以下不足:
1. 安全防护弱
只有简单的密码口令保护,极弱的防护能力,极高的权限,让一开始的Legacy BIOS(传统BIOS)成为很多木马和病毒的首选目标,其中就有著名的CIM,BMW,谍影等;后来的BIOS拒绝任何写入,起到了一定的安全防护。
2. 性能低
经过几十年的发展,各类硬件技术都在迅速的发展,CPU(处理器)已从当初的16位发展到64位,同时各种扩展设备也在不断的加入到操作系统中;而在这变化的30多年里,BIOS却始终停留在16位,最多能寻址1M的内存,而一次也只能读取64K的磁盘数据,性能表现较差;
3. 支持的硬盘容量有限
Legacy BIOS(传统BIOS)只能识别MBR(主引导记录)引导的硬盘,但MBR(主引导记录)由于在早期设计时没有考虑的足够周全,最多只能支持4个主分区,而硬盘的最大容量也只能支持到2TB,无论是对于企业还是个人来说,都已经有点相形见绌。
4. 扩展设备支持有限
现在的主板可配置的扩展设备越来越丰富,越来越多,而Legacy BIOS(传统BIOS)缺乏大数量的外围设备的优化,因此初始化过程很低效,严重影响开机速度;需要30秒以上甚者1分钟的开机时间,给用户带来很不好的体验。
5. 扩展能力有限
Legacy BIOS(传统BIOS)要添加较复杂的硬件,就需要把“驱动(Option ROM)”加载到一段地址固定长度仅128KB的内存空间,由此可能造成内存空间不足,无法对硬件进行初始化;
6. Legacy BIOS(传统BIOS)使用汇编进行开发,维护难度高;
由于在实模式下,内存空间的限制,只能使用汇编语言进行编码,在如今高级语言普及的大环境下,开发和维护的难度都相当高;
可以看见,传统(Legacy)BIOS的设计已经无法跟上时代的步伐,无法满足呈指数级发展的计算机行业需求,大家都在寻找一种新的技术来引导计算机系统,并且涌现出了多种新技术,而其中发展的最好的就是由Intel设计,微软主推的开源规范:UEFI (Extensible Firmware Interface)可扩展固件接口;现在基本上Legacy BIOS(传统BIOS)已经完全被UEFI取代,消失在了历史的长河中。
BIOS或者类似的系统是必需的吗,如果没有BIOS,计算机能否正常使用呢?下面我谈一下个人看法。
各硬件厂商在生产制造硬件的时候,并不希望成为只适用于特定平台和特定场景下的定制化产品,所以通常会给硬件搭配控制系统,通过对控制系统中的寄存器设置不同的状态值,兼容不同平台对硬件的要求。
计算机的发明主要是为了解决巨量数据计算,而主要依赖的硬件就是CPU(处理器)。按照CPU(处理器)的设计原理,CPU(处理器)在上电复位后,会从固定的内存地址加载第一条指令并往下执行,这是CPU(处理器)工作的起始点。在早期,可能因为电压不稳,导致CPU(处理器)无法正常工作,还需要等到电压稳定后才能让CPU(处理器)开始工作。另一方面,操作系统在运行之初就需要用到内存,存储介质(硬盘/软盘),键盘,显示器等硬件,也就是说,操作系统需要这些硬件在确定可用的状态。
再次想一想,BIOS是必需的吗,我认为是的,因为这些硬件始终都要被置为某种平台下的可用初始状态,而不同平台对于硬件的初始状态要求有可能不一样,因此必须用一种方式来保证各种硬件在特定平台上的初始状态是可用的,使得各种硬件能在一起协同工作。换个角度来看,计算机的产业发展过程可被视为各类硬件在不同层次的统一标准化的过程,而BIOS则是最底层,最接近硬件的标准化,所以BIOS的存在是必需也是必然的。也许Legacy BIOS(传统BIOS)已经被时代所淘汰,但是新的类BIOS技术会随着产业的发展不断更新迭代,今天是UEFI,明天可能是别的技术,如最新的 AMI的Aptio? V, LinuxBoot,VaultBoot等,都声称是下一代的BIOS。
参考资料:
《浪潮之巅》—— 吴军
UEFI和BIOS探秘(https://www.zhihu.com/column/UEFIBlog )
电脑