我正在读的书:计算机工作原理:技术的演变在第 4 章中,作者说道:
操作系统不能单独工作。它不仅依赖于其他程序的协作,还依赖于与 BIOS 和软件驱动程序的顺利配合。BIOS 或基本输入/输出系统由 PC 芯片上的代码组成。它充当硬件、处理器和操作系统之间的中介。设备驱动程序就像专门的 BIOS。驱动程序将操作系统和 BIOS 中的命令转换为特定硬件(如打印机、扫描仪或 DVD-ROM 驱动器)的指令。当操作系统的某些部分从磁盘加载时,它们会被添加到 BIOS 中,然后由设备驱动程序连接起来,所有这些组件都会执行常规硬件功能。操作系统实际上是由这三个组件以及大量其他程序、通用代码和数据文件组成的。
这里最重要的部分是:
当操作系统的某些部分从磁盘加载时,它们会被添加到 BIOS 中,然后由设备驱动程序加入
BIOS 中添加了什么?我不知道 BIOS 被操作系统修改了?还是我理解错了?
答案1
首先,了解 x86 硬件具有中断描述符表它位于 RAM 中。在最初的 8086 CPU 上,它固定在内存位置 0,即 RAM 的第一个位置,但它可以在后来的现代 CPU 中移动。BIOS 最初将其设置在内存位置 0。
IDT 是指向内存中其他位置(可以是 ROM 或 RAM)例程的 32 位指针列表,编号为 0x00 到 0xFF。
如今,前 32 个地址被保留给 CPU 本身使用。例如,一般保护故障将导致调用向量 0x0D 指向的例程。
可以使用软件中断指令“调用”这些向量之一中指向的任何例程INT
。因此,INT 0x0D
将调用与调用一般保护故障时调用的相同例程。
DOS 时代的 BIOS 使用了许多这样的接口来提供标准接口BIOS 调用. BIOS 传统上使用的一些参数与 CPU 使用的参数重叠。
DOS 本身也利用了单个中断,0x21
以允许程序以标准方式调用DOS功能。
现在,一个众所周知的 BIOS 中断是0x13
,允许读取或写入磁盘设备的一个扇区。
在启动过程中,将扫描内存的 ROM 区域并调用任何 ROM 的初始化代码。ISA 和 PCI 设备可以有一个 ROM,它会在启动过程中被调用。设备 ROM 可以修改向量,扩展或替换 BIOS 功能。设计用于 DOS 和 9x 版 Windows 的 RAID 卡可以做到这一点。
BIOS 例程初始化视频显示并允许设置显示模式。视频卡通常有一个 ROM,它可以覆盖此中断,以允许在 BIOS 启动过程中使用显卡(如果您确实需要,也可以在 DOS 中使用)。
没有什么可以阻止初始化后的程序修改这些向量以增强或替换 BIOS 功能。当某些 BIOS 无法访问超过 8GB 屏障的硬盘扇区时,一些供应商提供了启动盘,该启动盘提供了一个挂接到 Int 0x13 的实用程序,从而绕过了 BIOS 限制。
因此,当 DOS 是主流操作系统时,这一切都非常普遍。如今,如果 BIOS 仍然存在(UEFI 是它的后继者),它几乎只用于初始化和启动屏幕,操作系统直接访问硬件 - 电源管理相关的东西除外。