Skip to content

2014年 408 操作系统 第 25 题

操作系统2014年选择题2分

题目

下列指令中,不能在用户态执行的是( )。

错因

A

把 trap 误以为是"陷入内核"所以"是特权指令"。其实正好相反——trap 的作用就是让用户态进程主动陷入内核态(系统调用就是这么实现的),它必须能在用户态执行,否则用户程序根本没办法发起 syscall。trap 是用户态可以执行的指令。

B

跳转指令(jmp/jne 之类的控制流指令)是程序最基础的操作——任何用户程序都要用 if/else、循环、函数调用,全靠这些实现。如果不能在用户态执行,用户程序就跑不起来。这是普通指令,跟特权完全无关。

C

压栈(push)是函数调用、保存上下文、临时变量都要用的基础操作。把它当特权指令不合理——用户程序栈帧操作是天天在做的事,必须能在用户态执行。

总解析

特权指令:只能在内核态执行的指令,硬件层面在用户态执行会触发"非法指令"异常。判断标准——这条指令是否会影响系统级状态、可能危害其他进程或整机稳定

指令作用是否特权?
A trap用户主动陷入内核(syscall 入口)✗ 必须能在用户态发起,否则用户没法叫内核
B 跳转改 PC 寄存器,控制流转移✗ 普通指令,每个用户程序都在用
C 压栈改栈指针,把数据存到栈上✗ 普通指令,函数调用必备
D 关中断屏蔽 CPU 响应中断✓ 特权 —— 用户态能关中断的话,恶意程序一关就让 OS 失去对 CPU 的控制(时钟中断、I/O 中断都进不来),等于霸占整机

判定原则:能让 OS 失去对硬件的"听觉"或控制权的指令,必须特权——典型如开/关中断、设置中断向量、I/O 指令、修改特权标志位、加载 PSW

关中断如果允许在用户态执行,恶意进程一旦关掉中断 + 进入死循环,时钟中断进不来、调度器叫不醒它、OS 也救不回来,整机就被它锁死了。这是必须由内核独占的关键能力。

最终答案是 D

最后更新:

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