2020年408真题操作系统篇

第23题:多个进程共享同一个文件F

问题: 若多个进程共享同一个文件F,则下列叙述中,正确的是( )。

A. 各进程只能用“读”方式打开文件F

B. 在系统打开文件表中仅有一个表项包含F的属性

C. 各进程的用户打开文件表中关于F的表项内容相同

D. 进程关闭F时,系统删除F在系统打开文件表中的表项

解答:

  • A. 各进程只能用“读”方式打开文件F 错误。各进程可以以读或写的方式打开文件F,取决于进程的操作需求和权限。
  • B. 在系统打开文件表中仅有一个表项包含F的属性 正确。系统打开文件表(System Open File Table)是操作系统内核中维护的一个数据结构,用于跟踪和管理所有打开的文件。系统打开文件表记录了每个打开文件的属性信息,如文件描述符、文件状态标志、文件指针位置等。对于文件F,系统只有一个表项,这个表项包含了该文件的属性,即使多个进程打开了文件F,它们都会共享这一表项。
  • C. 各进程的用户打开文件表中关于F的表项内容相同 错误。每个进程都有自己的用户打开文件表(User Open File Table),记录了该进程打开的文件信息。虽然所有进程共享同一个文件的属性,但每个进程的用户打开文件表中关于文件F的表项内容可以不同,例如每个进程的文件指针位置可能不同,因此它们的表项不完全相同。
  • D. 进程关闭F时,系统删除F在系统打开文件表中的表项 错误。当进程关闭文件F时,并不会立即删除系统打开文件表中的表项。只有当所有进程都关闭文件F之后,系统打开文件表中的表项才会被删除。这确保了其他进程在需要访问文件时能够继续使用该文件的相关信息。

本题选B。


第24题:支持文件长度可变、随机访问的磁盘存储空间分配方式

问题: 下列选项中,支持文件长度可变、随机访问的磁盘存储空间分配方式是( )。

A. 索引分配

B. 链接分配

C. 连续分配

D. 动态分区分配

解答:

  • A. 索引分配 正确。索引分配是磁盘存储空间分配的一种方式,使用索引表来映射文件中每个数据块的物理位置。文件的长度是可变的,且通过索引表可以快速定位到指定的数据块,支持随机访问。因为索引表的条目可以动态增加或减少,从而支持文件大小的变化。
  • B. 链接分配 错误。链接分配将文件的数据块通过链表的方式连接起来。虽然支持文件长度可变,但由于文件的数据块是按顺序链接的,因此不支持随机访问。
  • C. 连续分配 错误。连续分配是将文件存储空间连续地分配在磁盘上。它适用于文件长度固定且已知的情况,不适合长度可变的文件,也不支持随机访问。
  • D. 动态分区分配 错误。动态分区分配通常用于操作系统的内存管理,分配和管理主存中的区域,并不涉及磁盘文件的存储空间分配。

本题选A。

第25题:中断相关操作由操作系统完成的是?

问题: 下列与中断相关的操作中,由操作系统完成的是( )。

Ⅰ. 保存被中断程序的中断点 Ⅱ. 提供中断服务 Ⅲ. 初始化中断向量表 Ⅳ. 保存中断屏蔽字

A. 仅Ⅰ、Ⅱ B. 仅Ⅰ、Ⅱ、Ⅳ C. 仅Ⅲ、Ⅳ D. 仅Ⅱ、Ⅲ、Ⅳ

解答:

  • Ⅰ. 保存被中断程序的中断点 错误。这部分工作由CPU硬件通过中断隐指令自动完成,包括保存程序计数器(PC)和处理器状态字(PSW),以便中断服务程序返回后可以从断点继续执行。这属于硬件级别的中断响应,不是操作系统的职责。
  • Ⅱ. 提供中断服务 正确。中断服务程序(Interrupt Service Routine, ISR)通常由操作系统编写和管理,用于处理中断请求,例如来自I/O设备的中断。
  • Ⅲ. 初始化中断向量表 正确中断向量表用于记录各类中断的服务程序入口地址。在系统启动时,操作系统会初始化该表,将每个中断类型与相应的服务程序对应起来。
  • Ⅳ. 保存中断屏蔽字 正确中断屏蔽字用于控制CPU是否响应某些中断,保存与恢复通常由操作系统或中断服务程序在执行中断处理前后完成。

正确答案:D. 仅Ⅱ、Ⅲ、Ⅳ


