2015年408真题操作系统篇

选择题


23. 处理外部中断时,应该由操作系统保存的是( )

选项: A. 程序计数器 (PC) 的内容 B. 通用寄存器的内容 C. 快表 (TLB) 中的内容 D. Cache中的内容

正确答案: B

解释:

  • A 错误:程序计数器(PC)的内容在发生中断时通常由硬件(中断隐指令)自动保存到栈中,不需要操作系统手动保存。
  • B 正确:通用寄存器的内容(例如 R0 ~ Rn)是由操作系统(中断服务程序)保存的,因为在处理外部中断的过程中会打断当前进程,必须在中断返回时恢复进程现场。
  • C 错误:TLB(Translation Lookaside Buffer)是一个高速缓存,保存页表项的部分映射。其内容在中断时不需要保存,因为可以重新加载。
  • D 错误:Cache 是硬件层级的缓存系统,在外部中断处理中不会保存其状态,它对程序执行是透明的。

24. 假定下列指令已装入指令寄存器,则执行时不可能导致CPU从用户态变为内核态( )

选项: A. DIV R0, R1;(R0) / (R1) → R0 B. INT n ;产生软中断 C. NOT R0 ;寄存器R0的内容取非 D. MOV R0, addr ;把地址addr处的内存数据放入寄存器R0中

正确答案: C

解释:

  • A 错误:若除数 R1 为 0,执行 DIV 指令会产生除零异常,触发操作系统的异常处理机制,CPU 从用户态切换到内核态
  • B 错误INT n 是软中断指令,显式请求进入内核态,由操作系统执行对应的中断服务程序。
  • C 正确NOT R0 是简单的位运算,不访问内存、硬件或受限资源,不会导致切换到内核态
  • D 错误MOV R0, addr 访问内存地址 addr。若访问的是非法或内核空间地址,将引发缺页异常或权限异常,导致 CPU 进入内核态处理。

25. 下列选项中,会导致进程从执行态变为就绪态的事件是( )

选项: A. 执行 P (wait) 操作 B. 申请内存失败 C. 启动 I/O 设备 D. 被高优先级进程抢占

正确答案: D

解释:

  • A 错误:执行 P 操作可能因资源不可用而阻塞进程,使其进入阻塞态,而不是就绪态。
  • B 错误:申请内存失败表明进程暂时无法获得所需资源,会进入阻塞态等待资源。
  • C 错误:启动 I/O 操作通常使进程等待 I/O 完成,进入阻塞态
  • D 正确:在抢占式调度中,当高优先级进程就绪时,当前执行进程会被抢占并转为就绪态,等待再次获得 CPU 运行机会。

26. 若系统 S1 采用死锁避免方法,S2 采用死锁检测方法。下列叙述中,正确的是( )

Ⅰ. S1 会限制用户申请资源的顺序,而 S2 不会 Ⅱ. S1 需要进程运行所需资源总量信息,而 S2 不需要 Ⅲ. S1 不会给可能导致死锁的进程分配资源,而 S2 会

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

正确答案: B

解释:

  • Ⅰ 错误限制资源申请顺序是死锁预防的策略,不是死锁避免(如银行家算法)的手段。S1 属于死锁避免,不会强制资源申请顺序,因此该说法错误。
  • Ⅱ 正确:死锁避免方法(如银行家算法)需要知道每个进程最大资源需求,才能判断系统是否进入不安全状态。而死锁检测只需跟踪当前的资源分配情况即可。
  • Ⅲ 正确:S1 在判断资源分配后可能导致不安全状态时会拒绝分配资源以避免死锁,而 S2 不做限制,允许分配后再通过检测判断是否出现死锁。

27. 系统为某进程分配了 4 个页框,该进程已访问的页号序列为:

1
2, 0, 2, 9, 3, 4, 2, 8, 2, 4, 8, 4, 5

若进程要访问的下一页页号为 7,依据 LRU 算法,应淘汰页的页号是( )

选项: A. 2 B. 3 C. 4 D. 8

正确答案: A

解释:

  • LRU(Least Recently Used)算法 是页面置换算法的一种,它会淘汰最久未被使用的页面。
  • 当前系统分配了 4 个页框,因此在内存中只能同时保留 4 个页面。
  • 模拟访问过程后,最后在页框中的页号为: 2, 4, 8, 5
  • 下一页要访问的是 7,需要置换掉其中一个页框。我们看谁是最久没被使用的
    • 2 最近使用是在位置 10(从右向左数是比较久远的)
    • 4 最近使用在位置 11 和 9
    • 8 最近使用在位置 10
    • 5 最近使用在位置 12
  • 页号 2 是这四个中最早被使用的(最近没被访问),因此应被淘汰。

