2012年408真题操作系统篇

选择题

问题 1:下列选项中,不可能在用户态发生的事件是( )。

A. 系统调用
B. 外部中断
C. 进程切换
D. 缺页

解答:

本题考察的是“在用户态发生”的事件,而不是“在用户态执行”的事件。

  • A. 系统调用:系统调用是由用户态程序主动发起的请求,用于请求操作系统提供特权操作或资源访问权限。用户态程序可以通过系统调用接口向操作系统发起请求并执行相应的内核函数,因此系统调用是可能在用户态发生的。
  • B. 外部中断:外部中断是由外部设备或事件触发的中断请求,通常在用户态发生并通过内核处理。虽然外部中断通常由硬件引起,但触发和响应过程可能发生在用户态。因此,外部中断可以发生在用户态。
  • C. 进程切换:进程切换是由操作系统调度器根据调度策略从一个运行的进程切换到另一个进程的操作。用户态程序无法直接触发进程切换,程序只能通过系统调用接口向操作系统发送请求,由操作系统在内核态处理这些请求,进程切换实际上发生在内核态。因此,进程切换不能在用户态发生。
  • D. 缺页:缺页是指程序访问的内存页不在物理内存中,需要通过页表映射和磁盘交换等机制从磁盘加载到内存。当用户态程序访问缺页时,处理器触发缺页异常并由操作系统在内核态进行处理,因此缺页是可能由用户态程序引发并由内核态处理的。

正确答案:C. 进程切换

问题 2:中断处理和子程序调用都需要压栈以保护现场,中断处理一定会保存而子程序调用不需要保存其内容的是( )。

A. 程序计数器
B. 程序状态字寄存器
C. 通用数据寄存器
D. 通用地址寄存器

解答:

中断处理和子程序调用都涉及压栈操作以保护现场,但它们保存的内容有所不同。

  • A. 程序计数器:无论是中断处理还是子程序调用,程序计数器都需要保存。因为它记录了程序的执行位置,确保在中断或子程序执行完毕后能够恢复到正确的位置。
  • B. 程序状态字寄存器:中断处理时,程序状态字寄存器必须保存,因为它包含了程序的状态信息,如标志位等。子程序调用时,程序状态字寄存器的内容通常不需要保存,因为子程序调用并不会影响程序的状态字。
  • C. 通用数据寄存器:在中断处理和子程序调用过程中,通用数据寄存器通常都需要保存,以防止数据丢失,确保执行状态的一致性。
  • D. 通用地址寄存器:类似通用数据寄存器,通用地址寄存器在中断处理和子程序调用中都需要保存。

正确答案:B. 程序状态字寄存器

问题 25:下列关于虚拟存储器的叙述中,正确的是( )。

A. 虚拟存储只能基于连续分配技术
B. 虚拟存储只能基于非连续分配技术
C. 虚拟存储容量只受外存容量的限制
D. 虚拟存储容量只受内存容量的限制

解答:

虚拟存储器是操作系统的一项重要特性,它使得程序和数据不需要全部加载到物理内存中,而是通过将内存和外存结合起来,按需调入数据。

  • A. 虚拟存储只能基于连续分配技术:错误。虚拟存储器并不依赖于连续的物理内存,它可以基于非连续的内存分配技术,比如分页或分段。
  • B. 虚拟存储只能基于非连续分配技术:正确。虚拟存储器通常采用非连续的内存分配技术(如分页和分段)来映射虚拟地址到物理内存。这使得内存使用更为灵活且有效。
  • C. 虚拟存储容量只受外存容量的限制:错误。虚拟存储容量不仅受外存容量的限制,还受到计算机地址结构的限制,即虚拟地址空间的大小。
  • D. 虚拟存储容量只受内存容量的限制:错误。虚拟存储器的容量与物理内存无关,主要受限于虚拟地址空间和可用磁盘空间。

正确答案:B. 虚拟存储只能基于非连续分配技术


问题 26:用户程序发出磁盘I/O请求后,系统的正确处理流程是操作系统的I/O子系统通常由四个层次组成,每一层明确定义了与邻近层次的接口。其合理的层次组织排列顺序是( )。

A. 用户级I/O软件、设备无关软件、设备驱动程序、中断处理程序
B. 用户级I/O软件、设备无关软件、中断处理程序、设备驱动程序
C. 用户级I/O软件、设备驱动程序、设备无关软件、中断处理程序
D. 用户级I/O软件、中断处理程序、设备无关软件、设备驱动程序

解答:

