2013年408真题操作系统篇

选择


23. 用户在删除某文件的过程中,操作系统不可能执行的操作是( )。

选项:
A. 删除此文件所在的目录
B. 删除与此文件关联的目录项
C. 删除与此文件对应的文件控制块
D. 释放与此文件关联的内存缓冲区


答案:A


✏️ 解释:

  • A. 删除此文件所在的目录:❌
    删除一个文件不应删除其所在目录,因为该目录可能还包含其他文件。如果操作系统删除了整个目录,则会造成其他文件也无法访问,这是不合理且不允许的操作,因此这是操作系统不可能执行的操作。
  • B. 删除与此文件关联的目录项:✔️
    删除文件时,操作系统会删除目录中的对应目录项,这是合理的行为。
  • C. 删除与此文件对应的文件控制块(FCB):✔️
    删除文件时会释放相关资源,包括文件控制块(FCB)
  • D. 释放与此文件关联的内存缓冲区:✔️
    删除文件时,内存中用于缓存该文件数据的缓冲区会被释放,以回收内存资源。

最终答案:A


24. 为支持 CD-ROM 中视频文件的快速随机播放,播放性能最好的文件数据块组织方式是( )。

选项:
A. 连续结构
B. 链式结构
C. 直接索引结构
D. 多级索引结构


答案:A


✏️ 解释:

  • CD-ROM(光盘)具有顺序访问特性,即:
    • 寻道和旋转延迟时间较长
    • 随机访问代价较高;
    • 因此,连续读写性能最好
  • A. 连续结构:✔️
    文件数据块在物理上连续排列,可以快速顺序或随机定位任意块,非常适合用于 CD-ROM 上的视频播放。
  • B. 链式结构:❌
    每个块包含指向下一个块的指针,需要顺序读取、无法高效随机访问
  • C. 直接索引结构:❌
    虽然支持一定程度的随机访问,但物理块可能分散,光盘读取效率差
  • D. 多级索引结构:❌
    支持大文件访问,但结构复杂,查找路径长,不适合光盘这种顺序访问设备

最终答案:A


25. 用户程序发出磁盘 I/O 请求后,系统的处理流程是:用户程序 → 系统调用处理程序 → 设备驱动程序 → 中断处理程序。其中,计算数据所在磁盘的柱面号、磁头号、扇区号的程序是( )。

选项:
A. 用户程序
B. 系统调用处理程序
C. 设备驱动程序
D. 中断处理程序


答案:C. 设备驱动程序


✏️ 解释:

  • 用户程序(A):仅发出I/O请求,不负责计算磁盘物理地址。
  • 系统调用处理程序(B):负责把请求传入内核,转给设备驱动,但不处理硬件细节。
  • 设备驱动程序(C):✔️ 负责将逻辑地址转换为物理地址(柱面号、磁头号、扇区号),这是它控制硬件的职责。
  • 中断处理程序(D):响应设备完成I/O后的中断信号,用于收尾处理,而不是负责计算物理位置。

正确答案:C


26. 若某文件系统索引结点 (inode) 中有直接地址项和间接地址项,则下列选项中,与单个文件长度无关的因素是( )。

选项:
A. 索引结点的总数
B. 间接地址索引的级数
C. 地址项的个数
D. 文件块大小


答案:A. 索引结点的总数


✏️ 解释:

设:

  • 每个文件块大小为 x 字节;
  • 每个地址项大小为 y 字节;
  • inode 中的地址项个数为 n
  • 有 k 级间接索引(含直接索引为第0级);

那么一个文件最大长度约为:


  • A. 索引结点的总数:✔️
    描述的是整个系统中inode的数量,决定了系统最多可有多少文件与单个文件长度无关

  • B. 间接地址索引的级数:❌
    越多级索引,可寻址的数据块越多,影响单个文件能有多长

  • C. 地址项的个数:❌
    指inode中存储地址的项数,越多能寻址的块越多,影响文件最大长度

  • D. 文件块大小:❌
    每块存储的数据量,直接乘在上式中,影响文件最大可存储的数据量


