很久以前,计算机没有bootstrap ROM。其中一个具有修改RAM的直接接口,可以暂停CPU,更改RAM,然后重新启动CPU。因此,当您重新启动系统时,您必须确保CPU已停止,输入您的引导代码,该代码将从纸带或诸如此类的东西加载第二阶段引导加载程序(2bl),然后“取消”您的CPU。
ROM显然在这里节省了一天。当您打开基于x86 CPU的系统时,它开始在地址FFFF:FFF0上执行。这是x86 CPU的硬连线功能。ROM必须驻留在该地址,实际上BIOS的上半部分(通常从E000:0000开始)。
术语BIOS是旧CP / M操作系统的延续。CP / M的结构是最低层的ROM BIOS,中间的BDOS(基本磁盘操作系统)和用户面前的CCP(控制台命令处理器)。BIOS具有执行低级功能的例程,例如读/写特定磁盘扇区,从键盘读取密钥,将字符写入屏幕等.BDOS将使用BIOS功能来实现文件系统,并且CCP将是使用BDOS和BIOS功能的命令shell。想法是BIOS将包含硬件特定接口,并且BDOS和CCP在任何CP / M系统上都可以是相同的。
BIOS还将保存处理器执行的初始代码,初始化所需的硬件,显示启动画面,从第一个磁盘驱动器的第一个扇区加载2bl并运行它。
MS-DOS 1.0,几乎是CP / M的x86实现,从版本2.0开始添加了类似Unix的类似功能,结构相同。当时的IBM PC BIOS还包括原始AT BIOS中的视频模式切换,图形功能和硬盘支持等增强功能。
但是,大多数DOS程序一旦启动就不使用BIOS功能; 他们出于性能原因直接访问硬件。在32位CPU变得司空见惯之后,这一点尤其重要; BIOS仅在较旧的16位模式下工作,因此从32位模式调用它会进一步降低性能。
在1990年左右,PC架构开始扩展,并开始包括APM,PnP和PCI等新产品。因此BIOS开始承担额外的功能并变得更大。PC也开始使用芯片组而不是分立元件。初始化芯片组需要使RAM和其他组件(如PCI总线)可用,因此必须由BIOS引导代码处理。由于某些原因,许多芯片组供应商不愿意记录他们的设置过程如何工作。
APM由BIOS功能处理; 即,为系统供电,操作系统必须调用APM功能。APM的继任者ACPI是BIOS现在所做的重大事情。ACPI BIOS负责在内存中创建一堆表,描述许多非即插即用硬件组件。启动操作系统使用它来确定有多少CPU,系统有多少RAM插槽,系统是台式机还是笔记本电脑,安装了多少电池等等。还必须调用ACPI BIOS来关闭电源。系统,或将其置于睡眠状态等。但是,操作系统代码无法处理ACPI调用。
大多数时候BIOS更新是为了修复ACPI错误,因为ACPI很复杂且很难,或者引入了增强型微码。所有现代CPU都允许微代码更新,如果发布新的微代码更新,则必须更新BIOS以安装新的微代码。正常程序可以更新CPU的微码。
SMI也由BIOS处理。我很确定PC中的大多数热量和电源相关硬件都会触发SMI,其例程会调整风扇/ CPU速度和/或其他内容。其他事情可以触发SMI; 查看有关系统管理模式的维基百科文章。但是,如果记录了硬件接口,也没有理由不能用操作系统代码替换此代码。
除电源事件外,现代操作系统根本不使用BIOS进行硬件访问。某些引导加载程序确实使用BIOS字符I / O来显示文本,并且磁盘I / O加载操作系统引导代码。
所以我希望这能够揭示BIOS的作用,而且大多数情况下你对它的工作原理是绝对正确的。