磁盘I/O请求的处理流程通常分为几个层次,每个层次负责不同的任务。以下是正确的层次顺序:

  • 用户级I/O软件:这是用户程序向操作系统发出的请求,通常通过系统调用进行。
  • 设备无关软件:负责处理与具体设备无关的操作,如I/O请求的调度、缓冲区管理等。
  • 设备驱动程序:负责具体设备的控制和数据传输。
  • 中断处理程序:处理硬件中断,通知操作系统设备的状态变化,或者数据已经准备好。

所以,正确的处理流程顺序是 A. 用户级I/O软件、设备无关软件、设备驱动程序、中断处理程序

正确答案:A. 用户级I/O软件、设备无关软件、设备驱动程序、中断处理程序

问题 27:假设5个进程P0、P1、P2、P3、P4共享三类资源R1、R2、R3,这些资源总数分别为18、6、22。T0时刻的资源分配情况如下表所示,此时存在的一个安全序列是( )。

A. P0, P2, P4, P1, P3
B. P1, P0, P3, P4, P2
C. P2, P1, P0, P3, P4
D. P3, P4, P2, P1, P0

解答:

这道题考察的是 银行家算法,用于判断资源分配是否处于安全状态。

img

步骤如下:

  1. 资源分配情况表转换
    根据题目中给出的进程资源分配情况,先将表格转化为已分配资源尚需资源可用资源三栏。
    • 已分配资源:是系统当前已分配给各个进程的资源数量。
    • 尚需资源:是各个进程尚需的资源数量,计算方式为:进程的最大需求 - 已分配资源。
    • 可用资源:是系统中尚未分配的资源数量,计算方式为:总资源数 - 已分配资源总和。
  2. 应用银行家算法
    银行家算法的核心思想是判断当前的可用资源是否能够满足某个进程的尚需资源。如果可以,假设该进程完成任务并释放它已分配的资源,再更新可用资源,继续尝试满足其他进程。依次进行,直到所有进程都能被安全地完成,形成一个安全序列。
  3. 模拟选择的安全序列
    通过选项逐一进行模拟,计算是否能够形成一个安全序列。若能成功完成进程的执行且每次都能满足尚需资源,则该序列是安全的。

根据模拟和比较,只有选项 D. P3, P4, P2, P1, P0 能够满足银行家算法的安全性条件,因此是正确答案。

正确答案:D. P3, P4, P2, P1, P0

问题 28:若一个用户进程通过 read 系统调用读取一个磁盘文件中的数据,则下列关于此过程的叙述中,正确的是( )。

Ⅰ. 若该文件的数据不在内存中,则该进程进入睡眠等待状态
Ⅱ. 请求 read 系统调用会导致 CPU 从用户态切换到核心态
Ⅲ. read 系统调用的参数应包含文件的名称

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

解答:

  • Ⅰ正确:如果文件的数据不在内存中,操作系统会触发一个页面缺失中断,将文件数据从磁盘加载到内存。这时,进程会进入睡眠等待状态(阻塞态),直到数据准备好并加载到内存中,操作系统会唤醒进程并继续执行。
  • Ⅱ正确read 系统调用涉及文件的访问,因此会导致用户态程序切换到核心态,操作系统内核会进行磁盘I/O操作或从缓存中读取数据,之后将控制权交还给用户程序。
  • Ⅲ错误read 系统调用的参数包括文件描述符(file descriptor),而不是文件的名称。文件描述符是操作系统为每个打开的文件分配的一个整数,它标识了文件的唯一性。read 系统调用的参数包括:文件描述符、缓冲区以及要读取的字节数。

综上所述,正确答案是 A. 仅Ⅰ、Ⅱ


问题 29:一个多道批处理系统中仅有 P1 和 P2 两个作业,P2 比 P1 晚 5ms 到达,它们的计算和 I/O 操作顺序如下:

P1:计算 60ms,I/O 80ms,计算 20ms
P2:计算 120ms,I/O 40ms,计算 40ms

若不考虑调度和切换时间,则完成两个作业需要的时间最少是( )。

A. 240ms
B. 260ms
C. 340ms
D. 360ms

解答:

绘制甘特图并分析执行过程
• $0 - 60ms$:

$P1$先到达系统,此时间段内$P1$占用$CPU$进行计算,执行$60ms$的计算任务。
• $60 - 140ms$:

$P1$的$CPU$计算任务完成后,开始进行$I/O$操作,持续$80ms$。在$P1$进行$I/O$操作的同时,$P2$在$5ms$时到达系统,由于$P1$正在进行$I/O$操作,$CPU$空闲,所以$P2$在$60ms$时开始占用$CPU$进行计算。
• $140 - 180ms$:

$P1$的$I/O$操作在$140ms$时完成,此时$P2$仍在占用$CPU$进行计算($P2$已经计算了$140 - 60 = 80ms$,还需计算$120 - 80 = 40ms$)。$P1$的$I/O$操作结束后,$CPU$空闲,等待$P2$完成当前的$CPU$计算任务。
• $180 - 220ms$:

$P2$在$180ms$时完成$120ms$的$CPU$计算任务,开始进行$I/O$操作,持续$40ms$。此时$CPU$空闲。
• $220 - 260ms$:

$P2$的$I/O$操作在$220ms$时完成,开始进行最后$40ms$的$CPU$计算任务,到$260ms$时,$P2$的所有任务执行完毕。同时,在$P2$进行$I/O$操作和最后$CPU$计算任务的过程中,$P1$一直处于空闲状态。

从上述分析可知,完成两个作业需要的时间最少是$260ms$。

综上,答案选B。

问题 30

若某单处理器多进程系统中有多个就绪态进程,则下列关于处理机调度的叙述中,错误的是( )。

A. 在进程结束时能进行处理机调度
B. 创建新进程后能进行处理机调度
C. 在进程处于临界区时不能进行处理机调度
D. 在系统调用完成并返回用户态时能进行处理机调度


解答:

  • A 正确:进程结束后,处理器空闲,系统会调度新的就绪进程来继续运行。
  • B 正确:创建新进程(如 fork())可能会改变就绪队列的内容,操作系统可选择进行调度。
  • C 错误即使进程处于临界区,仍然可以发生调度。 进程进入临界区通常会通过禁止中断、自旋锁或信号量等方式来保证互斥访问,但这并不代表不能发生调度。特别是在抢占式系统中,中断可以打断临界区代码,进行上下文切换,这是操作系统必须处理的情形。
  • D 正确:系统调用完成后返回用户态,是一个典型的调度点,系统可以选择是否切换进程。

本题答案:C


问题 31

下列关于进程和线程的叙述中,正确的是( )。

A. 不管系统是否支持线程,进程都是资源分配的基本单位
B. 线程是资源分配的基本单位,进程是调度的基本单位
C. 系统级线程和用户级线程的切换都需要内核的支持
D. 同一进程中的各个线程拥有各自不同的地址空间


解答:

  • A 正确:进程是资源分配的基本单位,不管是否支持线程,这一点始终不变。线程只能存在于进程中,共享进程的资源。
  • B 错误:线程是调度的基本单位,而进程是资源分配的基本单位。这两个定义不能颠倒。
  • C 错误系统级线程(如 Linux 的 kernel thread)需要内核支持来进行切换;但用户级线程的切换可以在用户空间完成,不需要内核干预。
  • D 错误:同一进程中的多个线程是共享地址空间的,它们能访问相同的代码段、数据段、堆和文件描述符等。

本题答案:A

问题 32

下列选项中,不能改善磁盘设备 I/O 性能的是( )。

A. 重排 I/O 请求次序
B. 在一个磁盘上设置多个分区
C. 预读和滞后写
D. 优化文件物理块的分布


解答:

  • A. 重排 I/O 请求次序 ✅ 能提升性能。
    操作系统可以使用 电梯算法(SCAN)、最短寻道时间优先(SSTF) 等调度策略对 I/O 请求进行重排,从而 减少磁头的移动距离与寻道时间,提升 I/O 性能。
  • B. 在一个磁盘上设置多个分区不能直接改善性能。
    分区是为了 逻辑管理和组织数据,虽然有助于系统的管理和启动过程,但它 不会减少磁头的寻道时间或提高数据传输速率,因此对 I/O 性能提升几乎没有实际作用。
  • C. 预读和滞后写 ✅ 能提升性能。
    • 预读(Read-ahead):提前将即将使用的数据加载到缓存中,减少等待时间。
    • 滞后写(Write-behind):将写请求暂时缓存在内存中,等闲时再批量写入磁盘,减少频繁的小写操作,提高效率。
  • D. 优化文件物理块的分布 ✅ 能提升性能。
    文件系统通过把文件的物理块安排在磁盘上相邻位置,可减少寻道时间与旋转延迟,从而提高读取效率。

本题答案:B

分页系统

题目 45(7分)

