从BIOS到UEFI 操作系统引导架构演进全解 - 第2节

2. BIOS历史与原理

BIOS(Basic Input/Output System,基本输入输出系统)的概念最早可追溯到 1975 年的 CP/M 操作系统。数字研究公司(Digital Research)的 Gary Kildall 在设计 CP/M 时,为了将操作系统与硬件解耦,首次提出了“BIOS”这一固件层概念。1981 年,IBM 在其首款个人电脑 IBM 5150 中采用了基于 8088 处理器的 BIOS 固件,由工程师团队在三个月内逆向工程完成。这一固件不仅定义了 x86 架构的引导标准,也奠定了此后三十余年 PC 兼容机的基础。

关键里程碑: 1981 年 IBM PC 的 BIOS 固件仅 8KB,存储在 ROM 芯片中,负责最基本的键盘、显示器、磁盘和串口通信。此后,Phoenix、AMI、Award 等第三方厂商通过“干净室逆向工程”合法复制 BIOS 接口,形成了庞大的兼容 BIOS 生态。

2.1.1 BIOS 在系统启动中的角色

BIOS 是计算机开机后第一个被执行的软件,固化在主板的 ROM/Flash 芯片中。它的核心职责可以概括为三个层次:

  1. 硬件初始化与自检(POST):检测 CPU、内存、芯片组、存储设备等关键组件是否正常工作。
  2. 运行时服务(Runtime Services):为操作系统提供底层硬件访问接口,如磁盘读写(INT 13h)、键盘输入(INT 16h)、显示输出(INT 10h)。
  3. 引导加载(Bootstrap):根据用户配置的启动顺序,从磁盘主引导记录(MBR)加载引导扇区代码,将控制权移交给操作系统。
术语澄清: 严格来说,BIOS 既指代固件本身,也指代其提供的软件中断服务接口。在 UEFI 时代,传统 BIOS 的运行时服务接口(如 INT 10h/13h)已被废弃,仅保留兼容性支持模块(CSM)用于引导旧系统。

2.2 基本输入输出系统的作用详解

BIOS 提供的“基本输入输出”功能并非指完整的设备驱动,而是一组最底层的、与硬件直接交互的软件中断服务例程。下表列出了 BIOS 中断服务中最常用的几个接口及其用途:

中断号 功能 典型用途 现代替代
INT 10h 视频显示服务 设置显示模式、写字符、滚动屏幕 UEFI GOP / 原生显卡驱动
INT 13h 磁盘 I/O 服务 读取/写入磁盘扇区、获取磁盘参数 UEFI Block I/O 协议
INT 16h 键盘输入服务 读取按键、检查键盘缓冲区状态 UEFI Simple Text Input
INT 1Ah 实时时钟服务 读取/设置系统时间、闹钟 UEFI Runtime Clock

这些中断服务在实模式下通过 INT 指令调用,操作系统引导加载程序(如 GRUB Legacy、NTLDR)在早期阶段严重依赖这些接口完成磁盘读取和屏幕输出。随着操作系统进入保护模式和长模式,BIOS 中断服务不再可用,操作系统必须加载自己的驱动程序接管硬件。

2.3 CMOS 与系统配置存储

BIOS 的配置信息(如启动顺序、硬盘参数、时钟设置)并非存储在 ROM 中,而是保存在主板上一个独立的低功耗存储器——CMOS RAM 中。CMOS 的全称是 Complementary Metal-Oxide-Semiconductor,最初指代制造工艺,后来成为这一存储区域的代名词。

2.3.1 CMOS 存储结构

标准的 CMOS RAM 容量为 128 字节或 256 字节,由实时时钟(RTC)芯片(如 MC146818)管理。其地址空间分为两部分:

  • 时钟与状态寄存器(0x00–0x0F):存储秒、分、时、日、月、年以及闹钟和状态控制位。
  • BIOS 配置数据(0x10–0x7F):存储硬盘类型、启动顺序、电源管理、密码校验和等用户可配置项。

CMOS 由主板上的纽扣电池(CR2032)供电,确保系统断电后配置数据不丢失。当电池耗尽或 CMOS 被清除时,BIOS 会恢复出厂默认设置,并提示用户重新配置。

