2010年408真题操作系统篇

选择题


23. 下列选项中,操作系统提供给应用程序的接口是( )。

A. 系统调用 B. 中断 C. 库函数 D. 原语

正确答案:A

解释:

  • A. 系统调用(System Call) 是用户程序与操作系统进行交互的接口,是操作系统对上提供服务的主要方式。用户程序通过系统调用请求操作系统进行如文件操作、进程控制、I/O 管理等操作。执行系统调用时会从用户态切换到内核态
  • B. 中断(Interrupt) 是硬件或软件在特定事件发生时打断当前 CPU 的运行,用于处理紧急任务或完成设备驱动工作,不是应用程序主动调用的接口。
  • C. 库函数(Library Function) 是对系统调用的封装,方便程序调用,但它本身不是操作系统提供的接口,而是编程语言库中的一部分。
  • D. 原语(Primitive) 是操作系统提供的一组基本操作,通常用于实现进程间同步等机制,但不是面向用户应用程序的直接接口。

24. 下列选项中,导致创建新进程的操作是( )。

I. 用户登录成功 II. 设备分配 III. 启动程序执行

A. 仅 I 和 II B. 仅 II 和 III C. 仅 I 和 III D. I、II 和 III

正确答案:C

解释:

  • I. 用户登录成功:✔️ 正确。 用户登录后,系统会为其启动新的 shell 或桌面环境进程,因此会创建新进程。
  • II. 设备分配:❌ 错误。 为进程分配设备是一种资源管理行为,但不会单独引起新的进程创建。
  • III. 启动程序执行:✔️ 正确。 启动一个程序执行,典型操作如双击可执行文件或调用 exec 系列函数,都会引起新进程的创建。

因此,只有 I 和 III 会导致创建新进程,选项 C 正确


25.

设与某资源关联的信号量初值为 3,当前值为 1。若 M 表示该资源的可用个数,N 表示等待该资源的进程数,则 M、N 分别是( )。

A. 0、1 B. 1、0 C. 1、2 D. 2、0

正确答案:B


【解释】

信号量用于表示某类资源的可用数量,并协调进程的同步与互斥。

设信号量初值为 S₀ = 3(资源总数为3),当前值为 S = 1

根据信号量的定义:

  • S ≥ 0,表示当前仍有 S 个资源可用,等待队列中没有进程,即 N = 0
  • S < 0,表示资源已经用尽且有 |S| 个进程在等待。

所以:

  • M = 当前可用资源数 = 1
  • N = 正在等待的进程数 = 0

因此,选择 B. 1、0


举一反三题:

设与某资源关联的信号量初值为 3,当前值为 -1。若 M 表示该资源的可用个数,N 表示等待该资源的进程数,则 M、N 分别是( )。

A. 0、1 B. 1、0 C. 1、2 D. 2、0

参考答案:A


【解释】

当前信号量值为 S = -1,说明:

  • 资源已经全部被占用(因为 S < 0),所以可用资源数 M = 0
  • |S| = 1 个进程正在等待资源,故 N = 1

因此,选择 A. 0、1


26.

下列选项中,降低进程优先级的合理时机是( )。

A. 进程的时间片用完 B. 进程刚完成 I/O,进入就绪列队 C. 进程长期处于就绪列队中 D. 进程从就绪态转为运行态

正确答案:A


【解释】

操作系统中的进程调度策略(如多级反馈队列)常常会根据进程的行为动态调整其优先级。降低进程优先级的典型场景包括:

A. 进程的时间片用完

  • 正确。 当一个进程占满了它的时间片(表示它长时间占用 CPU),调度器通常认为它是CPU 密集型进程,为了公平起见,降低它的优先级,以便让其他进程有机会运行。

B. 进程刚完成 I/O,进入就绪列队

  • 错误。 这类进程通常是 I/O 密集型进程,响应快,短时间执行完就等待下一次 I/O,不应降低优先级,反而应该给予较高优先级以提高系统响应性。

C. 进程长期处于就绪列队中

  • 错误。 长期得不到调度的进程说明它处于“饥饿”状态,应当提高其优先级,以防止无限等待。

D. 进程从就绪态转为运行态

  • 错误。 这是调度器决定运行该进程的时机,此时不应主动降低优先级,否则将不利于其执行。

