Appearance
题目
下列选项中,会触发外部中断请求的事件是( )。
错因
B
总线事务结束是总线协议层面的状态切换信号,不向 CPU 发中断——总线仲裁器、DMA 控制器等会感知它来调度下一次传输,但 CPU 不需要知道每个总线事务的边界。把"总线事件"误当成"中断事件"是常见混淆。
C
页故障处理结束是 OS 内部状态转换——缺页处理完成后由 OS 自身的代码逻辑决定下一步(例如重新发起原指令重试),不会触发新的中断或异常。原始的"页故障"本身是异常(fault),但它的"结束"不是中断事件。
D
断点指令(如 x86 的 INT 3)是陷阱(trap)——属于内部异常,触发主体在 CPU 控制器内部(执行该指令时由 CPU 自己抛出),不是来自外部硬件。把陷阱误归为外中断是分类错。
总解析
核心区分:外部中断 vs 内部异常(详见 2009-22 / 2016-22)
- 外部中断:触发主体在 CPU 外——设备 / 时钟 / 网卡 / DMA 控制器
- 内部异常:触发主体在 CPU 内——ALU / MMU / FPU / 控制器(包括 fault/trap/abort)
逐项判定:
| 选项 | 事件 | 触发主体 | 类别 | 是否外部中断 |
|---|---|---|---|---|
| A | DMA 传送结束 | DMA 控制器(CPU 外部独立硬件) | 外部中断 | ✓ |
| B | 总线事务结束 | 总线(不向 CPU 报告) | 既非中断也非异常 | ✗ |
| C | 页故障处理结束 | OS 软件(缺页处理函数返回) | 软件状态转换 | ✗ |
| D | 执行断点指令 | CPU 控制器(执行 INT 3 时) | 陷阱(内部异常 trap) | ✗ |
A 为什么是外部中断:
DMA 控制器是 CPU 外部的独立硬件芯片(或现代 SoC 上的独立 IP 核),完成数据块传送后向 CPU 的 INTR 引脚发中断信号——这是教科书里"外部中断"最经典的例子之一。常见外中断源还包括:
- 键盘 / 鼠标 / 串口(输入设备)
- 磁盘 / 网卡 / SSD(存储 / 网络设备)
- DMA 完成(如本题)
- 时钟到时(外部定时器)
- 电源管理事件
对比 D 的陷阱:
INT 3(x86 软件断点)的执行流程:
- CPU 取指、译码发现是
INT 3 - 控制器主动触发中断处理流程(保存断点、跳到 INT 3 的处理函数)
- 这个触发事件源在 CPU 内部的控制器——不是外部信号
所以 INT 3 是陷阱(内部异常的子类),不是外部中断。
最终答案是 A(DMA 传送结束)。
易错对照表(2025 真题加强版):
| 事件 | 触发主体 | 分类 | 注释 |
|---|---|---|---|
| 键盘输入 | 键盘控制器(外) | 外部中断 | 见 2009-22 |
| DMA 传送结束 | DMA 控制器(外) | 外部中断 | 见本题 / 2016-22 |
| 时钟中断 | 外部定时器(外) | 外部中断 | |
| 缺页 | MMU(内) | 异常(fault) | 见 2016-22 |
| 除 0 | ALU(内) | 异常(fault) | |
INT 3 / syscall | 控制器(内) | 异常(trap) | 见 2015-22 |
| 总线事务结束 | 总线协议(不向 CPU 报告) | 既非 | 协议层面事件 |
| 缺页处理"结束" | OS 软件(不发硬件信号) | 既非 | 软件状态切换 |