处理器运行模式

Q: CPU 通常有几种运行模式?
A: 两种,核心态(管态/内核态)和用户态(目态)。
202408171301056.webp

Q: 为了防止用户程序对系统造成破坏,CPU通常设置两种运行模式,分别是什么?
A: 核心态和用户态。
202408171301056.webp

核心态

Q: CPU 在核心态下可以执行什么指令?
A: 核心态下CPU可以使用全部指令集,包括特权指令。

Q: CPU 在核心态下可以访问什么资源?
A: 系统中的所有软硬件资源。

Q: 什么程序运行在核心态?
A: 操作系统内核程序。

用户态

Q: CPU 在用户态下可以执行什么指令?
A: 非特权指令。

Q: CPU 在用户态下可以访问什么资源?
A: 仅限于访问用户的地址空间。

Q: 什么程序运行在用户态?
A: 应用程序。

特权指令

Q: 什么是特权指令?
A: 只能由操作系统内核程序使用的指令,不允许用户程序直接使用。

Q: 列举一些特权指令?
A: I/O 指令、关中断指令、内存清零指令、存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等的指令。

非特权指令

Q: 什么是非特权指令?
A: 允许用户程序使用的指令。

Q: 非特权指令能否直接访问系统资源?
A: 不能,非特权指令的访问范围仅限于用户的地址空间。

访管指令

Q: 什么是访管指令?
A: 一种特殊的指令,用于在用户态下调用操作系统内核程序,从而实现用户态到核心态的切换
别名:陷入指令 = trap 指令 = 访管指令

Q: 访管指令是特权指令吗?
A: 不是,访管指令是在用户态执行的,因此是非特权指令。

操作系统内核

Q: 现代操作系统采用什么结构?
A: 分层式的结构。

Q: 操作系统内核位于哪一层?
A: 最底层。

Q: 操作系统内核可以看作是什么?
A: 连接应用程序和硬件的一座桥梁。

Q: 操作系统内核通常包括哪几方面的内容?
A: 时钟管理、中断机制、原语和系统控制的数据结构及处理。

时钟管理

Q: 时钟管理的第一功能是什么?
A: 计时,操作系统需要通过时钟管理,向用户提供标准的系统时间。

Q: 时钟中断的管理可以实现什么?
A: 进程的切换。
例如,在分时操作系统中采用时间片轮转调度,在实时系统中按截止时间控制运行,在批处理系统中通过时钟管理来衡量一个作业的运行程度等。

中断机制

Q: 引入中断技术的初衷是什么?
A: 提高多道程序运行时的 CPU 利用率,使 CPU 可以在 I/O 操作期间执行其他指令。

Q: 现代操作系统是靠什么驱动的?
A: 中断驱动的。

原语

Q: 什么是原语?
A: 具有原子性特点的程序,其操作只能一气呵成。

Q: 原语的特点有哪些?
A: 1) 处于操作系统的最底层,是最接近硬件的部分。
2) 运行具有原子性,其操作只能一气呵成。
3) 运行时间都较短,而且调用频繁。

Q: 定义原语的直接方法是什么?
A: 关中断,让其所有动作不可分割地完成后再打开中断。

系统控制的数据结构及处理

Q: 系统中用来登记状态信息的数据结构有哪些?
A: 作业控制块、进程控制块 (PCB)、设备控制块、各类链表、消息队列、缓冲区、空闲区登记表、内存分配表等。

Q: 为了实现有效的管理,系统需要哪些基本的操作?
A: 进程管理。进程状态管理、进程调度和分派、创建与撤销进程控制块等。存储器管理。存储器的空间分配和回收、内存信息保护程序、代码对换程序等。设备管理。缓冲区管理、设备分配和回收等。

中断和异常的概念

异常

Q: 异常也称为?
A: 内中断,或异常。

Q: 异常能否被屏蔽?
A: 不能,异常一旦出现就应立即处理。

异常的分类

Q: 异常可以分为哪几类?
A: 故障(Fault)、自陷(Trap)、终止(Abort)。
202408171301064.webp

Q: 什么是故障?
A: 通常是由指令执行引起的异常,例如非法操作码、缺页故障、除数为 0 、运算溢出等。

Q: 什么是自陷?
A: 一种事先安排的 “异常” 事件,用于在用户态下调用操作系统内核程序,例如条件陷阱指令、系统调用指令等。
别名:陷入指令 = trap 指令 = 访管指令

Q: 什么是终止?
A: 指出现了使得 CPU 无法继续执行的硬件故障,例如控制器出错、存储器校验错等。

中断和异常的区别

Q: 中断和异常的来源有什么区别?
A: 中断来自 CPU 执行指令外部的事件,异常来自 CPU 执行指令内部的事件。

Q: 中断和异常的可屏蔽性有什么区别?
A: 中断可以被屏蔽,异常不能被屏蔽。

中断和异常的处理过程

