Appearance
设备驱动程序接口
考情分析
设备驱动程序的概念在 I/O 软件层次中已覆盖,单独考查频率较低。🔥 低频。
同样是"读 512 字节",对磁盘要设置柱面号和扇区号,对网卡要填 DMA 描述符——驱动程序就是把上层的统一指令翻译成每种设备听得懂的操作。
设备驱动程序的作用
驱动程序是 I/O 系统中唯一与硬件直接交互的软件模块,负责将上层的抽象 I/O 请求翻译为对设备控制器的具体操作。
驱动程序的功能
| 功能 | 说明 |
|---|---|
| 接收 I/O 请求 | 从设备无关层接收抽象的 I/O 命令 |
| 翻译命令 | 将抽象命令转换为具体的硬件操作序列 |
| 操作寄存器 | 设置设备控制器的各寄存器 |
| 启动 I/O | 发出启动命令,开始数据传输 |
| 处理完成 | I/O 完成后的后续处理(如唤醒等待进程) |
驱动程序的特点
| 特点 | 说明 |
|---|---|
| 设备特定 | 每种设备有对应的驱动程序 |
| 内核态运行 | 驱动程序是内核的一部分,运行在内核态 |
| 可动态加载 | 现代 OS 支持动态加载和卸载驱动程序 |
| 屏蔽差异 | 对上层提供统一接口,屏蔽设备硬件差异 |
统一驱动程序接口
为了让设备无关层能以相同方式调用不同设备的驱动程序,OS 定义了统一的驱动程序接口:
| 接口函数 | 功能 |
|---|---|
open | 初始化设备,准备使用 |
close | 关闭设备,释放资源 |
read | 从设备读数据 |
write | 向设备写数据 |
ioctl | 设备特定的控制命令 |
interrupt_handler | 中断处理 |
每个驱动程序实现这些函数,OS 通过函数指针表(如 Linux 的 file_operations 结构)调用它们。这就像插座标准——不管你插什么电器,三孔插座的接口都一样,电器内部怎么用电是自己的事。
驱动程序与中断处理的配合
- 驱动程序设置好设备控制器寄存器,启动 I/O
- 当前进程阻塞,CPU 转去执行其他进程
- I/O 完成后设备发出中断
- 中断处理程序响应中断,通知驱动程序
- 驱动程序完成后续处理(数据拷贝、唤醒进程等)
考研高频考点
- 🔥🔥 驱动程序是 I/O 软件中唯一与硬件直接相关的层
- 🔥 驱动程序运行在内核态
- 🔥 统一驱动接口屏蔽设备差异
驱动程序直接操作设备控制器,而所有设备中考得最多的就是磁盘。下一篇来看磁盘的物理结构与调度算法。