结论: 本题选 A


28. 在系统内存中设置磁盘缓冲区的主要目的是( )

选项: A. 减少磁盘 I/O 次数 B. 减少平均寻道时间 C. 提高磁盘数据可靠性 D. 实现设备无关性

正确答案: A

解释:

  • 磁盘缓冲区(Disk Buffer) 是操作系统在内存中划出的一块区域,用于临时保存从磁盘读取的数据或待写入磁盘的数据。
  • 它的主要作用是:减少磁盘 I/O 次数,提高整体访问效率。
    • 比如多次读取同一块数据,可以直接从缓冲区读取,避免重复的磁盘访问。
  • 选项分析:
    • A 正确:缓冲区的主要作用就是减少磁盘访问次数,提高性能。
    • B 错误:平均寻道时间是由磁头移动决定的,与是否使用缓冲区关系不大。
    • C 错误:缓冲区本身不提高数据可靠性,甚至断电后会丢失。
    • D 错误:设备无关性是通过设备驱动等机制实现的,与磁盘缓冲区无直接关系。

结论: 本题选 A


原题:

29. 在文件的索引节点中存放直接索引指针 10 个,一级和二级索引指针各 1 个。磁盘块大小为 1KB,每个索引指针占 4 字节。若某文件的索引节点已在内存中,则把该文件偏移量(按字节编址)为 1234307400 处所在的磁盘块读入内存,需访问的磁盘块个数分别是( )

选项: A. 1、2 B. 1、3 C. 2、3 D. 2、4


正确答案: B


解释:

基本信息:

  • 块大小 = 1KB = 1024 字节
  • 一个索引指针占 4 字节 → 一个块可存 1024 / 4 = 256 个指针
  • 直接索引:10 块 × 1KB = 10KB = 10240B
  • 一级索引:256 块 × 1KB = 256KB = 262144B
  • 二级索引:256 × 256 × 1KB = 67108864B

地址范围(偏移量):

索引类型 范围(按偏移量)
直接索引 [0, 10239]
一级索引 [10240, 272383]
二级索引 [272384, 67381247]

分析两个偏移量:

  1. 1234 ∈ [0, 10239] ⇒ 使用直接索引

    • 索引节点已在内存,访问目标数据块:只需 读 1 块数据块 → 需访问磁盘块:1 个
  2. 307400 ∈ [272384, 67381247] ⇒ 使用二级索引

    • 访问路径:二级索引块 → 一级索引块 → 数据块

    • 每一级索引在磁盘上,因此需要访问:

      • 1 个二级索引块(找到一级索引块地址)
      • 1 个一级索引块(找到数据块地址)
      • 1 个数据块 → 总共 3 块磁盘块

结论:

  • 两个偏移量分别对应访问磁盘块数为:1 和 3
  • 正确答案为:B

举一反三题:

问题: 若偏移量分别为 10240272384,需访问的磁盘块个数分别是( )

选项: A. 1、2 B. 1、3 C. 2、3 D. 2、4


正确答案: C


解释:

  1. 10240

    • 刚好越过 10 个直接块,落入 一级索引管理区域的第一块

    • 需访问:

      • 1 次一级索引块(读出数据块地址)
      • 1 次数据块 → 共 2 块
  2. 272384

    • 是二级索引部分的起始位置

    • 需访问:

      • 1 次二级索引块
      • 1 次一级索引块
      • 1 次数据块 → 共 3 块

结论: 正确答案为:C


30. 请求分页系统中不能组合使用的策略是:

题目: 在请求分页系统中,页面分配策略与页面置换策略不能组合使用的是( )

选项: A. 可变分配,全局置换 B. 可变分配,局部置换 C. 固定分配,全局置换 D. 固定分配,局部置换


正确答案:C


解释:

页面分配策略:

  • 固定分配:每个进程在创建时被分配固定数量的物理页框,运行期间不变。
  • 可变分配:允许动态调整某个进程所拥有的页框数量(增加或减少)。

页面置换策略:

  • 局部置换:缺页时只能从当前进程自己的页中选出要换出的页面。
  • 全局置换:缺页时可以从所有进程的页中选一页换出。

判断逻辑:

组合 是否可用 理由
A. 可变+全局 都支持页在进程间移动,组合合理
B. 可变+局部 虽然分配可变,但置换只在自己进程内完成,逻辑上无冲突
C. 固定+全局 固定分配不允许页在进程间移动,但全局置换要求能从别的进程中换页,冲突
D. 固定+局部 固定分配限制页框不变,局部置换也只在本进程内,匹配一致