某请求分页系统的局部页面置换策略如下:

  • 系统从0时刻开始,每隔5个时间单位进行一次扫描(5, 10, 15…);
  • 每轮扫描中,未被访问过的页框将被回收(访问位为0),放入空闲页框链尾,内容不清除;
  • 若发生缺页:
    • 若所需页仍在空闲页框链中,则可直接用它;
    • 否则,从空闲链头部取一个页框。

初始空闲页框链:32 → 15 → 21 → 41
进程P的访问序列:
<1,1>、<3,2>、<0,4>、<0,6>、<1,11>、<0,13>、<2,14>


(1) 访问 <0, 4> 时,对应的页框号是?

  • 此前访问了页1(1号页)和页3(3号页),使用了32、15;
  • 当前访问页0,还未分配页框,继续从空闲链分配;
  • 当前空闲页框链为:21 → 41,取 21

答案:(1) 页框号为 21


(2) 访问 <1, 11> 时,对应的页框号是?说明理由

  • 之前,页1分配给了32,在5、10两个扫描点中页1都未被访问,因此其页框被回收到空闲链;
  • 当前时间为11,系统在时间10刚刚进行过一轮扫描;
  • 在扫描中,页32因未被访问,被回收到空闲链
  • 再次访问页1时,发现页1曾用过的页框32 仍在空闲链中,则重新用它。

答案:(2) 页框号为 32
理由:页1曾用页框32,该页框尚未清空且仍在空闲链中,故直接复用。


(3) 访问 <2, 14> 时,对应的页框号是?说明理由

  • 页2此前从未被访问;
  • 当前系统时间为14,仍处于10~15之间,属于第三轮;
  • 页2不在驻留集,也不在空闲链的“已用”记录中;
  • 所以需从空闲页框链头部分配新的页框;
  • 当前空闲链是:41 → …,取 41

答案:(3) 页框号为 41
理由:页2是新页,不在驻留集,也未曾使用过,从空闲链头部取页框。


(4) 该策略是否适合时间局部性好的程序?说明理由

答案:适合
理由:
该策略可以保留近期使用过的页在驻留集中;即使它们被回收,也可能仍保留在空闲链中。当它们再次被访问时可以快速复用,有效降低缺页率,这正是时间局部性强的程序的典型访问模式


✅ 汇总答案:

(1) 页框号为 21
(2) 页框号为 32,理由:复用旧页框
(3) 页框号为 41,理由:从空闲链头分配新页框
(4) 该策略适合时间局部性好的程序,理由:可复用最近使用过的页框,有利于降低缺页率。

文件系统

一个文件系统空间最大容量为 4TB(1TB = 2⁴⁰ B),以磁盘块为单位,磁盘块大小为 1KB。FCB(文件控制块)中有 512B 的索引表区。


(1) 若索引表区仅采用直接索引结构,回答以下问题:

问题:

  • 每个索引表项最少占多少字节?
  • 能支持的单个文件最大长度是多少?

答案:

  • 最少占用字节数:4字节
  • 最大单个文件长度:128KB

✏️ 解释:

  • 总容量:4TB = 2⁴² B;每块 1KB = 2¹⁰ B
    所以总磁盘块数 = 2⁴² / 2¹⁰ = 2³² 个磁盘块
  • 要表示最多 2³² 个磁盘块的编号,块号至少要占 32 位 = 4 字节
    所以:每个索引项至少 4 字节
  • 索引表区大小 = 512B ⇒ 最多可存 512 / 4 = 128 个索引项
  • 每个索引项指一个 1KB 块 ⇒ 最大文件大小 = 128 × 1KB = 128KB

(2) 若采用以下索引结构:

  • 第 0~7 字节用于记录起始块号 + 块数:
    • 起始块号占 6B,块数占 2B;
  • 剩余 504B 用于直接索引;
    • 每个索引项占 6B。

问题:

  • 可支持的最大文件长度是多少?

答案:

  • 最大单个文件长度:84KB + 2¹⁶ KB = 65620KB
  • 合理的起始块号与块数字节数分配:起始块号占 6B,块数占 2B

✏️ 解释:

  1. 预分配部分(起始块号 + 块数):
    • 块数占 2B = 16 位 ⇒ 最多表示 2¹⁶ = 65536 个块
    • 每块 1KB ⇒ 可预分配最大连续空间 = 65536 × 1KB = 65536KB
  2. 剩余部分:504B / 6B = 84 项直接索引
    • 每项指 1KB ⇒ 直接索引部分 = 84 × 1KB = 84KB
  3. 总文件最大长度 = 65536KB + 84KB = 65620KB