✅ **正确答案:A


27.

设系统缓冲区和用户工作区均采用单缓冲,从外设读入 1 个数据块到系统缓冲区的时间为 100,从系统缓冲区读入 1 个数据块到用户工作区的时间为 5,对用户工作区中的 1 个数据块进行分析的时间为 90,如下图所示。

进程从外设读入并分析 2 个数据块的最短时间是( )。

选项:
A. 200
B. 295
C. 300
D. 390


答案:C. 300


✏️ 解释:

给定时间:

  • 外设 → 系统缓冲区:T = 100
  • 缓冲区 → 用户工作区:M = 5
  • 分析用户工作区数据:C = 90

使用 单缓冲 + 连续处理 + 2 个数据块,我们可以使用如下通用公式:

代入:

  • n = 2(两个数据块)
  • T = 100, M = 5, C = 90
  • $\max(C, T) = \max(90, 100) = 100$

正确答案:C


28.

下列选项中,会导致用户进程从用户态切换到内核态的操作是( )。

I. 整数除以零
II. sin() 函数调用
III. read 系统调用

选项:
A. 仅 I、II
B. 仅 I、III
C. 仅 II、III
D. I、II 和 III


答案:B. 仅 I、III


✏️ 解释:

  • I. 整数除以零:✔️ 正确
    这是 硬件异常,CPU 会产生中断请求,进入内核态由内核处理。

  • II. sin() 函数:❌ 错误
    这是标准数学库函数,仅在用户态运行,不涉及系统调用或内核操作。

  • III. read 系统调用:✔️ 正确
    read() 是典型的 系统调用,需要操作系统协助访问 I/O 资源,必须从用户态切换到内核态。


正确答案:B


29.

计算机开机后,操作系统最终被加载到( )。

选项:
A. BIOS
B. ROM
C. EPROM
D. RAM


答案:D. RAM


✏️ 解释:

开机流程如下:

  1. BIOS(基本输入输出系统)存在于 ROM 中,是最先执行的固件代码,负责完成自检(POST)和引导加载(Bootstrapping)
  2. BIOS 会查找引导设备(如硬盘、U盘、光盘等),读取其 引导扇区(Boot Sector) 中的引导程序。
  3. 引导程序被加载进 RAM 中并执行,它的任务是继续加载操作系统核心
  4. 操作系统被逐步加载进 RAM(随机存取存储器),最终在 RAM 中运行。

🔎 所以:

  • BIOS/ROM/EPROM 仅负责启动和引导,不是操作系统运行的地方。
  • 操作系统最终必须被加载到 RAM 中才能运行。

正确答案:D


30.

若用户进程访问内存时产生缺页,则下列选项中,操作系统可能执行的操作是( )。

I. 处理越界错
II. 置换页
III. 分配内存

选项:
A. 仅 I、II
B. 仅 II、III
C. 仅 I、III
D. I、II 和 III


答案:B. 仅 II、III


✏️ 解释:

缺页是指访问的页面当前不在物理内存中,操作系统需要处理:

  • I. 处理越界错:❌ 错误
    越界错误是程序试图访问它不被允许访问的地址,属于非法访问,不是缺页处理的一部分。
  • II. 置换页:✔️ 正确
    如果物理内存已满,需要将一个页面换出(页置换),使用如 FIFO、LRU 等页面置换算法。
  • III. 分配内存:✔️ 正确
    如果物理内存中还有空闲帧,操作系统可直接分配一页帧来加载所需页面。

正确答案:B


31.

某系统正在执行三个进程 P1、P2 和 P3,各进程的计算 (CPU) 时间和 I/O 时间比例如下:

进程 计算时间占比 I/O时间占比
P1 90% 10%
P2 50% 50%
P3 15% 85%

为提高系统资源利用率,合理的进程优先级设置应为( )。

选项:
A. P1 > P2 > P3
B. P3 > P2 > P1
C. P2 > P1 = P3
D. P1 > P2 = P3


