软考系统分析师:操作系统核心考点精讲 | 进程、PV操作、存储管理一网打尽
📌 导读:操作系统是软考系统分析师综合知识科目中的核心章节,约占 6–8 分。本文用直观清晰的方式讲解进程管理、PV(信号量)操作、存储管理等高频与高难点,帮助你高效备考。
✅ 目标:理解概念、掌握典型题型、练会解题套路。
🎯 一、本章考点全景(快速扫盲)
- 进程管理(含 PV 操作):约 2–3 分
- 存储管理(分页 / 分段):约 2–3 分
- 文件管理:约 1–2 分
- 设备管理(SPOOLing):约 1 分
- 作业/作业管理:约 0–1 分
Tip: PV 操作(信号量)与银行家算法、地址转换是高频必考点,务必牢固掌握。
🔄 二、进程管理 —— 操作系统的灵魂
2.1 进程 vs 线程(要点速记)
- 进程(Process):资源分配的基本单位。包含地址空间、打开文件、代码段与数据段等。
- 线程(Thread):调度的基本单位;线程共享所在进程的资源,但各自拥有独立的程序计数器、寄存器与栈。
- 记忆技巧:进程是“程序的容器”,线程是“执行的轻量单位”。
进程三态模型(基础中的基础)
进程五态模型
就绪 → 运行 → 阻塞
- 就绪(Ready)→ 运行(Running):由调度器选中(时间片开始)
- 运行 → 阻塞(Blocked):发起 I/O 或等待事件
- 阻塞 → 就绪:I/O 完成或事件发生
- 运行 → 就绪:时间片到或被抢占
2.2 进程状态转换(真题常考)
经典考题:
在单处理机系统中,采用先来先服务调度算法。系统中有4个进程P1、P2、P3、P4(假设进程按此顺序到达),其中P1为运行状态,P2为就绪状态,P3和P4为等待状态,且P3等待打印机,P4等待扫描仪。若P1( ),则P1、P2、P3和P4的状态应分别为( )。
A. 时间片到
B. 释放了扫描仪
C. 释放了打印机
D. 已完成
A. 等待、就绪、等待和等待
B. 运行、就绪、运行和等待
C. 就绪、运行、等待和等待
D. 就绪、就绪、等待和运行
答案:A C
解析:P1处于运行状态,那么对应于它的操作就是时间片到,P1进入就绪状态。而此时,P3和P4都处于等待状态,都在等待除了CPU之外的其他事物,它们等待的事物并没有到,所以还是处于等待状态,或阻塞状态。P2此时是就绪状态,获得了P1释放的CPU,进入运行状态。
🔐 三、PV(信号量)操作 —— 最易失分的地方
3.1 信号量核心概念
- 信号量(Semaphore)是整数,用于进程间同步/互斥。
- S > 0:表示可用资源数量
- S = 0:无资源且无等待(临界态)
- S < 0:|S| 表示等待队列中进程数
真题示例
假设系统中有n个进程共享3台打印机,任一进程在任一时刻最多只能使用1台打印机。若用PV操作控制n个进程使用打印机,则相应信号量S的取值范围为();若信号量S的值为-3,则系统中有()个进程等待使用打印机。
解析: 假设系统中有n个进程共享3台打印机,意味着每次只允许3个进程进入互斥段,则信号量的初值应为3,最小值为-(n-3),因此取值范围:3, 2, 1, 0, -1, …,-(n-3)。
信号量S的值为-3,则系统中有3个进程等待使用打印机。
信号量S的物理意义为:当S>0时,表示资源可用数;当S<0时,其绝对值表示等待资源的进程数。
3.2 P / V 操作定义
PV操作是一种实现进程互斥与同步的有效方法。 PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。
为什么叫PV操作,原来这是狄克斯特拉用荷兰文定义的,因为在荷兰文中,通过叫passeren,释放叫vrijgeven,PV操作因此得名。
• 临界资源:进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等。
• 临界区:每个进程中访问临界资源的那段代码称为临界区。
• 信号量:是一种特殊的变量。
口诀:P 减,V 加;P 等,V 唤。🧠
3.3 PV操作解题套路
1️⃣ 分析进程间的同步/互斥关系
• 互斥:争夺同一资源(如打印机)
• 同步:进程间有先后依赖关系
2️⃣ 确定信号量个数和初值
• 互斥信号量:初值=1
• 同步信号量:初值=0或资源数
3️⃣ 写PV操作伪代码
• 互斥:P(mutex)…V(mutex)
• 同步:先执行的V,后执行的P
4️⃣ 检查死锁可能性
3.4 真题示例
进程P1、P2、P3、P4和P5的前趋图如下:
若用PV操作控制进程P1〜P5并发执行的过程,则需要设置5个信号S1、S2、S3、S4和S5,进程间同步所使用的信号量标注在上图中的边上,且信号量S1〜S5的初值都等于零,初始状态下进程P1开始执行。下图中a、b和c处应分别填写(),d和e处应分别填写(),f和g处应分别填写()。
解析:
- 因为P1是P2和P3的前驱,当P1执行完应通知P2和P3,应采用V(S1)V(S2)操作分别通知P2和P3,故a处应填写V(S1)V(S2);
- 因为P2是P1的后继,当P2执行前应测试P1是否执行完,应采用P(S1)操作测试P1是否执行完,故b处应填写P(S1);
- P2是P4和P5的前驱,当P2执行完应通知P4和P5,应使用V(S3)V(S4)操作分别通知P4和P5,故c处应填写V(S3)V(S4);
- P3是P1的后继,当P3执行前应测试P1是否执行完,应采用P(S2)操作测试P1是否执行完,故d应填写P(S2);
- P3是P5的前驱,当P3执行完应通知P5,应采用V(S5)操作通知P5,故e处应填写V(S5)
- P4是P2的后继,当P4执行前应测试P2是否执行完,应采用P(S3)操作分别测试P2是否执行完,故f处应填写P(S3);
- P5是P2和P3的前驱,当P5执行前应测试P2和P3是否执行完,应采用P(S4)P(S5)操作分别测试P2和P3是否执行完,故g处应填写P(S4)P(S5)。
🏦 四、死锁与银行家算法
4.1 死锁的四个必要条件
1️⃣ 互斥条件
资源一次只能被一个进程占用
2️⃣ 请求和保持条件
进程已占有资源,又申请新资源
3️⃣ 不剥夺条件
已分配的资源不能被强制剥夺
4️⃣ 循环等待条件
进程之间形成循环等待链
💡 破坏任一条件即可避免死锁!
4.2银行家算法(Banker’s Algorithm)
简介:银行家算法是操作系统中用于检测分配是否安全、从而避免死锁的一种方法。在实际分配资源前,系统“试探性地”模拟分配并检查是否存在能让所有进程顺利完成的安全序列;若存在则允许分配,否则拒绝或推迟分配。
4.2.1、核心思想(一句话)
在为进程分配资源前,先模拟分配并判断系统是否仍处于“安全状态”。如果能找到至少一个安全序列(即所有进程能按某一顺序依次完成并释放资源),则真正分配;否则拒绝(回滚)分配。
4.2.2、关键假设与数据结构
- 每个进程在进入系统时声明对每种资源的最大需求:Max。
- 系统资源总量应不小于任一进程的最大需求。
- 常用矩阵/向量:
- Available:系统当前可用资源向量。
- Max:各进程对每类资源的最大需求矩阵。
- Allocation:当前分配给各进程的资源矩阵。
- Need = Max − Allocation:各进程尚需的资源矩阵。

