2021年408真题操作系统篇


第23题

下列指令中,只能在内核态执行的是( )。

A. trap指令 B. I/O指令 C. 数据传送指令 D. 设置断点指令


✅ 正确答案:B

✅ 解析:

  • A. trap指令 ❌ Trap(陷阱)指令是从用户态转入内核态的一种机制。当用户程序需要操作系统服务时,会执行 trap 指令产生软中断。这条指令本身可以在用户态执行,其作用是请求切换到内核态。
  • B. I/O指令 ✅ I/O 操作具有较高权限,可能影响整个系统的稳定性。为了保护系统安全性,I/O指令只能在内核态执行。用户程序如果需要进行 I/O,必须通过系统调用请求操作系统代为完成。
  • C. 数据传送指令 ❌ 如 MOV 指令,用于寄存器与内存之间传输数据,是最基础的用户级指令,可以在用户态执行。
  • D. 设置断点指令 ❌ 设置断点常用于调试程序,通常通过插入 int 3 或其他中断指令实现,可由调试工具在用户态执行

第24题

下列操作中,操作系统在创建新进程时,必须完成的是( )。

Ⅰ. 申请空白的进程控制块 Ⅱ. 初始化进程控制块 Ⅲ. 设置进程状态为执行态

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


✅ 正确答案:B

✅ 解析:

  • Ⅰ. 申请空白的进程控制块(PCB) ✅ PCB 是操作系统用于记录和管理进程状态的重要数据结构,创建新进程时必须先申请一个空白的 PCB。
  • Ⅱ. 初始化进程控制块 ✅ 申请到 PCB 后需要对其进行初始化,如设置进程 ID、父进程、初始状态(通常为就绪态)、优先级、程序计数器、资源列表等。
  • Ⅲ. 设置进程状态为执行态 ❌ 创建新进程后,系统一般不会立即调度其执行,而是将其放入就绪队列,等待 CPU 调度。因此其初始状态为就绪态而非执行态。

第25题

下列内核的数据结构或程序中,分时系统实现时间片轮转调度需要使用的是( )。

Ⅰ. 进程控制块 Ⅱ. 时钟中断处理程序 Ⅲ. 进程就绪队列 Ⅳ. 进程阻塞队列

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


✅ 正确答案:C

✅ 解析:

  • Ⅰ. 进程控制块(PCB) ✅ 时间片轮转调度要记录每个进程的当前状态、剩余时间片等信息,依赖 PCB 来保存和恢复进程上下文。
  • Ⅱ. 时钟中断处理程序 ✅ 时间片的到期通过定时器(时钟)中断触发,中断处理程序负责终止当前进程运行并调度下一个进程。
  • Ⅲ. 进程就绪队列 ✅ 轮转调度按 FIFO 方式维护就绪队列,时间片用完的进程被重新放回队尾。
  • Ⅳ. 进程阻塞队列 ❌ 阻塞队列用于管理等待 I/O 等事件的进程,与时间片轮转调度无关

第26题

某系统中磁盘的磁道数为 200(0~199),磁头当前在 184 号磁道上。用户进程提出的磁盘访问请求磁道号依次为:

184、187、176、182、199

若采用最短寻道时间优先调度算法(SSTF)完成磁盘访问,则磁头移动的距离(磁道数)是( )。

A. 37 B. 38 C. 41 D. 42


✅ 正确答案:C

✅ 解析(SSTF 逐步模拟过程):

初始磁头在:184

请求序列:184, 187, 176, 182, 199

按最短寻道优先算法,每次选与当前磁道距离最近的请求执行:

  1. 当前在 184,最近的是 184(距离 0) → 移动 0
    • 剩余请求:[187, 176, 182, 199]
  2. 当前在 184,最近的是 182(距离 2) → 移动 2
    • 剩余请求:[187, 176, 199]
  3. 当前在 182,最近的是 187(距离 5) → 移动 5
    • 剩余请求:[176, 199]
  4. 当前在 187,最近的是 176(距离 11) → 移动 11
    • 剩余请求:[199]
  5. 当前在 176,最近的是 199(距离 23) → 移动 23
    • 所有请求完成

总移动距离 = 0 + 2 + 5 + 11 + 23 = 41


第27题

下列事件中,可能引起进程调度程序执行的是( )。

Ⅰ. 中断处理结束 Ⅱ. 进程阻塞 Ⅲ. 进程执行结束 Ⅳ. 进程的时间片用完

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


✅ 正确答案:D

✅ 解析:

