Skip to content

2017年 408 操作系统 第 32 题

操作系统2017年选择题2分

题目

系统将数据从磁盘读到内存的过程包括以下操作:

① 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

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题