二、综合应用题

2026 旧版 · 非 2027 主源 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

## 二、综合应用题

01. 某计算机系统中,时钟中断处理程序每次执行时间为 $2 \mathrm{~ms}$ (包括进程切换开销),若时


<!-- page: 328 -->

钟中断频率为 60Hz,则CPU用于时钟中断处理的时间比率为多少?

02. 考虑 56kb/s 调制解调器的性能,驱动程序输出一个字符后就阻塞,当一个字符打印完毕后,产生一个中断通知阻塞的驱动程序,输出下一个字符,然后阻塞。若发消息、输出一个字符和阻塞的时间总和为 0.1ms,则由于处理调制解调器而占用的CPU时间比率是多少?假设每个字符有一个开始位和一个结束位,共占10位。

## 5.1.7 答案与解析

### 一、单项选择题

#### 01. B

可寻址是块设备的基本特征,选项 A 错误。若共享设备不是可寻址的和可随机访问的,则不能保证数据的完整性和一致性,也不能提高设备的利用率,选项 B 正确。共享设备是指一段时间内允许多个进程同时访问的设备,选项 C 错误。分配共享设备是不会引起进程死锁的,选项 D 错误。

#### 02. C

虚拟设备是指采用虚拟技术将一台独占设备转换为若干逻辑设备。引入虚拟设备是为了克服独占设备速度慢、利用率低的特点。这种设备并不是物理地变成共享设备,一般的独享设备也不能转换为共享设备,只是用户在使用它们时“感觉”是共享设备,是逻辑的概念。

#### 03. D

DMA 方式主要用于块设备,磁盘是典型的块设备。这道题也要求读者了解什么是 I/O 控制方式,选项 A、B、C 显然都不是 I/O 控制方式。

#### 04. A

中断寄存器位于主机内;不存在 I/O 地址寄存器;编程空间一般是由体系结构和操作系统共同决定的。控制寄存器和状态寄存器分别用于接收上层发来的命令并存放设备状态信号,是设备控制器与上层的接口;至于控制命令,它虽然是由 CPU 发出的,用来控制设备控制器,但控制命令是由设备控制器提供的,每种设备控制器都对应一组相应的控制命令。

#### 05. C

接口用来传输信号,I/O 逻辑即设备控制器,用来实现对设备的控制。

#### 06. A

DMA 是一种不经过 CPU 而直接从主存存取数据的数据交换模式,它在 I/O 设备和主存之间建立了一条直接数据通路,如磁盘。当然,这条数据通路只是逻辑上的,实际并未直接建立一条物理线路,而通常是通过总线进行的。

#### 07. A

通道是一种特殊的处理器,所以属于硬件技术。SPOOLing、缓冲池、内存覆盖都是在内存的基础上通过软件实现的。

#### 08. C

在 DMA 方式中,设备和内存之间可以成批地进行数据交换而不用 CPU 干预,CPU 只参与预处理和结束过程。

#### 09. B

DMA 不是一个处理机,而是一个控制器,选项 A 错误。CPU 无须给出 DMA 可以解释的程序,而是给 DMA 发出一条命令,同时设置 DMA 控制器中寄存器的值,来启动 DMA,选项 C 错误。DMA 需要 CPU 指出所取数据的地址与长度,这些参数存放在 DMA 控制器的寄存器中,选项 D 错误。


<!-- page: 329 -->

10. D

命令/状态寄存器控制 DMA 的工作模式并给 CPU 反映它当前的状态,地址寄存器存放 DMA 作业时的源地址和目标地址,数据寄存器存放要 DMA 转移的数据,只有堆栈指针寄存器不需要在 DMA 控制器中存放。

11. D