4.2.3、判定与分配步骤(流程化)
- 进程发出请求 Request。若 Request > Need(对该进程),则拒绝(非法请求)。
- 若 Request ≤ Need,则临时“假设”分配:
- Available’ = Available − Request
- Allocation’ = Allocation + Request
- Need’ = Need − Request
- 在假设状态下执行“安全性检测”:
- 令 Work = Available’,Finish[i] = false(对所有进程 i)。
- 查找尚未完成且 Need[i] ≤ Work 的进程 i;若找不到则检测失败(不可分配)。
- 若找到某 i,则令 Work = Work + Allocation’[i],Finish[i] = true,继续查找。
- 若最终所有 Finish[i] = true,则存在安全序列,接受分配;否则回滚并令进程等待。
- 记忆口决:先“试分配”,再“找序列”;能找到序列才真正分配。
4.2.4、简明伪代码
if Request > Need:
拒绝请求
else:
// 假设分配
Available' = Available - Request
Allocation' = Allocation + Request
Need' = Need - Request
if 系统在假设下处于安全状态:
允许分配(保持更改)
else:
拒绝分配(回滚)
4.2.5、示例(完整表格与逐步求安全序列)
假设系统有 5 个进程 {P0, P1, P2, P3, P4} 和 3 类资源 {A, B, C},系统总资源为 (10, 5, 7)。某时刻的 Allocation 和 Max 如下(经典示例):
Max 矩阵:
| 进程 | Max(A,B,C) |
|---|---|
| P0 | 7, 5, 3 |
| P1 | 3, 2, 2 |
| P2 | 9, 0, 2 |
| P3 | 2, 2, 2 |
| P4 | 4, 3, 3 |
Allocation 矩阵:
| 进程 | Allocation(A,B,C) |
|---|---|
| P0 | 0, 1, 0 |
| P1 | 2, 0, 0 |
| P2 | 3, 0, 2 |
| P3 | 2, 1, 1 |
| P4 | 0, 0, 2 |
由此计算:
- 已分配总和 = (0+2+3+2+0, 1+0+0+1+0, 0+0+2+1+2) = (7, 2, 5)
- Available = 总资源 − 已分配 = (10,5,7) − (7,2,5) = (3,3,2)
Need = Max − Allocation:
| 进程 | Need(A,B,C) |
|---|---|
| P0 | 7, 4, 3 |
| P1 | 1, 2, 2 |
| P2 | 6, 0, 0 |
| P3 | 0, 1, 1 |
| P4 | 4, 3, 1 |
目标:找出一个安全序列(若存在),证明系统当前状态安全。
逐步求解(Work 初始化为 Available = (3,3,2)):
- 可满足的 Need 有 P1=(1,2,2) 和 P3=(0,1,1)。先让 P1 完成 → Work = Work + Allocation(P1) = (3,3,2) + (2,0,0) = (5,3,2)。
- 此时可满足的有 P3=(0,1,1) → 让 P3 完成 → Work = (5,3,2) + (2,1,1) = (7,4,3)。
- 此时可满足的有 P4=(4,3,1) → 让 P4 完成 → Work = (7,4,3) + (0,0,2) = (7,4,5)。
- 此时可满足的有 P2=(6,0,0) → 让 P2 完成 → Work = (7,4,5) + (3,0,2) = (10,4,7)。
- 最后可满足 P0=(7,4,3) → 让 P0 完成 → Work = (10,4,7) + (0,1,0) = (10,5,7)。
由上可得一个安全序列:{P1, P3, P4, P2, P0},因此系统当前状态是安全的(注:安全序列不唯一,只需找到至少一个即可)。
4.2.6、考试与实战要点
- 每次题目出现矩阵或请求向量时,先写清楚Total、Allocation、Max、Need、Available。
- 按银行家算法手动模拟 Work 增长过程,找出满足 Need 的进程并依次假定其完成。
- 如果题目数据不一致(例如已分配总和 > 系统总资源),在答题中指出题目异常并按合理假设说明处理方法。
💾 五、存储管理 —— 分页与分段(地址计算为高频送分题)
5.1 分页基本概念
逻辑页分为页号和页内地址,页内地址就是物理偏移地址,而页号与物理块号并非按序对应的,需要查询页表,才能得知页号对应的物理块号,再用物理块号加上偏移地址才得出了真正运行时的物理地址。
- 逻辑地址 = 页号 § + 页内偏移 (W)
- 页表:把页号映射到物理块号(Frame)
- 物理地址 = 块号 × 页面大小 + 页内偏移