常见误区: CMOS 与 BIOS 是两个不同的概念。BIOS 是固件程序,存储在 Flash ROM 中;CMOS 是存储配置数据的 RAM 区域,由电池供电。用户常说的“清 CMOS”实际上是清除配置数据,而非擦除 BIOS 程序。

2.4 POST 自检流程:从加电到引导

POST(Power-On Self-Test,加电自检)是 BIOS 启动后执行的第一个关键阶段。它是一系列硬件诊断和初始化步骤的集合,确保系统核心组件处于可用状态。完整的 POST 流程可以分为以下五个阶段:

  1. CPU 初始化与微码加载:CPU 从复位向量(0xFFFFFFF0)开始执行,BIOS 首先加载 CPU 微码补丁,初始化缓存和内存控制器。
  2. 芯片组与总线枚举:初始化北桥(内存控制器)和南桥(I/O 控制器),配置 PCI 总线树,分配总线号和资源。
  3. 内存检测与初始化:读取 SPD(Serial Presence Detect)信息,配置内存时序和电压,执行内存读写测试。此阶段通常伴随屏幕上的内存计数。
  4. 外设扫描与初始化:枚举 PCI/PCIe 设备,加载 Option ROM(如显卡 BIOS、RAID 卡固件),初始化键盘、鼠标、存储控制器等基本外设。
  5. 引导设备选择与启动:根据 CMOS 中的启动顺序,依次尝试从软盘、硬盘、光驱、网络等设备读取引导扇区。若找到有效的 MBR 或引导记录,则将控制权移交。

2.4.1 POST 自检流程图

下图展示了从系统加电到引导加载程序接管之间的完整 POST 流程,包含关键决策点和故障处理路径:

POST 自检完整流程图 系统加电 / 复位 CPU 微码加载 & 缓存初始化 芯片组 & 总线枚举 内存 SPD 读取 & 时序配置 内存读写测试 通过? 蜂鸣报警 / 错误码 PCI 枚举 & Option ROM 加载 扫描引导设备 (MBR/GPT) 失败 通过 POST 故障诊断 • 1 短声:系统正常 • 1 长 2 短:显卡故障 • 连续短声:内存故障 • 无声音无显示:CPU/主板故障

2.4.2 POST 错误码与蜂鸣提示

当 POST 检测到致命硬件错误时,BIOS 无法通过屏幕显示错误信息(因为显卡可能尚未初始化),此时会通过 PC 扬声器发出特定模式的蜂鸣声来指示故障类型。下表列出了 AMI BIOS 和 Award BIOS 常见的蜂鸣码含义:

蜂鸣模式 AMI BIOS 含义 Award BIOS 含义
1 短声 系统正常,POST 通过 系统正常
2 短声 内存奇偶校验错误 非致命错误,检查 CMOS 设置
1 长 2 短 显卡故障 显卡故障
1 长 3 短 内存故障(传统) 键盘控制器错误
连续短声 内存故障 电源或主板故障
无声音 CPU 或主板未工作 CPU 或电源故障

2.5 BIOS 的局限性:为何需要演进

尽管 BIOS 在 PC 兼容生态中取得了巨大成功,但随着硬件技术的发展,其架构性缺陷逐渐暴露:

  • 16 位实模式限制:BIOS 运行在 16 位实模式下,只能访问 1MB 地址空间,无法直接利用大内存和 64 位 CPU 特性。
  • MBR 分区表限制:传统 BIOS 只能从 MBR 分区表引导,最大支持 2.2TB 磁盘,无法原生支持 GPT 分区和大容量存储。
  • 中断向量冲突:BIOS 中断服务(INT 10h/13h)在保护模式下不可用,操作系统必须在启动早期切换到实模式才能调用,增加了复杂性。
  • 缺乏标准化扩展接口:Option ROM 和 BIOS 扩展缺乏统一的资源管理机制,容易导致地址冲突和兼容性问题。
  • 启动速度慢:POST 流程串行执行,缺乏并行初始化能力,且每次启动都重复检测所有硬件,无法缓存结果。
总结: BIOS 作为 PC 固件的“鼻祖”,定义了 x86 系统启动的基本范式。CMOS 提供了配置持久化能力,POST 流程确保了硬件可靠性。然而,其 16 位实模式架构、MBR 限制和中断驱动的设计已无法满足现代计算需求,这直接催生了 UEFI 固件标准的诞生。下一章将深入分析 UEFI 如何从架构层面解决这些根本性问题。