在预处理之前,请求 I/O 的进程通过系统调用进入内核态,因此预处理程序和后处理程序都运行在内核态。负责预处理的进程是请求 I/O 的进程,负责后处理的进程是中断服务例程,中断服务例程不是一个单独的进程。在预处理阶段,CPU 执行相应的设备驱动程序来设置相关的传输参数,需要 CPU 的参与。预处理由请求 I/O 的进程在内核态执行相关操作,之后阻塞其自身,直到系统调用返回,因此在后处理阶段请求 I/O 的进程仍处于阻塞态。

12. A

设备的固有属性决定了设备的使用方式;设备独立性可以提高设备分配的灵活性和设备的利用率;设备安全性可以保证分配设备时不会导致永久阻塞。设备分配时一般无须考虑及时性,及时性是一个与系统性能和用户需求相关的因素,设备分配时应该考虑的问题是如何在保证系统安全和正确运行的前提下,合理地分配和利用设备资源。

13. A

系统为每台设备确定一个编号以便区分和识别设备,这个确定的编号称为设备的绝对号。

14. C

三者的控制关系是层层递进的,选项 C 正确。对于同一组输入/输出命令,要么 CPU 给通道发出命令,要么 CPU 直接给设备控制器发出命令,不存在并行的可能,选项 B 错误。

15. C

因为绘图机和打印机属于两种不同类型的设备,系统只要按设备类型配置设备驱动程序即可,即每类设备只需一个设备驱动程序。

16. B

将系统调用参数翻译成设备操作命令的工作由设备无关的操作系统软件完成。设备无关的操作系统软件是 I/O 软件的一部分,它向上层提供系统调用的接口,根据设备类型选择调用相应的驱动程序。设备驱动程序负责执行操作系统发出的 I/O 命令,因设备的不同而不同。

17. C

设备驱动程序负责将上层软件发来的抽象 I/O 要求转换为具体要求,发送给设备控制器,控制设备工作。设备驱动程序需要向设备寄存器写入命令,以控制设备的工作状态和数据传输方式。

18. A

这台打印机每分钟打印 $50 \times 80 \times 6 = 24000$ 个字符,即每秒打印 400 个字符。每个字符打印中断需要占用 CPU 时间 $50\mu \mathrm{s}$,所以每秒用于中断的系统开销为 $400 \times 50\mu \mathrm{s} = 20\mathrm{ms}$。若使用中断驱动 I/O,则 CPU 剩余的 $980\mathrm{ms}$ 可用于其他处理,中断的开销占 CPU 的 $2\%$。因此,使用中断驱动 I/O 方式运行这台打印机是有意义的。

19. C

在中断 I/O 方式下,由中断服务程序来完成数据的输入和输出,C 错误。在中断响应阶段,由硬件完成 CPU 模式的转换,并保存用户程序的断点,中断源的识别可以采用硬件识别法。

20. C

在程序直接控制方式下,用户进程在 I/O 过程中不会被阻塞,驱动程序完成用户进程的 I/O 请求后才结束,CPU 和 I/O 操作串行。在中断控制方式下,驱动程序启动第一次 I/O 操作后,将


<!-- page: 330 -->

调出其他进程执行,而当前用户进程被阻塞,CPU和设备准备并行。在DMA方式下,驱动程序对DMA控制器初始化后,便发送“启动DMA”命令,在外设和主存之间传送数据,同时CPU执行调度程序,转其他进程执行,当前用户进程被阻塞时,CPU和数据传送并行。

## 21. C

中断处理结束后,是否返回到被中断的进程,有两种情况:①采用的是屏蔽中断方式(单重中断),此时会返回被中断的进程。②采用的是中断嵌套方式(多重中断),若没有更高优先级的中断请求,则会返回被中断的进程;否则,系统将处理更高优先级的中断请求。

## 22. A

块设备是指数据的存取和传输都是以数据块为单位的设备,其特征是传输速率较高且可寻址,典型的块设备(如磁盘)通常采用DMA方式。字符设备(也称滤设备)是指数据的存取和传输是以字符为单位的设备,如键盘、打印机等,字符设备的传输速率较低且不可寻址。

