来源:
c:\Users\26947\Desktop\考试\专业课速记\03_操作系统与并发.md用途:分类保存“原文完整迁移”基准,供完整阅读与逐字核对;以下正文保持源文件原样,不压缩、不改写。
操作系统与并发¶
1. 进程与线程¶
- 进程是资源分配的基本单位。
- 线程是 CPU 调度的基本单位。
- 同一进程内线程共享代码段、数据段、打开的文件等资源。
- 线程拥有独立的栈和程序计数器。
2. 用户态与内核态¶
系统调用会引发用户态到内核态的切换,例如文件读写、创建进程、网络通信、内存申请。频繁系统调用会产生上下文切换开销。
3. 虚拟内存分页与 TLB(快表)¶
分页的基本概念¶
分页把进程的虚拟地址空间划分成固定大小的页(Page),把物理内存划分成同样大小的页框/帧(Page Frame)。程序的页可以装入物理内存中不连续的页框,由操作系统维护页表记录映射关系。
- 页:虚拟内存中的固定大小区块。
- 页框/页帧:物理内存中的固定大小区块,大小与页相同。
- 页表:记录“虚拟页号 → 物理页框号”的映射,以及存在位、权限、修改位等状态。
- 分页可消除外部碎片,但最后一页未用满时可能有少量内部碎片。
虚拟地址如何转换¶
虚拟地址通常拆成两部分:虚拟页号 + 页内偏移量。页内偏移在转换前后保持不变,页表或快表将虚拟页号转换为物理页框号,再与页内偏移组合成物理地址。
例:页大小为 4 KB,则页内偏移需要 12 位(4 KB = 2^12);虚拟地址低 12 位是页内偏移,其余高位用于虚拟页号。页大小为 2 的幂,页号与偏移可通过位划分得到。
快表(TLB)¶
快表是处理器中用于缓存近期页表映射的高速小型硬件缓存。它缓存的是虚拟页号到物理页框号的映射,不是整个进程,也不是磁盘数据。
地址转换过程:
- CPU 产生虚拟地址,硬件先用 VPN 查 TLB。
- TLB 命中:直接取得 PFN,与页内偏移组合成物理地址,速度快。
- TLB 未命中:到内存中的页表查映射;若该页在内存中,把映射装入 TLB 后继续访问。
- 页表显示该页不在内存时,发生缺页异常/缺页中断;操作系统从磁盘调入页面,更新页表,必要时置换其他页面,再重新执行引发缺页的指令。
| 事件 | 含义 | 后果 |
|---|---|---|
| TLB 命中 | 快表中找到 VPN→PFN | 快速完成地址转换 |
| TLB 未命中 | 快表没找到映射 | 查内存中的页表;页面可能仍在内存 |
| 缺页 | 页表表明页面不在物理内存 | 需要操作系统从后备存储调页,代价远高于 TLB 未命中 |
关键辨析:TLB 未命中不等于缺页。未命中只表示“快表没有缓存映射”;只有页表也表明页面不在内存,才需要缺页处理。
TLB 与页表的配合¶
- 页表通常保存在主存中,容量可以较大,但访问它会增加地址转换开销。
- TLB 是速度更快但容量较小的缓存,利用程序访问的时间局部性和空间局部性提高地址转换速度。
- TLB 命中率越高,平均地址转换开销通常越低。
- 进程切换时,若不同进程的地址空间映射不同,需要通过地址空间标识(ASID)区分 TLB 项,或刷新部分/全部 TLB;具体由处理器机制决定。
分页的优缺点与相关概念¶
- 优点:物理内存可不连续分配;消除外部碎片;便于实现虚拟内存和内存保护。
- 代价:页表占用内存;地址转换增加开销;页未用满会产生内部碎片;缺页时磁盘 I/O 代价很高。
- 请求分页:页面只有在被访问且不在内存时才调入,属于虚拟内存常见机制。
- 页面置换:内存没有空闲页框时,选择页面换出,为新页腾出空间;置换算法不等同于 TLB 替换策略。
4. 页面置换算法¶
缺页且没有空闲页框时,操作系统需要选一个内存页面换出:
- FIFO:先进先出,可能出现 Belady 异常。
- LRU:淘汰最近最少使用页面。
- OPT:淘汰未来最长时间不会使用的页面,理论最优,但实际无法准确知道未来。
- Clock:LRU 的近似实现。
4. 死锁¶
死锁四个必要条件:
- 互斥
- 请求并保持
- 不可剥夺
- 循环等待
处理方法:
- 预防死锁:破坏必要条件。
- 避免死锁:银行家算法。
- 检测与恢复:允许发生,定期检测并处理。
- 忽略:某些通用操作系统的实际策略。
5. 进程通信¶
常见方式:管道、消息队列、共享内存、信号量、Socket。
共享内存速度快,但需要配合锁或信号量解决并发问题。
6. 指令流水线与流水线冒险¶
指令流水线:把一条指令的执行拆成多个阶段(经典五段:取指 IF → 译码 ID → 执行 EX → 访存 MEM → 写回 WB),不同指令的不同阶段重叠执行——像工厂装配线,每个工位只干一道工序,多条指令同时在流动,整体吞吐量大幅提高。
流水线冒险(Hazard):因为某种冲突,下一条指令无法在预定的时钟周期继续执行,流水线"卡壳"。共三类(必背):
| 冒险类型 | 原因 | 例子 | 主要对策 |
|---|---|---|---|
| 结构冒险 | 多条指令争用同一硬件资源 | 取指和访存指令同时要用同一个存储器 | 资源重复设置:指令 Cache 与数据 Cache 分开 |
| 数据冒险 | 后一条指令要用前一条的结果,结果还没写回 | ADD 算出 R1,紧跟的 SUB 立刻要用 R1 |
转发/旁路(结果直接送下游,不等写回)、插入停顿(气泡)、编译器调整指令顺序 |
| 控制冒险 | 分支/跳转改变执行流,转向目标确定前已取错指令 | if 判断还没出结果,下一条取顺序指令还是跳转目标? | 分支预测(猜方向,猜错作废重来)、尽早算出分支结果 |
银行柜面类比(帮助记忆):
- 流水线 = 柜面流水作业:填单 → 审核 → 录入 → 出钞,四个柜员同时各服务一位客户的不同环节。
- 结构冒险:两位客户同时要用同一台验钞机——对策是多配一台设备(资源重复)。
- 数据冒险:录入岗等审核岗的结论,审核没完只能干等——对策是结论直接口头递过去(转发),不用等归档完再查(写回)。
- 控制冒险:客户中途改主意"不取了,改存款",已经准备好的出钞动作作废重来(预测失败清空流水线)。
高频考点:
- 数据冒险里 RAW(写后读)最常见:后一条指令读了前一条尚未写入的寄存器;WAR(读后写)、WAW(写后写)在按序流水线中较少出现。
- 转发(Forwarding / 旁路)是数据冒险的主要解法,停顿(Stall / 气泡)是补充手段——纯靠停顿性能损失太大。
- 分支预测猜对零代价,猜错清空流水线重来(控制冒险的代价来源)。
流水线性能计算¶
设流水线有 k 个阶段,每个阶段耗时近似为 t,共有 n 条指令:
- 非流水线执行时间:
n × k × t。 - 流水线执行时间:
(k + n − 1) × t。第一条指令要经过全部k个阶段,之后通常每个时钟周期完成一条。 - 吞吐率:单位时间完成的指令数。稳定运行后约为
1 / t条/周期。 - 加速比:非流水线时间 ÷ 流水线时间,即
nkt / [(k+n−1)t]。 - 当
n很大时,加速比接近k,但不会真正超过阶段数k。
例:5 段流水线执行 10 条指令,每段 1 个周期:
- 非流水线:
10 × 5 = 50周期; - 流水线:
5 + 10 − 1 = 14周期; - 加速比:
50 / 14 ≈ 3.57; - 不是 5 倍,因为第一条指令需要“装入”流水线,最后还要“排空”流水线。
注意:流水线提高的是吞吐率,不一定缩短单条指令的实际执行延迟;单条指令仍需经过全部阶段。
数据冒险的典型时序:load-use 冒险¶
LW 的结果通常要到 MEM 阶段结束才产生,而下一条 ADD 在 EX 阶段开始就需要 R1。即使有转发,也可能来不及,因此通常需要插入 1 个停顿周期(气泡),然后再转发结果。
判断方法:
- 普通算术指令产生的结果,常可通过转发直接供下一条使用;
- 加载指令后紧跟使用加载结果,是最典型的必须停顿场景;
- 编译器可以把一条无关指令插入两条指令之间,减少或消除停顿。
控制冒险的分支预测¶
处理器遇到条件分支时,可能暂时不知道下一条指令来自顺序地址还是跳转目标。常见策略:
- 静态预测:固定预测“跳转”或“ 不跳转”,实现简单;
- 动态预测:根据历史执行结果预测,通常维护分支历史信息;
- 延迟分支:由编译器安排分支后的指令槽位;
- 预测正确:流水线继续运行;
- 预测错误:清除已经取入的错误路径指令,并从正确目标重新取指,产生若干周期损失。
一眼判断题¶
- 流水线是让一条指令同时执行多个阶段:错;流水线是让多条指令的不同阶段重叠执行。
- 流水线能把单条指令执行时间降为一个阶段:错;它主要提高整体吞吐率。
- 指令 Cache 和数据 Cache 分开可减少取指与访存的结构冲突:对。
- 只要采用转发,所有数据冒险都不需要停顿:错;load-use 冒险常仍需停顿。
- 分支预测失败时应清空错误路径上的部分指令:对。
10. 题目对应补充:存储器、Cache、异步性与 MMU¶
10.1 字扩展与位扩展¶
存储器规格通常写成“存储单元数量 × 每个存储字的位数”。扩展时要先判断改变的是地址数量还是每个地址对应的数据位数:
| 扩展方式 | 改变内容 | 地址线 | 数据线 | 典型目的 |
|---|---|---|---|---|
| 字扩展 | 增加存储单元数量,存储字长不变 | 增加地址线或片选译码 | 基本不变 | 扩大容量 |
| 位扩展 | 增加每个存储字的位数,单元数量不变 | 基本不变 | 增加数据线 | 扩大字长 |
例子:已有 1K × 8 芯片,要组成 4K × 8,需要 4 片并进行字扩展:每片仍提供 8 位数据,但用更高位地址经过译码选择其中一片。若要组成 1K × 16,需要 2 片并行工作进行位扩展:两片共用地址和控制信号,分别提供低 8 位和高 8 位数据。
易错点:字扩展改变的是“能存多少个字”,不是“每个字有多少位”;位扩展才改变存储字长。读写速度、总线宽度不是字扩展的直接定义。
10.2 IEEE 754 浮点数格式¶
IEEE 754 浮点数通常表示为:
| 类型 | 总位数 | 符号位 | 阶码 | 尾数字段 | 阶码偏置 |
|---|---|---|---|---|---|
| 单精度 | 32 | 1 | 8 | 23 | 127 |
| 双精度 | 64 | 1 | 11 | 52 | 1023 |
单精度的“尾数位数”在选择题中通常指尾数字段的存储位数,即 23 位;规格化数的有效精度还包括隐藏的最高位 1,因此不能把 23 位与总位数、阶码位数混淆。
例子:单精度格式按“1 位符号 + 8 位阶码 + 23 位尾数”划分,共 32 位。双精度按“1 + 11 + 52”划分,共 64 位。题目问单精度尾数字段时选 23 位,不选 8 位阶码。
10.3 多体交叉存储¶
多体交叉把主存划分为多个相互独立、可以交错工作的存储体,核心目标是提高连续访问时的主存吞吐率和带宽,而不是直接扩大总容量、降低刷新频率或减少 Cache 缺失。
- 低位交叉:用地址低位选择存储体,连续地址通常落入不同存储体,适合连续数据的并行访问。
- 高位交叉:用地址高位选择存储体,连续地址可能集中在同一存储体,更多体现分区管理效果。
- 存储体之间仍可能受存取周期限制;交叉并不表示每个存储体能在同一时刻无限次读写。
例子:4 体低位交叉存储中,连续地址 0、1、2、3 可分别放入第 0、1、2、3 体。处理器连续读取这 4 个字时,可以在一个存储体等待恢复的同时访问其他存储体,从而提高连续数据的传输速度。
10.4 Cache 的三类缺失¶
Cache 缺失(Cache miss)是处理器访问的数据块不在 Cache 中,需要从下一层存储器取回。经典分类为:
| 类型 | 含义 | 例子 | 主要原因 |
|---|---|---|---|
| 强制缺失 | 某数据块第一次被访问,之前从未装入 Cache | 程序第一次读取数组首元素 | 冷启动或首次访问 |
| 容量缺失 | Cache 容量不足,已装入的数据块被淘汰 | 循环处理的大数组超过 Cache 容量 | 工作集大于 Cache |
| 冲突缺失 | 不同数据块映射到同一 Cache 位置,互相替换 | 直接映射 Cache 中两个地址反复占用同一行 | 映射位置竞争 |
“传输缺失”不是 Cache 经典三分类之一。例子:一个数组第一次遍历时,首次访问的 Cache 行产生强制缺失;反复访问远大于 Cache 的数组可能产生容量缺失;两个地址虽然总数据量不大,但总映射到同一行时产生冲突缺失。
10.5 操作系统的异步性¶
异步性是指进程的推进速度、调度顺序以及 I/O 完成时机具有不确定性,不能预先准确知道某个事件何时发生。它强调“事件时机不可预知”,不是“多个进程同时执行”。
- 并发:多个进程在同一时间段内交替推进,宏观上同时存在。
- 并行:多个处理器或核心在同一时刻真正执行多个任务。
- 异步:一个进程不必等待另一个事件按固定时间发生,事件到达和执行顺序可能变化。
例子:进程发起磁盘 I/O 后进入等待,磁盘何时完成、进程何时被唤醒取决于设备和调度;即使同一程序运行两次,I/O 完成顺序和进程获得 CPU 的时间也可能不同。这体现异步性。若两个进程在单核 CPU 上轮流运行,是并发;若在两个核心上同时运行,是并行。
10.6 MMU 与虚拟内存硬件支撑¶
MMU(Memory Management Unit,内存管理单元)是处理器中的硬件模块,负责在访问内存时配合页表和 TLB,把虚拟地址转换为物理地址,并检查访问权限。
一次分页地址转换可概括为:
- CPU 生成虚拟地址,MMU 将其拆成虚拟页号和页内偏移。
- MMU 先查 TLB;命中时直接取得物理页框号。
- TLB 未命中时查页表。页表显示页面在内存中,就取得物理页框号并更新 TLB。
- 页表显示页面不在内存中时,触发缺页异常,由操作系统调入页面、更新页表后重新执行访问。
- 物理页框号与不变的页内偏移组合成物理地址,再完成访问。
例子:虚拟地址由虚拟页号 VPN=5 和偏移 100 组成,页表把第 5 页映射到物理页框 PFN=12,则物理地址由页框 12 和偏移 100 组成。若页表显示第 5 页不在内存,MMU 不会自己从磁盘读取,而是触发缺页异常,由操作系统完成调页。
硬件辨析:Cache 缓存近期数据和指令;DMA 控制器负责设备与内存之间的直接数据传送;中断控制器负责管理和分发中断;虚拟地址到物理地址的转换核心硬件是 MMU。TLB 是 MMU 地址转换路径中的高速映射缓存,不等于 MMU 本身。
🟡 本分册解释为通用计算机知识补充,可能与你老师讲的不完全一致;专业范围以《考试大纲》"金融监管计算机类"部分为准。