Appearance
题目
某计算机有五级中断 ,中断屏蔽字为 ,()表示对 级中断进行屏蔽。若中断响应优先级从高到低的顺序是 ,且要求中断处理优先级从高到低的顺序是 ,则 的中断处理程序中设置的中断屏蔽字是( )。
错因
A
选 11110 的人误把"响应优先级"当成"处理优先级"。按响应顺序 ,"留下响应最高的 不屏蔽()、其余都屏蔽"得到 11110。
错的根源:屏蔽字反映的是处理优先级,与响应优先级无关。响应优先级是硬件电路定的(不可更改),处理优先级才是用屏蔽字"动态"调出来的。题目给响应序只是干扰项。
B
选 01101 的人通常是把屏蔽字的位序读反了——按 从左到右填,再从右往左对齐。如果按处理优先级算出"屏蔽 和 ",写成 倒过来贴成 01010 没问题;但若中途又换序混淆,就可能得到 01101 这种"看起来像但每位都错位"的串。确认位序方向是这道题的关键之一。
C
选 00011 的人漏了 。算到" 自己要屏蔽"很对(),但接下来错把"处理优先级比 高的 "也屏蔽了()——刚好搞反了:处理优先级高的应该能抢占当前 的处理(不屏蔽,置 0),处理优先级低的()才该被屏蔽,于是漏掉 。本质是把"屏蔽字 1 = 不让它打断我"和"屏蔽字 1 = 优先级比我高"搞混了。
总解析
核心规则(一定要先记牢):
处理 时,屏蔽所有处理优先级 ≤ 的中断(包括 自己),不屏蔽处理优先级比 高的中断(让它们能"抢占"当前的 )。
为什么?——只有比当前级别处理优先级高的中断才该打断当前服务程序;同级或更低的应该乖乖等着。
第一步:把处理优先级排成表
题目给的处理顺序:(从高到低)
| 处理优先级排名 | 1(最高) | 2 | 3 | 4 | 5(最低) |
|---|---|---|---|---|---|
| 中断级 |
第二步:找出 自己的位置以及"≤ "的中断
在处理优先级中排第 4。比 处理优先级低或等于(即排名 ≥ 4)的有:
- 自己(排名 4)
- (排名 5)
→ 这两个要屏蔽(设 1)。
比 处理优先级高(排名 1~3)的有:。
→ 这三个不屏蔽(设 0),让它们能抢占 的服务程序。
第三步:填入屏蔽字
| 位 | 对应中断 | 处理优先级 vs | 是否屏蔽 | 取值 |
|---|---|---|---|---|
| 高(排名 1) | 否 | 0 | ||
| 低(排名 5) | 是 | 1 | ||
| 高(排名 3) | 否 | 0 | ||
| 等于(自身) | 是 | 1 | ||
| 高(排名 2) | 否 | 0 |
合起来:。
第四步:验证嵌套行为
假设 正在执行,此时各中断到来时的反应:
| 来访的中断 | 行为 | |
|---|---|---|
| 0 | 抢占 ( 处理优先级最高) | |
| 0 | 抢占 ( 处理优先级第 2) | |
| 0 | 抢占 ( 处理优先级第 3) | |
| 1 | 等待(不允许重入) | |
| 1 | 等待(处理优先级最低) |
完全符合题目要求的处理顺序。
最终答案是 D(01010)。
判定口诀:
- 响应优先级是硬件给的"摆样子"——只决定多个中断同时来时谁先被注意;
- 处理优先级才是屏蔽字"动态调"出来的——决定谁能打断谁;
- 屏蔽规则:自己屏蔽自己,并屏蔽所有处理优先级比自己低的;处理优先级比自己高的不屏蔽(让它们抢占)。