5.2 地址转换计算(高频考点)
某系统采用页式存储管理,页大小为4KB,页表内容如下。若逻辑地址为1D16H,则对应的物理地址是()
| 页号 | 块号 |
|---|---|
| 0 | 3 |
| 1 | 5 |
| 2 | 1 |
| 3 | 6 |
解析:
1. 页大小4KB = 2^12,所以页内偏移占12位
2. 逻辑地址1D16H = 0001 1101 0001 0110 (二进制)
页号 = 高4位 = 0001 = 1
页内偏移 = 低12位 = 1101 0001 0110 = D16H
3. 查页表:页号1 → 块号5
4. 物理地址 = 块号 × 4K + 偏移 = 5 × 4096 + D16H
= 5 × 4096 + 3350
= 20480 + 3350 = 23830
= 5D16H
5.3 页面置换算法
| 算法 | 策略 | 特点 |
|---|---|---|
| OPT | 淘汰将来最久不被访问的 | 理论最优,不可实现 |
| FIFO | 淘汰最先进入的 | 简单,可能Belady异常 |
| LRU | 淘汰最近最久未使用的 | 性能好,实现复杂 |
| LFU | 淘汰访问次数最少的 | 考虑频率,不常用 |
LRU算法示例:
某系统采用LRU页面置换算法,页面访问序列为:4,3,2,1,4,3,5,4,3,2,1,5,分配给进程的物理页框数为3,则缺页次数为()
解析:
访问序列:4, 3, 2, 1, 4, 3, 5, 4, 3, 2, 1, 5
页框数:3
步骤跟踪:
访问4: [4] 缺页 ✓
访问3: [4,3] 缺页 ✓
访问2: [4,3,2] 缺页 ✓
访问1: [3,2,1] 缺页 ✓ (4最久未用,淘汰)
访问4: [2,1,4] 缺页 ✓ (3最久未用,淘汰)
访问3: [1,4,3] 缺页 ✓ (2最久未用,淘汰)
访问5: [4,3,5] 缺页 ✓ (1最久未用,淘汰)
访问4: [3,5,4] 命中
访问3: [5,4,3] 命中
访问2: [4,3,2] 缺页 ✓ (5最久未用,淘汰)
访问1: [3,2,1] 缺页 ✓ (4最久未用,淘汰)
访问5: [2,1,5] 缺页 ✓ (3最久未用,淘汰)
缺页次数:10次
📁 六、文件管理(物理分配方式与索引节点计算)
6.1 文件分配方式对比
1️⃣ 连续分配
文件占用连续的磁盘块
优点:顺序访问快,实现简单
缺点:产生碎片,不便扩展
2️⃣ 链接分配
文件块用指针链接
优点:无碎片,便于扩展
缺点:随机访问慢,指针占用空间
3️⃣ 索引分配 ⭐(最常用)
用索引块记录文件块位置
优点:支持随机访问,便于扩展
缺点:索引块占用空间
索引分配变体:
• 直接索引:索引块直接指向数据块
• 一级间接索引:索引块指向另一个索引块
• 二级间接索引:多级索引
6.2 索引节点计算(经典题型)
某文件系统采用多级索引结构,若磁盘块大小为4KB,每个块号占4B,则:
- 直接索引可表示的文件最大长度是()
- 一级间接索引可表示的文件最大长度是()
- 二级间接索引可表示的文件最大长度是()
解析:
已知:块大小=4KB=4096B,块号大小=4B
1. 直接索引:
通常有10-12个直接指针
最大长度 = 10 × 4KB = 40KB
2. 一级间接索引:
一个索引块可存 4096/4 = 1024 个块号
最大长度 = 1024 × 4KB = 4096KB = 4MB
3. 二级间接索引:
最大长度 = 1024 × 1024 × 4KB = 4GB
4. 三级间接索引:
最大长度 = 1024 × 1024 × 1024 × 4KB = 4TB
🖨️ 七、设备管理——SPOOLing技术
7.1 SPOOLing原理
- SPOOL(Simultaneous Peripheral Operations On-Line)把设备操作的输入/输出放到磁盘(队列)上,模拟共享,解决独占设备的瓶颈。
- 组成:输入井(输入队列)、输出井(输出队列)、输入进程、输出进程。
- 优点:提高吞吐、实现设备共享、屏蔽速度差异。

