Appearance
题目
异常是指令执行过程中在处理器内部发生的特殊事件,中断是来自处理器外部的请求事件。下列关于中断或异常情况的叙述中,错误的是( )。
错因
B
B 是正确叙述。整数除以 0 由 ALU 在执行除法指令时检测,事件源在 CPU 内部的运算单元,与"外部请求"无关——按题面定义属"指令执行过程中处理器内部发生",妥妥的异常。
C
C 也正确。DMA 传送结束由 DMA 控制器(CPU 外部硬件)发出中断信号,经中断控制器送到 CPU 的 INTR 引脚——事件源完全在 CPU 外部。这是教科书里"外部中断"的标准例子之一。
D
D 也正确。存储保护错(写只读段、用户态访问内核段等)由 MMU 在地址翻译/权限检查时检测,事件源在 CPU 内部的内存管理单元——属指令执行中触发的内部事件,是异常(具体是 fault 类)。
总解析
回顾题面给的定义(这道题题干自己定义了概念,按题面定义判断):
- 中断:来自处理器外部的请求事件
- 异常:指令执行过程中在处理器内部发生的特殊事件
判定的关键是事件源在 CPU 内还是外,而不是事件涉及的资源在哪。
逐项判定:
| 选项 | 事件 | 触发主体 | 真实分类 | 选项说的是 | 对/错 |
|---|---|---|---|---|---|
| A | 访存缺页 | MMU(CPU 内部地址翻译单元) | 异常(fault 类) | 中断 | ✗ 错 |
| B | 整数除以 0 | ALU(CPU 内部运算单元) | 异常(fault 类) | 异常 | ✓ |
| C | DMA 传送结束 | DMA 控制器(CPU 外部) | 中断(外中断) | 中断 | ✓ |
| D | 存储保护错 | MMU(CPU 内部) | 异常(fault 类) | 异常 | ✓ |
A 的陷阱在哪——很多学生看到"访存""存储"就想成"涉及外部主存,所以是外部"。但定义说的是触发该事件的主体在哪,不是事件涉及的存储设备在哪:
- 访存动作是由 CPU 通过 MMU 发起的
- 缺页是由 MMU 在 CPU 内部判断"页表项的存在位 = 0"得出的
- 主存只是被动响应地址请求,不会"主动告诉 CPU 我没这页"
所以缺页的触发主体是 CPU 内的 MMU,类别是异常,不是中断——A 错。
最终答案是 A(这是错误叙述)。
易错对照表(408 高频混淆):
| 事件 | 触发主体 | 分类 | 易错点 |
|---|---|---|---|
| 访存缺页 | MMU(内) | 异常 | 容易因"访存"误判为外 |
| 存储保护错 | MMU(内) | 异常 | 同上 |
| 整数除 0 | ALU(内) | 异常 | 较少错 |
| 浮点下溢/上溢 | FPU(内) | 异常 | 较少错 |
| 非法指令 | 控制器(内) | 异常 | 较少错 |
| 特权违规 | 控制器(内) | 异常 | 较少错 |
| DMA 传送结束 | DMA 控制器(外) | 中断 | 较少错 |
| 键盘按键 | 键盘控制器(外) | 中断 | 较少错 |
| 时钟到时 | 定时器(外) | 中断 | 较少错 |
记忆口诀:"指令执行中、CPU 自己抓住的 → 异常;外部硬件主动告诉 CPU 的 → 中断"。