📌 因此,只有 A 是降低进程优先级的合理时机。


新题:

下列选项中,提高进程优先级的合理时机是( )。

A. 进程刚完成 I/O 操作,进入就绪队列 B. 进程的时间片刚用完 C. 进程长时间占用 CPU 不释放 D. 进程正在执行特权指令


正确答案:A


【解释】

提高进程优先级的时机通常是出于响应性防止饥饿的考虑,尤其对 I/O 密集型进程长期等待的进程,操作系统调度器会适当提高其优先级

A. 进程刚完成 I/O 操作,进入就绪队列

  • 正确。 I/O 密集型进程执行时间短、I/O 多,提升其优先级可以使它们更快执行,提高系统响应速度和设备利用率,这是多级反馈队列等调度算法常采用的策略。

B. 进程的时间片刚用完

  • 错误。 说明该进程已经充分使用了 CPU,调度器通常会降低其优先级,防止 CPU 被长时间占用。

C. 进程长时间占用 CPU 不释放

  • 错误。 这表明该进程是 CPU 密集型,可能会被降低优先级,以保持系统公平性。

D. 进程正在执行特权指令

  • 错误。 执行特权指令与优先级无直接关系,特权指令只能在内核态执行,是操作系统控制权的体现,不是调度优先级的判断依据。

📌 因此,A 是唯一合理的选项,反映了操作系统调度器在优化系统响应性时的典型做法。


27.

进程 P0 和 P1 的共享变量定义及其初值为:

1
2
3
4
boolean flag[2];
int turn = 0;
flag[0] = FALSE;
flag[1] = FALSE;

若进程 P0 和 P1 访问临界资源的类 C 伪代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void P0() { //进程P0
while (TRUE) {
flag[0] = TRUE;
turn = 1;
while (flag[1] && (turn == 1));
临界区;
flag[0] = FALSE;
}
}

void P1() { //进程P1
while (TRUE) {
flag[1] = TRUE;
turn = 0;
while (flag[0] && (turn == 0));
临界区;
flag[1] = FALSE;
}
}

并发执行进程 P0 和 P1 时产生的情形是( )。

A. 不能保证进程互斥进入临界区,会出现“饥饿”现象 B. 不能保证进程互斥进入临界区,不会出现“饥饿”现象 C. 能保证进程互斥进入临界区,会出现“饥饿”现象 D. 能保证进程互斥进入临界区,不会出现“饥饿”现象


✅ 正确答案:D


【解释】

这段代码用于解决两个进程之间的互斥问题。其核心思想如下:

  • flag[i] = TRUE 表示进程 Pi 想要进入临界区。
  • turn = j 表示“我让对方先来”。
  • while(flag[j] && turn == j); 是忙等等待,让对方优先。

互斥性分析:

两进程不可能同时进入临界区。因为一旦两个进程同时设置自己的 flagTRUE,最后一个执行 turn = j 的进程会让出优先权,等待另一个进程先进入。

饥饿分析:

  • 虽然是忙等待,但 不会出现无限等待
  • 因为每次都有一个进程会先退出,另一个才有机会进入临界区。

因此,该算法 保证互斥访问,同时 不会发生饥饿,满足空闲让进、忙则等待、有限等待原则。


📌 结论:

  • 互斥性 ✅ 保证
  • 无饥饿现象 ✅ 保证

✅ 所以正确答案是:D. 能保证进程互斥进入临界区,不会出现“饥饿”现象


28.

某基于动态分区存储管理的计算机,其主存容量为 55MB(初始为空闲),采用 最佳适配(Best Fit) 算法,分配和释放的顺序为:

  • 分配 15MB
  • 分配 30MB
  • 释放 15MB
  • 分配 8MB
  • 分配 6MB

此时主存中最大空闲分区的大小是( )。

A. 7MB B. 9MB C. 10MB D. 15MB


✅ 正确答案:B. 9MB


【解析】

算法说明: Best Fit(最佳适配)算法:从空闲分区中选择一个最小且能容纳请求大小的分区,尽量减少碎片。


分配过程分析:

初始:

  • 主存全为空闲,共 55MB

1️⃣ 分配 15MB

  • 从 55MB 中分出 15MB
  • 剩下一个空闲区:40MB