以向 I/O 设备写数据为例子,做出概念图,如下所示:
当用户在 Word 中发起打印时,Word 调用统一的打印系统调用,进入内核。内核服务例程把要打印的内容封装成一个打印申请表并写入输出井(通常在磁盘上),然后唤醒负责处理输出的输出进程(Spooler)。输出进程从输出井取出申请,根据申请表把用户数据从磁盘读入内存输出缓冲区,再通过设备驱动把数据发送到打印机。输出进程循环处理队列中的所有申请;当队列为空时,输出进程进入阻塞状态,直到内核在有新请求到来时将其唤醒。该流程实现了用户进程与慢速独占 I/O 设备之间的解耦,提高了系统吞吐与并发性能。
📝 八、本章真题精选
2025 年 05 月真题还原
-
()由字符串组成,文件内的信息不再划分结构
A. 顺序文件
B. 有序文件
C. 流式文件
D. 记录式文件 -
假设两个进程同时对 A 和 B 资源进行访问,进程1访问顺序 A → B,进程2访问顺序 B → A,则可能导致的问题是( )
A. 死锁
B. 内存泄漏
C. 优先级反转
D. 竞态条件 -
关于进程和线程,说法不正确的是( )
A. 一个进程可以创建一个或多个线程
B. 一个进程可以创建一个或多个进程
C. 一个线程可以创建一个或多个线程
D. 一个线程可以创建一个或多个进程 -
操作系统关心的问题不包括( )
A. 管理应用软件运行
B. 提供用户程序与硬件系统的界面
C. 管理计算机资源
D. 提供高级语言的编译 -
以下关于段式/页式存储的说法中,正确的是( )
A. 每个进程有一个段表一个页表
B. 每一个进程有多个段表多个页表
C. 每一个进程有多个段表一个页表
D. 每一个进程有一个段表多个页表 -
在 PV 操作中,互斥信号量的初始值一般是( )
A. 2
B. 1
C. -1
D. 0
2024 年 11 月真题还原
-
以下关于分段存储模式的说法中正确的是( )
A. 全部进程共享页空间,但只有运行的进程才会调入页里
B. 全部进程共享页空间,所有程序的都放在页里
C. 每个进程单独分配一个页空间,进程下所有线程共用这个页空间
D. 每个进程单独分配一个页空间,进程下各线程又有各自的页空间 -
关于进程与线程,说法错误的是( )
A. 线程不能并发,进程可以并发
B. 线程创建和销毁线程的开销较小,进程创建和销毁进程的开销较大
C. 线程共享同一进程的资源和内存空间
D. 线程是可独立调度的最小单位,进程是资源分配的最小单位 -
在存储管理的分区管理算法中,最佳分配算法(Best-Fit)的原理是将内存中所有的空闲内存块按( )的次序登记到空闲区表中
A. 地址递增
B. 大小递增
C. 地址递减
D. 大小递减 -
下列哪种文件是逻辑结构文件( )
A. 系统文件
B. 索引文件
C. 流式文件
D. 链接文件 -
产生死锁的四个必要条件分别是( )
A. 互斥 + 请求和保持 + 不可抢占 + 资源图环路
B. 互斥 + 请求和释放 + 不可抢占 + 资源图环路
C. 共享 + 请求和释放 + 不可抢占 + 资源图环路
D. 共享 + 请求和保持 + 不可抢占 + 资源图环路 -
在请求分页系统中,当运行进程访问的页面不在主存且主存中没有可用的空闲块时,系统应该先产生缺页中断,然后依次按照( )的顺序进行处理:
A. 中断 → 决定淘汰页 → 页面调入 → 页面调出
B. 决定淘汰页 → 中断 → 页面调入 → 页面调出
C. 页面调出 → 中断 → 决定淘汰页 → 页面调入
D. 页面调出 → 页面调入 → 中断 → 决定淘汰页
2024 年 05 月真题还原
-
假定系统为某进程分配了 3 个物理块,进程运行时的页面访问顺序为:
4, 3, 2, 1, 4, 3, 5, 4, 3, 2, 3, 5,开始时 3 个物理块均空闲,当使用最近最少使用(LRU)算法时,会产生( )次缺页。
A. 7
B. 8
C. 9
D. 10 -
操作系统对以下哪类可以根据运行需要进行创建和销毁( )
A. 内核线程
B. 用户线程
C. 守护线程
D. 轻权线程 -
以下( )不是产生死锁的必要条件
A. 进程资源形成环路
B. 资源互斥
C. 不可强制剥夺资源
D. 资源共享 -
编译出来的程序在内存中的地址是( )
A. 逻辑地址
B. 物理地址
C. 运行地址
D. 内存地址 -
Windows 和 Linux 的文件系统是以下( )组织形式
A. 流式
B. 链式
C. 顺序存储
D. 树形 -
在单 CPU 计算机中,最多只有一个进程处于( )状态
A. 运行
B. 阻塞
C. 挂起
D. 就绪
💡 九、学习建议与计划(3 周速成路线)
📚 第一阶段:理解概念(1周)
├─ 理解进程与线程的区别
├─ 掌握进程三态转换
└─ 理解死锁的四个条件
🧮 第二阶段:攻克PV操作(1周)
├─ 理解信号量原理
├─ 掌握生产者-消费者、读者-写者等经典问题
└─ 大量练习真题
📝 第三阶段:存储管理(1周)
├─ 掌握分页/分段地址转换
├─ 理解页面置换算法
└─ 练习地址计算题
⭐ 高频考点必掌握
- PV操作(每年必考,难度最大)
- 银行家算法(常考计算题)
- 地址转换计算(送分题)
- 页面置换算法(理解LRU)
- 索引文件计算(理解多级索引)
🎁 十、速记卡片(做题时请背会)
- PV 操作口诀:
P 减 V 加,P 等 V 唤
互斥信号量初值 = 1,同步信号量初值 = 0。 - 死锁四条件:
互斥、请求并保持、不剥夺、循环等待。 - 分页地址转换:
物理地址 = 块号 × 页大小 + 页内偏移。 - 页面置换要点:
OPT最优、FIFO先进先出、LRU最近最久未用。 - SPOOLing:
将独占设备改造成共享设备(虚拟设备)。
📌 下章预告:数据库技术精讲——SQL语句、范式分析、事务与并发控制全解析!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)