Appearance
题目
下列关于驱动程序的叙述中,不正确的是( )。
错因
B
误以为"设备初始化"是开机时 BIOS 一次性做完的事。BIOS 自检阶段只把 CPU、内存、引导设备拉到能跑起来的最低状态,具体设备的工作参数——中断号、DMA 通道、寄存器映射、内核缓冲区——是 OS 启动后加载对应驱动时才配上去的。
C
觉得驱动跑在内核态、又是直接操作硬件,一气呵成不该被打断。但驱动发完 I/O 命令后要等硬件回中断或 DMA 完成,这段等待期调度器会把当前进程挂进设备等待队列、状态切到阻塞,硬件完成中断后再被唤醒。
D
把 read/write 想成了内核自己直接读硬件。系统调用只是入口,会一路下沉到 VFS → 文件系统 → 块设备驱动的 read/write 例程,真正跟磁盘控制器打交道把字节搬过来的还是驱动。
总解析
题问"不正确",A 一眼就可疑——驱动程序本来就是为某种具体的 I/O 控制方式写出来的代码,方式不同驱动的骨架就完全不同:
| I/O 控制方式 | 驱动里大致长什么样 |
|---|---|
| 程序直接控制(轮询) | while 循环读状态寄存器忙等,数据就绪再搬 |
| 中断驱动 | 发命令后让出 CPU、进程阻塞,中断处理程序里读数据 |
| DMA | 配 DMA 控制器(源/目的地址、字节数)启动传输,等 DMA 完成中断 |
| 通道 | 准备通道程序,发通道指令,等通道结束中断 |
硬件用哪种方式跟 CPU 交互,驱动就得写成对应的样子,"无关"是反话。B、D 是驱动的本职工作(初始化设备 + 完成读写),C 是驱动等硬件时的常态,三者都成立。
最终答案是 A。