8.5 KiB
2026年操作系统期末预测卷
考试信息
- 满分:100分
- 时间:120分钟
- 题型:7道大题(与历年试卷格式一致)
题目一:进程控制与进程树分析(15分)
题目
阅读以下程序代码,回答问题:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
pid_t pid;
int status;
printf("A: pid=%d\n", getpid());
pid = fork();
if (pid == 0) {
printf("B: pid=%d, ppid=%d\n", getpid(), getppid());
pid = fork();
if (pid == 0) {
printf("C: pid=%d, ppid=%d\n", getpid(), getppid());
} else {
wait(&status);
printf("D: pid=%d\n", getpid());
}
} else {
printf("E: pid=%d\n", getpid());
pid = fork();
if (pid == 0) {
printf("F: pid=%d, ppid=%d\n", getpid(), getppid());
} else {
wait(&status);
wait(&status);
printf("G: pid=%d\n", getpid());
}
}
return 0;
}
问题:
- (6分)画出完整的进程树,标注每个进程执行的输出语句(用字母A-G表示)
- (4分)该程序共有多少个进程(包括初始进程)?请列出所有进程的创建顺序
- (3分)输出语句D和G的执行顺序是否一定?为什么?
- (2分)如果将所有
wait(&status)调用删除,进程输出结果会发生什么变化?
题目二:磁盘调度算法计算(15分)
题目
某磁盘有200个磁道(编号0-199),磁盘请求队列中的磁道号依次为:
98, 183, 37, 122, 14, 124, 65, 67
当前磁头位于磁道53,向磁道号增大的方向移动。
问题:
-
(8分)分别使用以下磁盘调度算法,计算磁头移动的总磁道数:
- FCFS(先来先服务)
- SSTF(最短寻道时间优先)
- SCAN(电梯算法)
- C-SCAN(循环扫描算法)
-
(4分)在上述四种算法中,哪种算法的磁头移动总磁道数最少?哪种最多?简要说明原因。
-
(3分)如果磁头初始方向改为向磁道号减小的方向移动,SCAN算法的结果会如何变化?请计算新的磁头移动总磁道数。
题目三:虚拟内存与页面置换(15分)
题目
某系统采用请求分页存储管理,页面大小为4KB,分配给某进程的物理页框数为4。该进程的页面访问序列为:
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
问题:
-
(9分)分别使用以下页面置换算法,计算缺页次数和缺页率:
- OPT(最优算法)
- FIFO(先进先出算法)
- LRU(最近最久未使用算法)
-
(3分)如果将分配的物理页框数增加到5,使用FIFO算法,缺页次数是否会减少?请验证并解释是否出现了Belady异常。
-
(3分)假设页面大小改为8KB(其他条件不变),该进程的虚拟地址空间大小为32KB,请问:
- 进程共有多少个虚拟页?
- 页表需要多少个页表项?
- 虚拟地址
0x3A5F对应的页号和页内偏移分别是多少?
题目四:文件系统与inode计算(15分)
题目
某Unix文件系统采用Ext2结构,文件系统的块大小为4KB,磁盘块号占4字节,inode中包含15个地址项(12个直接索引、1个一次间接、1个二次间接、1个三次间接)。
问题:
-
(6分)计算:
- 每个磁盘块可以存放多少个磁盘块号?
- 一个inode支持的最大文件大小是多少?(请列出计算过程)
-
(4分)假设某文件大小为260KB,请问:
- 该文件占用多少个数据块?
- inode中的哪些地址项会被使用?
- 是否需要使用间接索引块?如果需要,使用几个?
-
(5分)假设要读取该文件偏移量为100KB处开始的4KB数据,请描述完整的地址转换过程:
- 如何确定使用inode中的哪个地址项?
- 如何计算数据在磁盘上的具体位置?
- 需要访问几次磁盘?
题目五:CPU调度算法计算(15分)
题目
某单处理器系统中有以下进程,按到达时间排序:
| 进程 | 到达时间 | 运行时间 |
|---|---|---|
| P1 | 0 | 8 |
| P2 | 1 | 4 |
| P3 | 2 | 9 |
| P4 | 3 | 5 |
| P5 | 4 | 2 |
问题:
-
(9分)分别使用以下调度算法,计算各进程的完成时间、周转时间和带权周转时间,并求平均周转时间和平均带权周转时间:
- FCFS(先来先服务)
- SJF(非抢占最短作业优先)
- HRRF(最高响应比优先)
-
(3分)在上述三种算法中:
- 哪种算法的平均周转时间最短?
- 哪种算法可能产生"饥饿"现象?为什么?
-
(3分)如果采用时间片轮转调度(RR),时间片大小为3,请画出甘特图并计算P1和P2的周转时间。
题目六:I/O控制方式与磁盘访问(15分)
题目
- (6分)比较以下四种I/O控制方式的特点,填写下表:
| 特性 | 程序直接控制 | 中断驱动I/O | DMA | 通道 |
|---|---|---|---|---|
| CPU介入频率 | ||||
| 数据传输单位 | ||||
| CPU与I/O并行性 | ||||
| 硬件复杂度 |
-
(4分)某磁盘转速为7200 RPM,平均寻道时间为8ms,每个磁道500个扇区,每个扇区512字节。
- 计算平均旋转延迟
- 计算读取一个扇区的平均访问时间
- 如果要连续读取100个扇区(在同一磁道上),总访问时间是多少?
-
(5分)某系统使用SPOOLing技术管理打印机:
- 画出SPOOLing系统的组成结构图
- 解释SPOOLing如何将独占设备改造为共享设备
- 说明SPOOLing与缓冲技术的区别
题目七:段页式存储管理与地址转换(10分)
题目
某系统采用段页式存储管理,地址结构如下:
- 段号:8位
- 页号:8位
- 页内偏移:16位
系统参数:
- 页大小:64KB
- 段表基址寄存器指向的段表如下:
| 段号 | 段长(页数) | 页表始址 |
|---|---|---|
| 0 | 4 | 1000 |
| 1 | 6 | 2000 |
| 2 | 2 | 3000 |
页表(部分)如下:
| 页号 | 物理块号 |
|---|---|
| 0 | 50 |
| 1 | 51 |
| 2 | 52 |
| 3 | 53 |
问题:
-
(4分)逻辑地址
0x00018000对应的段号、页号、页内偏移分别是多少?该地址对应的物理地址是多少?(写出计算过程) -
(3分)逻辑地址
0x01028000是否合法?为什么?如果合法,计算其物理地址。 -
(3分)与纯分页和纯分段相比,段页式存储管理有哪些优点和缺点?
参考答案要点
题目一参考答案
- 进程树:A→(B, E),B→(C, D),E→(F, G)
- 共7个进程,创建顺序:A→B→E→C→F→D→G
- D和G的执行顺序不一定,取决于哪个子进程先完成
- 删除wait后,输出顺序不确定,可能出现孤儿进程
题目二参考答案
- FCFS: 640道,SSTF: 236道,SCAN: 299道,C-SCAN: 356道
- SSTF最少(贪心选择最近),FCFS最多(无优化)
- 反向SCAN:53→37→14→0→65→67→98→122→124→183,总移动:359道
题目三参考答案
- OPT: 8次(66.7%),FIFO: 10次(83.3%),LRU: 10次(83.3%)
- 页框数=5时FIFO缺页仍为10次,未出现Belady异常
- 虚拟页数=4,页表项=4,地址0x3A5F:页号=3,偏移=0x2A5F
题目四参考答案
- 每块1024个块号,最大文件约16GB+
- 65个数据块,使用直接索引12个+一次间接索引1个,不需要二次间接
- 偏移100KB=第25块,使用直接索引项2,需2次磁盘访问
题目五参考答案
- FCFS平均周转7.8,SJF平均周转6.2,HRRF平均周转7.0
- SJF最短,SJF可能饥饿(长作业持续等待)
- RR甘特图:0-3(P1),3-6(P2),6-8(P5),8-11(P1),11-14(P3),14-17(P4),17-20(P1),20-23(P3),23-25(P3) P1周转=23,P2周转=6
题目六参考答案
- 表格填写(见知识点总结)
- 旋转延迟4.17ms,扇区访问12.21ms,连续100扇区约12.5ms
- SPOOLing由输入/输出井和预输入/缓输出程序组成
题目七参考答案
- 段号=0,页号=1,偏移=0x8000,物理地址=51×64KB+0x8000
- 合法,段号1页号2,物理地址=52×64KB+0x8000
- 优点:分段便于共享/保护+分页解决外部碎片;缺点:地址转换复杂,需3次访存