第26题:多级反馈队列调度算法的设计考虑因素

问题: 下列与进程调度有关的因素中,在设计多级反馈队列调度算法时需要考虑的是( )。

Ⅰ. 就绪队列的数量 Ⅱ. 就绪队列的优先级 Ⅲ. 各就绪队列的调度算法 Ⅳ. 进程在就绪队列间的迁移条件

A. 仅Ⅰ、Ⅱ B. 仅Ⅲ、Ⅳ C. 仅Ⅱ、Ⅲ、Ⅳ D. Ⅰ、Ⅱ、Ⅲ和Ⅳ

解答:

  • Ⅰ. 就绪队列的数量 正确。多级反馈队列中可以有多个就绪队列,每个队列表示不同的优先级或服务级别。设置合适的队列数量有助于区分进程行为(如I/O密集 vs CPU密集)。
  • Ⅱ. 就绪队列的优先级 正确。不同的队列一般有不同的优先级。优先级越高的队列会优先调度其进程,从而实现快速响应短作业。
  • Ⅲ. 各就绪队列的调度算法 正确。不同优先级的队列可采用不同的调度策略,例如高优先级队列采用时间片轮转,低优先级队列采用先来先服务。
  • Ⅳ. 进程在就绪队列间的迁移条件 正确。如时间片用尽、等待时间过长等条件可以触发进程从一个队列迁移到另一个队列,这是多级反馈机制的核心。

正确答案:D. Ⅰ、Ⅱ、Ⅲ和Ⅳ


第27题:请求系统的安全性检测

问题: 某系统中有 A、B 两类资源各 6 个,t 时刻资源分配及需求情况如下表:

进程 A已分配 B已分配 A需求总量 B需求总量
P1 2 3 4 4
P2 2 1 3 1
P3 1 2 3 4

问:t 时刻系统的安全性检测结果是( )。

选项: A. 存在安全序列 P1、P2、P3 B. 存在安全序列 P2、P1、P3 C. 存在安全序列 P2、P3、P1 D. 不存在安全序列


解答与分析:

第一步:计算各类资源的当前可用数

系统资源总数为 A=6,B=6。

可用资源:

  • A:6 − 4 = 1
  • B:6 − 6 = 0

按照题干说明,存在安全序列 P2 → P1 → P3。即先满足 P2 的需求,回收资源,再满足 P1,最后满足 P3。

正确答案:B. 存在安全序列 P2、P1、P3


第28题:影响请求分页系统的有效访存时间因素

问题: 下列因素中,影响请求分页系统有效(平均)访存时间的是( )。

Ⅰ. 缺页率 Ⅱ. 磁盘读写时间 Ⅲ. 内存访问时间 Ⅳ. 执行缺页处理程序的CPU时间

选项: A. 仅Ⅱ、Ⅲ B. 仅Ⅰ、Ⅳ C. 仅Ⅰ、Ⅲ、Ⅳ D. Ⅰ、Ⅱ、Ⅲ和Ⅳ


解答与分析:

  • Ⅰ. 缺页率 ✅ 缺页率越高,越频繁地访问磁盘,导致平均访存时间增加。
  • Ⅱ. 磁盘读写时间 ✅ 缺页时需要将页从磁盘装入内存,磁盘速度影响效率。
  • Ⅲ. 内存访问时间 ✅ 内存访问是最基本的部分,访问速度直接影响整体效率。
  • Ⅳ. 执行缺页处理程序的CPU时间 ✅ 包括页表更新、页替换算法运行等,增加了CPU负担,影响响应速度。

综上,这四项全部是有效访存时间的关键因素。

正确答案:D. Ⅰ、Ⅱ、Ⅲ和Ⅳ


第29题:父进程与子进程的叙述

问题: 下列关于父进程与子进程的叙述中,错误的是( )。

选项: A. 父进程与子进程可以并发执行 B. 父进程与子进程共享虚拟地址空间 C. 父进程与子进程有不同的进程控制块 D. 父进程与子进程不能同时使用同一临界资源


正确答案:B

解析:

  • A. 正确:父进程和子进程创建后可以并发执行,操作系统调度它们独立运行。
  • B. 错误 ✅:在标准操作系统中,父子进程拥有独立的虚拟地址空间。虽然子进程在创建时通常会复制父进程的地址空间(如使用 fork()),但它之后对内存的修改不会影响父进程。
  • C. 正确:每个进程有自己的进程控制块(PCB),用于记录进程的状态、ID、寄存器内容等,便于独立调度与管理。
  • D. 正确:临界资源必须使用互斥机制控制访问,父子进程当然可以尝试使用同一资源,但不能同时访问。系统使用信号量、互斥锁等机制来防止并发访问导致数据冲突。