答案:B. P3 > P2 > P1


✏️ 解释:

优先级策略中有一个重要原则:I/O 密集型进程优先级应高于 CPU 密集型进程,原因是:

  • I/O 密集型进程往往只需要很少的 CPU 时间,但大量时间等待 I/O,如果不及时处理,可能导致 I/O 设备空闲、CPU 也空闲,浪费资源。
  • 提高其优先级可加快它的调度,从而在等待 I/O 时尽快释放 CPU,提高整体并发性和资源利用率。

分析本题:

  • P1:90% CPU 密集 → 最低优先级
  • P2:50% / 50% → 中等
  • P3:85% I/O 密集 → 最高优先级

因此合理的优先级设置应为:P3 > P2 > P1


✅ 正确答案:B


32.

下列关于银行家算法的叙述中,正确的是( )。

选项:
A. 银行家算法可以预防死锁
B. 当系统处于安全状态时,系统中一定无死锁进程
C. 当系统处于不安全状态时,系统中一定会出现死锁进程
D. 银行家算法破坏了死锁必要条件中的“请求和保持”条件


答案:B. 当系统处于安全状态时,系统中一定无死锁进程


✏️ 解释:

银行家算法是一种避免死锁的经典算法。我们逐项分析:

  • A 错误:银行家算法是避免死锁的方法,不属于预防死锁(它没有破坏死锁的四个必要条件)。
  • B 正确:如果系统处于安全状态,就说明存在一个安全序列,系统能够按这个顺序为每个进程分配资源并最终完成,不会发生死锁
  • C 错误:不安全状态不等于死锁状态,它只是表示存在潜在死锁的风险,并不是一定发生死锁。
  • D 错误:银行家算法并未破坏请求和保持条件,进程仍然可以请求资源并保持已分配的资源。

✅ 正确答案:B


PV问题

(7分)

某博物馆最多可以容纳 500 人同时参观,有一个出入口,该出入口一次仅允许一个人通过。参观者的活动描述如下:

1
2
3
4
5
6
7
8
9
10
11
12
cobegin
参观者进程i:
{
...
进门;
...
参观;
...
出门;
...
}
coend

请添加必要的信号量和P、V(或wait( )、signal( ))操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。


答案:

为实现博物馆参观者进出的互斥与同步操作,可以通过以下信号量操作来控制并发:

  • museum: 控制博物馆内当前的参观人数,初值为 500,表示博物馆最多允许 500 人同时参观。
  • door: 控制出入口的使用,初值为 1,表示出入口一次只能有一个人通过。
  • mutex: 控制出入口资源的互斥使用,初值为 1,保证进出门操作的互斥。

以下是完整的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
semaphore museum = 500;    // 博物馆可容纳人数
semaphore door = 1; // 出入口可容纳人数(只能有一个人通过)
cobegin
参观者进程i:
{
P(museum); // 进入前,检查博物馆是否已满,若未满,允许进入
P(door); // 进入时,申请出入口的使用权
进门; // 进入博物馆
V(door); // 离开出入口,释放出入口
参观; // 参观博物馆
P(door); // 准备出门,申请出入口的使用权
出门; // 离开博物馆
V(door); // 离开出入口,释放出入口
V(museum); // 离开时,释放博物馆容纳名额
}
coend