调度程序执行的前提是:当前CPU可用,需要从就绪队列中选一个新进程运行。以下情况都可能触发这种调度:

  • Ⅰ. 中断处理结束 ✅ 比如I/O完成的中断结束时,会唤醒阻塞的进程进入就绪队列,可能引发调度。
  • Ⅱ. 进程阻塞 ✅ 当前进程因等待资源或I/O而阻塞,CPU空闲,需调度另一个就绪进程运行。
  • Ⅲ. 进程执行结束 ✅ 当前进程终止释放CPU,操作系统需调度另一个进程运行。
  • Ⅳ. 时间片用完 ✅ 分时系统中,进程时间片耗尽需要将其重新放入就绪队列,调度下一个进程。

因此,四个选项全部正确。


第28题

某请求分页存储系统的页大小为 4KB,按字节编址。系统给进程 P 分配 2 个固定页框,并采用改进型 Clock 页面置换算法。进程 P 页表的部分内容如下:

页号 页框号 存在位 访问位 修改位
2 20H 0 0 0
3 60H 1 1 0
4 80H 1 1 1

进程访问的虚拟地址是:02A01H。问:物理地址是( )。

A. 00A01H B. 20A01H C. 60A01H D. 80A01H


✅ 正确答案:C

✅ 解析:

  1. 页大小为 4KB = 2¹² 字节,所以虚拟地址的低 12 位是页内偏移,高位是页号。

  2. 虚拟地址为:02A01H

    • 转为二进制: 02A01H = 0000 0010 1010 0000 0001
    • 页号 = 高位部分 = 02H = 2
    • 页内偏移 = A01H
  3. 查页表,页号 2 的“存在位 = 0”,说明该页不在内存,需要进行页面置换

  4. 已在内存的页为:

    • 页号 3:访问位=1,修改位=0
    • 页号 4:访问位=1,修改位=1
  5. 改进型 Clock 算法替换顺序为:

    1. (0,0)
    2. (0,1)
    3. (1,0)
    4. (1,1)

    所以会先淘汰 (1,0) 的页号 3,对应的页框号为 80H

  6. 页号 2 被换入页框 60H(题目已告知)

  7. 所以物理地址 = 页框号 + 页内偏移 = 60H:A01H = 60A01H


第29题

在采用二级页表的分页系统中,CPU页表基址寄存器(PTBR)中的内容是( )。

A. 当前进程的一级页表的起始虚拟地址 B. 当前进程的一级页表的起始物理地址 C. 当前进程的二级页表的起始虚拟地址 D. 当前进程的二级页表的起始物理地址


✅ 正确答案:B

✅ 解析:

  • 在分页系统中,为了减少页表大小,会采用二级页表结构
  • 虚拟地址被划分为三部分:
    • 一级页号
    • 二级页号
    • 页内偏移
  • CPU 的页表基址寄存器(PTBR)用于定位页表。

二级分页系统中

  • PTBR 指向的是一级页表的起始物理地址
  • 然后通过一级页号定位某个二级页表;
  • 再通过二级页号从该二级页表中找到实际的物理页框号。

因此,PTBR 存放的是一级页表的起始,并且是物理地址(CPU 访问内存时需要直接使用物理地址)。


第30题

若目录 dir 下有文件 file1,则为删除该文件内核不必完成的工作是( )。

A. 删除 file1 的快捷方式 B. 释放 file1 的文件控制块 C. 释放 file1 占用的磁盘空间 D. 删除目录 dir 中与 file1 对应的目录项


✅ 正确答案:A

✅ 解析:

删除文件 file1 涉及内核执行以下操作:

  • B. 释放文件控制块 ✅ 文件控制块(FCB 或 inode)保存了文件的元信息,是文件存在的核心数据结构。删除文件时要释放。
  • C. 释放磁盘空间 ✅ 文件内容占用磁盘数据块,删除时要释放这些块。
  • D. 删除目录项 ✅ 每个文件在其所在目录中对应一个目录项,记录文件名和 inode 指针,删除文件必须删除该目录项。

但:

  • A. 删除快捷方式 ❌ 快捷方式(如 Linux 中的符号链接)本质上是独立的文件,只是引用了该文件的路径。 删除原文件不会自动删除快捷方式。快捷方式是否存在由用户或文件系统决定内核不负责自动清理

因此,不必完成的是 A


第31题

若系统中有 n (n ≥ 2) 个进程,每个进程均需要使用某类临界资源 2 个,则系统不会发生死锁所需的该类资源总数至少是( )。

A. 2 B. n C. n+1 D. 2n


✅ 正确答案:C