## 23. B

键盘是典型的通过中断I/O方式工作的外设,当用户输入信息时,计算机响应中断并通过中断处理程序获得输入信息。

## 24. B

输入/输出软件一般从上到下分为4个层次:用户层、与设备无关的软件层、设备驱动程序及中断处理程序。与设备无关的软件层也就是系统调用的处理程序。

当用户使用设备时,首先在用户程序中发起一次系统调用,操作系统的内核接到该调用请求后,请求调用处理程序进行处理,再转到相应的设备驱动程序,当设备准备好或所需数据到达后,设备硬件发出中断,将数据按上述调用顺序逆向回传到用户程序中。

## 25. A

考查内容同上题。设备管理软件一般分为4个层次:用户层、与设备无关的系统调用处理层、设备驱动程序及中断处理程序。

## 26. B

DMA的传送过程分为预处理、数据传送和后处理三个阶段。在预处理阶段,由CPU初始化DMA控制器中的有关寄存器、设置传送方向、测试并启动设备等。在数据传送阶段,完全由DMA控制,DMA控制器接管系统总线。在后处理阶段,DMA控制器向CPU发送中断请求,CPU执行中断服务程序做DMA结束处理。因此,正确的执行顺序是②③①④。

## 二、综合应用题

### 01.【解答】

时钟中断频率为 $60\mathrm{Hz}$,因此中断周期为1/60s,每个时钟周期中用于中断处理的时间为2ms,因此比率为 $0.002 / (1 / 60) = 12\%$。

### 02.【解答】

因为一个字符占10位,因此在56kb/s的速率下,每秒传送 $56000 / 10 = 5600$ 个字符,即产生5600次中断。每次中断需0.1ms,因此处理调制解调器占用的CPU时间共为 $5600\times 0.1\mathrm{ms} = 560\mathrm{ms}$,占 $56\%$ 的CPU时间。

## 5.2 设备独立性软件

在学习本节时,请读者思考以下问题:


<!-- page: 331 -->

1)当处理机和外部设备的速度差距较大时,有什么办法可以解决这个问题?
2)什么是设备的独立性?引入设备的独立性有什么好处?

## 5.2.1 设备独立性软件

也称为设备无关的软件,是 I/O 系统的最高层软件,它的下层是设备驱动程序,其界限因操作系统和设备的不同而有所差异。比如,一些本应由设备独立性软件实现的功能,也可能放在设备驱动程序中实现。这样的差异主要是出于对操作系统、设备独立性软件和设备驱动程序运行效率等多方面因素的权衡。总体而言,设备独立性软件包括执行所有设备公有操作的软件。

## 5.2.2 高速缓存与缓冲区

### 1. 磁盘高速缓存(Disk Cache)

**前置通道** 设置磁盘缓冲区的目的(2015)

操作系统中使用磁盘高速缓存技术来提高磁盘的 I/O 速度,对访问高速缓存要比访问原始磁盘数据更为高效。例如,正在运行进程的数据既存储在磁盘上,又存储在物理内存上,也被复制到 CPU 的二级和一级高速缓存中。不过,磁盘高速缓存技术不同于通常意义下的介于 CPU 与内存之间的小容量高速存储器,而是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存逻辑上属于磁盘,物理上是驻留在内存中的盘块。

磁盘高速缓存在内存中分为两种形式:一种是在内存中开辟一个单独的空间作为缓存区,大小固定;另一种是将未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘 I/O 时共享。

### 2. 缓冲区(Buffer)

在设备管理子系统中,引入缓冲区的目的主要如下:

1)缓和 CPU 与 I/O 设备间速度不匹配的矛盾。
2)减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制。
3)解决基本数据单元大小(数据粒度)不匹配的问题。
4)提高 CPU 和 I/O 设备之间的并行性。

缓冲区的实现方法如下:

1)采用硬件缓冲器,但由于成本太高,除一些关键部位外,一般不采用硬件缓冲器。
2)利用内存作为缓冲区,本节要介绍的正是由内存组成的缓冲区。

根据系统设置缓冲区的个数,缓冲技术可以分为如下几种:

#### (1)单缓冲

每当用户进程发出一个 I/O 请求,操作系统便在内存中为之分配一个缓冲区。通常,一个缓冲区的大小就是一个块。如图 5.6 所示,在块设备输入时,假定从设备将一块数据输入缓冲区的时间为 $T$,操作系统将该缓冲区中的数据传送到工作区的时间为 $M$,而 CPU 对这一块数据进行处理的时间为 $C$。注意,必须等缓冲区装满后才能从缓冲区中取出数据。

**前置通道** 单缓冲的工作时间的理解与计算(2011、2013)

在单缓冲区中,$T$ 是可以和 $C$ 并行的。

当 $T &gt; C$ 时,CPU 处理完一块数据后,暂时不能将下一块数据传送到工作区,必须等待缓冲区装满数据,再将下一块数据从缓冲区传送到工作区,平均处理一块数据的时间为 $T + M$。

当 $T &lt; C$ 时,缓冲区中装满数据后,暂时不能继续送入下一块数据,必须等待 CPU 处理完上一块数据,再将下一块数据从缓冲区传送到工作区,平均处理一块数据的时间为 $C + M$。


<!-- page: 332 -->


图5.6 单缓冲工作示意图

总结:单缓冲区处理每块数据的平均时间为 $\mathrm{Max}(C,T) + M$。

缓冲区是共享资源,因此使用时必须互斥。若CPU尚未取走缓冲区中的数据,则即使设备又生产出新的数据,也无法将其送入缓冲区,此时设备需要等待。

## (2) 双缓冲

为了加快输入和输出速度,提高设备利用率,引入了双缓冲机制,也称缓冲对换。如图5.7所示,当设备输入数据时,先将数据送入缓冲区1,装满后便转向缓冲区2。此时,操作系统可以从缓冲区1中取出数据,送入用户进程,并由CPU对数据进行处理。当缓冲区1中取出的数据处理完后,若缓冲区2已装满,则操作系统又从缓冲区2中取出数据送入用户进程处理,而设备又可以开始将数据送入缓冲区1。可见,双缓冲机制提高了设备和CPU的并行程度。


图5.7 双缓冲工作示意图

仍然假设设备输入数据到缓冲区、数据传送到用户进程和处理的时间分别为 $T$、$M$ 和 $C$。

### 前景表达
双缓冲的工作时间的理解与计算(2011)

在双缓冲区中,$C$ 和 $M$ 是可以与 $T$ 并行的。

当 $T &gt; C + M$ 时,说明设备输入的时间比数据传送和处理的时间多,可使设备连续输入。假设在某个时刻,缓冲区1是空的,缓冲区2是满的,缓冲区2开始向工作区传送数据,缓冲区1开始装入数据。传送并处理的时间为 $C + M$,但缓冲区1还未装满,必须等待缓冲区1装满数据后,才能将下一块数据从缓冲区1传送到工作区,平均处理一块数据的时间为 $T$。

当 $T &lt; C + M$ 时,说明设备输入的时间比数据传送和处理的时间少,可使CPU不必等待设备输入。假设在某个时刻,缓冲区1是空的,缓冲区2是满的,缓冲区2开始向工作区传送数据,缓冲区1开始装入数据。缓冲区1装满数据的时间为 $T$,必须等待缓冲区2中的数据传送并处理完后,才能将下一块数据从缓冲区1传送到工作区,平均处理一块数据的时间为 $C + M$。

总结:双缓冲区处理每块数据的平均时间为 $\mathrm{Max}(C + M, T)$。

若两台机器之间仅配置了单缓冲,如图5.8(a)所示,则它们在任意时刻都只能实现单方向的