✏️ 解释:

  1. 信号量定义
    • museum:这是一个计数信号量,用来控制博物馆内当前参观的人数。初值为 500,表示最多可以有 500 人进入博物馆。
    • door:这是一个二进制信号量,用来控制博物馆的出入口。初值为 1,表示出入口在某一时刻只能允许一个人通过。
    • mutex:这是一个互斥信号量,用于控制出入口资源的互斥访问,确保进出门操作的原子性。初值为 1。
  2. 进程操作
    • P(museum):表示参观者尝试进入博物馆,先检查博物馆是否已满。如果博物馆内人数未满,则允许进入。
    • P(door):表示参观者申请出入口的使用权,确保每次只有一个人可以进出。
    • 进门:执行进门操作。
    • V(door):释放出入口资源,允许其他人进出。
    • 参观:参观博物馆的过程。
    • P(door):表示参观者准备出门,申请出入口的使用权。
    • 出门:执行出门操作。
    • V(door):释放出入口资源,允许其他人进出。
    • V(museum):释放博物馆容纳的名额,使得其他参观者可以进入。
  3. 为什么P(museum)和P(door)的顺序要先P(museum)再P(door)
    • 如果先P(door)再P(museum),假设有人进入,博物馆刚好满了,而此时有人已经执行了P(door),但是博物馆内已没有空余空间,外面的进程进不去,里面的人也无法出门,造成死锁。
    • 先执行P(museum)确保博物馆有空间再执行P(door),可以避免这种死锁情况。
  4. 为什么V(museum)和V(door)的顺序要先V(door)再V(museum)
    • 先V(door)释放出入口资源,再V(museum)释放博物馆名额,避免死锁和不一致的状态。

✅ 正确答案:完整代码和解释如上所示

页表相关

(1) 使用一级页表的分页存储管理方式,逻辑地址结构为:

页号(20位)
页内偏移量(12位)

  • 页的大小是多少字节?
  • 页表最大占用多少字节?

解答:

  • 页大小:根据给定的逻辑地址结构,页内偏移量为12位。一个字节有8位,因此页大小为 $2^{12}$ 字节 = 4KB。

  • 页表最大占用字节数:页号占20位,因此最多可以有 $2^{20}$ 个页面。每个页表项的大小为4字节,因此页表的最大占用字节数为:

(2) 使用二级页表的分页存储管理方式,逻辑地址结构为:

页目录号(10位)
页表索引(10位)
页内偏移量(12位)

  • 页目录号(10位)
  • 页表索引(10位)
  • 页内偏移量(12位)

设逻辑地址为 LA,请分别给出其对应的页目录号和页表索引的表达式。

解答:

可以通过位运算或除法运算来提取页目录号和页表索引。

  1. 页目录号的表达式

    页目录号占高10位,因此可以通过逻辑右移22位来得到:

  2. 页表索引的表达式

    页表索引占中间的10位,可以先通过右移12位来去除较低的位,再用掩码取出低10位:

    或者通过模运算和除法运算来实现:

(3) 采用(1)中的分页存储管理方式,一个代码段起始逻辑地址为 0000 8000H,其长度为 8KB,被装载到从物理地址 0090 0000H 开始的连续主存空间中。页表从主存 0020 0000H 开始的物理地址处连续存放,计算出该代码段对应的两个页表项的物理地址、这两个页表项中的页框号以及代码页面 2 的起始物理地址。

解答:

  • 逻辑地址分析:代码段的起始逻辑地址为 0000 8000H,其长度为 8KB。每个页面占 4KB,因此代码段需要 2 个页面。

  • 页表项的物理地址

    • 页表从物理地址 0020 0000H 开始,页表项占 4 字节。

    • 第一个页面的页号为 8H,第二个页面的页号为 9H。

    • 页表项的物理地址:

      • 页面1的页表项物理地址:$0020 0000H + 8 \times 4H = 0020 0020H$
      • 页面2的页表项物理地址:$0020 0000H + 9 \times 4H = 0020 0024H$
  • 页框号和物理地址

    • 代码段被加载到物理地址 0090 0000H 开始的连续主存空间中,页面1的物理地址为 0090 0000H,页面2的物理地址为 0090 1000H。

    • 页框号:页面1的页框号为 0090H,页面2的页框号为 0091H。

    • 代码段对应的页表项的物理地址:

      • 物理地址 0020 0020H 对应页面1
      • 物理地址 0020 0024H 对应页面2
    • 代码页面 2 的起始物理地址为 0090 1000H。

总结:

  • (1) 页大小为 4KB,页表最大占用 4MB。
  • (2) 提供了页目录号和页表索引的位运算和除法运算表达式。
  • (3) 计算了代码段对应的页表项物理地址、页框号以及页面起始物理地址。