操作系统期末真题(二)解析

2026年9月22日 Crystal-Sky 19 min read 操作系统期末复习真题解析

一、简答题(共 24 分)

1.(6 分)

题目 1.1

假定有先来先服务、时间片轮转、短进程优先、静态优先级、动态优先级这 5 种调度算法可选择。在下列 2 种情况下,分别采用哪一种调度算法最合理?为什么?

(1)使交互型进程具有合理的响应时间 (2)紧急任务能得到及时处理

2.(6 分)

题目 1.2

给出处理死锁的 3 种具体方法,并说明每种方法的适用场合。

3.(6 分)

题目 1.3

假设有一台慢速的独占设备,多个进程需要共享访问该设备,可能存在什么问题?为什么?针对你所述的这个问题,给出一种解决方法,并简要描述你的方法。

4.(6 分)

题目 1.4

在设计文件系统时,需要考虑多个设计目标,例如文件访问速度快、存储空间浪费少等,而有些设计目标之间往往存在冲突,需要权衡。举 2 个与文件系统相关的设计目标(不限于本题所列的设计目标)存在冲突的例子,分别解释可能冲突的情况,并简要阐述在设计时采取什么策略对相互冲突的设计目标进行权衡。

二、虚拟存储管理(18 分)

已知某计算机系统采用虚拟段页式存储管理,虚拟地址为 16 位,其中第 0-7 位为页内地址,第 8-11 位为页号,第 12-15 位为段号。设为进程 P 固定分配了 4 个物理块(或称页框、页帧,page frame),采用局部置换策略,快表长度为 2,页的置换以及快表项的置换均采用 LRU(Least Recently Used)算法,段表和页表在内存中。目前进程 P 有 4 页在内存中,其段号、页号及对应的物理块号如下(假定这些虚拟地址均在进程 P 的虚拟地址空间内):

段号页号(十进制)物理块号
02160H
010258H
2869EH
21548AH

此时进程 P 被调度执行,且快表为空。依次访问下列虚拟地址:

(1)2F10H (2)0A4EH (3)2FA0H (4)0290H (5)2560H (6)0238H

1. 给出这些虚拟地址分别对应的物理地址,要求用十六进制表示,并说明计算过程。

2. 给出进程 P 依次访问上述 6 个虚拟地址后快表的内容(段号、页号及其对应的物理块号)。

3. 你认为在该问题所给定的情形下,页的置换以及快表项的置换采用 LRU 算法是否有效?请解释具体理由。

三、并发进程与共享变量(12 分)

设有两个并发执行的进程 P1 与 P2,其执行的代码分别如下。

进程 P1:

while (x != 12) {
    x = x * 2;
}

进程 P2:

while (x != 12) {
    x = x * 3;
}

其中,x 是进程 P1 和 P2 的共享变量,初值为 1。

1. 给出进程 P1 和 P2 都能正常执行结束的 2 种情况,要求说明每种情况的执行过程。

2. 给出进程 P1 和 P2 都不能正常执行结束的 2 种情况,要求说明每种情况的执行过程。

3. 在保持 P1 和 P2 已有代码行不变的条件下,为了使进程 P1 和 P2 都能正常执行结束,请修改 P1 和 P2 的代码(不可以添加改变 x 值、强行退出 while 循环或终止程序的操作),并加以说明。

四、文件系统(16 分)

某磁盘文件系统采用树型目录结构,目录当作文件,每个目录项包含文件名等所有文件属性。设磁盘逻辑块与物理块的大小均为 1024 个字节,每个目录项的大小为 256 个字节,磁盘物理块(以下简称磁盘块)号用 8 个字节表示,根据磁盘块号可确定对应的磁盘物理地址,且根目录的内容已读入内存。设文件 f.dat 存在于目录/data 下,目录/data 下共有文件 801 个,文件(包括目录)内容占用不连续的磁盘块,采用单级索引结构,目录项给出文件索引表所在的起始磁盘块号,索引表按逻辑顺序依次存放文件内容所占用的磁盘块号,若索引表大小超过 1 个磁盘块,则占用连续的多个磁盘块。

1. 为了获得文件 f.dat 对应的索引表起始地址,最少需要读多少个磁盘块?最多需要读多少个磁盘块?要求给出计算过程。

2. 设文件 f.dat 的大小为 512KB,其索引表需要占用多少个磁盘块?在获得文件 f.dat 对应的索引表起始地址后,若要读取文件 f.dat 的第 409680 个字节(字节编号从 0 开始),需要读多少个磁盘块?要求给出计算过程。

3. 请指出该文件系统存在的一种不足,并解释理由。针对这种不足,给出一种改进方法,并解释理由。

五、内存管理与程序访问局部性(12 分)

下列 C 程序 P1 和 P2 的功能相同,其中 a 为数组 int a[1024][1024](a 为全局变量),C 语言的数组在内存中以行主次序(按行优先)存放。假定 P1 和 P2 在某计算机上运行,只考虑操作系统的内存管理机制。

程序 P1:

int i, j;
for (i = 0; i < 1024; i++) {
 for (j = 0; j < 1024; j = j + 2) a[i][j] = 0;
 for (j = 1; j < 1024; j = j + 2) a[i][j] = 0;
}

程序 P2:

int i, j;
for (j = 0; j < 1024; j++)
 for (i = 0; i < 1024; i++)
  a[i][j] = 0;

1. 在什么情况下 P1 和 P2 的执行效率几乎没有区别?请解释理由。

2. 在什么情况下 P1 和 P2 的执行效率有明显差异?哪个效率更高?请解释理由。

3. 是否可以写出一个在某种内存管理机制下与 P1、P2 功能相同而执行效率更高的 C 语言程序?如果不可以,请说明理由;如果可以,请写出 C 语言程序代码,并指出相应的内存管理机制。

六、同步问题(18 分)

幼儿园有张老师、李老师和若干小朋友,水果无数。桌上有一个空盘子,最多能放 30 个水果。小朋友们从盘中拿水果吃,每人每次只能拿 1 个,其中,男孩子只拿苹果,女孩子只拿橘子。张老师和李老师向盘中随机放苹果或橘子,每次只放 1 个,每位老师放 10 个水果后便休息,由另一位老师接替,两位老师轮流(假设由张老师开始,李老师先休息)。请用信号量的 P、V 操作设计该问题的同步算法。

1. 给出所用共享变量(如果需要)和信号量及其初始值,并说明各自的含义。

2. 用伪代码写出描述张老师、李老师、男孩子和女孩子活动的同步算法,必要之处给出注释。