当前位置: 首页 > news >正文

操作系统的概述之三

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. 系统调用: 用户程序在用户态下执行时,通过一条特殊的指令(如 trapsyscall)主动请求操作系统服务,从而引发从用户态到核心态的转换。事件的“起因”发生在用户态。

  • 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传送结束"是外部设备中断,"存储保护错"是内存访问异常。

相关文章:

  • 【LeetCode 热题 100】438. 找到字符串中所有字母异位词——(解法三)不定长滑动窗口+数组
  • 【Linux】理解进程状态与优先级:操作系统中的调度原理
  • 电脑录屏软件推荐,干净无广告快速使用
  • python -日期与天数的转换
  • Vue基础(18)_收集表单数据
  • 06-three.js 创建自己的缓冲几何体
  • 【数据结构】map/set模拟实现(红黑树作底层)
  • 道路交通标志检测数据集-智能地图与导航 交通监控与执法 智慧城市交通管理-2,000 张图像
  • cocos creator 3.8 - 精品源码 - 六边形消消乐(六边形叠叠乐、六边形堆叠战士)
  • 【安全建设 | 从0到1】企业安全体系建设线路
  • OpenCV图像噪点消除五大滤波方法
  • spring-ai 1.0.0 (2)提示词,消息构建和移植能力
  • python学习打卡day57
  • JWT认证性能优化实战指南
  • 【数据结构】AVL树和红黑树的Insert(插入)(实现map.insert)
  • BUUCTF [ACTF新生赛2020]music 1
  • 如何提取mdd字典中音频文件并转化为mp3
  • Rust代码规范之蛇形命名法和驼峰命名法
  • C++共享型智能指针std::shared_ptr使用介绍
  • Webpack 核心与基础使用