Skip to content

2020年 408 计算机组成原理 第 22 题

计算机组成原理2020年选择题2分

题目

若设备采用周期挪用 DMA 方式进行输入输出,每次 DMA 传送的数据块大小为 512 字节,相应的 I/O 接口中有一个 32 位数据缓冲寄存器,对于数据输入过程,下列叙述中错误的是( )。

错因

A

A 是正确叙述。32 位(4 字节)的数据缓冲寄存器一满,就要立刻搬到主存——否则下一个 32 位到来会冲掉它。所以每凑够 32 位就向总线发一次 DMA 请求是周期挪用的标准节奏。512 字节的块需要 512/4 = 128 次这样的总线请求。

B

B 也正确。当 CPU 和 DMA 同时争用总线时,仲裁逻辑给 DMA 优先级更高——理由是 DMA 服务的设备数据是"等不起"的(设备缓冲快满 / 接收时间窗口紧迫,丢了就丢了),CPU 让一个总线周期对程序流影响微乎其微。这是周期挪用 DMA 的核心机制。

D

D 也正确。一个数据块(512 字节)传完后,DMA 控制器主动向 CPU 发中断请求,触发"DMA 传送结束"中断。CPU 跑 ISR 做后处理(关设备 / 唤醒进程)。这是 DMA 三阶段里"后处理"阶段的入口。

总解析

核心概念:周期挪用 vs 停止 CPU

DMA 占用总线有两种粒度:

方式占用粒度CPU 对主存的访问适用场景
周期挪用每次 1 个总线周期DMA 占周期时 CPU 等 1 周期,其余时间正常用I/O 速率适中(磁盘、网卡)
停止 CPU整块(直到块结束)整块期间 CPU 完全无法访问主存I/O 速率极高(视频流)
交替访问把 1 个总线周期切成 CPU 半 + DMA 半主频高时可用历史方式,现代少见

C 错在哪——C 描述的是"停止 CPU"方式,不是题面规定的"周期挪用"。题面已经明确说"采用周期挪用",那么:

  • DMA 在每次搬一个 32 位字时占用 1 个总线周期
  • 这 1 个周期内 CPU 暂停(不能访问主存)
  • 其余时间 CPU 可以正常访问主存
  • 整个 512 字节块传送过程中,DMA 只占用了 128 个零散的总线周期,剩下大量周期 CPU 都能用

所以"整个数据块传送过程中 CPU 不可以访问主存"是错的——CPU 在 DMA 没占总线的间隙里完全可以访问。

逐项判定

选项说法是否符合周期挪用
A 32 位凑够发一次请求4 字节缓冲满立即送主存
B DMA 优先级 > CPU总线仲裁的标准约定
C 整块传送中 CPU 不能访存把"周期挪用"误说成"停止 CPU"
D 块结束发中断DMA 后处理的入口

周期挪用的"挪用"二字精髓:DMA 是"借用"CPU 的一两个总线周期,借完即还,不是"霸占"整段时间。CPU 程序流程几乎不受影响(只是个别周期被推迟),用户感知不到。

最终答案是 C(这是错误叙述)

周期挪用的开销估算(拓展,非本题考点):

512 字节块需 128 次总线周期。设总线周期 100 ns,则总占用时间 12.8 μs。如果 CPU 不参与,这点损失对几 GHz 的现代 CPU 几乎不可察觉——这正是周期挪用作为现代主流 DMA 模式的原因。

最后更新:

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