2018年408真题操作系统篇

选择题

第23题:关于多任务操作系统的叙述

问题:

下列关于多任务操作系统的叙述中,正确的是( )。

Ⅰ. 具有并发和并行的特点

Ⅱ. 需要实现对共享资源的保护

Ⅲ. 需要运行在多CPU的硬件平台上

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

答案与解释:

  • Ⅰ. 正确。 多任务操作系统具有并发和并行的特点。并发是指系统在同一时段内管理多个任务或进程,多个任务轮流执行;并行是指在多核或多CPU的硬件平台上,多个任务真正同时执行。
  • Ⅱ. 正确。 由于多个任务或进程可能会竞争访问共享资源(如内存、硬盘、外设等),因此需要通过同步机制来实现对共享资源的保护,避免资源冲突。
  • Ⅲ. 错误。 多任务操作系统并不需要运行在多CPU的硬件平台上。即使在单CPU的系统上,操作系统也能通过时间分片技术实现任务的并发执行。多CPU硬件平台可以提高并行处理能力,但不是多任务操作系统的必要条件。

因此,正确选项是C


第24题:基于优先权的非抢占式调度

问题:

某系统采用基于优先权的非抢占式进程调度策略,完成一次进程调度和进程切换的系统时间开销为1μs。在T时刻就绪队列中有3个进程P1、P2和P3,其在就绪队列中的等待时间、需要的CPU时间和优先权如下表所示。

进程 等待时间 (μs) 需要的CPU时间 (μs) 优先权
P1 30 12 10
P2 15 24 30
P3 18 36 20

若优先权值大的进程优先获得CPU,从T时刻起系统开始进程调度,则系统的平均周转时间为( )。

A. 54μs B. 73μs C. 74μs D. 75μs

答案与解释:

步骤 1:确定进程的调度顺序

根据优先权调度策略,优先权值大的进程优先获得CPU,因此调度顺序为:

  1. P2(优先权30)
  2. P3(优先权20)
  3. P1(优先权10)

步骤 2:计算每个进程的周转时间

  • P2的周转时间
    • 等待时间:15μs
    • CPU时间:24μs
    • 系统时间开销:1μs
    • 周转时间 = 等待时间 + 系统时间开销 + CPU时间 = 15 + 1 + 24 = 40μs
  • P3的周转时间
    • 等待时间:18μs
    • CPU时间:36μs
    • 系统时间开销:1μs(第一次调度后进程切换开销)
    • 周转时间 = 等待时间 + 系统时间开销 + CPU时间 + 系统时间开销 = 18 + 1 + 24 + 1 + 36 = 80μs
  • P1的周转时间
    • 等待时间:30μs
    • CPU时间:12μs
    • 系统时间开销:1μs(两次调度后进程切换开销)
    • 周转时间 = 等待时间 + 系统时间开销 + CPU时间 + 系统时间开销 = 30 + 1 + 24 + 1 + 36 + 1 + 12 = 105μs

步骤 3:计算平均周转时间

平均周转时间 = (40 + 80 + 105) / 3 = 225 / 3 = 75μs

因此,正确选项是D

第25题:线程并发执行对全局变量x加1

问题:

属于同一进程的两个线程thread1和thread2并发执行,共享初值为0的全局变量x。thread1和thread2实现对全局变量x加1的机器级代码描述如下。

1
2
3
4
5
6
7
8
// thread1
mov R1,x //(x)→R1
inc R1 //(R1)+1→R1
mov x,R1 //(R1)→x
// thread2
mov R2,x //(x)→R2
inc R2 //(R2)+1→R2
mov x,R2 //(R2)→x

在所有可能的指令执行序列中,使x的值为2的序列个数是( )。

A. 1 B. 2 C. 3 D. 4

答案与解释:

为了分析所有可能的指令执行序列,我们可以给每行代码编号如下:

1
2
3
4
5
6
7
8
// thread1
mov R1,x ① //(x)→R1
inc R1 ② //(R1)+1→R1
mov x,R1 ③ //(R1)→x
// thread2
mov R2,x ④ //(x)→R2
inc R2 ⑤ //(R2)+1→R2
mov x,R2 ⑥ //(R2)→x

