Skip to content

2020年 408 计算机组成原理 第 21 题

计算机组成原理2020年选择题2分

题目

外部中断包括不可屏蔽中断(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 将立即响应✗ 错可屏蔽中断必须满足两个条件:① 中断未被屏蔽 ② 当前指令已完成;不可能"立即响应"
CNMI 优先级比可屏蔽中断高✓ 对硬件设计如此
D可通过中断屏蔽字改变可屏蔽中断处理优先级✓ 对中断屏蔽字机制

B 为什么错——可屏蔽中断响应的两个必要条件

CPU 收到可屏蔽中断请求后,不立即响应,而是要等到:

  1. 当前指令执行完成(中断响应是在指令边界进行的,半条指令不能中断)
  2. 中断使能开启(EFLAGS.IF = 1,且该中断源在屏蔽字中未被屏蔽)

如果 IF = 0(CPU 关中断),中断请求会"挂着"等待——直到下一次开中断(STI)或当前中断处理结束才被响应。所以"立即响应"是错的。

中断源响应条件
NMI当前指令完成后立即响应(不看 IF)
可屏蔽中断当前指令完成 + IF=1 + 屏蔽字未屏蔽

最终答案是 B(错误的叙述)。

完整中断响应流程

中断请求到达

    ├─ 是 NMI?
    │   ├─ 是 → 等当前指令完成 → 响应(不看 IF)
    │   └─ 否(可屏蔽)→
    │       ├─ IF=0(关中断)→ 挂起,等开中断
    │       ├─ IF=1,但被屏蔽字屏蔽 → 挂起
    │       └─ IF=1,且未屏蔽 → 等当前指令完成 → 响应

中断屏蔽字使用场景

当前处理屏蔽字设置含义
时钟中断处理中屏蔽时钟,开放磁盘/网卡不允许时钟自己嵌套,但允许更高优先级中断打断
键盘中断处理中屏蔽时钟和键盘,开放磁盘/网卡同上原则
不在中断处理时不屏蔽任何全部允许

通过修改屏蔽字,可以动态改变中断优先级关系——这是 D 正确的依据。

易错点速查

  1. NMI 不可屏蔽 = 关中断(IF=0)也能响应
  2. 可屏蔽中断响应需要 ① 指令边界 ② IF=1 ③ 屏蔽字未屏蔽 三个条件
  3. 中断屏蔽字 ≠ EFLAGS.IF:屏蔽字是按"中断源"的细粒度控制;IF 是总开关

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题