结论:

不能组合使用的是:固定分配 + 全局置换 ✅ 正确答案为:C


31. 位图法释放盘块对应的位图信息修改位置:

题目: 文件系统用位图法表示磁盘空间的分配情况,位图存于磁盘的32~127号块中,每个盘块占1024字节,盘块和块内字节均从0开始编号。假设要释放的盘块号为 409612,则位图中要修改的位所在的盘块号和块内字节序号分别是( )

选项: A. 81、1 B. 81、2 C. 82、1 D. 82、2


正确答案:C


解释:

基本信息:

  • 每个盘块有 1024 字节 = 1024 × 8 = 8192 位
  • 每个盘块的位图能表示 8192 个数据块
  • 位图存储在磁盘 第 32 ~ 127 块 中(共 96 块)

求解过程:

  1. 目标盘块号为:409612

  2. 该盘块号在第几个位图盘块中? \[ \text{位图块编号} = \left\lfloor \frac{409612}{8192} \right\rfloor = \left\lfloor 50.0 \right\rfloor = 50 \]

    实际的磁盘盘块号为:

    \[ \text{盘块号} = 32 + 50 = \boxed{82} \]

  3. 在第82号盘块内的位图中,第几个字节?

    \[ \text{该块内的位编号} = 409612 \mod 8192 = 12 \]

    \[ \text{字节编号} = \left\lfloor \frac{12}{8} \right\rfloor = \boxed{1} \]


结论:

要修改的位位于 第82号盘块,第1号字节中 ✅ 正确答案为:C


32. 按照 SCAN 调度方法,磁头移过的磁道数是:

题目: 某硬盘有 200 个磁道(最外侧磁道号为 0),磁道访问请求序列为:130,42,180,15,199,当前磁头位于第 58 号磁道并从外侧向内侧移动。按照 SCAN 调度方法 处理完上述请求后,磁头移过的磁道数是( )


选项: A. 208 B. 287 C. 325 D. 382


正确答案:C


解释:

🔧 SCAN 调度算法(又称“电梯调度算法”)规则:

  • 磁头从一个方向连续移动(本题是从外侧 → 内侧);
  • 遇到请求就处理;
  • 一直移动到最尽头(本题中是磁道 199);
  • 然后反转方向继续处理剩余请求。

📌 当前情况:

  • 总磁道范围:0 ~ 199,共 200 个磁道;
  • 当前磁头位置:58
  • 当前方向:向内侧(向大号)移动
  • 请求序列:130,42,180,15,199

📋 步骤分解(模拟调度过程):

  1. 向内移动(从 58 开始),处理所有大于等于 58 的请求:

    • 有效请求:130,180,199
    • 磁头最终会到 199(尽头)
    • 本段磁道移动数:199 - 58 = 141
  2. 反转方向,向外移动(从 199 开始),处理剩下的小于 58 的请求:

    • 有效请求:42,15
    • 最终访问到磁道 15
    • 本段磁道移动数:199 - 15 = 184

✅ 总移动磁道数:

\[ 141(第一段)+ 184(第二段) = \boxed{325} \]


✅ 正确答案:C

PV问题


45. 信箱通信的同步问题(9 分)


题目:

有 A、B 两人通过信箱进行辩论。

  • 每人从自己的信箱中取出对方的问题,回答后生成新问题放入对方的信箱。
  • A 的信箱最多容纳 M 封邮件,初始有 x 封邮件(0 < x < M)
  • B 的信箱最多容纳 N 封邮件,初始有 y 封邮件(0 < y < N)

每人只能在:

  • 信箱 不为空 时取邮件
  • 信箱 不满 时放邮件

请添加必要的 信号量和 P/V 操作,使程序实现正确的同步。要求给出完整过程,并说明信号量的含义及初值。


答案与解释:

本题是典型的双缓冲生产者-消费者模型。每一方既是生产者又是消费者,彼此互为通信对象。


一、定义信号量及初值

信号量 含义 初值
box_A_mutex A信箱互斥访问控制 1
box_A_full A信箱当前邮件数量 x
box_A_empty A信箱当前空位数量 M - x
box_B_mutex B信箱互斥访问控制 1
box_B_full B信箱当前邮件数量 y
box_B_empty B信箱当前空位数量 N - y

二、完整同步过程(伪代码)

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
semaphore box_A_mutex = 1;      // A信箱互斥访问
semaphore box_A_full = x; // A信箱已有邮件数
semaphore box_A_empty = M - x; // A信箱空闲空间数