关键点:

  • thread1和thread2都执行x = x + 1的操作。
  • 我们需要确保在并发执行中,最终x的值为2。

分析:

  1. 执行顺序1:①②③④⑤⑥
    • thread1先执行完所有操作,thread2之后执行。
    • x的值在执行完这两个线程后最终是2。
  2. 执行顺序2:④⑤⑥①②③
    • thread2先执行完所有操作,thread1之后执行。
    • x的值也是2。

可以发现,如果thread1和thread2的加1操作顺序不影响最终的值,只要两个线程分别执行自己的操作即可。

总结:

共有 2种执行顺序能够确保x的最终值为2。

因此,正确选项是B


第26题:资源分配和安全性检测

问题:

假设系统中有4个同类资源,进程P1、P2和P3需要的资源数分别为4、3和1,P1、P2和P3已申请到的资源数分别为2、1和0,则执行安全性检测算法的结果是?

A. 不存在安全序列,系统处于不安全状态 B. 存在多个安全序列,系统处于安全状态 C. 存在唯一安全序列P3、P1、P2,系统处于安全状态 D. 存在唯一安全序列P3、P2、P1,系统处于安全状态

答案与解释:

我们使用两种方法来分析这个问题:资源分配图和资源分配表。

方法一:资源分配图

  1. 系统中有4个同类资源。
  2. 进程P1、P2、P3的资源需求分别为4、3、1。
  3. 进程P1、P2、P3已申请到的资源数分别为2、1、0。

构建资源分配图并进行化简后,发现系统无法为所有进程提供足够的资源,导致无法创建一个完全的安全序列。

方法二:资源分配表

  1. 根据题意,构建资源分配表:
    • 可用资源 = 4 - (已分配的资源) = 4 - (2 + 1 + 0) = 1。
  2. 进程P1还需要2个资源,进程P2还需要2个资源,进程P3只需要1个资源。
  3. 假设先分配资源给P3,它会释放出1个资源,之后可以分配给P1或P2。
  4. 经过检查,发现无法满足系统内所有进程的需求,因此系统处于不安全状态。

结论:

由于不存在可以顺利执行的安全序列,系统处于不安全状态。

因此,正确选项是A

第27题:可能导致当前进程P阻塞的事件

问题:

下列选项中,可能导致当前进程P阻塞的事件是?

Ⅰ. 进程P申请临界资源 Ⅱ. 进程P从磁盘读数据 Ⅲ. 系统将CPU分配给高优先权的进程

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

答案与解释:

  • Ⅰ. 进程P申请临界资源: 当进程P申请临界资源时,若该资源已经被其他进程占用,进程P将会阻塞,等待该资源的释放。
  • Ⅱ. 进程P从磁盘读数据: 进程P在从磁盘读数据时,通常会等待磁盘操作完成,这个过程中进程P会被阻塞。
  • Ⅲ. 系统将CPU分配给高优先权的进程: 这种情况不会导致进程P阻塞。它只会让进程P处于就绪态,等待下一次获得CPU的机会。此时进程P并未被阻塞。

综上所述,可能导致进程P阻塞的事件是Ⅰ和Ⅱ

因此,正确选项是C


第28题:管程中的条件变量操作

问题:

若x是管程内的条件变量,则当进程执行x.wait()时所做的工作是?

A. 实现对变量x的互斥访问 B. 唤醒一个在x上阻塞的进程 C. 根据x的值判断该进程是否进入阻塞状态 D. 阻塞该进程,并将之插入x的阻塞队列中

答案与解释:

在管程中,条件变量提供了一种进程或线程间的等待和唤醒机制。当一个进程执行x.wait()时,它表示该进程要等待条件变量x的条件满足。

  • wait()的工作: 当一个进程调用x.wait()时,该进程会被阻塞,并且会被插入到条件变量x的阻塞队列中。直到其他进程(通过调用x.signal()x.broadcast())唤醒它时,进程才会继续执行。

综上所述,正确的选项是D,因为执行x.wait()时,进程会被阻塞,并插入条件变量x的阻塞队列中,等待其他进程的唤醒。

因此,正确选项是D