Q: 中断和异常的处理过程大致是怎样的?
A: 当 CPU 检测到中断或异常事件时,会打断当前程序,转到相应的中断或异常处理程序去执行。
若中断或异常处理程序能够解决相应的问题,则 CPU 通过执行中断或异常返回指令,回到被打断的程序继续执行;
若中断或异常处理程序发现是不可恢复的致命错误,则终止程序。
通常情况下,对中断和异常的具体处理过程由操作系统 (和驱动程序) 完成。

中断处理和子程序调用的区别

Q: 中断处理程序与被中断的当前程序之间是什么关系?
A: 相互独立的。

Q: 子程序与主程序之间是什么关系?
A: 主从关系。

Q: 中断的产生是怎样的?
A: 随机的,不可预知的。

Q: 子程序调用是怎样的?
A: 由程序设计者事先安排的。

Q: 中断处理需要什么才能实现?
A: 专门的硬件电路。

Q: 中断处理程序的入口地址如何获得?
A: 由硬件向量法产生向量地址,再由向量地址找到入口地址。

Q: 子程序的入口地址如何获得?
A: 由 CALL 指令中的地址码给出。

Q: 子程序调用是否需要进行裁决?
A: 不需要。

系统调用

系统调用的定义

Q: 什么是系统调用?
A: 用户在程序中调用操作系统所提供的一些子功能,可被视为特殊的公共子程序。
202408171301069.webp
202408171301072.webp

Q: 系统调用的处理程序运行在什么状态?
A: 核心态。

系统调用的处理过程

Q: 系统调用的处理过程是怎样的?
A: 1) 用户程序首先将系统调用号和所需的参数压入堆栈;
2) 调用实际的调用指令,然后执行一个陷入指令,将 CPU 状态从用户态转为核心态;202408171301073.webp
3) 由硬件和操作系统内核程序保护被中断进程的现场;
4) 分析系统调用类型,转入相应的系统调用处理子程序;202408171301074.webp
5) 在系统调用处理子程序执行结束后,恢复被中断的或设置新进程的 CPU 现场,然后返回被中断进程或新进程,继续往下执行。202408171301075.webp
202408171301076.webp
传递系统调用参数—>执行陷入指令(用户态)—>执行相应的内请求核程序处理系统调用 (内核态)—> 返回应用程序

Q: 用户程序执行“陷入指令”相当于什么?
A: 将 CPU 的使用权主动交给操作系统内核程序。

用户态切换到内核态的几种方式

Q: 用户态切换到核心态的几种方式有哪些?
A: 中断、异常、系统调用。

Q: 中断切换到核心态的触发条件是什么?
A: 由 CPU 执行指令外部的事件触发,例如I/O设备请求,时钟中断等。

Q: 异常切换到核心态的触发条件是什么?
A: 由 CPU 执行指令内部的事件触发,例如程序的非法操作码、地址越界、运算溢出等。

Q: 系统调用切换到核心态的触发条件是什么?
A: 由用户程序主动发起,例如用户程序请求操作系统的服务。

Q: 中断切换到核心态的过程是什么?
A: 1) CPU 暂停当前程序的执行。
2) 保存当前程序的现场信息,例如程序计数器(PC)和程序状态字(PSW)。
3) 根据中断类型号找到对应的中断处理程序入口地址。
4) CPU 进入核心态,执行中断处理程序。

Q: 异常切换到核心态的过程是什么?
A: 1) CPU 暂停当前程序的执行。
2) 保存当前程序的现场信息,例如程序计数器(PC)和程序状态字(PSW)。
3) 根据异常类型号找到对应的异常处理程序入口地址。
4) CPU 进入核心态,执行异常处理程序。

Q: 系统调用切换到核心态的过程是什么?
A: 1) 用户程序执行陷入指令(trap)。
2) 操作系统保存用户程序的现场信息。
3) 操作系统根据系统调用号,在系统调用表中找到对应的系统调用服务例程入口地址。
4) CPU 进入核心态,执行系统调用服务例程。

中断和异常的优先级

Q: 中断和异常的优先级如何确定?
A: 不同的中断和异常有不同的优先级,优先级高的中断或异常会打断优先级低的中断或异常处理过程。

Q: 如何处理多个中断或异常同时发生的情况?
A: 操作系统会根据中断和异常的优先级,选择优先级最高的中断或异常进行处理,处理完成后再处理优先级较低的中断或异常。

系统调用的实现机制

Q: 系统调用是如何通过软件中断实现的?
A: 系统调用通常通过执行一个特殊的软件中断指令(例如 x86 架构中的 int 0x80sysenter)来实现,该指令会触发一个中断,并将 CPU 的控制权交给操作系统内核程序。

Q: 系统调用号的作用是什么?
A: 每个系统调用都有一个唯一的系统调用号,操作系统根据系统调用号来识别不同的系统调用请求。

Q: 系统调用服务例程的作用是什么?
A: 操作系统内核程序会根据系统调用号,找到对应的内核函数进行执行,这些内核函数被称为系统调用服务例程