【分享】软考-操作系统章-真题*3-练习与详解-8/16
摘要:本文为操作系统资源分配与死锁相关习题的详细解析,涵盖银行家算法安全性判断、虚拟页式存储缺页中断次数计算以及并发进程前驱图推导三大类问题。通过逐题分析初始状态、分配过程与安全性验证,给出第 1-3 题(资金分配与安全性判断)、第 4-6 题(缺页中断次数)、第 7 题(死锁避免资源数)及第 8-10 题(前驱图节点推导)的完整答案与推理过程。
1-3、 若某企业拥有的总资金数为 15,投资 4 个项目 P1、P2、P3、P4,各项目需要的最大资金数分别是 6、8、8、10,企业资金情况如图 a 所示。P1 新申请 2 个资金,P2 新申请 1 个资金,若企业资金管理处为项目 P1 和 P2 分配新申请的资金,则 P1、P2、P3、P4 尚需的资金数分别为 1;假设 P1 已经还清所有投资款,企业资金使用情况如图 b 所示,那么企业的可用资金数为 2。若在图 b 所示的情况下,企业资金管理处为 P2、P3、P4 各分配资金数 2、2、3,则分配后 P2、P3、P4 已用资金数分别为 3。
图 a
表格
| 项目 | 最大资金 | 已用资金 | 尚需资金 |
|---|---|---|---|
| P1 | 6 | 2 | 4 |
| P2 | 8 | 3 | 5 |
| P3 | 8 | 2 | 6 |
| P4 | 10 | 3 | 7 |
图 b
表格
| 项目 | 最大资金 | 已用资金 | 尚需资金 |
|---|---|---|---|
| P1 | — | — | — |
| P2 | 8 | 3 | 5 |
| P3 | 8 | 2 | 6 |
| P4 | 10 | 3 | 7 |
(1)
A. 1、3、6、7,可用资金数为 0,故资金周转状态是不安全的
B. 2、5、6、7,可用资金数为 1,故资金周转状态是不安全的
C. 2、4、6、7,可用资金数为 2,故资金周转状态是安全的
D. 3、3、6、7,可用资金数为 2,故资金周转状态是安全的
(2)
A. 4
B. 5
C. 6
D. 7
(3)
A. 3、2、3,尚需资金数分别为 5、6、7,故资金周转状态是安全的
B. 5、4、6,尚需资金数分别为 3、4、4,故资金周转状态是安全的
C. 3、2、3,尚需资金数分别为 5、6、7,故资金周转状态是不安全的
D. 5、4、6,尚需资金数分别为 3、4、4,故资金周转状态是不安全的
【参考答案】
- C
- D
- D
题目解析
已知条件:
- 企业总资金数:15
- 4个项目 P1、P2、P3、P4 的最大资金需求分别为:6、8、8、10
第 1 小题
题目:
P1 新申请 2 个资金,P2 新申请 1 个资金,若企业资金管理处为项目 P1 和 P2 分配新申请的资金,则 P1、P2、P3、P4 尚需的资金数分别为多少?
推理过程:
-
初始状态(图 a):
- P1:最大 6,已用 2,尚需 4
- P2:最大 8,已用 3,尚需 5
- P3:最大 8,已用 2,尚需 6
- P4:最大 10,已用 3,尚需 7
- 此时已用总资金 = 2 + 3 + 2 + 3 = 10,可用资金 = 15 - 10 = 5。
-
分配新申请资金:
- P1 申请 2,P2 申请 1,共需分配 3 个资金。此时可用资金 5 足够分配。
- 分配后各项目“已用资金”更新:
- P1 已用 = 2 + 2 = 4,尚需 = 最大 6 - 已用 4 = 2
- P2 已用 = 3 + 1 = 4,尚需 = 最大 8 - 已用 4 = 4
- P3 已用 = 2,尚需 = 6
- P4 已用 = 3,尚需 = 7
- 此时尚需资金数分别为:2、4、6、7。
结论:
对比选项,C 选项(2、4、6、7,可用资金数为 2,故资金周转状态是安全的)符合。
第 2 小题
题目:
假设 P1 已经还清所有投资款,企业资金使用情况如图 b 所示,那么企业的可用资金数为多少?
推理过程:
- 图 b 状态: P1 还清,即 P1 释放了已用的 4 个资金(根据上一问分配后的状态)。
- 图 b 中 P2、P3、P4 的已用资金仍为 3、2、3(即 P1 分配前或刚分配完但 P1 未释放时的基础占用,P1 还清后,占用资金只剩 P2、P3、P4 的初始占用)。
- 当前已用总资金(P2+P3+P4)= 3 + 2 + 3 = 8。
- 企业总资金 15,所以可用资金 = 15 - 8 = 7。
结论:
对应选项 D(7)。
第 3 小题
题目:
若在图 b 所示的情况下,企业资金管理处为 P2、P3、P4 各分配资金数 2、2、3,则分配后 P2、P3、P4 已用资金数分别为多少?并判断安全性。
推理过程:
- 图 b 初始已用: P2=3, P3=2, P4=3。可用资金 = 7。
- 分配新资金: P2 给 2,P3 给 2,P4 给 3。
- 分配后已用资金:
- P2 = 3 + 2 = 5 (最大 8,尚需 8 - 5 = 3)
- P3 = 2 + 2 = 4 (最大 8,尚需 8 - 4 = 4)
- P4 = 3 + 3 = 6 (最大 10,尚需 10 - 6 = 4)
- 此时已用总资金 = 5 + 4 + 6 = 15,可用资金 = 0。
- 分配后已用资金:
- 安全性分析: 可用资金为 0,而各项目的尚需资金(3、4、4)都大于 0,没有任何一个项目能拿到剩余所需资金从而完成并释放资源。因此,系统处于不安全状态。
结论:
已用资金为 5、4、6;尚需 3、4、4;状态不安全。对应选项 D。
最终答案汇总:
- 第 1 题:C (2、4、6、7,可用资金数为 2,故资金周转状态是安全的)
- 第 2 题:D (7)
- 第 3 题:D (5、4、6,尚需资金数分别为 3、4、4,故资金周转状态是不安全的)
4-6、 假设一台按字节编址的 16 位计算机系统,采用虚拟页式存储管理方案,页面的大小为 2K,且系统中没有使用快表(或联想存储器)。某用户程序如图 a 所示,该程序的页面变换表如图 b 所示,表中状态位等于 1 和 0 分别表示页面在内存或不在内存。