✅ 解析:

  • 该问题考虑的是资源分配和死锁避免
  • 假设每个进程需要使用 2 个资源,若每个进程仅获得 1 个资源,而没有额外资源来避免进程间的循环等待,就会发生死锁。为了避免死锁,系统必须确保在资源分配时有足够的资源可供进程切换和完成任务。
  • 若每个进程获得 1 个资源,那么需要额外的 1 个资源来确保系统不会发生死锁。
  • 因此,最少需要 n + 1 个资源才能避免死锁。若分配 1 个资源给每个进程,剩余的 1 个资源可以用来打破死锁的潜在循环等待。

第32题

下列选项中,通过系统调用完成的操作是( )。

A. 页置换 B. 进程调度 C. 建新进程 D. 生成随机整数


✅ 正确答案:C

✅ 解析:

  • A. 页置换 ❌ 页置换是内存管理的一部分,通常由操作系统的内存管理模块自动执行,不需要通过应用程序调用系统调用来触发。
  • B. 进程调度 ❌ 进程调度是操作系统内核管理任务的机制,是由内核自动执行的,不是应用程序可以通过系统调用直接触发的操作。
  • C. 建新进程 ✅ 创建新的进程是通过系统调用来实现的。例如,在 Linux 系统中,fork()exec() 系统调用可以用来创建新进程或执行新程序。
  • D. 生成随机整数 ❌ 生成随机整数是用户程序的任务,通常通过标准库函数(如 rand())来完成,而不需要通过系统调用。

信号量

第45题

问题: 下表给出了整型信号量S的wait()和signal()操作的功能描述,以及采用开/关中断指令实现信号量操作互斥的两种方法。

功能描述:

1
2
3
4
5
6
7
8
9
Semaphore S;
wait(S){
while(S <= 0);
S = S-1;
}

signal(S){
S = S+1;
}

方法1:

1
2
3
4
5
6
7
8
9
10
11
12
Semaphore S;
wait(S){
关中断;
while(S <= 0);
S = S-1;
开中断;
}
signal(S){
关中断;
S = S+1;
开中断;
}

方法2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Semaphore S;
wait(S){
关中断;
while(S <= 0){
开中断;
关中断;
}
S = S-1;
开中断;
}
signal(S){
关中断;
S = S+1;
开中断;
}

问题1: 为什么在wait()和signal()操作中对信号量S的访问必须互斥执行?

问题2: 分别说明方法1和方法2是否正确。若不正确,请说明理由。

问题3: 用户程序能否使用开/关中断指令实现临界区互斥?为什么?


解答:

(1) 为什么在wait()和signal()操作中对信号量S的访问必须互斥执行?

解答: 信号量S是一个共享的临界资源,多个进程可能会同时对其进行访问。wait()signal() 操作会改变信号量的值,因此,必须保证对信号量S的访问是互斥的。否则,可能会发生竞态条件,导致信号量的值不正确,进而影响系统的正确性和进程的同步。为了确保信号量操作的正确性和进程间的同步,必须保证对信号量的访问是互斥的。

(2) 分别说明方法1和方法2是否正确。若不正确,请说明理由。

方法1:

  • 方法1是错误的。
  • wait(S)中,当信号量S <= 0时,关中断后,其他进程无法修改S的值,且while(S <= 0)会导致进程陷入死循环,无法继续执行。由于信号量的值无法变化,进程无法退出while循环。因此,这种方法会导致死锁或无限阻塞。

方法2:

  • 方法2是正确的。
  • wait(S)*中,若信号量S <= 0,方法2采用了*开/关中断的方式,使得在每次循环时都释放了中断,允许其他进程有机会来修改S的值。当信号量大于0时,进程会继续执行并完成对S的更新。因此,方法2能够正确处理信号量的同步问题。

(3) 用户程序能否使用开/关中断指令实现临界区互斥?为什么?

解答: 用户程序不能使用开/关中断指令实现临界区互斥。原因是开/关中断指令是特权指令,只有操作系统内核才能执行这些指令。用户程序没有权限直接控制中断,因此不能使用它们来实现临界区互斥。使用开/关中断指令通常会破坏系统的正常中断机制,影响系统的稳定性和响应性,因此不适合用在用户空间。


总结:

  1. wait()signal()操作中,信号量S的访问必须互斥,以避免多个进程同时修改信号量导致的竞态条件。
  2. 方法1错误,因为它会导致进程死锁。方法2正确,它通过适时地开关中断,允许其他进程修改信号量值,从而避免了死锁。
  3. 用户程序不能使用开/关中断指令实现临界区互斥,因为这些指令是特权指令,无法在用户空间执行。

