Appearance
题目
在采用中断 I/O 方式控制打印输出的情况下,CPU 和打印控制接口中的 I/O 端口之间交换的信息不可能是( )。
错因
A
误以为"打印字符不通过 I/O 端口"——实际上打印字符就是要打印的数据,必然通过数据端口送给打印接口(接口再转给打印机)。中断方式下,每次中断响应时 CPU 把一个字符(或一批字符)写进数据端口,是最基础的"应该交换"项。
C
误以为状态信息不交换——但整个中断 I/O 的核心动作就是 CPU 在中断响应程序里读状态端口确认"打印机现在能不能接收下一个字符"、"是否缺纸"、"是否离线"等。状态信息必须交换。
D
误以为命令不通过端口——CPU 通过控制端口给打印机下达"开始打印"、"换行"、"复位"等命令,控制信息必须交换。
总解析
核心思路:先把 I/O 接口里的端口分类,再把"中断 I/O 方式" vs "DMA 方式"的职责分工对清楚——主存地址恰好是这两种方式的分水岭。
I/O 接口中的三类端口
| 端口 | 内容 | CPU 操作 |
|---|---|---|
| 数据端口 | 待传送的数据 | 读 / 写 |
| 状态端口 | 设备就绪、忙、出错等状态 | 读 |
| 控制端口 | 启动、停止、复位等命令 | 写 |
所有 I/O 方式(程序查询、中断、DMA)都用到这三类端口——它们就是 CPU 和外设交流的"语言"。
中断 I/O 方式下 CPU 的职责
中断方式的工作流程:
- CPU 给打印接口写控制命令(控制端口) → 启动打印
- CPU 继续做别的事
- 打印机就绪时打印接口发出中断请求
- CPU 响应中断,进入中断服务程序:
- 读状态端口确认设备状态
- 从主存读出下一个字符(这一步主存地址在 CPU 内部)
- 把字符写进数据端口
- 中断返回
- 重复 3-4 直到所有字符传完
关键:步骤 4 里 CPU 是自己访问主存读字符,主存地址是 CPU 寄存器里的内部信息——接口完全不需要知道主存地址,接口看到的只是"数据端口被写了一个字节"。
中断 I/O vs DMA 的对照
| 项目 | 中断 I/O | DMA |
|---|---|---|
| 谁访问主存 | CPU | DMA 控制器 |
| I/O 接口需要知道主存地址吗? | 不需要 | 需要(DMA 控制器从接口拿到地址自己访存) |
| 一次中断处理粒度 | 1 个字节 / 1 个字 | 1 个数据块(几百字节起) |
| CPU 负担 | 每个字符都要中断处理一次 | 仅在数据块开始 / 结束时介入 |
所以"主存地址出现在 CPU 与 I/O 端口之间"是 DMA 的特征,不是中断 I/O 的特征。题目特意指明"中断 I/O 方式"——主存地址不可能在这里出现。
逐项判定
| 选项 | 是否交换 | 通过哪个端口 |
|---|---|---|
| A. 打印字符 | ✓ 必交换 | 数据端口 |
| B. 主存地址 | ✗ 不交换 | — (是 DMA 特征) |
| C. 设备状态 | ✓ 必交换 | 状态端口 |
| D. 控制命令 | ✓ 必交换 | 控制端口 |
最终答案是 B(主存地址)。
速记口诀:
- 中断方式:CPU 主导访存——主存地址是 CPU 内部的事,不出现在接口上
- DMA 方式:DMA 控制器主导访存——主存地址必须传到 DMA 控制器,才会在 CPU 和 I/O 端口之间出现