从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 兼容机的基础。
2.1.1 BIOS 在系统启动中的角色
BIOS 是计算机开机后第一个被执行的软件,固化在主板的 ROM/Flash 芯片中。它的核心职责可以概括为三个层次:
- 硬件初始化与自检(POST):检测 CPU、内存、芯片组、存储设备等关键组件是否正常工作。
- 运行时服务(Runtime Services):为操作系统提供底层硬件访问接口,如磁盘读写(INT 13h)、键盘输入(INT 16h)、显示输出(INT 10h)。
- 引导加载(Bootstrap):根据用户配置的启动顺序,从磁盘主引导记录(MBR)加载引导扇区代码,将控制权移交给操作系统。
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 会恢复出厂默认设置,并提示用户重新配置。
2.4 POST 自检流程:从加电到引导
POST(Power-On Self-Test,加电自检)是 BIOS 启动后执行的第一个关键阶段。它是一系列硬件诊断和初始化步骤的集合,确保系统核心组件处于可用状态。完整的 POST 流程可以分为以下五个阶段:
- CPU 初始化与微码加载:CPU 从复位向量(0xFFFFFFF0)开始执行,BIOS 首先加载 CPU 微码补丁,初始化缓存和内存控制器。
- 芯片组与总线枚举:初始化北桥(内存控制器)和南桥(I/O 控制器),配置 PCI 总线树,分配总线号和资源。
- 内存检测与初始化:读取 SPD(Serial Presence Detect)信息,配置内存时序和电压,执行内存读写测试。此阶段通常伴随屏幕上的内存计数。
- 外设扫描与初始化:枚举 PCI/PCIe 设备,加载 Option ROM(如显卡 BIOS、RAID 卡固件),初始化键盘、鼠标、存储控制器等基本外设。
- 引导设备选择与启动:根据 CMOS 中的启动顺序,依次尝试从软盘、硬盘、光驱、网络等设备读取引导扇区。若找到有效的 MBR 或引导记录,则将控制权移交。
2.4.1 POST 自检流程图
下图展示了从系统加电到引导加载程序接管之间的完整 POST 流程,包含关键决策点和故障处理路径:
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 流程串行执行,缺乏并行初始化能力,且每次启动都重复检测所有硬件,无法缓存结果。