综合练习题
本套综合练习题覆盖操作系统全课程核心知识点,建议在完成各章节学习后进行自测。每题均附详细解答。
一、进程管理
题1
某系统采用时间片轮转调度算法,时间片大小为 10 ms。有 4 个进程 P1、P2、P3、P4,到达时间均为 0,运行时间分别为 20 ms、15 ms、30 ms、10 ms。求各进程的周转时间和平均周转时间。
调度过程(时间片=10ms):
- 0-10ms: P1(剩余10ms)
- 10-20ms: P2(剩余5ms)
- 20-30ms: P3(剩余20ms)
- 30-40ms: P4(完成,周转时间=40ms)
- 40-50ms: P1(完成,周转时间=50ms)
- 50-55ms: P2(完成,周转时间=55ms)
- 55-65ms: P3(剩余10ms)
- 65-75ms: P3(完成,周转时间=75ms)
各进程周转时间:
- P1: 50ms
- P2: 55ms
- P3: 75ms
- P4: 40ms
平均周转时间 = (50+55+75+40)/4 = 220/4 = 55ms
答案:P1=50ms,P2=55ms,P3=75ms,P4=40ms,平均周转时间=55ms。
题2
有 5 个进程 P0~P4,3 类资源 A(10)、B(5)、C(7)。T0 时刻资源分配情况如下:
| 进程 | Max(A,B,C) | Allocation(A,B,C) |
|---|---|---|
| P0 | (7,5,3) | (0,1,0) |
| P1 | (3,2,2) | (2,0,0) |
| P2 | (9,0,2) | (3,0,2) |
| P3 | (2,2,2) | (2,1,1) |
| P4 | (4,3,3) | (0,0,2) |
(1) 求 T0 时刻的 Need 矩阵和 Available 向量。 (2) T0 时刻是否处于安全状态?若是,给出安全序列。
(1) Need = Max - Allocation:
- P0: (7,5,3)-(0,1,0) = (7,4,3)
- P1: (3,2,2)-(2,0,0) = (1,2,2)
- P2: (9,0,2)-(3,0,2) = (6,0,0)
- P3: (2,2,2)-(2,1,1) = (0,1,1)
- P4: (4,3,3)-(0,0,2) = (4,3,1)
Available = 总资源 - 已分配总和 已分配总和 = (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)
(2) 安全性检查:
- Available=(3,3,2)
- P1 Need=(1,2,2) ≤ (3,3,2),执行P1,释放后Available=(3,3,2)+(2,0,0)=(5,3,2)
- P3 Need=(0,1,1) ≤ (5,3,2),执行P3,释放后Available=(5,3,2)+(2,1,1)=(7,4,3)
- P0 Need=(7,4,3) ≤ (7,4,3),执行P0,释放后Available=(7,4,3)+(0,1,0)=(7,5,3)
- P2 Need=(6,0,0) ≤ (7,5,3),执行P2,释放后Available=(7,5,3)+(3,0,2)=(10,5,5)
- P4 Need=(4,3,1) ≤ (10,5,5),执行P4
安全序列:P1 → P3 → P0 → P2 → P4
答案:(1) Need矩阵如上,Available=(3,3,2);(2) 安全状态,安全序列P1→P3→P0→P2→P4。
题3
用信号量解决生产者-消费者问题。缓冲区大小为 n,生产者生产产品放入缓冲区,消费者从缓冲区取出产品消费。写出同步互斥的伪代码。
设信号量:
- mutex = 1(互斥访问缓冲区)
- empty = n(空缓冲区数量)
- full = 0(满缓冲区数量)
生产者进程:
while (true) {
生产产品;
P(empty); // 等待空缓冲区
P(mutex); // 进入临界区
将产品放入缓冲区;
V(mutex); // 退出临界区
V(full); // 增加满缓冲区
}消费者进程:
while (true) {
P(full); // 等待满缓冲区
P(mutex); // 进入临界区
从缓冲区取出产品;
V(mutex); // 退出临界区
V(empty); // 增加空缓冲区
消费产品;
}注意:P操作的顺序很重要,必须先P(empty/full)再P(mutex),否则可能死锁。V操作的顺序无关。
答案:如上伪代码,使用mutex、empty、full三个信号量。
二、内存管理
题4
某系统采用分页存储管理,页面大小为 4 KB,逻辑地址空间 32 位,物理地址空间 24 位。页表如下(部分):
| 页号 | 页框号 |
|---|---|
| 0 | 5 |
| 1 | 9 |
| 2 | 14 |
| 3 | 2 |
求逻辑地址 0x00003004 对应的物理地址。
- 页面大小 4KB = 2^12,页内偏移 12 位
- 逻辑地址 0x00003004:
- 页号 = 0x00003004 >> 12 = 0x3 = 3
- 页内偏移 = 0x00003004 & 0xFFF = 0x004 = 4
- 查页表:页号3 → 页框号2
- 物理地址 = 页框号 × 页面大小 + 页内偏移 = 2 × 4096 + 4 = 8192 + 4 = 8196 = 0x2004
答案:物理地址为 0x2004(8196)。
题5
某请求分页系统,页面大小为 1 KB,进程的页面引用串为:1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5。分配给该进程的物理块数为 3。分别用 FIFO、LRU、OPT 算法计算缺页次数和缺页率。
引用串:1,2,3,4,1,2,5,1,2,3,4,5(共12次引用),物理块数=3
FIFO算法:
- 1(缺), 2(缺), 3(缺), 4(缺,淘汰1), 1(缺,淘汰2), 2(缺,淘汰3), 5(缺,淘汰4), 1(命中), 2(命中), 3(缺,淘汰5), 4(缺,淘汰1), 5(缺,淘汰2)
- 缺页次数:9次
- 缺页率:9/12 = 75%
LRU算法:
- 1(缺), 2(缺), 3(缺), 4(缺,淘汰1), 1(缺,淘汰2), 2(缺,淘汰3), 5(缺,淘汰4), 1(命中), 2(命中), 3(缺,淘汰5), 4(缺,淘汰1), 5(缺,淘汰2)
- 缺页次数:10次
- 缺页率:10/12 ≈ 83.3%
OPT算法:
- 1(缺), 2(缺), 3(缺), 4(缺,淘汰3), 1(命中), 2(命中), 5(缺,淘汰4), 1(命中), 2(命中), 3(缺,淘汰5), 4(缺,淘汰1), 5(缺,淘汰2)
- 缺页次数:7次
- 缺页率:7/12 ≈ 58.3%
答案:FIFO缺页9次(75%),LRU缺页10次(83.3%),OPT缺页7次(58.3%)。
三、文件系统
题6
某文件系统采用混合索引分配,inode 中有 12 个直接块指针、1 个一级间接指针、1 个二级间接指针、1 个三级间接指针。磁盘块大小为 4 KB,每个块指针占 4 字节。求该文件系统支持的最大文件大小。
-
每个磁盘块可存放的指针数 = 4KB / 4B = 1024 个
-
直接块:12 × 4KB = 48KB
-
一级间接:1 × 1024 × 4KB = 4MB
-
二级间接:1 × 1024 × 1024 × 4KB = 4GB
-
三级间接:1 × 1024 × 1024 × 1024 × 4KB = 4TB
-
最大文件大小 = 48KB + 4MB + 4GB + 4TB
答案:最大文件大小约为 4TB + 4GB + 4MB + 48KB(约4.004TB)。
题7
磁盘请求队列的磁道号为:98, 183, 37, 122, 14, 124, 65, 67。当前磁头在 53 号磁道,正在向磁道号增加的方向移动。分别用 SCAN(电梯算法)和 C-SCAN 算法计算磁头移动的总磁道数。
请求队列:98, 183, 37, 122, 14, 124, 65, 67 当前磁道:53,方向:磁道号增加
SCAN算法(电梯算法): 先向增加方向处理,到达最远端后反向。
- 53 → 65 (12) → 67 (2) → 98 (31) → 122 (24) → 124 (2) → 183 (59) → 37 (146) → 14 (23)
- 总磁道数 = 12+2+31+24+2+59+146+23 = 299
C-SCAN算法(循环扫描): 向增加方向处理到最远端,然后直接跳转到最远端(反向),继续向增加方向处理。
- 53 → 65 (12) → 67 (2) → 98 (31) → 122 (24) → 124 (2) → 183 (59) → 14 (169,跳转) → 37 (23)
- 总磁道数 = 12+2+31+24+2+59+169+23 = 322
(注:C-SCAN中从183跳转到14的移动是否计入取决于具体实现,通常计入。若不计入跳转,则为153。)
答案:SCAN总磁道数=299,C-SCAN总磁道数=322(含跳转)。
四、IO系统与综合
题8
某 IO 设备采用中断方式与 CPU 交换数据,每次中断传输 4 字节,中断服务程序执行时间为 2 μs。设备数据传输率为 2 MB/s。求 CPU 用于该设备 IO 的时间占比。
- 设备数据传输率 = 2 MB/s = 2 × 1024 × 1024 B/s ≈ 2,097,152 B/s
- 每次中断传输 4 字节
- 每秒中断次数 = 2,097,152 / 4 = 524,288 次/秒
- 每次中断 CPU 开销 = 2 μs
- 每秒 CPU 用于该设备的时间 = 524,288 × 2 μs = 1,048,576 μs = 1.048576 s
- CPU 时间占比 = 1.048576 / 1 = 104.86%
这超过了100%,说明中断方式无法满足该设备的传输需求,需要采用DMA方式。
答案:CPU时间占比约为104.9%,超过100%,说明中断方式无法满足需求,应采用DMA。
题9
某系统采用 Spooling 技术管理打印机。打印作业大小分别为 100 KB、200 KB、50 KB,磁盘传输率为 10 MB/s,打印机打印速度为 50 KB/s。求处理这三个作业的总时间(从第一个作业开始输入到最后一个作业打印完成)。
Spooling过程:作业先写入磁盘(输入井),再从磁盘读出打印。
-
输入时间(写入磁盘):
- 总数据量 = 100 + 200 + 50 = 350 KB
- 磁盘写入时间 = 350 KB / 10 MB/s = 350 / 10240 s ≈ 0.0342 s = 34.2 ms
-
打印时间(从磁盘读出并打印):
- 打印是瓶颈,速度为 50 KB/s
- 总打印时间 = 350 KB / 50 KB/s = 7 s
-
Spooling可以使输入和打印并行,但打印是瓶颈。
- 第一个作业输入完成后即可开始打印
- 总时间 ≈ 输入时间 + 打印时间(输入很快,打印是主要时间)
- 更精确:第一个作业输入时间 = 100KB/10MB/s ≈ 9.8ms,然后开始打印
- 打印总时间7s,输入在打印开始后很快完成(34.2ms)
- 总时间 ≈ 9.8ms + 7s ≈ 7.01s
答案:总时间约为 7.01 秒(打印是瓶颈,输入可与打印并行)。
题10
某计算机系统采用虚拟存储管理,页面大小为 4 KB。某进程的逻辑地址空间为 64 页,物理内存为 32 页。该进程执行时的页面引用串长度为 1000,其中命中 700 次。缺页时,若内存中有空闲页框,缺页处理时间为 1 μs;若需置换,且被置换页未修改,缺页处理时间为 10 μs;若被置换页已修改,缺页处理时间为 20 μs。假设缺页中 30% 需要置换且被置换页已修改,50% 需要置换且被置换页未修改,20% 有空闲页框。求有效访问时间(假设内存访问时间为 100 ns)。
-
缺页率 = (1000 - 700) / 1000 = 30% = 0.3
-
命中率 = 70% = 0.7
-
平均缺页处理时间:
- 有空闲页框(20%):1 μs = 1000 ns
- 置换未修改(50%):10 μs = 10000 ns
- 置换已修改(30%):20 μs = 20000 ns
- 平均缺页时间 = 0.2×1000 + 0.5×10000 + 0.3×20000 = 200 + 5000 + 6000 = 11200 ns
-
有效访问时间 EAT: EAT = 命中率 × 内存访问时间 + 缺页率 × (缺页处理时间 + 内存访问时间) = 0.7 × 100 + 0.3 × (11200 + 100) = 70 + 0.3 × 11300 = 70 + 3390 = 3460 ns = 3.46 μs
答案:有效访问时间为 3460 ns(3.46 μs)。
总结
本套综合练习题涵盖了操作系统的核心考点:
- 进程管理(3题):时间片轮转调度、银行家算法与安全序列、生产者-消费者信号量
- 内存管理(2题):分页地址转换、页面置换算法(FIFO/LRU/OPT)
- 文件系统(2题):混合索引最大文件大小、磁盘调度算法(SCAN/C-SCAN)
- IO系统与综合(3题):中断方式CPU开销、SPOOLing技术、虚拟内存有效访问时间
建议重点掌握进程调度算法、银行家算法、页面置换算法、磁盘调度算法四大核心计算题型,以及信号量同步问题的经典解法。
