Appearance
题目
内部异常(内中断)可分为故障(fault)、陷阱(trap)和终止(abort)三类。下列有关内部异常的叙述中,错误的是( )。
错因
A
A 是正确叙述——内部异常的全部三类(fault/trap/abort)都由当前指令的执行直接引发:fault 是指令执行中发现条件不满足(缺页、保护违规);trap 是指令本身就是异常指令(INT、syscall、断点);abort 是执行中发现严重错误。三类都"与当前指令相关",说法成立。
B
B 也正确。内部异常全部由 CPU 内部电路检测——MMU 检测缺页 / 保护违规,ALU 检测除 0 / 溢出,控制器检测非法指令 / 特权违规。没有外部信号参与。
C
C 也正确——内部异常的响应不是像外中断那样在指令边界(指令结束之后)才响应,而是在指令执行过程中就被发现并立即响应。例如除 0 是 ALU 算出来的瞬间就抛异常,缺页是 MMU 翻译失败的瞬间就抛——根本不会等指令"完成"再处理(很多时候指令也无法完成)。
总解析
核心:故障 / 陷阱 / 终止三类返回行为
408 真题考"内部异常"几乎必考它们的返回点差异:
| 类型 | 例子 | 异常处理后返回到 |
|---|---|---|
| 故障 fault | 缺页、保护违规 | 处理后返回到当前指令重新执行(修复条件后再来一次) |
| 陷阱 trap | INT n、syscall、单步调试 | 处理后返回到下一条指令(当前指令本身就是异常指令,已经"完成") |
| 终止 abort | 机器检查、严重硬件错误 | 不返回(程序终止) |
逐项审计:
| 选项 | 三类异常都满足吗? |
|---|---|
| A "与当前指令相关" | fault/trap/abort 都与当前指令有关 → ✓ |
| B "由 CPU 内部逻辑检测" | 都由 CPU 内部电路检出 → ✓ |
| C "响应发生在指令执行过程中" | 都是指令执行中检测出来 → ✓ |
| D "返回到发生异常的指令继续执行" | 仅 fault 满足;trap 返回到下一条;abort 不返回 → ✗ |
D 错在把所有内部异常都当成了 fault 类——而陷阱(如 INT 软中断)和终止(如机器检查)都不是返回到原指令:
- 陷阱:
INT 80h这条指令本身就是要触发异常的,处理完没必要再执行一次(再执行就死循环了),自然返回到下一条 - 终止:异常严重到程序无法继续,直接 kill,根本不存在"返回"
最终答案是 D(这是错误叙述)。
记忆口诀:
fault → 修了再来 (返回当前指令重做)
trap → 做完往下走 (返回下一条指令)
abort → 一去不返 (终止程序)考场上看到"返回到发生异常的指令"这种统括式说法,立刻意识到只有 fault 这一类成立——出现在"内部异常"统称下就是错的。