Skip to content

2015年 408 操作系统 第 23 题

操作系统2015年选择题2分

题目

处理外部中断时,应该由操作系统保存的是( )。

错因

A

凭直觉觉得"要保存现场,PC 当然算现场的一部分"——确实算,但 PC 是中断隐指令保存的,不是 OS 保存。CPU 一识别中断信号,硬件层面就立刻把 PC 压栈、PSW 切到内核态,等 OS 中断处理程序拿到执行权时 PC 早已保存好。题问"OS 保存",PC 不属于 OS 干的活。

C

把 TLB 当作进程上下文来保存。但 TLB 是硬件缓存——里面的内容随时可能被硬件刷新(比如别的进程上来用),就算 OS 想保存也不可控;而且不需要保存:进程切换回来后,新的访存会按需重新填充 TLB。中断处理通常只是 invalidate 受影响的 TLB 项,不存"保存 TLB 内容"这件事。

D

Cache 也是硬件透明的——CPU 读写内存时硬件自动管理 Cache 行的填充和写回,OS 看不到 Cache 里有什么、也没有 API 让它"保存 Cache 内容"。中断处理保存的是软件可见的状态(寄存器),不是硬件不可见的层级。

总解析

中断响应时"硬件做什么、OS 做什么"的边界:

步骤内容谁做
① 中断响应保存 PC + PSW、切到内核态硬件(中断隐指令)
② 跳转入口按中断号查中断向量表硬件
③ 进入处理程序保存通用寄存器(R0~Rn)、保存中断屏蔽字OS
④ 提供服务读设备状态、搬数据、唤醒进程等OS
⑤ 恢复返回恢复屏蔽字、恢复通用寄存器、IRETOS + 硬件

判定原则:中断隐指令自动保存的是"切换控制流必需的最小集"(PC + PSW),其他业务相关的寄存器要 OS 进入处理程序后自己保存——因为 ISR 自己也要用通用寄存器。

逐项核对:

  • A PC:硬件保存(中断隐指令) → 不归 OS
  • B 通用寄存器:ISR 一上来就要 push 一遍,否则它跑业务逻辑会破坏被中断进程的现场 → OS 保存
  • C TLB:硬件缓存,OS 不"保存"TLB 内容
  • D Cache:同上,硬件透明

最终答案是 B

最后更新:

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