semaphore box_B_mutex = 1; // B信箱互斥访问
semaphore box_B_full = y; // B信箱已有邮件数
semaphore box_B_empty = N - y; // B信箱空闲空间数

CoBegin

// 进程 A
A {
while (true) {
P(box_A_full); // 等待A信箱中有邮件
P(box_A_mutex);
从A信箱取出一封邮件;
V(box_A_mutex);
V(box_A_empty); // 空位 +1

回答问题并提出一个新问题;

P(box_B_empty); // 等待B信箱有空位
P(box_B_mutex);
将新邮件放入B信箱;
V(box_B_mutex);
V(box_B_full); // B信箱邮件数 +1
}
}

// 进程 B
B {
while (true) {
P(box_B_full); // 等待B信箱中有邮件
P(box_B_mutex);
从B信箱取出一封邮件;
V(box_B_mutex);
V(box_B_empty); // 空位 +1

回答问题并提出一个新问题;

P(box_A_empty); // 等待A信箱有空位
P(box_A_mutex);
将新邮件放入A信箱;
V(box_A_mutex);
V(box_A_full); // A信箱邮件数 +1
}
}

CoEnd

关键点说明:

  • 每个人读取自己的信箱(自己是“消费者”),写入对方的信箱(自己是“生产者”)。
  • P(box_full) 确保读取时有内容。
  • P(box_empty) 确保写入时有空间。
  • mutex 保证对每个信箱的操作互斥。

总结:

这是两个 生产者-消费者模型 交错运行的组合。通过使用 P/V 操作配合互斥信号量和资源计数,实现了正确的信箱通信同步机制。

多级页表问题


🧠【问题 46(6分)】

某计算机系统按字节编址,采用二级页表的分页存储管理方式,虚拟地址格式如下:

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

请回答下列问题:


(1)

页和页框的大小各为多少字节?进程的虚拟地址空间大小为多少页?

(2)

假定页目录项和页表项均占4个字节,则进程的页目录和页表共占多少页?要求写出计算过程。

(3)

若某指令周期内访问的虚拟地址为 01000000H01112048H,则进行地址转换时共访问多少个二级页表?要求说明理由。


✅【标准答案与解释】


(1) 页和页框的大小 / 虚拟地址空间页数

  • 页内偏移量为 12 位 ⇒ 页大小 = 2¹² = 4KB

  • 页框与页大小一致 ⇒ 页框大小 = 4KB

  • 虚拟地址总共 10 + 10 + 12 = 32 位,即虚拟地址空间大小 = 2³² = 4GB

    虚拟地址空间共划分为多少页?

    \[ \text{页数} = \frac{2^{32}}{2^{12}} = 2^{20} = \boxed{1048576\ 页} \]


(2) 页目录和页表共占多少页?

  • 页目录项:共 2¹⁰ = 1024 项 × 4 字节 = 4096 字节 = 1页 ⇒ 页目录占 1 页
  • 每个页目录项指向一个页表,每个页表也有 2¹⁰ 个页表项 × 4字节 = 4096 字节 = 1页 所以:需要 1024 个页表 ⇒ 页表共占 1024 页

\[ \boxed{\text{总共占用页数} = 1(页目录) + 1024(页表) = 1025\ 页} \]


(3) 两个虚拟地址访问了几个二级页表?

先将虚拟地址转换为二进制结构,提取页目录号:

地址1:01000000H = 0000 0001 0000 0000 0000 0000 0000 0000

  • 页目录号(最高10位)= 0000000100 = 4
  • 页表索引 = 0000000000
  • 页内偏移 = 000000000000

地址2:01112048H

换算十六进制为二进制: 0111 2048H = 0000 0001 0001 0000 0000 0100 1000 仍然可得页目录号 = 0000000100 = 4

🔍 结论

  • 两个地址的页目录号都为 4 ⇒ 所访问的都是同一个页表(即第4个二级页表)
  • 页表索引不同 ⇒ 在该页表中查不同页框

\[ \boxed{访问了 1 个二级页表} \]


📌总结

小题 答案 解释
(1) 页大小 = 页框大小 = 4KB;共 \(2^{20} = 1048576\) 页内偏移量12位 ⇒ 2¹²B/页;总虚拟地址空间为 2³² B
(2) 共占 1025 页 页目录1页(1024项);每个页表1页 × 1024 = 1024页 ⇒ 1 + 1024
(3) 访问了 1 个二级页表 两个地址页目录号相同 ⇒ 引用同一个二级页表