Skip to content

2011年 408 操作系统 第 24 题

操作系统2011年选择题2分

题目

下列选项中,在用户态执行的是( )。

错因

B

缺页处理程序是 OS 的中断/异常处理程序,必在内核态运行——它要访问页表、PCB、磁盘 I/O 这些受保护的内核数据结构。误以为它在用户态多半是没把"程序在哪态"和"被谁触发"分开:缺页由用户态访存触发,但处理在内核态

C

进程调度程序是调度器——它要修改 PCB、调度队列、TLB 等内核数据,必在内核态运行。用户态根本看不到这些数据结构。把它当成用户态程序是把"内核工作"当用户工作了。

D

时钟中断处理程序是中断 ISR,内核态运行——它要修改内核时钟变量、当前进程的 CPU 累计时间、剩余时间片等内核字段。所有中断处理程序都在内核态运行。

总解析

判断"在哪态运行"的钥匙:这个程序需要访问什么资源——只用用户态可访问资源 → 用户态;要访问内核数据结构 / 特权指令 → 内核态。

选项程序需要访问的资源所在态
A命令解释程序(shell)解析用户输入 + fork/exec 调用用户态
B缺页处理程序页表、PCB、磁盘 I/O内核态
C进程调度程序PCB、调度队列、TLB内核态
D时钟中断处理程序内核时钟变量、PCB 时间字段内核态

关于 shell(命令解释程序)

shell 本质是一个用户程序——bash、zsh、cmd 都是普通进程,跑在用户态。它的工作流程:

读用户输入 → 解析命令 → fork() → exec() → wait()

每一步都是用户态代码——fork、exec、wait 是系统调用,shell 通过它们陷入内核,但 shell 自己的代码在用户态。"系统调用"≠"shell 在内核态"——发起 syscall 的代码(shell)在用户态,被调用的服务(OS)在内核态。

速记:shell 是用户程序,不是 OS 的一部分——很多人以为 shell 是 OS 的一部分(因为开机就有),但它实际上跟 vim、git 一样是普通用户程序,只是开机自动启动而已。

最终答案是 A

最后更新:

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