Appearance
题目
下列关于硬件和异常/中断关系的叙述中,错误的是( )。
错因
A
误以为异常和中断都是"指令边界检测"。异常(如除零、缺页、非法指令)是指令执行过程中才会触发的——必须等到该指令真的执行到出错的那一步才能发现。所以 A 描述正确,不是错误叙述。
B
把"指令边界"这个细节看反了。中断(外部异步事件)和异常不同:CPU 不会在指令执行的"中间"去检测中断(否则状态不一致),而是在当前指令执行完、下一条指令取指之前统一检测中断请求线。所以 B 正确。
C
C 是对的,但有同学会怀疑——会不会还需要其它条件?答:在"开中断"前提下(即 IF 标志位为 1),CPU 一旦检测到优先级允许的中断请求,下一周期就进入中断响应(关中断、保存断点、跳中断向量)。"开中断 + 检测到请求" 的确就是响应条件,C 描述正确。
总解析
逐项核查:
| 选项 | 描述 | 判断 |
|---|---|---|
| A | 异常在指令执行过程中检测 | ✓ 异常本身就是当前指令执行触发的(除零、缺页、非法指令等) |
| B | 中断在指令执行完时检测 | ✓ 中断是异步外部事件,CPU 在指令边界统一处理保证一致性 |
| C | 开中断 + 检测到请求 → 响应 | ✓ 这正是中断响应的触发条件 |
| D | 外部设备通过中断控制器向 CPU 发"中断结束信号" | ✗ |
为什么 D 错:
- 中断请求信号(INTR):从外部设备 → 中断控制器 → CPU。这个方向是对的。
- 中断结束信号 EOI(End Of Interrupt):方向相反——是 CPU 在中断服务程序末尾向中断控制器发的,告诉控制器"我处理完了,可以接收下一个中断了"。
D 把 EOI 信号的发送方向搞反了,并且把信号源错说成"外部设备"。外部设备发的是"中断请求",不是"中断结束"。
最终答案是 D(错误的叙述)。
记忆要点:
- INTR:外设 → 控制器 → CPU
- EOI:CPU → 控制器(外设不参与)
- 异常 in-flight 检测、中断 between-instruction 检测