Appearance
题目
系统将数据从磁盘读到内存的过程包括以下操作:
① DMA 控制器发出中断请求
② 初始化 DMA 控制器并启动磁盘
③ 从磁盘传输一块数据到内存缓冲区
④ 执行"DMA 结束"中断服务程序
正确的执行顺序是( )。
错因
A
把 ③ 数据传输放最前——但没有先初始化 DMA、启动磁盘就开始传,DMA 控制器都不知道往哪传、传多少。③ 必须发生在 ② 之后。把数据传输当成开端是没把"先准备硬件再启动"的初始化逻辑想清楚。
C
② → ① → ③ → ④——把"中断请求"放在数据传输之前。但中断是数据传输完毕后才发的(DMA 控制器在传完一块后通知 CPU"我搞定了"),不能在还没传时就发。把中断的触发时机搞错了。
D
① → ② → ④ → ③ 完全乱序——还没初始化 DMA、还没传数据,就发中断、跑中断服务程序——逻辑反了。中断必须发生在事情干完之后,不是事情开始前。
总解析
DMA(直接存储器访问)方式的标准流程:
1. CPU 初始化 DMA 控制器(告诉它源、目的、字节数、方向)+ 启动磁盘
2. CPU 不再参与数据传输(去做别的)
3. DMA 控制器从磁盘读数据 → 内存缓冲区(一块完成)
4. DMA 控制器向 CPU 发中断请求("传输完毕")
5. CPU 响应中断,执行"DMA 结束"中断服务程序(清理状态、唤醒等数据的进程等)按题面四步映射:
| 题面步骤 | 内容 | 时点 |
|---|---|---|
| ② 初始化 DMA + 启动磁盘 | CPU 配置 DMA 控制器,启动 I/O | 第 1 步——准备 |
| ③ 从磁盘传一块数据到内存缓冲区 | DMA 自动传输,CPU 不参与 | 第 2 步——传输中 |
| ① DMA 控制器发中断请求 | 传输完毕后通知 CPU | 第 3 步——通知 |
| ④ 执行"DMA 结束"中断服务程序 | CPU 响应中断,做善后 | 第 4 步——处理 |
正确顺序:② → ③ → ① → ④。
DMA 的核心理念:CPU 只在头尾介入——头部做初始化、尾部处理中断;中间数据传输完全交给 DMA 控制器,CPU 可以做别的事。这正是 DMA 比中断驱动 I/O 高效的根源(CPU 不为每个字节传输都中断一次,只在整块完成后中断一次)。
最终答案是 B。