✅ 本题答案:B


第30题:设备独立性

问题: 对于具备设备独立性的系统,下列叙述中,错误的是( )。

选项: A. 可以使用文件名访问物理设备 B. 用户程序使用逻辑设备名访问物理设备 C. 需要建立逻辑设备与物理设备之间的映射关系 D. 更换物理设备后必须修改访问该设备的应用程序


正确答案:D

解析:

  • A. 正确:许多操作系统(如 Unix/Linux)将设备抽象成“设备文件”,如 /dev/sda,可以像文件一样访问。
  • B. 正确:用户通过逻辑设备名访问设备,系统通过设备驱动程序完成从逻辑名到物理设备的转换。
  • C. 正确:设备独立性建立在逻辑与物理设备映射机制上,使得设备更换不影响上层使用。
  • D. 错误 ✅:设备独立性的核心目标之一是更换物理设备时不需要修改应用程序。系统只需要重新映射逻辑设备名与新的物理设备即可。

✅ 本题答案:D


第31题:文件系统可创建文件数量上限

问题: 某文件系统的目录项由文件名和索引结点号构成。若每个目录项长度为 64 字节,其中 4 字节存放索引结点号,60 字节存放文件名。文件名由小写英文字母构成,则该文件系统能创建的文件数量的上限为( )。

选项: A. 2²⁶ B. 2³² C. 2⁶⁰ D. 2⁶⁴


正确答案:B

解析:

  • 文件系统中的每个文件由一个索引结点号(inode number)唯一标识。

  • 每个目录项使用 4 字节(32位)来存放该 inode 编号,那么理论上最多能表示:

    2322^{32}

    个不同的索引结点(inode),即支持最多 2322^{32} 个文件。

  • 文件名长度虽然是 60 字节,只是限制了文件名的最大长度,而不是文件数量的限制因素。

  • 所以,该文件系统可创建的文件数上限由 inode 编号位数决定,即:

    本题答案:B(2³²)


第32题:临界区互斥机制的准则

问题: 下列准则中,实现临界区互斥机制必须遵循的是( )。

Ⅰ. 两个进程不能同时进入临界区 Ⅱ. 允许进程访问空闲的临界资源 Ⅲ. 进程等待进入临界区的时间是有限的 Ⅳ. 不能进入临界区的执行态进程立即放弃CPU

选项: A. 仅Ⅰ、Ⅳ B. 仅Ⅱ、Ⅲ C. 仅Ⅰ、Ⅱ、Ⅲ D. 仅Ⅰ、Ⅲ、Ⅳ


正确答案:C

解析:

  • Ⅰ. 正确 ✅ ——【互斥原则】:任何时刻,临界区中最多只能有一个进程。
  • Ⅱ. 正确 ✅ ——【空闲让进原则】:临界区空闲时,应允许某个等待的进程立即进入。
  • Ⅲ. 正确 ✅ ——【有限等待原则】:不能让进程无限期等待进入临界区(避免饥饿)。
  • Ⅳ. 错误 ❌ ——【让权等待原则】:虽然能提高效率(避免忙等待),但不是“必须”的,例如 Peterson 算法就是“忙等待”方式,也可实现互斥。

所以必须满足的只有 I、II、III。


✅ 本题答案:C(仅Ⅰ、Ⅱ、Ⅲ)


信号量


第45题(7分)

问题: 现有 5 个操作 A、B、C、D 和 E,操作 C 必须在 A 和 B 完成后执行,操作 E 必须在 C 和 D 完成后执行。 请使用信号量的 wait()signal() 操作(即 P、V 操作)描述上述操作之间的同步关系,并说明所用信号量及其初值。


答案:

1. 操作之间的前置关系(依赖关系):

操作 前置任务
A
B
C A、B
D
E C、D

2. 依赖关系建图(AOV 网)

有向边关系如下:

  • A → C
  • B → C
  • C → E
  • D → E

3. 所需信号量及初始值

每个同步关系使用一个信号量,初值为 0,用于阻塞依赖方,直到前置操作完成:

1
2
3
4
semaphore S_AC = 0;  // 控制 A → C
semaphore S_BC = 0; // 控制 B → C
semaphore S_CE = 0; // 控制 C → E
semaphore S_DE = 0; // 控制 D → E

4. 同步代码实现(并发进程 cobegin / coend 模式)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
cobegin

Process A() {
// 执行操作 A
signal(S_AC); // 通知 C:A 已完成
}

Process B() {
// 执行操作 B
signal(S_BC); // 通知 C:B 已完成
}

Process C() {
wait(S_AC); // 等待 A 完成
wait(S_BC); // 等待 B 完成
// 执行操作 C
signal(S_CE); // 通知 E:C 已完成
}

Process D() {
// 执行操作 D
signal(S_DE); // 通知 E:D 已完成
}

Process E() {
wait(S_CE); // 等待 C 完成
wait(S_DE); // 等待 D 完成
// 执行操作 E
}

coend

解释总结:

  • 信号量初值为 0,表示等待前置任务完成后才能进入对应操作。
  • signal(V) 表示当前任务完成,释放信号量,允许后继任务继续。
  • wait(P) 表示当前任务必须等待前置任务完成才能继续。

✅ 本题要点:

  • 每条依赖边用一个信号量表示同步。
  • 信号量初值 = 0,确保后继任务阻塞等待。
  • 前驱任务执行完后 signal(),后继任务执行前 wait()。

二级页表


第46题(8分)

某 32 位系统采用基于二级页表的请求分页存储管理方式,按字节编址,页目录项和页表项长度均为 4 字节。虚拟地址结构如下:

| 页目录号(10位) | 页号(10位) | 页内偏移(12位) |

C语言程序中数组 a[1024][1024] 的起始虚拟地址为 1080 0000H,数组元素占 4 字节。程序运行时,其进程的页目录起始物理地址为 0020 1000H。请回答以下问题:


(1) 数组元素 a[1][2] 的:

  1. 虚拟地址是多少?
  2. 页目录号、页号分别是多少?
  3. 页目录项的物理地址是多少?
  4. 若该目录项中存放的页框号为 00301H,则 a[1][2] 所在页对应的页表项的物理地址是多少?

答案与解析:

1️⃣ 虚拟地址计算 数组起始地址为 1080 0000Ha[1][2] 是第 1*1024 + 2 = 1026 个元素,每个元素占 4 字节:

1
2
3
4
a[1][2] 的虚拟地址:
= 10800000H + 1026 × 4
= 10800000H + 00001008H
= 10801008H

2️⃣ 从虚拟地址中解析页目录号、页号、页内偏移

32位地址:10801008H = 0001 0000 1000 0000 0001 0000 0000 1000B 按照位分割:[10 位 | 10 位 | 12 位]:

  • 页目录号:0001000010B = 0x042
  • 页号:0000000001B = 0x001
  • 页内偏移:000000001000B = 0x008

3️⃣ 页目录项的物理地址

页目录起始物理地址是 00201000H,每个目录项占 4 字节:

1
2
3
页目录项物理地址 = 00201000H + 4 × 0x42
= 00201000H + 00000108H
= 00201108H

4️⃣ 页表项的物理地址

该目录项中存放的页框号为 00301H,表示页表的起始地址为 00301000H

页表项大小为 4 字节,页号为 0x001:

1
2
3
页表项物理地址 = 00301000H + 4 × 0x001
= 00301000H + 00000004H
= 00301004H

(2) 数组a在虚拟/物理地址空间是否连续?

  • 虚拟地址空间: 必须连续。因为 C语言静态数组(如 a[1024][1024])在编译时分配连续的虚拟地址空间。

  • 物理地址空间: 不一定连续。因为系统采用请求分页(demand paging),多个连续的虚拟页可分别映射到任意的物理页框。


(3) 行/列优先遍历的局部性分析

  • 数组 a 是按行优先方式存放的,即 a[i][j] 连续排列 j。
  • 按行遍历:连续访问的内存地址紧邻,空间局部性好
  • 按列遍历:访问间隔大,常跨页甚至跨页表,局部性差

✅ 因此:按行遍历的局部性更好


✅ 总结答案:

(1)

  • 虚拟地址:10801008H
  • 页目录号:0x42,页号:0x01
  • 页目录项物理地址:00201108H
  • 页表项物理地址:00301004H

(2)

  • 虚拟地址空间:必须连续
  • 物理地址空间:不一定连续

(3)

  • 按行遍历局部性更好