操作系统的概述之三
1 下列选项中,在用户态执行的是 ( )。
A. 命令解释程序
B. 缺页处理程序
C. 进程调度程序
D. 时钟中断处理程序
解析:
操作系统中的程序执行状态通常分为用户态(User Mode)和核心态(Kernel Mode)。核心态拥有访问所有硬件和内存的最高权限,主要运行操作系统内核代码。用户态权限受限,主要运行应用程序。
-
A. 命令解释程序: 如 Shell 或 cmd.exe,它是一个应用程序,负责接收和解释用户输入的命令。它本身运行在用户态。当它需要执行需要特权的操作时(如创建进程),会通过系统调用陷入核心态。
-
B. 缺页处理程序: 当用户程序访问的页面不在内存时,会产生一个缺页异常(中断)。CPU会立即从用户态切换到核心态,转而去执行操作系统的缺页处理程序,以从磁盘调入相应页面。因此,缺页处理程序在核心态执行。
-
C. 进程调度程序: 这是操作系统内核的核心组件,负责决定哪个进程将获得CPU的使用权。它需要修改进程控制块等内核数据结构,必须在核心态执行。
-
D. 时钟中断处理程序: 时钟中断是硬件中断,用于计时和触发进程调度等。中断发生后,CPU会立即切换到核心态来执行对应的中断处理程序。因此,时钟中断处理程序在核心态执行。
综上所述,只有命令解释程序是运行在用户态的。
2 下列选项中,不可能在用户态发生的事件是 ( )。
A. 系统调用
B. 外部中断
C. 进程切换
D. 缺页
解析:
本题询问哪个事件本身不是在用户态发生的。我们需要区分事件的“触发”和“处理”。事件的触发可能在用户态,但其处理程序通常在核心态执行。
-
A. 系统调用: 用户程序在用户态下执行时,通过一条特殊的指令(如
trap
或syscall
)主动请求操作系统服务,从而引发从用户态到核心态的转换。事件的“起因”发生在用户态。 -
B. 外部中断: 也称硬件中断,例如 I/O 操作完成或时钟中断。当用户程序在用户态下执行时,这些来自外部设备的中断信号可以随时发生,中断当前的用户态执行,并强制CPU转入核心态去处理中断。因此,中断事件可以发生在用户程序执行期间(即用户态下)。
-
C. 进程切换: 进程切换是操作系统内核的一项功能,它负责保存当前进程的上下文,并加载另一个进程的上下文。这个过程完全由操作系统在核心态完成,它是由调度程序执行的。用户程序不能在用户态下执行进程切换操作。虽然触发进程切换的事件(如时钟中断或系统调用)可能在用户态时发生,但“进程切换”这个行为本身是在核心态中进行的。
-
D. 缺页: 当用户程序在用户态下执行一条指令,试图访问一个不在物理内存中的页面时,会立即触发一个缺页异常。这个异常发生在用户态,并导致CPU切换到核心态去执行缺页处理程序。
因此,“进程切换”这个操作本身是在核心态完成的,不可能在用户态发生。
好的,我们按照新的格式重新组织一下。
3.【2012 统考真题】 中断处理和子程序调用都需要压栈,以便保护现场。中断处理一定会保存而子程序调用不需要保存其内容的是()。
A. 程序计数器
B. 程序状态字寄存器
C. 通用数据寄存器
D. 通用地址寄存器
解析:
本题旨在区分中断和子程序调用在保存现场时的关键不同点。
-
子程序调用(Function/Subroutine Call): 通常在同一进程和同一特权级别(用户态)内发生。其主要目的是返回到调用指令的下一条指令继续执行。因此,程序计数器(PC) 的值(即返回地址)必须被保存。其他通用寄存器的保存则根据编译器和调用约定(caller-saved vs. callee-saved)来决定,不是必须全部保存。关键在于,子程序调用不涉及特权等级的改变,因此通常不需要保存和改变程序状态字(PSW) 中与特权状态相关的部分。
-
中断处理(Interrupt Handling): 中断是来自硬件或异常事件的异步请求,它会打断当前进程的执行。中断发生后,CPU会从用户态强制切换到内核态。为了在中断处理完毕后能够精确地恢复到被中断前的状态,操作系统必须保存完整的现场。这不仅包括程序计数器(PC),还必须包括程序状态字寄存器(PSW)。PSW中包含了CPU当前的工作模式(用户态/内核态)、条件码(如零标志、溢出标志)等关键状态信息。中断处理一定会改变CPU的工作模式,因此必须保存旧的PSW并在进入中断服务程序时设置新的PSW,在返回时再恢复原有的PSW。
结论: 程序状态字寄存器(PSW)是中断处理时必须保存,而子程序调用时通常不需要保存的核心部件。故选B。
4.【2013 统考真题】 下列选项中,会导致用户进程从用户态切换到内核态的操作是()。
I. 整数除以零
II. sin()函数调用
III. read 系统调用
A. 仅 I、II
B. 仅 I、III
C. 仅 II、III
D. I、II 和 III
解析:
本题考查从用户态转换到内核态的途径。这种转换通常由三类事件引起:系统调用、异常和外部中断。
-
I. 整数除以零: 这是一个在程序执行期间由CPU检测到的错误,属于异常(Exception) 或陷入(Trap)。当CPU试图执行此非法操作时,它会中止当前指令,并将控制权转移给操作系统内核中的特定异常处理程序。这个过程伴随着从用户态到内核态的切换。因此,I 会导致模式切换。
-
II. sin()函数调用:
sin()
是一个标准的数学库函数。调用库函数是在用户空间内完成的,它只是一个普通的函数调用,控制流从一个用户态地址跳转到另一个用户态地址(库函数的代码区)。这个过程不涉及操作系统内核的介入,也不会发生特权级别的改变。因此,II 不会导致模式切换。 -
III. read 系统调用:
read
是一个典型的系统调用(System Call)。用户程序通过它请求操作系统提供I/O服务(如读取文件)。由于I/O设备是受内核管理的特权资源,用户程序不能直接访问。因此,执行read
系统调用会通过一个特殊的陷入指令(如syscall
)使CPU从用户态切换到内核态,由内核代为完成读操作。因此,III 会导致模式切换。
结论: 整数除以零(异常)和read系统调用会导致进程从用户态切换到内核态。故选B。
5.下列指令中,不能在用户态执行的是( )。 A. trap指令 B. 跳转指令 C. 压栈指令 D. 关中断指令
关中断指令是特权指令,只能在内核态(管态)执行,不能在用户态执行。
- trap指令:用于产生软中断,用户程序可以执行来请求系统服务
- 跳转指令:普通的程序控制指令,用户态可以执行
- 压栈指令:普通的数据操作指令,用户态可以执行
- 关中断指令:特权指令,涉及系统安全和稳定性,只能在内核态执行
用户态程序如果能随意关闭中断,会严重影响系统的正常运行
6.处理外部中断时,应该由操作系统保存的是( )。 A. 程序计数器(PC)的内容 B. 通用寄存器的内容 C. 快表(TLB)中的内容 D. Cache中的内容
处理外部中断时,需要保存被中断程序的现场信息
- A. 程序计数器(PC)的内容:PC保存下一条要执行指令的地址,中断发生时硬件会自动将PC压入堆栈或保存到特定寄存器中,这是硬件自动完成的,不是操作系统主动保存的。
- B. 通用寄存器的内容:这些是被中断程序正在使用的寄存器,包含程序的运算数据和中间结果。操作系统的中断处理程序需要主动保存这些寄存器内容,以便中断处理完成后能够恢复被中断程序的执行状态。
- C. 快表(TLB)中的内容:TLB是硬件管理的,不需要操作系统显式保存。
- D. Cache中的内容:Cache也是硬件管理的,操作系统不需要主动保存。
修正答案:B. 通用寄存器的内容
PC的保存通常是硬件自动完成的(通过中断向量机制),而通用寄存器的内容需要操作系统的中断处理程序主动保存到PCB或堆栈中,这样才能在中断处理完成后正确恢复被中断程序的状态
7. 【2015 统考真题】假定下列指令已装入指令寄存器,则执行时不可能导致 CPU 从用户态变为内核态(系统态)的是( )。
A. DIV R0, R1 ; (R0)/(R1)→R0
B. INT n ; 产生软中断
C. NOT R0 ; 寄存器 R0 的内容取非
D. MOV R0, addr ; 把地址 addr 处的内存数据放入寄存器 R0
答案:C
解析:
- NOT R0指令是简单的逻辑非操作,不会产生任何异常或中断,因此不会导致CPU从用户态切换到内核态。
- 其他选项:DIV可能触发除零异常,INT是显式软中断指令,MOV访存可能触发缺页异常,这些都会导致态切换。
8. 【2016 统考真题】异常是指令执行过程中在处理器内部发生的特殊事件,中断是来自处理器外部的请求事件。下列关于中断或异常情况的叙述中,错误的是( )。
A. "访存时缺页"属于中断
B. "整数除以 0"属于异常
C. "DMA 传送结束"属于中断
D. "存储保护错"属于异常
答案:A
解析:
- "访存时缺页"是由CPU内部指令执行引发的异常事件,属于异常而非中断,因此A选项错误。
- 其他选项分类正确:"整数除以0"是运算异常,"DMA传送结束"是外部设备中断,"存储保护错"是内存访问异常。