<!-- page: 333 -->

数据传输,而绝不允许双方同时向对方发送数据。为了实现双向数据传输,必须在两台机器中都设置两个缓冲区,一个用作发送缓冲区,另一个用作接收缓冲区,如图5.8(b)所示。

(a) 单缓冲区

(b) 双缓冲区
图5.8 双机通信时缓冲区的设置

(3)循环缓冲

在双缓冲机制中,当输入与输出的速度基本匹配时,能取得较好的效果。但若两者的速度相差甚远,则双缓冲区的效果不会太理想。为此,又引入了多缓冲机制,将多个缓冲区组成循环缓冲区的形式,如图5.9所示,灰色表示已装满数据的缓冲区,白色表示空缓冲区。

图5.9 循环缓冲工作示意图

循环缓冲包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区链接成一个循环队列。

循环缓冲中还需设置 in 和 out 两个指针,in 指向第一个可以输入数据的空缓冲区,out 指向第一个可以提取数据的满缓冲区。输入/输出时,in 和 out 指针沿链接方向循环移动。

(4)缓冲池

相比于缓冲区(仅是一块内存空间),缓冲池是包含一个用于管理自身的数据结构和一组操作函数的管理机制,用于管理多个缓冲区。缓冲池可供多个进程共享使用。

缓冲池由多个系统公用的缓冲区组成,缓冲区按其使用状况可以分为:①空缓冲队列,由空缓冲区链接而成的队列;②输入队列,由装满输入数据的缓冲区链接而成的队列;③输出队列,由装满输出数据的缓冲区链接而成的队列。此外还应具有4种工作缓冲区:①用于收容输入数据的工作缓冲区(hin),②用于提取输入数据的工作缓冲区(sin),③用于收容输出数据的工作缓冲区(hout),④用于提取输出数据的工作缓冲区(sout),如图5.10所示。

图5.10 缓冲池的4种工作方式

缓冲池中的缓冲区有以下4种工作方式。

1)收容输入。输入进程需要输入数据时,从空缓冲队列的队首摘下一个空缓冲区,作为收


<!-- page: 334 -->

容输入工作缓冲区,然后将数据输入其中,装满后再将它挂到输入队列的队尾。

2)提取输入。计算进程需要输入数据时,从输入队列的队首取得一个缓冲区,作为提取输入工作缓冲区,从中提取数据,用完该数据后将它挂到空缓冲队列的列尾。

3)收容输出。计算进程需要输出数据时,从空缓冲队列的队首取得一个空缓冲区,作为收容输出工作缓冲区,当其中装满数据后,再将它挂到输出队列的队尾。

4)提取输出。输出进程需要输出数据时,从输出队列的队首取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区,当数据提取完后,再将它挂到空缓冲队列的队尾。

对于循环缓冲和缓冲池,我们只是定性地介绍它们的机理,而不去定量研究它们平均处理一块数据所需要的时间。而对于单缓冲和双缓冲,我们只要按照上面的模板分析,就可以解决任何单缓冲和双缓冲情况下数据块处理时间的问题,以不变应万变。

## 3. 高速缓存与缓冲区的对比

高速缓存是可以保存数据拷贝的高速存储器,访问高速缓存比访问原始数据更高效,速度更快。高速缓存和缓冲区的对比见表5.1。

表 5.1 高速缓存和缓冲区的对比

[tbl-143.md](tbl-143.md)

## 5.2.3 设备分配与回收

### 1. 设备分配概述

设备分配是指根据用户的I/O请求分配所需的设备。分配的总原是充分发挥设备的使用效率,尽可能地既让设备忙碌,又避免由于不合理的分配方法造成进程死锁。

### 2. 设备分配的数据结构

在系统中,可能存在多个通道,每个通道可以连接多个控制器,每个控制器可以连接多个物理设备。设备分配的数据结构要能体现出这种从属关系,各数据结构的介绍如下。

