Skip to content

2012年 408 操作系统 第 24 题

操作系统2012年选择题2分

题目

中断处理和子程序调用都需要压栈以保护现场,中断处理一定会保存而子程序调用不需要保存其内容的是( )。

错因

A

PC 两者都要保存——子程序调用 call 指令把返回地址(PC+1)压栈、中断也要把 PC 入栈以便恢复。区别不在 PC 上。把它当成中断独有就错了:返回机制对两者都不可少。

C

通用数据寄存器在两种情况下都按需保存——子程序如果用到了某些寄存器要保存好以便返回,中断处理也要保存。两者都可能保存,不是中断独有

D

地址寄存器同 C,两者都按需保存。把它当成中断独有的也不对——不存在"子程序不需要保存而中断需要"的差异。

总解析

中断处理 vs 子程序调用 的核心差异:中断处理涉及状态变化(中断使能位、屏蔽位、CPU 模式等)+ 可能跨进程;子程序调用不涉及。

寄存器子程序调用中断处理
PC(程序计数器)✓ 保存(call 自动压栈)✓ 保存(中断隐指令)
通用数据/地址寄存器按需保存(被调用方按调用约定)按需保存(ISR 用到的也要保存)
PSW(程序状态字)✗ 不保存(同进程同执行流,PSW 不变)✓ 必保存

为什么中断必须保存 PSW

PSW 包含:

  • CPU 模式位(用户态 / 内核态)——中断从用户态进入内核态会改变这位,恢复时要复原
  • 中断屏蔽字 / 中断使能位——ISR 期间可能屏蔽某些中断,恢复时要复原原始屏蔽情况
  • 条件码 / 标志位(CF, ZF, SF, OF 等)——中断打断了被中断指令的"自然"执行流,标志位要保护

子程序调用不跨态、不改屏蔽字、运行环境跟调用者一致,PSW 不需要保存。

速记:中断 = 子程序调用 + PSW 保存 + 态/屏蔽变化。多出来的"PSW 必保存"就是两者最直接的区别。

最终答案是 B

最后更新:

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