OS 的基本概念
操作系统的四个基本特征是{c1: 并发}、{c2: 资源共享}、{c3: 虚拟}和{c4: 异步}.
在操作系统的所有基本特征中, 最基本的两个特征是{c1: 并发}和{c2: 资源共享}.
Q: 并发与并行的区别?
A: - 并发: 宏观上同时, 微观上交替执行. 关键在于一个时间段内处理多个任务.
- 并行: 真正意义上的同时执行. 关键在于同一时刻处理多个任务 (需要多核处理器支持).
Q: 并行与并发哪个才是真正意义上的同时执行?
A: 并行
Q: 操作系统的异步性指的是什么现象?
A: 指系统中的进程以不可预知的速度向前推进, 导致程序执行的顺序和时间都具有不确定性.
Q: 操作系统为用户提供的两种接口是什么
A: 命令接口(shell)
程序接口(系统调用)
Q: 在 Linux 中, 用户程序通过哪个系统调用创建新进程?
A: fork()
注意: fork 是系统调用名, 不是 shell 命令.
操作系统的四大最基本功能是{c1: 进程管理}、{c2: 内存管理}、{c3: 文件管理}和{c4: 设备管理}.
操作系统发展历程
批处理系统
Q: 单道批处理和多道批处理最核心的区别在于, 当作业因 I/O 阻塞时, CPU 分别处于什么状态?
A: - 单道批处理: CPU 空闲等待, 造成资源浪费.
- 多道批处理: CPU 切换到另一个作业, 提高了利用率.
多道批处理系统
当某道程序因请求 I/O 操作而暂停运行时, CPU 便立即转去运行另一道程序
这是通过{中断}机制实现的
分时操作系统
Q: 分时操作系统的主要特点
A: 多个用户通过终端同时共享一台主机
实时操作系统
Q: 实时操作系统的主要特点?
A: 及时性和可靠性
Q: 分时操作系统和实时操作系统在设计目标上最主要的区别是什么?
A: - 分时系统: 追求对用户交互的及时响应 (交互性).
- 实时系统: 追求对外部事件的及时处理和高可靠性 (及时性、可靠性).
系统调用
Q: 判断一条指令是否可能属于”系统调用”的一个通用准则是?
A: 它是否需要访问系统核心资源(如 I/O 设备、文件系统、进程控制块等). 因为这些资源不允许用户程序直接操作.
Q: I/O 操作一定是系统调用吗?
A: 用户程序进行 I/O 时, 通常要通过系统调用请求内核完成.
但机器级的 I/O 指令本身是特权指令, 只能在内核态执行, 不能简单等同于系统调用.
用户态到核心态的转换由{硬件(CPU 响应中断/异常)}完成
核心态到用户态的返回由{中断/异常处理程序执行返回指令}完成
访管指令的”访管”意为”{访问管理系统资源}”
Q: 为什么”访管指令”必须在用户态下执行, 而不能在内核态执行?
A: 因为”访管指令”的目的就是触发从用户态到内核态的转换, 以请求系统服务. 在内核态时, 程序已拥有权限, 无需再”请求”, 因此该指令在内核态没有意义.
访管指令通常在{用户态}执行, 用于主动陷入内核请求系统服务
系统调用和一般过程调用的区别
系统调用需要保存 CPU 中的 {c1: PSW} 和 {c1: PC} 的值
一般过程调用需要保存 CPU 中的 {c2: PC} 的值
Q: 为什么系统调用需要保存 CPU 中的 PSW 值?
A: 因为从用户态切换到内核态, PSW 中的状态位(如中断屏蔽位、特权级位) 会发生改变. 为了在返回用户态时能恢复到原始状态, 必须提前保存.
Q: 为什么页置换 (Page Replacement) 和进程调度 (Process Scheduling) 不属于系统调用?
A: 因为它们是由操作系统内核主动执行的管理功能, 而不是由用户程序通过”访管指令”发起的请求. 系统调用是用户程序请求系统服务的接口.
系统调用与中断
Q: CPU 检测到中断信号后, 由硬件 (中断隐指令) 自动保存的是什么?
A: 被中断程序的断点, 即程序计数器 (PC) 和程序状态字寄存器 (PSW) 的内容.
Q: 硬件在完成保存断点和模式切换后, 如何找到对应的中断处理程序?
A: 硬件通过中断信号查询”中断向量表”, 从中找到对应的中断服务程序的入口地址.
Q: 中断服务程序 (软件) 开始执行后, 在处理具体中断事件之前, 需要先保存什么?
A: 需要保存现场, 主要是通用寄存器等软件现场.
中断服务程序 (软件) 保存现场时, 重点保存{通用寄存器}等软件可见现场; 是否保存 {PSW}、{中断屏蔽字}取决于体系结构和中断处理流程
Q: 中断处理过程由哪两大部分负责?
A: 中断隐指令 (硬件/CPU 内部电路) 和中断处理程序 (软件).
Q: 在中断处理过程中, 硬件/CPU 内部电路 (中断隐指令) 负责哪三个核心步骤?
A: 1. 关中断
2. 保存断点 (PC 和 PSW)
3. 识别中断源 (并转入中断服务程序)
Q: 在中断处理过程中, 软件 (中断处理程序) 负责哪些核心步骤?
A: 1. 保存现场 (通用寄存器等)
2. 中断事件处理
3. 恢复现场
4. 开中断并返回
Q: 中断隐指令需要保护通用寄存器中的内容吗?
A: 不需要. 保护通用寄存器是中断处理程序的软件工作.
Q: 中断隐指令保存断点与中断处理程序保存现场, 分别保存什么?
A: 中断隐指令: 保存断点, 典型是 PC 和 PSW.
中断处理程序: 保存现场, 典型是通用寄存器、指针/变址寄存器等运行现场.
Q: 中断隐指令为什么不可以被打断?
A: 中断隐指令为硬件完成的原子化操作
Q: 为什么中断处理程序可能需要保存中断屏蔽字?
A: 中断处理程序可能临时修改中断屏蔽字, 以控制哪些中断可以嵌套响应.
返回被中断程序前要恢复原屏蔽状态, 所以需要保存旧的中断屏蔽字.
设置新中断屏蔽字由{操作系统}实现
{中断屏蔽字}确定{中断处理}优先级
{硬件}确定{中断响应}优先级
操作系统结构
Q: 微内核拥有操作系统的四大功能中的哪两个?
A: 进程管理
内存管理
但也只有这两个的一部分
Q: 微内核 (Microkernel) 架构相比于宏内核 (Monolithic Kernel) 架构, 其主要优点是什么?
A: 可靠性、安全性和灵活性更高. 因为许多 OS 服务都在用户态作为独立的进程运行, 一个服务崩溃不会影响整个系统.
Q: 宏内核 (Monolithic Kernel) 架构相比于微内核 (Microkernel) 架构, 其主要优点是什么?
A: 性能更好. 因为内核服务之间的通信是简单的函数调用, 而非微内核中开销更大的进程间通信 (IPC).
操作系统引导
Q: 为什么操作系统初始化过程中要建立/初始化中断向量表?
A: CPU 响应中断或异常后, 需要根据中断类型号查表找到对应处理程序入口.
因此操作系统必须在初始化阶段设置好中断向量表/中断描述符表, 让后续中断能被正确处理.
Q: 中断向量表由硬件还是操作系统初始化?
A: 操作系统
虚拟机
Q: 第一类虚拟机与第二类虚拟机区别
A: - 第一类: 虚拟机管理程序直接运行在硬件上, 更高效 (如 PVE, ESXi).
- 第二类: 虚拟机管理程序作为一个应用程序运行在宿主操作系统上 (如 VirtualBox, VMware Workstation, WSL).