1)设备控制表(DCT):系统为每个设备配置一张DCT,表中的表项就是设备的各个属性,如图5.11所示。在DCT中,应该有下列字段:

图5.11 DCT

设备类型:表示设备类型,如打印机、扫描仪、键盘等。

设备标识符:即物理设备名,每个设备在系统中的物理设备名是唯一的。


<!-- page: 335 -->

设备状态:表示当前设备的状态(忙/闲)。

指向控制器表的指针:每个设备由一个控制器控制,该指针指向对应的控制器表。

重复执行次数或时间:重复执行次数达到规定值仍不成功时,才认为此次I/O失败。

设备队列的队首指针:指向正在等待该设备的进程队列(由进程PCB组成)的队首。

# 注意

当某进程释放某个设备,且无其他进程请求该设备时,系统将该设备DCT中的设备状态改为空闲,即可实现“设备回收”。

2)控制器控制表(COCT):每个设备控制器都对应一张 COCT,如图 5.12(a) 所示。操作系统根据 COCT 的信息对控制器进行操作和管理。每个控制器由一个通道控制,通过表项“与控制器连接的通道表指针”可以找到相应通道的信息。

3)通道控制表(CHCT):每个通道都对应一张 CHCT,如图 5.12(b) 所示。操作系统根据 CHCT 的信息对通道进行操作和管理。一个通道可为多个控制器服务,通过表项“与通道连接的控制器表首址”可以找到该通道管理的所有控制器的信息。

4)系统设备表(SDT):整个系统只有一张 SDT,如图 5.12(c) 所示。它记录已连接到系统中的所有物理设备的情况,每个物理设备对应一个表目。

[tbl-144.md](tbl-144.md)

(a) 控制器控制表COCT

[tbl-145.md](tbl-145.md)

(b) 通道控制表CHCT

[tbl-146.md](tbl-146.md)

(c) 系统设备表SDT
图5.12 COCT、CHCT和SDT

在多道程序系统中,进程数多于资源数,因此要有一套合理的分配原则,主要考虑的因素有设备的固有属性、设备的分配算法、设备分配的安全性以及设备的独立性。

# 3. 设备分配时应考虑的因素

## 备注指标

设备分配需要考虑的因素(2023)

(1)设备的固有属性

设备的固有属性可分成三种,对它们应采取不同的分配策略。

1)独占设备:将它分配给某个进程后,便由该进程独占,直至进程完成或释放该设备。

2)共享设备:可将它同时分配给多个进程,需要合理调度各个进程访问该设备的先后次序。

3)虚拟设备:虚拟设备属于可共享设备,可将它同时分配给多个进程使用。

(2)设备分配算法

针对设备分配,通常只采用以下两种分配算法:

1)FCFS算法。该算法根据各个进程对某个设备提出请求的先后次序,将这些进程排成一个设备请求队列,设备分配程序总是将设备首先分配给队首进程。

2)最高优先级优先算法。在利用该算法形成设备队列时,优先级高的进程排在设备队列前面,而对于优先级相同的I/O请求,则按FCFS原则排队。

(3)设备分配中的安全性

设备分配中的安全性是指在设备分配中应防止发生进程死锁。


<!-- page: 336 -->

1)安全分配方式。每当进程发出 I/O 请求后,便进入阻塞态,直到其 I/O 操作完成时才被唤醒。这样,进程一旦获得某种设备后便会阻塞,不能再请求任何资源,而在它阻塞时也不保持任何资源。其优点是设备分配安全,缺点是 CPU 和 I/O 设备是串行工作的。

2)不安全分配方式。进程在发出 I/O 请求后仍继续运行,需要时又会发出第二个、第三个 I/O 请求等。仅当进程所请求的设备已被另一进程占用时,才进入阻塞态。优点是一个进程可同时操作多个设备,使进程推进迅速;缺点是有可能造成死锁。