第29题:时钟中断服务程序更新的内容

问题:

当定时器产生时钟中断后,由时钟中断服务程序更新的部分内容是?

Ⅰ. 内核中时钟变量的值 Ⅱ. 当前进程占用CPU的时间 Ⅲ. 当前进程在时间片内的剩余执行时间

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

答案与解释:

时钟中断服务程序在操作系统内核中执行,它负责处理定时器中断。每当时钟中断发生时,时钟中断服务程序会执行一些关键任务,具体包括:

  • Ⅰ. 内核中时钟变量的值: 时钟中断服务程序会更新内核中的时钟变量,以反映经过的时间或计数的时钟周期数。这个变量记录了系统已经运行的时间。
  • Ⅱ. 当前进程占用CPU的时间: 每次时钟中断时,都会更新当前进程的CPU使用时间,帮助系统追踪进程的运行时间。
  • Ⅲ. 当前进程在时间片内的剩余执行时间: 如果操作系统使用时间片轮转调度策略,时钟中断会更新当前进程剩余的时间片时间,并根据该时间来决定是否需要切换进程。

因此,时钟中断服务程序更新的是 Ⅰ、Ⅱ、Ⅲ 的内容。

正确选项是 D


第30题:不会导致磁臂粘着的磁盘调度算法

问题:

系统总是访问磁盘的某个磁道而不响应对其他磁道的访问请求,这种现象称为磁臂黏着。下列磁盘调度算法中,不会导致磁臂黏着的是?

A. 先来先服务 (FCFS) B. 最短寻道时间优先 (SSTF) C. 扫描算法 (SCAN) D. 循环扫描算法 (CSCAN)

答案与解释:

磁臂黏着指的是磁头长时间停留在某个磁道上,无法响应其他磁道的请求,通常发生在某些磁盘调度算法中。

  • A. 先来先服务 (FCFS): FCFS 算法按照请求到达的顺序处理请求,它不会考虑磁道间的距离,因此不会因为某些磁道的请求到达频繁而导致磁头长时间停留在某个磁道上。FCFS 不会导致磁臂黏着。
  • B. 最短寻道时间优先 (SSTF): SSTF 算法选择离当前磁头最近的磁道服务,可能会导致磁头在某个频繁请求的磁道上长时间停留,导致磁臂黏着。
  • C. 扫描算法 (SCAN): SCAN 算法通过在磁道上进行扫描移动(类似电梯的上下运动),它也有可能因为频繁的磁道请求导致磁头长时间停留在某个磁道上,发生磁臂黏着。
  • D. 循环扫描算法 (CSCAN): CSCAN 算法与 SCAN 类似,但它只在一个方向上进行扫描。如果频繁请求某个磁道,磁头依然可能长时间停留在该磁道上,导致磁臂黏着。

综上所述,

FCFS 算法不会导致磁臂黏着,因为它按照请求顺序服务,而不是磁道距离,因此不会出现饥饿或磁头长时间停留在某个磁道的问题。

正确选项是 A

第31题:可以提高文件访问速度的优化方法

问题:

下列优化方法中,可以提高文件访问速度的是( )。

Ⅰ. 提前读 Ⅱ. 为文件分配连续的簇 Ⅲ. 延迟写 Ⅳ. 采用磁盘高速缓存

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

答案与解释:

  • Ⅰ. 提前读: 提前读(Pre-fetching)是指在文件被请求访问之前,预先将文件的数据加载到内存中或高速缓存中。这样可以减少对磁盘的读取次数,提升文件访问速度。
  • Ⅱ. 为文件分配连续的簇: 文件系统使用簇(Cluster)来存储文件。若文件的簇是连续分配的,可以大大减少磁头的移动,提高顺序读取效率,从而提升文件访问速度。
  • Ⅲ. 延迟写: 延迟写(Lazy write)是指将写操作推迟到合适的时机,通常是将多个写操作合并后一起写入磁盘。这样可以减少磁盘的写入次数,提高系统的性能。
  • Ⅳ. 采用磁盘高速缓存: 磁盘高速缓存是一种在内存中存储磁盘数据的技术,可以加速对常用文件的访问。当文件数据已经被缓存时,可以避免重复访问磁盘,提高访问速度。