2️⃣ 分配 30MB

  • 从 40MB 中分出 30MB
  • 剩下一个空闲区:10MB

3️⃣ 释放 15MB

  • 空闲区变为:15MB(释放的) + 10MB(原剩余)

现在空闲区有两个:

  • 15MB
  • 10MB

4️⃣ 分配 8MB(Best Fit):

  • 在两个空闲区中,10MB 更合适(更接近 8MB)
  • 在 10MB 中分配 8MB,剩余 2MB

此时空闲区有:

  • 15MB
  • 2MB

5️⃣ 分配 6MB(Best Fit):

  • 2MB 无法满足
  • 在 15MB 中分配 6MB,剩余 9MB

最终空闲区为:

  • 2MB
  • 9MB

✅ 最大空闲分区大小:9MB


🧠 拓展知识点:

常见的 动态分区分配算法

算法 策略说明 优点 缺点
First Fit 从头开始,找到第一个够大的空闲分区 快,分配效率高 会在低地址形成碎片
Best Fit 找最小但够用的空闲分区 剩余空间小,减少碎片 容易形成很多小碎片
Worst Fit 找最大的空闲分区 保留大空闲空间 剩下的空闲可能仍很大但无用
Next Fit 类似 First Fit,但每次从上次分配位置开始 分布更平均 仍可能产生碎片

题目:

某基于动态分区存储管理的计算机,其主存容量为 55MB(初始为空闲),采用 最坏适配(Worst Fit) 算法,分配和释放的顺序为:

  • 分配 15MB
  • 分配 30MB
  • 释放 15MB
  • 分配 8MB
  • 分配 6MB

此时主存中最大空闲分区的大小是( )。

A. 7MB B. 9MB C. 10MB D. 15MB


✅ 正确答案:A. 7MB


【解析】

最坏适配算法(Worst Fit)

  • 从空闲分区中选择最大的空闲块进行分配。
  • 有利于保留中等大小空闲分区,但会更快地产生大块分裂和碎片。

操作步骤模拟:

初始:

  • 主存:55MB 空闲

1️⃣ 分配 15MB

  • 找最大空闲区(55MB)分配 15MB
  • 剩余:40MB

2️⃣ 分配 30MB

  • 找最大空闲区(40MB)分配 30MB
  • 剩余:10MB

3️⃣ 释放 15MB

  • 回收原先分配的第一个 15MB
  • 当前空闲区:15MB + 10MB

4️⃣ 分配 8MB

  • 空闲区中最大的是 15MB → 分配 8MB
  • 剩余:7MB(来自15MB),还有原来的 10MB

5️⃣ 分配 6MB

  • 当前空闲区有:10MB 和 7MB → 选 10MB(最大)分配 6MB
  • 剩余:4MB(来自10MB) + 7MB

当前空闲区:

  • 7MB
  • 4MB

最大空闲分区:7MB → 所以答案是 A


🧠 小贴士:

策略 分配特点 容易出现的问题
Best Fit 最小满足需求的空闲块 产生很多小碎片
Worst Fit 最大空闲块优先分配 大分区被切碎,难以重用
First Fit 首个满足的空闲块 下方形成小碎片较多

题目:

某计算机采用二级页表的分页存储管理方式,按字节编址,页大小为 \(2^{10}\) B(字节),页表项大小为 2B。逻辑地址结构如下:

页目录号 | 页号 | 页内偏移量

已知逻辑地址空间大小为 \(2^{16}\),则整个逻辑地址空间的页目录表中包含的表项个数至少是( )。

A. 64 B. 128 C. 256 D. 512


✅ 正确答案:B. 128


【解析】:

我们来逐步分析:

🔹1. 一页能存储多少个页表项?

  • 每个页表项大小为 2B
  • 每页大小是 \(2^{10}\)B
  • 所以一页可以存储的页表项数:

\[ \frac{2^{10}}{2} = 2^9 = 512 \text{ 个页表项} \]


🔹2. 总共需要多少个页表项?

题干说:“逻辑地址空间大小为 \(2^{16}\) ”,说明:

逻辑空间不是按字节计,而是指有 \(2^{16}\) 页(而不是 \(2^{16}\) 字节)

因此,需要的页表项数就是 \(2^{16}\) 个。


🔹3. 一个页表页能装 512 个页表项,需要多少页来装下所有页表项?

