Appearance
题目
外部中断包括不可屏蔽中断(NMI)和可屏蔽中断,下列关于外部中断的叙述中错误的是( )。
错因
A
不熟 NMI(Non-Maskable Interrupt)"不可屏蔽"的含义。NMI 之所以叫"不可屏蔽"——就是不受 IF(中断使能)标志位影响:哪怕 CPU 处于关中断状态(IF = 0),NMI 仍能被响应。NMI 通常用于严重错误(如电源故障、内存奇偶校验错),关键事件不能被屏蔽。A 是对的叙述。
C
不熟优先级。NMI 优先级高于可屏蔽中断——硬件设计就是如此。两者同时到达时,CPU 优先响应 NMI;正在处理可屏蔽中断时来 NMI,可以打断它。C 是对的叙述。
D
不熟"中断屏蔽字"机制。中断屏蔽字是一组位向量,每位对应一个中断源——置 1 表示"屏蔽该源"。CPU 在不同优先级的中断处理程序里使用不同的屏蔽字,动态调整哪些中断能打断当前处理——本质上就是在改变优先级关系。D 是对的叙述。
总解析
外部中断的两种:
| 类型 | 是否可被屏蔽 | 通过什么屏蔽 | 用例 |
|---|---|---|---|
| NMI(不可屏蔽中断) | ✗ 不能 | 无(硬件级强制响应) | 电源故障、内存奇偶校验错、看门狗 |
| 可屏蔽中断(IRQ) | ✓ 可以 | EFLAGS.IF 位 + 中断屏蔽字 | 时钟、键盘、网卡、磁盘 |
逐项判断:
| 选项 | 叙述 | 判断 | 理由 |
|---|---|---|---|
| A | 关中断状态也能响应 NMI | ✓ 对 | NMI 不受 IF 标志影响 |
| B | 一旦可屏蔽中断请求信号有效 CPU 将立即响应 | ✗ 错 | 可屏蔽中断必须满足两个条件:① 中断未被屏蔽 ② 当前指令已完成;不可能"立即响应" |
| C | NMI 优先级比可屏蔽中断高 | ✓ 对 | 硬件设计如此 |
| D | 可通过中断屏蔽字改变可屏蔽中断处理优先级 | ✓ 对 | 中断屏蔽字机制 |
B 为什么错——可屏蔽中断响应的两个必要条件:
CPU 收到可屏蔽中断请求后,不立即响应,而是要等到:
- 当前指令执行完成(中断响应是在指令边界进行的,半条指令不能中断)
- 中断使能开启(EFLAGS.IF = 1,且该中断源在屏蔽字中未被屏蔽)
如果 IF = 0(CPU 关中断),中断请求会"挂着"等待——直到下一次开中断(STI)或当前中断处理结束才被响应。所以"立即响应"是错的。
| 中断源 | 响应条件 |
|---|---|
| NMI | 当前指令完成后立即响应(不看 IF) |
| 可屏蔽中断 | 当前指令完成 + IF=1 + 屏蔽字未屏蔽 |
最终答案是 B(错误的叙述)。
完整中断响应流程:
中断请求到达
│
├─ 是 NMI?
│ ├─ 是 → 等当前指令完成 → 响应(不看 IF)
│ └─ 否(可屏蔽)→
│ ├─ IF=0(关中断)→ 挂起,等开中断
│ ├─ IF=1,但被屏蔽字屏蔽 → 挂起
│ └─ IF=1,且未屏蔽 → 等当前指令完成 → 响应中断屏蔽字使用场景:
| 当前处理 | 屏蔽字设置 | 含义 |
|---|---|---|
| 时钟中断处理中 | 屏蔽时钟,开放磁盘/网卡 | 不允许时钟自己嵌套,但允许更高优先级中断打断 |
| 键盘中断处理中 | 屏蔽时钟和键盘,开放磁盘/网卡 | 同上原则 |
| 不在中断处理时 | 不屏蔽任何 | 全部允许 |
通过修改屏蔽字,可以动态改变中断优先级关系——这是 D 正确的依据。
易错点速查:
- NMI 不可屏蔽 = 关中断(IF=0)也能响应
- 可屏蔽中断响应需要 ① 指令边界 ② IF=1 ③ 屏蔽字未屏蔽 三个条件
- 中断屏蔽字 ≠ EFLAGS.IF:屏蔽字是按"中断源"的细粒度控制;IF 是总开关