图 a 中 MOVE Data1, Data2 是一个 4 字节的指令,Data1 和 Data2 表示该指令的两个 32 位操作数。假设 MOVE 指令存放在 2047 地址开始的内存单元中,Data1 存放在 6143 地址开始的内存单元中,Data2 存放在 10239 地址开始的内存单元中,那么执行 MOVE 指令将产生 4 次缺页中断,其中:取指令产生 5 次缺页中断,取 Data1 和 Data2 操作数分别产生 6 次缺页中断。
选项:
4、 A. 3 B. 4 C. 5 D. 6
5、 A. 0 B. 1 C. 2 D. 3
6、 A. 1、1 B. 1、2 C. 2、2 D. 2、3
【详细解析】
1. 基础参数分析
- 页面大小:2K = 2×1024=20482×1024=2048 字节。
- 这意味着页内偏移量需要 log2(2048)=11log2(2048)=11 位。
- 页号 = 逻辑地址 / 2048 (整除)。
- 页内偏移 = 逻辑地址 % 2048 (取余)。
- 页面变换表状态:
- 页号 0:状态 1 (在内存)
- 页号 1~5:状态 0 (不在内存) -> 访问这些页会产生缺页中断。
2. 分析指令 MOVE Data1, Data2 的取指过程
- 指令长度:4 字节。
- 起始地址:2047。
- 占用地址范围:2047, 2048, 2049, 2050。
- 跨页判断:
- 地址 2047:2047/2048=02047/2048=0 (页号 0),偏移 2047。 -> 页 0 (在内存)
- 地址 2048:2048/2048=12048/2048=1 (页号 1),偏移 0。 -> 页 1 (不在内存,缺页)
- 地址 2049:页号 1。
- 地址 2050:页号 1。
- 结论:
- 指令跨越了页 0 和页 1。
- 页 0 在内存,不产生中断。
- 页 1 不在内存,产生 1 次缺页中断。
- (注:虽然指令只有4字节,但因为它横跨了两个页面,且第二个页面不在内存,所以取指阶段会触发缺页)。
- 取指令缺页次数 = 1。
3. 分析操作数 Data1 的取数过程
- 数据长度:32 位 = 4 字节。
- 起始地址:6143。
- 占用地址范围:6143, 6144, 6145, 6146。
- 跨页判断:
- 地址 6143:6143/2048=26143/2048=2 (余 2047)。 -> 页 2 (不在内存,缺页)
- 地址 6144:6144/2048=36144/2048=3 (余 0)。 -> 页 3 (不在内存,缺页)
- 地址 6145:页 3。
- 地址 6146:页 3。
- 结论:
- Data1 跨越了页 2 和页 3。
- 页 2 不在内存 -> 缺页 1 次。
- 页 3 不在内存 -> 缺页 1 次。
- 取 Data1 缺页次数 = 2。
4. 分析操作数 Data2 的取数过程
- 数据长度:32 位 = 4 字节。
- 起始地址:10239。
- 占用地址范围:10239, 10240, 10241, 10242。
- 跨页判断:
- 地址 10239:10239/2048=410239/2048=4 (余 2047)。 -> 页 4 (不在内存,缺页)
- 地址 10240:10240/2048=510240/2048=5 (余 0)。 -> 页 5 (不在内存,缺页)
- 地址 10241:页 5。
- 地址 10242:页 5。
- 结论:
- Data2 跨越了页 4 和页 5。
- 页 4 不在内存 -> 缺页 1 次。
- 页 5 不在内存 -> 缺页 1 次。
- 取 Data2 缺页次数 = 2。
5. 汇总
- 取指令缺页:1 次 (页 1)
- 取 Data1 缺页:2 次 (页 2, 页 3)
- 取 Data2 缺页:2 次 (页 4, 页 5)
- 总缺页次数:1 + 2 + 2 = 5 次。
【答案】
- 第 4 题 (总次数):C (5)
- 第 5 题 (取指令):B (1)
- 第 6 题 (Data1, Data2):C (2、2)
7、 某系统中仅有 5 个并发进程竞争某类资源,且都需要 3 个该类资源,那么至少有 个该类资源,才能保证系统不会发生死锁。
A. 9 B. 10 C. 11 D. 15
【详细解析】
这是一道关于操作系统死锁避免的经典计算题。我们需要找到资源数量的临界值。
1. 死锁发生的极端情况(最坏情况)
要保证系统不发生死锁,我们需要考虑最容易发生死锁的那种极端情况,然后打破它。
- 进程数 ( nn ):5 个
- 每个进程需要的资源数 ( mm ):3 个
最坏的情况是:
每个进程都拿到了“还差 1 个就能满足”的资源数量,此时所有进程都在等待最后一个资源,而系统中已经没有剩余资源了。
- 每个进程持有资源数 = 3−1=23−1=2 个。
- 5 个进程总共持有的资源数 = 5×2=105×2=10 个。
在这种情况下(系统共有 10 个资源),每个进程都有 2 个,都在等第 3 个,但没有多余的资源分配给任何人,于是发生死锁。
2. 打破死锁的条件
为了保证不发生死锁,系统中的资源总数必须比上述“最坏情况”多至少 1 个。
只要多出这 1 个资源,就可以分配给任意一个进程(比如进程 P1)。
- P1 原本有 2 个,再给它 1 个,它就拥有了 3 个(满足需求)。
- P1 执行完毕后,会释放它占用的所有 3 个资源。
- 这 3 个资源释放后,其他等待的进程就可以依次获得资源并执行。
3. 计算公式
设进程数为 nn ,每个进程需要资源数为 mm ,系统资源总数为 KK 。
不发生死锁的公式为:
K>n×(m−1)K>n×(m−1)
或者写作:
K≥n×(m−1)+1K≥n×(m−1)+1
代入本题数据:
- n=5n=5
- m=3m=3
K≥5×(3−1)+1K≥5×(3−1)+1
K≥5×2+1K≥5×2+1
K≥11K≥11
所以,至少需要 11 个资源。
【答案】
C. 11
8-10、 某计算机系统中有一个 CPU、一台输入设备和一台输出设备,假设系统中有三个作业 T1、T2 和 T3,系统采用优先级调度,且 T1 的优先级 > T2 的优先级 > T3 的优先级。若每个作业具有三个程序段:输入 Ii、计算 Ci 和输出 Pi(i=1,2,3),执行顺序为 Ii、Ci、Pi,则这三个作业各程序段并发执行的前驱图如下所示,图中①②分别为 8,③④分别为 9,⑤⑥分别为 10。