\[ \frac{2^{16}}{2^9} = 2^7 = 128 \text{ 页} \]


🔹4. 二级页表中,一级页目录存储每个“页表页”的地址,每个目录项对应一个页表页。

所以,页目录中需要的表项个数 = 页表页的数量 = 128


✅ 因此,本题答案为:B. 128

题目:

设文件索引节点中有 7 个地址项,其中 4 个地址项是直接地址索引,2 个地址项是一级间接地址索引,1 个地址项是二级间接地址索引。每个地址项大小为 4B,若磁盘索引块和磁盘数据块大小均为 256B,则可表示的单个文件最大长度是( )。

A. 33KB B. 519KB C. 1057KB D. 16516KB


✅ 正确答案:C. 1057KB


【解析】:

✅ 1. 每个索引块可容纳的地址项数:

块大小为 256B,每个地址项大小为 4B:

\[ \frac{256}{4} = 64 \text{ 个地址项} \]


✅ 2. 文件最大长度由三类地址索引构成:


📌 直接地址(4 项):

每个直接地址项可指向一个数据块:

\[ 4 \times 256 = 1024B \]


📌 一级间接地址(2 项):

每个一级间接地址项可指向一个索引块,该索引块含 64 项,每项再指向一个数据块:

\[ 2 \times 64 \times 256 = 32768B \]


📌 二级间接地址(1 项):

一个二级间接地址项指向一个一级索引块,该块中有 64 项,每项再指向一个一级间接索引块,每个一级索引块又能指向 64 个数据块:

\[ 1 \times 64 \times 64 \times 256 = 1048576B \]


✅ 3. 总长度:

\[ 1024 + 32768 + 1048576 = 1082368B = \frac{1082368}{1024} = 1057KB \]


✅ 答案:C. 1057KB


【公式总结】:

设:

  • 块大小:\(x\)
  • 地址项大小:\(y\)
  • 每块地址项数:\(\frac{x}{y}\)
  • \(n_i\):第 \(i\) 级索引的地址项个数(0级为直接地址)

则最大文件长度为:

\[ \sum_{i=0}^{k} n_i \cdot \left(\frac{x}{y}\right)^i \cdot x \]


以下是整理后的题目、选项、答案与解析:


题目:

设置当前工作目录的主要用途是( )。

A. 节省外存空间 B. 节省内存空间 C. 加快文件的检索速度 D. 加快文件的读/写速度


✅ 正确答案:C. 加快文件的检索速度


【解析】:

设置当前工作目录(或称当前目录)是指在操作系统中将当前目录路径指向某个特定的目录。这样,操作系统就能够更快地在该目录下找到文件,而不需要每次都输入完整的路径。通过减少路径查找的复杂性,可以提高文件的检索速度。

例如,在Linux系统中,使用命令 cd 来切换工作目录,一旦进入目标目录,就可以直接访问该目录下的文件,避免每次都写全路径。

  • 选项A:设置当前工作目录并不会节省外存空间,外存空间是由文件的大小和数量决定的。
  • 选项B:设置当前工作目录并不会影响内存空间的使用,内存空间主要与程序执行和数据存储有关。
  • 选项D:设置当前工作目录本身并不会加速文件的读/写速度,它影响的是文件检索的速度,而不是具体的读写操作。

✅ 答案:C. 加快文件的检索速度


题目:

本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是( )。

A. 命令解释程序 B. 中断处理程序 C. 系统调用服务程序 D. 用户登录程序


✅ 正确答案:B. 中断处理程序


【解析】:

当用户在键盘上输入信息时,键盘控制器会通过硬件检测到按键动作,并发出一个中断信号。操作系统中的中断处理程序会首先响应这个中断信号,接着处理用户输入的数据。

  • 选项A:命令解释程序用于解析和执行用户输入的命令,但它并不会直接处理键盘输入。
  • 选项C:系统调用服务程序提供系统服务的接口,但它不是处理输入事件的程序。
  • 选项D:用户登录程序用于管理用户的身份认证和登录过程,但不是直接负责接收键盘输入的程序。

中断处理程序负责响应和处理硬件中断信号,因此它首先会捕捉到键盘的输入。


✅ 答案:B. 中断处理程序


磁盘调度


题目:

45.(7分)

假设计算机系统采用CSCAN(循环扫描)磁盘调度策略,使用2KB的内存空间记录16384个磁盘块的空闲状态。

(1) 请说明在上述条件如何进行磁盘块空闲状态的管理。

(2) 设某单面磁盘的旋转速度为6000rpm,每个磁道有100个扇区,相邻磁道间的平均移动时间为1ms。若在某时刻,磁头位于100号磁道处,并沿着磁道号增大的方向移动(见下图),磁道号的请求队列为50, 90, 30, 120,对请求队列中的每个磁道需读取1个随机分布的扇区,则读完这个扇区点共需要多少时间?需要给出计算过程。

(3) 如果将磁盘替换为随机访问的Flash半导体存储器(如U盘、SSD等),是否有比CSCAN更高效的磁盘调度策略?若有,给出磁盘调度策略的名称并说明理由;若无,说明理由。


答案与解析:

(1) 磁盘块空闲状态的管理:

采用位图表示磁盘块的空闲状态。每个磁盘块对应一个位,若该位为0,则表示该磁盘块空闲;若该位为1,则表示该磁盘块已被占用。由于总共有16384个磁盘块,因此需要16384个位,等于16384bit。每8个位占用1字节,因此总共需要16384bit / 8 = 2048字节 = 2KB的内存空间来记录所有磁盘块的空闲状态。


(2) 计算磁盘请求的响应时间:

  • 磁头初始位置:100号磁道
  • 磁道请求队列:50, 90, 30, 120
  • 磁盘旋转速度:6000rpm = 100r/s
  • 每个磁道有100个扇区
  • 相邻磁道间的平均移动时间:1ms

模拟过程:

  1. 初始磁头在100号磁道,沿增大方向移动。

  2. 访问顺序(根据CSCAN策略,磁头从当前位置向一个方向扫描):

    • 访问磁道120,磁头从100号磁道移动到120号磁道,移动磁道数为:120 - 100 = 20
    • 然后磁头移动到30号磁道(到达最大磁道后循环回到最小磁道),移动磁道数为:120 - 30 = 90
    • 最后磁头移动到50号磁道,移动磁道数为:90 - 50 = 40
    • 最后磁头移动到90号磁道,移动磁道数为:90 - 50 = 60

磁道移动时间

  • 总的磁道移动数 = 20 + 90 + 60 = 170个磁道
  • 每个磁道移动时间为1ms,所以磁道移动总时间为:170 × 1ms = 170ms

旋转延迟时间

  • 磁盘转速为6000rpm = 100r/s,平均每个磁道的旋转延迟时间为:1 / (2 × 100r/s) = 5ms
  • 需要访问4个扇区,总的旋转延迟时间为:5ms × 4 = 20ms

旋转延迟为转一圈的一半!

磁盘读取时间

  • 每个磁道有100个扇区,读取1个扇区的时间为:1 / (100r/s) = 0.01ms
  • 读取4个扇区,总的磁盘读取时间为:0.01ms × 4 = 0.04ms

总响应时间

  • 磁道移动时间:170ms
  • 旋转延迟时间:20ms
  • 磁盘读取时间:0.04ms

所以,总的响应时间为:170ms + 20ms + 0.04ms = 190.04ms


(3) 使用Flash存储器时更高效的调度策略:

如果将磁盘替换为随机访问的Flash半导体存储器(如U盘、SSD等),由于Flash存储器没有寻道时间和旋转延迟时间,因此不再需要考虑像CSCAN那样的磁盘调度策略。

更高效的磁盘调度策略

  • FCFS(先来先服务):在Flash存储器中,由于所有存储块的访问时间基本相同,并且没有寻道延迟,使用先来先服务(FCFS)调度策略将更加高效。FCFS是最简单且能有效利用存储器特性的调度策略。

理由

  • Flash存储器的随机访问特性使得无论请求的顺序如何,访问时间几乎相同,因此不需要复杂的磁盘调度策略。FCFS直接根据I/O请求的顺序来服务请求,避免了磁盘寻道和旋转延迟带来的额外开销。