因此,以上所有优化方法都能够提高文件访问速度。

正确选项是 D


第32题:可以实现让权等待的同步机制

问题:

在下列同步机制中,可以实现让权等待的是( )。

A. Peterson方法 B. swap指令 C. 信号量方法 D. TestAndSet指令

答案与解释:

让权等待指的是当进程发现资源或临界区被占用时,主动放弃执行权,让其他进程有机会先执行。以下是各同步机制的分析:

  • A. Peterson方法: Peterson方法是用于实现两个进程间互斥的同步机制。当一个进程请求进入临界区时,另一个进程可能会让出执行权,等待其执行完成。尽管Peterson方法允许进程在需要时等待,但它并不直接实现让权等待。
  • B. swap指令: swap指令是用于交换两个变量值的原子操作。它不能直接实现让权等待,通常用于实现自旋锁等同步机制。
  • C. 信号量方法: 信号量是一种同步原语,它可以通过阻塞和唤醒机制实现让权等待。当信号量的值为0时,进程会被阻塞并放弃执行权,直到其他进程释放信号量。这种机制能有效实现让权等待。
  • D. TestAndSet指令: TestAndSet指令是一种原子操作,用于检查和设置一个变量的值。它主要用于实现自旋锁等机制,但并不直接实现让权等待。

综上所述,

信号量方法通过阻塞和唤醒机制能够实现让权等待,因此 C 选项正确

正确选项是 C

虚拟存储

第45题:虚拟存储管理方式

问题:

请根据题44图给出的虚拟存储管理方式,回答下列问题:

(1) 某虚拟地址对应的页目录号为6,在相应的页表中对应的页号为6,页内偏移量为8,该虚拟地址的十六进制表示是什么?

(2) 寄存器PDBR用于保存当前进程的页目录起始地址,该地址是物理地址还是虚拟地址?进程切换时,PDBR的内容是否会变化?说明理由。同一进程的线程切换时,PDBR的内容是否会变化?说明理由。

(3) 为了支持改进型CLOCK置换算法,需要在页表项中设置哪些字段?

img

答案与解释:

(1) 虚拟地址的十六进制表示:

  • 题目中给出的信息:

    • 页目录号为6(即页目录号的二进制表示为 0000000110B,十进制为6)。
    • 页表中对应的页号为6(即页表索引的二进制表示为 0000000110B,十进制为6)。
    • 页内偏移量为8(即页内偏移量的二进制表示为 000000001000B,十进制为8)。
  • 虚拟地址的格式是:

    \[ \text{页目录号(10位)} + \text{页表索引(10位)} + \text{页内偏移量(12位)} \]

  • 具体拼接方式如下:

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

拼接后的虚拟地址为:

\[ \text{虚拟地址} = 0000000110 \, 0000000110 \, 000000001000 = 01806008H \]

所以,该虚拟地址的十六进制表示为 01806008H

(2) PDBR寄存器的作用与内容变化:

  • PDBR的地址类型: PDBR寄存器保存的是页目录的物理地址。它指向当前进程的页目录表 (Page Directory Table, PDT) 在物理内存中的起始地址,而不是虚拟地址。因此,PDBR的内容是物理地址。

  • 进程切换时PDBR的变化: 进程切换时,进程的虚拟地址空间会发生变化,进而对应的页目录表也会发生变化。因为每个进程有自己的虚拟地址空间和页目录,所以切换进程时,PDBR的内容会变化,指向当前进程的页目录的物理地址。

  • 线程切换时PDBR的变化: 同一进程的线程切换时,进程的虚拟地址空间并没有发生变化,页目录表也不需要改变。因此,PDBR的内容不会发生变化。

(3) 支持改进型CLOCK置换算法所需的页表项字段:

  • 改进型CLOCK置换算法需要记录页表项的访问情况和修改情况。

    • 访问字段(使用位,Access bit): 用于记录页是否被访问过。在每次页面被访问时,将该字段置为1。如果页面在一定时间内没有被访问过,则可以在置换算法中淘汰该页。

    • 修改字段(脏位,Dirty bit): 用于记录页是否被修改过。如果页面被修改过(即写操作),脏位会被设置为1。只有脏页才需要在置换时写回磁盘,未修改的页面可以直接丢弃。