8、 A. I₂、C₂ B. I₂、I₃ C. C₁、P₃ D. C₂、P₂
9、 A. C₁、C₂ B. I₂、C₁ C. I₃、P₃ D. C₁、P₂
10、 A. I₃、C₂ B. I₂、C₁ C. P₂、P₃ D. C₁、P₂
【详细解析】
1. 确定前驱关系的两条原则
本题的前驱图由两类约束共同决定:
(1)作业内部的先后顺序(前驱关系):
每个作业必须按"输入 → 计算 → 输出"执行:
- I1 → C1 → P1
- I2 → C2 → P2
- I3 → C3 → P3
(2)资源竞争导致的串行化(优先级决定顺序):
由于输入设备、CPU、输出设备各只有一台,同类程序段必须串行使用设备;又因优先级 T1 > T2 > T3,所以:
- 输入设备:I1 → I2 → I3
- CPU:C1 → C2 → C3
- 输出设备:P1 → P2 → P3
2. 逐个推导未知节点
- ③:图中 ③ → P1,即 ③ 是 P1 的直接前驱。由作业内部顺序 C1 → P1,得 ③ = C1。
- ①:I1 有两个后继 ① 和 ③。③ 已是 C1,则 ① 必是输入设备串行化的下一个输入,即 ① = I2(I1 → I2)。
- ②:①(I2) 的后继,且 ② → C3。由 I3 → C3(作业内部)及 I2 → I3(输入串行),得 ② = I3。
- ④:前驱是 ①(I2) 和 ③(C1)。C2 既要在 I2 完成后(作业内部 I2 → C2),又要在 C1 让出 CPU 后(CPU 串行 C1 → C2)才能执行,恰好依赖这两者,得 ④ = C2。
- ⑤:前驱是 ④(C2) 和 P1。P2 既要在 C2 完成后(作业内部 C2 → P2),又要在 P1 让出输出设备后(输出串行 P1 → P2)才能执行,得 ⑤ = P2。
- ⑥:前驱是 C3 和 ⑤(P2)。P3 既要在 C3 完成后(作业内部 C3 → P3),又要在 P2 之后(输出串行 P2 → P3),得 ⑥ = P3。
3. 验证
补全后的前驱图包含全部 12 条边,完全吻合:
表格
| 约束类型 | 边 |
|---|---|
| 作业内部 | I1→C1,C1→P1,I2→C2,C2→P2,I3→C3,C3→P3 |
| 输入串行 | I1→I2,I2→I3 |
| CPU 串行 | C1→C2,C2→C3 |
| 输出串行 | P1→P2,P2→P3 |
与图中箭头一一对应,推导正确。
【答案】
- 第 8 题(①② = I₂、I₃):B
- 第 9 题(③④ = C₁、C₂):A
- 第 10 题(⑤⑥ = P₂、P₃):C
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)