Skip to content

2024年 408 操作系统 第 23 题

操作系统2024年选择题2分

题目

下面关于中断和异常的说法中,错误的是( )。

错因

B

把"内核服务例程"理解成某种独立的程序模块,觉得简单的系统调用(如 getpid)"只是查个值就返回",似乎不需要专门的例程——于是怀疑 B。但 OS 实现里,即便最简单的 syscall 也走完整入口流程:syscall 指令陷入 → 查 syscall 表 → 调用对应的 sys_xxx 函数 → 返回。每个系统调用号都明确对应一个内核服务函数,这是基础架构。

C

把"中断处理"误理解成包括响应阶段的全过程:响应最初一瞬(PSW 还没保存完)CPU 似乎还在用户态。但题面措辞是"处理程序开始执行"——指那段处理代码跑起来的那一刻,硬件已替我们完成状态切换,CPU 必然在内核态(否则它访问内核数据结构会触发保护异常)。

D

误以为现代 OS 用统一的"设备驱动框架"管理一切,"添加新设备"只是装个驱动包,OS 自动接管中断——觉得"注册中断服务例程"是过时的描述。但驱动框架内部本质就是通过接口(Linux 的 request_irq、Windows 的 IoConnectInterrupt)把 ISR 挂到中断向量上——这就是注册,只是开发者感知不到。新设备类型必须配套自己的 ISR,否则中断信号无人响应。

总解析

判定思路:题目反向措辞(错误的),逐项核验。关键考点是分清 "中断/异常发生时""中断处理程序执行时" 这两个时刻 CPU 所处的状态。

完整时序拆解

时刻描述CPU 状态
用户进程运行用户态
中断/异常发生通常仍是用户态(多数 I/O 中断、时钟中断、syscall trap、缺页等都在用户进程运行时触发)
硬件响应:保存 PSW/PC、切换状态位、跳转到中断向量切换中 → 内核态
中断处理程序开始执行内核态(必然)
处理结束 IRET 恢复现场切回原态(多为用户态)

A 描述的是 ②,把它说成"内核态"——这是错的,本题答案。C 描述的是 ④,已切到内核态,正确。注意:A 与 C 的区分点不在于是不是内核态,而是"事件发生那一刻" vs "处理程序跑起来那一刻"——前者是触发切换的原因,后者是切换完成的结果。

逐项核对

选项描述对错关键
A中断/异常发生时 CPU 在内核态发生瞬间 CPU 通常在用户态,是触发切换的事件本身
B每个系统调用都有对应内核服务例程基本架构:syscall 号 → syscall 表 → sys_xxx 函数
C中断处理程序开始执行时 CPU 在内核态处理程序是内核代码,必须在内核态运行
D添加新设备类型需注册 ISR驱动核心组件,否则中断信号无人响应

速记:发生瞬间 ≠ 处理执行——前者多数在用户态(事件让 CPU 被迫切换),后者必然在内核态(特权代码必须有特权状态)。

最终答案是 A

最后更新:

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