因此,为了支持改进型CLOCK置换算法,需要在页表项中设置 访问位修改位

文件系统

第46题:文件系统的最大文件长度、存储能力与时间问题

问题:

某文件系统采用索引节点存放文件的属性和地址信息,簇大小为4KB。每个文件索引节点占64B,有11个地址项,其中直接地址项8个,一级、二级和三级间接地址项各1个,每个地址项长度为4B。请回答下列问题:

  1. 该文件系统能支持的最大文件长度是多少?(给出计算表达式即可)

  2. 文件系统用1M(1M= \(2^{20}\))个簇存放文件索引节点,用512M个簇存放文件数据。若一个图像文件的大小为5600B,则该文件系统最多能存放多少个这样的图像文件?

  3. 若文件F1的大小为6KB,文件F2的大小为40KB,则该文件系统获取F1和F2最后一个簇的簇号需要的时间是否相同?为什么?

答案与解释:

(1) 该文件系统能支持的最大文件长度:

  • 簇大小为4KB,每个地址项长度为4B,所以每个簇可以存储1024个地址项。

  • 文件索引节点有11个地址项,其中:

    • 直接地址项:8个
    • 一级间接地址项:1个
    • 二级间接地址项:1个
    • 三级间接地址项:1个

最大文件长度的计算公式为:

\[ \text{最大文件长度} = (8 \times 4 \text{KB}) + (1 \times 1024 \times 4 \text{KB}) + (1 \times 1024^2 \times 4 \text{KB}) + (1 \times 1024^3 \times 4 \text{KB}) \]

  • \(8 \times 4 \text{KB} = 32 \text{KB}\)
  • \(1 \times 1024 \times 4 \text{KB} = 4 \text{MB}\)
  • \(1 \times 1024^2 \times 4 \text{KB} = 4 \text{GB}\)
  • \(1 \times 1024^3 \times 4 \text{KB} = 4 \text{TB}\)

因此,最大文件长度为:

\[ 32 \text{KB} + 4 \text{MB} + 4 \text{GB} + 4 \text{TB} \]

(2) 该文件系统最多能存放多少个图像文件:

  • 文件索引节点使用了1M个簇,每个簇大小为4KB,每个文件索引节点占64B。可以存储的索引节点数量为:

\[ \text{索引节点总数} = \frac{1M \times 4\text{KB}}{64\text{B}} = 64M \]

  • 图像文件大小为5600B,因此它需要 \(\lceil \frac{5600B}{4KB} \rceil = 2\) 个簇来存储。

  • 文件数据的存储使用了512M个簇,每个图像文件占2个簇,因此最多能存储:

\[ \frac{512M}{2} = 256M \]

个图像文件。

但文件索引节点的数量限制了最大文件数,所以文件系统最多能存储:

\[ \min\{64M, 256M\} = 64M \]

个图像文件。

(3) 获取F1和F2最后一个簇的簇号需要的时间是否相同?

  • 文件F1的大小为6KB,而直接地址项最多能表示的文件大小为 \(8 \times 4\text{KB} = 32\text{KB}\),所以F1完全可以通过直接地址项来获取其最后一个簇的簇号。访问直接地址项时只需要一次磁盘访问。

  • 文件F2的大小为40KB,直接地址项最多能表示32KB,因此需要通过一级间接地址项来存储。访问一级间接地址项时需要首先访问磁盘中的索引节点,再访问一级间接表。因此,获取F2的最后一个簇的簇号需要进行两次磁盘访问。

所以,获取F1和F2最后一个簇的簇号的时间不相同,因为F2需要额外的一次磁盘访问。

综上:

  1. 最大文件长度为 \(32 \text{KB} + 4 \text{MB} + 4 \text{GB} + 4 \text{TB}\)

  2. 文件系统最多能存放 64M 个5600B的图像文件。

  3. 获取F1和F2最后一个簇的簇号需要的时间不同,因为F1只需一次磁盘访问,而F2需要两次磁盘访问。