Appearance
题目
下列选项中,能引起外部中断的事件是( )。
错因
B
除数为 0 是内部异常(fault),不是外部中断。它由 CPU 内部 ALU 在执行除法指令时直接触发,源头在 CPU 内部,与外部设备无关。把"程序运行出错"当成"外部事件"是常见误判——出错的事件再"外"也是程序行为,不是外部硬件信号。
C
浮点运算下溢同样是内部异常——浮点单元(FPU)在算出超小值无法规格化时由 CPU 自己触发,与外部设备没关系。和 B 一样,错点都是把"运算异常"误归为"外部中断"。
D
访存缺页是内部异常(page fault),由 MMU 在地址翻译时发现"页表项的存在位 = 0"产生,事件源在 CPU/MMU 内部。选 D 的人可能想成"访问内存涉及到存储器(外部)"——但触发主体是 CPU 自己的地址翻译逻辑,主存/磁盘只是后续被调动的资源,触发方不是它们。
总解析
外部中断 vs 内部异常——这是 408 反复考的二分法:
| 类别 | 触发源 | 与当前指令的关系 | 例子 |
|---|---|---|---|
| 外部中断(外中断) | CPU 外部的硬件信号(设备 / 外部时钟 / DMA 完成等) | 与当前指令无关,异步发生 | 键盘输入、定时器到时、磁盘读完、DMA 结束、网卡收包 |
| 内部异常(内中断 / Trap / Fault / Abort) | CPU 内部逻辑(ALU、MMU、控制器) | 由当前指令的执行直接引发,同步 | 除 0、溢出、缺页、非法指令、特权违规、INT n 指令 |
逐项判定:
| 选项 | 事件 | 触发主体 | 类别 | 是否外部中断 |
|---|---|---|---|---|
| A | 键盘输入 | 键盘控制器 → 中断控制器 → CPU INTR 引脚 | 外部中断 | ✓ |
| B | 除数为 0 | ALU 执行 div 时检测 | 内部异常(fault) | ✗ |
| C | 浮点下溢 | FPU 执行浮点运算时检测 | 内部异常(fault) | ✗ |
| D | 访存缺页 | MMU 地址翻译时检测 | 内部异常(fault) | ✗ |
A 是唯一的外部事件——键盘按键产生的信号经键盘控制器、再经中断控制器(PIC/APIC),最终从 CPU 的 INTR 引脚进入。其余三项的触发主体都在 CPU 内部,与"外部"无关。
最终答案是 A(键盘输入)。
记忆口诀:
- 外部 = "设备/时钟/网络":用户按键、磁盘、网卡、定时器、DMA 完成
- 内部 = "程序自己作的死":除 0、溢出、缺页、非法指令、特权违规、
INT软中断 - 模糊例子:硬件断点(外,由调试单元发但属调试外设);软件断点
INT 3(内,是软中断指令)