计算机相关

第46题

问题: 某用硬盘作为启动盘,硬盘第一个扇区存放主引导记录,其中包含磁盘引导程序和分区表。磁盘引导程序用于选择要引导哪个分区的操作系统,分区表记录硬盘上各分区的位置等描述信息。硬盘被划分成若干个分区,每个分区的第一个扇区存放分区引导程序,用于引导该分区中的操作系统。系统采用多阶段引导方式,除了执行磁盘引导程序和分区引导程序外,还需要执行ROM中的引导程序。请回答下列问题。


问题1: 系统启动过程中操作系统的初始化程序、分区引导程序、ROM中的引导程序、磁盘引导程序的执行顺序是什么?

问题2: 把硬盘制作为启动盘时,需要完成操作系统的安装、磁盘的物理格式化、逻辑格式化、对磁盘进行分区,执行这4个操作的正确顺序是什么?

问题3: 磁盘扇区的划分和文件系统根目录的建立分别是在第 (2) 问的哪个操作中完成的?


解答:

(1) 系统启动过程中操作系统的初始化程序、分区引导程序、ROM中的引导程序、磁盘引导程序的执行顺序是什么?

解答: 系统启动的过程如下:

  1. ROM中的引导程序执行:
    • 当计算机开机时,首先执行ROM中的引导程序(通常称为BIOS或UEFI固件)。它负责进行硬件初始化、基本自检,并加载磁盘引导程序。
  2. 磁盘引导程序执行:
    • ROM中的引导程序将控制权传递给硬盘的第一个扇区,即主引导记录(MBR)。磁盘引导程序解析分区表,选择要引导的分区,并将控制权传递给该分区的引导程序。
  3. 分区引导程序执行:
    • 分区引导程序位于被选定分区的第一个扇区,它负责启动该分区中的操作系统,并加载操作系统的核心部分。
  4. 操作系统的初始化程序执行:
    • 分区引导程序加载并执行操作系统的初始化程序。初始化程序进一步设置系统环境,加载操作系统的核心组件,准备好系统的运行。

总结顺序:

  • ROM中的引导程序 → 磁盘引导程序 → 分区引导程序 → 操作系统初始化程序。

(2) 把硬盘制作为启动盘时,需要完成操作系统的安装、磁盘的物理格式化、逻辑格式化、对磁盘进行分区,执行这4个操作的正确顺序是什么?

解答: 把硬盘制作为启动盘的步骤依次为:

  1. 磁盘的物理格式化:
    • 物理格式化是硬盘的初始化过程,将磁盘划分为扇区、磁道和柱面,并进行扇区标识和校验。这一步通常在硬盘制造时完成,但如果是全新硬盘,可能需要手动进行。
  2. 对磁盘进行分区:
    • 在磁盘物理格式化之后,下一步是分区。通过分区工具(如fdisk、diskpart等)划分硬盘为多个逻辑分区,以便操作系统管理。每个分区可以独立存储数据或安装操作系统。
  3. 逻辑格式化:
    • 对每个分区进行逻辑格式化,即安装文件系统。常见的文件系统包括FAT、NTFS、ext4等,逻辑格式化会在每个分区的首个扇区创建文件系统元数据,并为文件系统准备存储空间。
  4. 操作系统的安装:
    • 安装操作系统时,操作系统的文件会被复制到相应的分区中。安装程序还会进行一些配置,如设置引导项、初始化系统文件等。

总结顺序:

  • 磁盘的物理格式化 → 对磁盘进行分区 → 逻辑格式化 → 操作系统的安装。

(3) 磁盘扇区的划分和文件系统根目录的建立分别是在第 (2) 问的哪个操作中完成的?

解答:

  • 磁盘扇区的划分是在磁盘的物理格式化过程中完成的。物理格式化是硬盘的初始化过程,会将硬盘划分成若干个扇区、磁道和柱面。
  • 文件系统根目录的建立是在逻辑格式化过程中完成的。逻辑格式化会在每个分区的首个扇区创建文件系统结构,包括根目录等元数据结构,为文件系统的操作做好准备。

总结:

  1. 系统启动的顺序是:ROM中的引导程序 → 磁盘引导程序 → 分区引导程序 → 操作系统初始化程序
  2. 把硬盘制作为启动盘的正确顺序是:磁盘的物理格式化 → 对磁盘进行分区 → 逻辑格式化 → 操作系统的安装
  3. 磁盘扇区的划分在物理格式化中完成,文件系统根目录的建立在逻辑格式化中完成。