总结

  1. 空闲状态管理:使用2KB内存空间的位图记录磁盘块的空闲状态。
  2. CSCAN调度计算:磁头总共需要移动170个磁道,旋转延迟和磁盘读取时间分别为20ms和0.04ms,总响应时间为190.04ms。
  3. Flash存储器:使用FCFS调度策略,因其具有随机访问特性,避免了寻道和旋转延迟。

分页与调度

问题

设某计算机的逻辑地址空间和物理地址空间均为64KB,按字节编址。若某进程最多需要6页(Page)数据存储空间,页的大小为1KB,操作系统采用固定分配局部置换策略为此进程分配4个页框(Page Frame)。在时刻260前该进程访问情况见下表(访问位即使用位)。

页号 页框号 装入时间 访问位
0 7 130 1
1 4 230 1
2 2 200 1
3 9 160 1

当该进程执行到时刻260时,要访问逻辑地址为17CAH的数据。请回答下列问题:

  1. 该逻辑地址对应的页号是多少?
  2. 若采用先进先出 (FIFO) 置换算法,该逻辑地址对应的物理地址?要求给出计算过程。
  3. 采用时钟 (CLOCK) 置换算法,该逻辑地址对应的物理地址是多少?要求给出计算过程(设搜索下一页的指针按顺时针方向移动,且指向当前2号页框,示意图如下图)。

解答

(1) 该逻辑地址对应的页号是多少?

逻辑地址格式:

  • 逻辑地址空间大小为64KB(216字节),页大小为1KB(210字节)。

  • 逻辑地址格式分为两部分:页号(高6位)和页内地址(低10位)。

    • 页号 = 逻辑地址的高6位。
    • 页内地址 = 逻辑地址的低10位。

给定逻辑地址:17CAH

  1. 转换为二进制: 17CAH = 1 0111 1100 1010B

  2. 提取页号和页内地址:

    • 页号:从左数第1至第6位为“000101B”,即页号为5。
    • 页内地址:剩余的10位为“111001010B”,即页内地址为0x1CA。

因此,逻辑地址17CAH对应的页号为5。


(2) 若采用先进先出 (FIFO) 置换算法,该逻辑地址对应的物理地址?

FIFO置换算法:

  • 在FIFO中,替换装入时间最早的页。
  • 进程最多有4个页框,已有的页框和页号、装入时间如下表所示:
页号 页框号 装入时间 访问位
0 7 130 1
1 4 230 1
2 2 200 1
3 9 160 1

过程:

  • FIFO策略下,最早装入的是0号页(装入时间130)。
  • 因此,0号页将被替换,装入5号页。

替换后的状态:

页号 页框号 装入时间 访问位
5 7 260 1
1 4 230 1
2 2 200 1
3 9 160 1

物理地址计算:

  • 页框号7(000111B),页内地址0x1CA(111001010B)。
  • 拼接后得到物理地址: 物理地址 = 页框号 + 页内地址 = 7 (000111B) + 0x1CA (111001010B) = 1FCAH

因此,物理地址为1FCAH。


(3) 采用时钟 (CLOCK) 置换算法,该逻辑地址对应的物理地址是多少?

时钟置换算法:

  • 时钟算法通过一个指针指向当前的页框,每当发生页面访问时,检查该页框的使用位。
  • 如果使用位为0,替换该页;如果使用位为1,重置使用位并将指针移到下一个页框。
  • 初始时,指针指向2号页框。

进程访问情况:

  • 当前指针指向2号页框,指针搜索按顺时针方向移动。

时钟置换过程:

  1. 指针指向2号页框,使用位为1,指针指向下一个页框(3号页框)。
  2. 指针指向3号页框,使用位为1,指针指向下一个页框(7号页框)。
  3. 指针指向7号页框,使用位为0,替换7号页。

替换后的状态:

页号 页框号 装入时间 访问位
0 7 130 0
1 4 230 0
5 2 260 1
3 9 160 0

物理地址计算:

  • 页框号2(000010B),页内地址0x1CA(111001010B)。
  • 拼接后得到物理地址: 物理地址 = 页框号 + 页内地址 = 2 (000010B) + 0x1CA (111001010B) = 0BCAH

因此,物理地址为0BCAH。


总结

  1. 该逻辑地址对应的页号是: 5
  2. FIFO置换算法下,该逻辑地址对应的物理地址是: 1FCAH
  3. 时钟置换算法下,该逻辑地址对应的物理地址是: 0BCAH