Skip to content

2021年 408 操作系统 第 23 题

操作系统2021年选择题2分

题目

下列指令中,只能在内核态执行的是( )。

错因

A

trap 当成了"陷入内核"动作本身、误以为这条指令需要内核态权限。其实正好相反:trap 是用户态进程主动跨界进内核的入口,跟 int 0x80 / syscall 一样——执行 trap 的瞬间还在用户态,一旦执行才完成"用户态 → 内核态"的切换。如果它本身需要内核态才能用,应用程序就无法发起系统调用了。

C

被"数据传送"四个字吓住,觉得"动数据"听起来要特权。但 movloadstore 这些就是 CPU 最基本的访问内存 / 寄存器指令,编译出来的用户程序里到处都是。它们不绕开 MMU,访问哪段内存仍受页表保护,所以即使在用户态执行也不会越权——根本不是特权指令。

D

把"调试用"误当成"内核才能用"。设置断点(如 x86 的 int 3 / 调试寄存器写入)通常分两种:① 软件断点 int 3 是普通中断指令,用户态可以随便插;② 调试寄存器 DR0-DR7 那种由 ring 0 控制——但题面笼统问"设置断点指令",主要指可以在用户态用的形式(gdb 调试用户程序就靠这个)。所以不是"只能内核态"的特权指令。

总解析

题问"只能在内核态执行"——也就是问哪条是特权指令。判定原则:会影响硬件全局状态、能绕开保护机制、能让一个进程影响另一个进程的指令,必须特权化。

指令性质在哪态执行
trap(陷入指令)用户态发起系统调用的入口用户态执行,执行完才进内核
I/O 指令in/out 等)直接读写设备控制器寄存器,影响硬件只能内核态(特权指令)
数据传送(mov/load/store普通内存 / 寄存器访问任意态
设置断点(如 int 3调试用,调试器在用户态插进去就行任意态(用户进程能用)

I/O 指令一旦放给用户态,任何用户程序都能直接操作磁盘、网卡——OS 的设备保护就废了。所以从硬件设计上就把它锁在内核态,必须通过系统调用绕个弯让 OS 代理执行。

常见特权指令一览(顺手记):

  • I/O 指令、停机指令(hlt
  • 修改 PSW、修改特权寄存器(CR0-CR4 等)
  • 加载页表基址寄存器、刷 TLB
  • 开 / 关中断、设置中断向量表

最终答案是 B

最后更新:

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