5.1.2 I/O 控制方式
2026 旧版 · 非 2027 主源 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照
## 5.1.2 I/O 控制方式
I/O 控制是指控制设备和主机之间的数据传送。在 I/O 控制方式的发展过程中,始终贯穿着这样一个宗旨:尽量减少 CPU 对 I/O 控制的干预,将 CPU 从繁杂的 I/O 控制事务中解脱出来,以便其能更多地去执行运算任务。I/O 控制方式共有 4 种,下面分别加以介绍。
### 1. 程序直接控制方式
CPU 对 I/O 设备的控制采取轮询的 I/O 方式,也称程序轮询方式。如图 5.3(a) 所示,CPU 向设备控制器发出一条 I/O 指令,启动从 I/O 设备读取一个字(节),然后不断地循环测试设备状态(称为轮询),直到确定该字(节)已在设备控制器的数据寄存器中。于是 CPU 将数据寄存器中的数据取出,送入内存的指定单元,这样便完成了一个字(节)的 I/O 操作。
(a) 程序直接控制方式
图 5.3 I/O 控制方式的操作流程
(b) 中断驱动方式
(c) DMA 方式
这种方式简单且易于实现,但缺点也很明显。CPU 的绝大部分时间都处于等待 I/O 设备状态的循环测试中,CPU 和 I/O 设备只能串行工作,由于 CPU 和 I/O 设备的速度差异很大,导致 CPU 的利用率相当低。而 CPU 之所以要不断地测试 I/O 设备的状态,就是因为在 CPU 中未采用中断机制,使 I/O 设备无法向 CPU 报告它已完成了一个字(节)的输入操作。
### 2. 中断驱动方式
中断驱动方式的思想是允许 I/O 设备主动打断 CPU 的运行并请求服务,从而“解放” CPU,使得 CPU 向设备控制器发出一条 I/O 指令后可以继续做其他有用的工作。如图 5.3(b) 所示,我们从设备控制器和 CPU 两个角度分别来看中断驱动方式的工作过程。
从设备控制器的角度来看:设备控制器从 CPU 接收一个读命令,然后从设备读数据。一旦数据读入设备控制器的数据寄存器,便通过控制线给 CPU 发出中断信号,表示数据已准备好,然后等待 CPU 请求该数据。设备控制器收到 CPU 发出的取数据请求后,将数据放到数据总线上,传到 CPU 的寄存器中。至此,本次 I/O 操作完成,设备控制器又可开始下一次 I/O 操作。
① 本节的内容在《计算机组成原理考研复习指导》一书的 7.3 节中描述得比较详细,建议读者结合复习。
<!-- page: 321 -->
**命题追踪** ▶ 中断处理程序执行时请求进程的状态(2017、2023)
**命题追踪** ▶ 键盘接收数据的中断过程分析(2010、2024)
从 CPU 的角度来看:当前运行进程发出读命令,该进程将被阻塞,然后保存该进程的上下文,转去执行其他程序。在每个指令周期的末尾,CPU 检查中断信号。当有来自设备控制器的中断时,CPU 保存当前运行进程的上下文,转去执行中断处理程序以处理该中断请求。这时,CPU 从设备控制器读一个字的数据传送到寄存器,并存入主存。中断处理完后解除发出 I/O 命令的进程的阻塞状态,然后恢复该进程(或其他进程)的上下文,然后继续运行。
相比于程序轮询 I/O 方式,在中断驱动 I/O 方式中,设备控制器通过中断主动向 CPU 报告 I/O 操作已完成,不再需要轮询,在设备准备数据期间,CPU 和设备并行工作,CPU 的利用率得到明显提升。但是,中断驱动方式仍有两个明显的问题:① 设备与内存之间的数据交换都必须经过 CPU 中的寄存器;② CPU 是以字(节)为单位进行干预的,若将这种方式用于块设备的 I/O 操作,则显然是极其低效的。因此,中断驱动 I/O 方式的速度仍然受限。
## 3. DMA 方式
DMA(直接存储器存取)方式的基本思想是,在 I/O 设备和内存之间开辟直接的数据交换通路,彻底“解放”CPU。DMA 方式的特点如下:
1)基本传送单位是数据块,而不再是字(节)。
2)所传送的数据,是从设备直接送入内存的,或者相反,而不再经过 CPU。
3)仅在传送一个或多个数据块的开始和结束时,才需要 CPU 干预。
图 5.4 列出了 DMA 控制器的组成。
图 5.4 DMA 控制器的组成
为了实现主机和控制器之间直接交换成块的数据,须在 DMA 控制器中设置如下 4 类寄存器:
1)命令/状态寄存器(CR)。暂存从 CPU 发来的 I/O 命令,或设备的状态信息。
2)内存地址寄存器(MAR)。在输入时,它存放将数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
3)数据寄存器(DR)。暂存从设备到内存,或从内存到设备的数据。
4)数据计数器(DC)。存放本次要传送的字(节)数。
**命题追踪** ▶ DMA 方式的工作流程(2017)
如图 5.3(c) 所示,DMA 方式的工作过程是:CPU 接收到设备的 DMA 请求时,它向 DMA 控制器发出一条命令,同时设置 MAR 和 DC 初值,启动 DMA 控制器,然后继续其他工作。之后 CPU 就将 I/O 控制权交给 DMA 控制器,由 DMA 控制器负责数据传送。DMA 控制器直接与内存交互,每次传送一个字,这个过程不需要 CPU 参与。整个数据传送结束后,DMA 控制器向 CPU
<!-- page: 322 -->
发送一个中断信号。因此只有在传送开始和结束时才需要 CPU 的参与。
DMA 方式的优点:数据传输以“块”为单位,CPU 介入的频率进一步降低;数据传送不再经过 CPU 的寄存器,CPU 和设备的并行操作程度得到了进一步提升。
*4. 通道控制方式
I/O 通道是一种特殊的处理机,它可执行一系列通道指令。设置通道后,CPU 只需向通道发送一条 I/O 指令,指明通道程序在内存中的位置和要访问的 I/O 设备,通道收到该指令后,执行通道程序,完成规定的 I/O 任务后,向 CPU 发出中断请求。通道方式可以实现 CPU、通道和 I/O 设备三者的并行工作,从而更有效地提高整个系统的资源利用率。
通道与一般处理机的区别是:通道指令的类型单一,没有自己的内存,通道所执行的通道程序是放在主机的内存中的,也就是说通道与 CPU 共享内存。
通道与 DMA 方式的区别是:DMA 方式需要 CPU 来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。另外,每个 DMA 控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。
每种方式的优点都是解决了上一种方式的最大缺点。总体而言,I/O 控制方式的发展过程就是要尽量减少 CPU 对 I/O 过程的干预,将 CPU 从烦杂的 I/O 控制事务中解脱出来。下面用一个例子来总结这 4 种 I/O 方式。想象一位客户要去裁缝店做一批衣服的情形。
采用程序直接控制方式时,裁缝没有客户的联系方式,客户必须每隔一段时间去裁缝店看看裁缝将衣服做好了没,这就浪费了客户不少的时间。采用中断驱动方式时,裁缝有客户的联系方式,每当他做完一件衣服后,就给客户打电话,让客户去取,与程序直接控制方式相比能省去客户不少麻烦,但每完成一件衣服就让客户去取一次,仍然很浪费客户的时间。采用 DMA 方式时,客户花钱雇一位秘书,并向秘书交代好将衣服暂存在某个仓库,裁缝直接跟秘书联系,秘书负责将衣服取回并放在指定的仓库,每处理完 100 件衣服,秘书就要向客户报告一次,大大节省了客户的时间。采用通道控制方式时,秘书拥有更高的自主权,与 DMA 方式相比,秘书可以决定将衣服存放在何处,而不需要客户操心。而且,何时向客户报告,是处理完 100 件衣服就报告,还是处理完 10000 件衣服才报告,秘书可以自行决定。客户有可能在多个裁缝那里订了货,一位 DMA 类的秘书只能负责与一位裁缝沟通,但通道类秘书却可以与多名裁缝进行交互。
5.1.3 I/O 软件层次结构
I/O 软件涉及的面很宽,往下与硬件有着密切关系,往上又与虚拟存储器系统、文件系统和用户直接交互,它们都需要 I/O 软件来实现 I/O 操作。
附图通过 I/O 子系统各层次的排序及功能(2012、2013)
为使复杂的 I/O 软件能具有清晰的结构、良好的可移植性和易适应性,目前普遍采用层次结构的 I/O 软件。将系统中的设备管理模块分为若干层次,每层都是利用其下层提供的服务,完成输入/输出功能中的某些子功能,并屏蔽这些功能实现的细节,向高层提供服务。在层次结构的 I/O 软件中,只要层次间的接口不变,对某一层次中的软件的修改都不会引起其下层或高层代码的变更,仅最低层才涉及硬件的具体特性。一个比较合理的层次划分如图 5.5 所示。整个 I/O 软件可以视为具有 4 个层次的系统结构,各层次及其功能如下:
(1)用户层软件
实现与用户交互的接口,用户可直接调用在用户层提供的、与 I/O 操作有关的库函数,对设备进行操作。通常大部分的 I/O 软件都在操作系统内核,但仍有一小部分在用户层,包括与用户
<!-- page: 323 -->
程序链接在一起的库函数。用户层I/O软件必须通过一组系统调用来获取操作系统服务。
图5.5 I/O层次结构
(2)设备独立性软件
**格局图图** ▶ 设备独立性所涵盖的内容(2020)
用于实现用户程序与设备驱动器的统一接口、设备命名、设备保护,以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
设备独立性也称设备无关性,其含义是指应用程序所用的设备不局限于某个具体的物理设备。为实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名来请求使用某类设备;而在系统实际执行时,必须将逻辑设备名映射成物理设备名。
使用逻辑设备名的好处是:①增加设备分配的灵活性;②易于实现I/O重定向,所谓I/O重定向,是指用于I/O操作的设备可以更换(重定向),而不必改变应用程序。
为了实现设备独立性,必须再在驱动程序之上设置一层设备独立性软件。总体而言,设备独立性软件的主要功能可分为以下两个方面。①执行所有设备的公有操作,包括:对设备的分配与回收;将逻辑设备名映射为物理设备名;对设备进行保护,禁止用户直接访问设备;缓冲管理;差错控制;提供独立于设备的大小统一的逻辑块,屏蔽设备之间信息交换单位大小和传输速率的差异。②向用户层(或文件层)提供统一接口。无论何种设备,它们向用户所提供的接口应是相同的。例如,对各种设备的读/写操作,在应用程序中都统一使用read/write命令等。
(3)设备驱动程序
与硬件直接相关,每类设备需要配置一个设备驱动程序。设备驱动程序负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序,它是I/O进程与设备控制器之间的通信程序,通常以进程的形式存在。设备驱动程序向上层用户程序提供一组标准接口,设备具体的差别被设备驱动程序所封装,用于接收上层软件发来的抽象I/O要求,如read和write命令,转换为具体要求后,发送给设备控制器,控制I/O设备工作;它也将由设备控制器发来的信号传送给上层软件,从而为I/O内核子系统隐藏设备控制器之间的差异。
(4)中断处理程序
当I/O操作完成时,设备控制器发送一个中断信号,CPU响应中断后,根据中断类型号找到相应的中断处理程序进行处理,处理完后,再返回到被中断的进程。
中断处理层的主要任务有:进行进程上下文的切换,对处理中断信号源进行测试,读取设备状态和修改进程状态等。中断处理与硬件紧密相关,对用户而言,应尽量加以屏蔽,因此应放在操作系统的底层,系统的其余部分尽可能少地与之发生联系。
类似于文件系统的层次结构,I/O子系统的层次结构也是我们需要记忆的内容,但记忆不是死记硬背,我们以用户对设备的一次命令来总结各层次的功能,帮助各位读者记忆。
<!-- page: 324 -->
## 创造追踪
> 磁盘 I/O 操作中各层次的处理过程(2011)
例如,①当用户要读取某设备的内容时,通过操作系统提供的 read 命令接口,这就经过了用户层。②操作系统提供给用户使用的接口一般是统一的通用接口,也就是几乎每个设备都可以响应的统一命令,如 read 命令,用户发出的 read 命令,首先经过设备独立层进行解析,然后交往下层。③接下来,不同类型的设备对 read 命令的行为有所不同,如磁盘接收 read 命令后的行为与打印机接收 read 命令后的行为是不同的。因此,需要针对不同的设备,将 read 命令解析成不同的指令,这就经过了设备驱动层。④命令解析完毕后,需要中断正在运行的进程,转而执行 read 命令,这就需要中断处理程序。⑤最后,命令真正抵达硬件设备,硬件设备的控制器按照上层传达的命令操控硬件设备,完成相应的功能。
## 5.1.4 应用程序 I/O 接口
### 1. I/O 接口的分类
在 I/O 系统与高层之间的接口中,根据设备类型的不同,又进一步分为若干类。
#### (1)字符设备接口
字符设备是指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。基本特征是传输速率较低、不可寻址,并且在输入/输出时通常采用中断驱动方式。
get 和 put 操作,由于字符设备不可寻址,只能采取顺序存取方式,通常为字符设备建立一个字符缓冲区,用户程序通过 get 操作从缓冲区获取字符,通过 put 操作将字符输出到缓冲区。
in-control 指令,字符设备类型繁多,差异甚大,因此在接口中提供一种通用的 in-control 指令来处理它们(包含了许多参数,每个参数表示一个与具体设备相关的特定功能)。
字符设备都属于独占设备,为此接口中还需要提供打开和关闭操作,以实现互斥共享。
#### (2)块设备接口
块设备是指数据的存取和传输是以数据块为单位的设备,典型的块设备是磁盘。基本特征是传输速率较高、可寻址。磁盘设备的 I/O 常采用 DMA 方式。
块设备接口支持将上层发来的打开、读、写和关闭等抽象命令,映射为设备能识别的较低层的具体操作。块设备接口还隐藏了磁盘的二维结构,每个扇区的地址需要用磁道号和扇区号来表示,该接口将所有扇区从 0 到 $n - 1$ 依次编号,这样,将二维结构变为了一种线性序列。
内存映射接口通过内存的字节数组来访问磁盘,而不提供读/写磁盘操作。映射文件到内存的系统调用返回包含文件副本的一个虚拟内存地址。只在需要访问内存映像时,才由虚拟存储器实际调页。内存映射文件的访问如同内存读/写一样简单,极大地方便了程序员。
#### (3)网络设备接口
现代操作系统都提供面向网络的功能,因此还需要提供相应的网络软件和网络通信接口,使计算机能够通过网络与网络上的其他计算机进行通信或上网浏览。
许多操作系统提供的网络 I/O 接口为网络套接字接口,套接字接口的系统调用使应用程序创建的本地套接字连接到远程应用程序创建的套接字,通过此连接发送和接收数据。
### 2. 组塞 I/O 和非组塞 I/O
操作系统的 I/O 接口还涉及两种模式:组塞和非组塞。
组塞 I/O 是指当用户进程调用 I/O 操作时,进程就被阻塞,并移到阻塞队列,I/O 操作完成后,进程才被唤醒,移到就绪队列。当进程恢复执行时,它收到系统调用的返回值,并继续处理数据。大多数操作系统提供的 I/O 接口都是采用阻塞 I/O。例如,你和朋友去咖啡店买咖啡,
<!-- page: 325 -->
点完单后,因为不知道咖啡什么时候做好,所以只能一直等待,其他什么事也不能干。
优点:操作简单,实现难度低,适合并发量小的应用开发。
缺点:I/O 执行阶段进程会一直阻塞下去。
非阻塞 I/O 是指当用户进程调用 I/O 操作时,不阻塞该进程,但进程需要不断询问 I/O 操作是否完成,在 I/O 执行阶段,进程还可以做其他事情。当问到 I/O 操作完成后,系统将数据从内核复制到用户空间,进程继续处理数据。例如,你和朋友去咖啡店买咖啡,吸取了上次的教训,点完单后顺便逛逛商场,因为担心错过取餐,所以每隔一段时间就过来询问服务员。
优点:进程在等待 I/O 期间不会阻塞,可以做其他事情,适合并发量大的应用开发。
缺点:轮询方式询问 I/O 结果,会占用 CPU 的时间。
## 5.1.5 本节小结
本节开头提出的问题的参考答案如下。
I/O 管理要完成哪些功能?
I/O 管理需要完成以下 4 部分内容:
1)状态跟踪。要能实时掌握外部设备的状态。
2)设备存取。要实现对设备的存取操作。
3)设备分配。在多用户环境下,负责设备的分配与回收。
4)设备控制。包括设备的驱动、完成和故障的中断处理。
## 5.1.6 本节习题精选
### 一、单项选择题
01. 下列关于设备属性的叙述中,正确的是()。
A. 字符设备的基本特征是可寻址到字节,即能指定读/写操作的字节地址
B. 共享设备必须是可寻址的和可随机访问的设备
C. 共享设备是指同一时刻内允许多个进程同时访问的设备
D. 在分配共享设备和独占设备时都可能引起进程死锁
02. 下列关于虚拟设备的含义的描述中,正确的是()。
A. 允许用户使用比系统中具有的物理设备更多的设备
B. 允许用户以标准化方式来使用物理设备
C. 把一个物理设备变换成多个对应的逻辑设备
D. 允许用户程序不必全部装入主存便可使用系统中的设备
03. 磁盘设备的 I/O 控制主要采取( )方式。
A. 位
B. 字节
C. 検
D. DMA
04. 为了便于上层软件的编制,设备控制器通常需要提供()。
A. 控制寄存器、状态寄存器和控制命令
B. I/O 地址寄存器、工作方式状态寄存器和控制命令
C. 中断寄存器、控制寄存器和控制命令
D. 控制寄存器、编程空间和控制逻辑寄存器
05. 在设备控制器中用于实现设备控制功能的是()。
A. CPU
B. 设备控制器与处理器的接口
C. I/O 逻辑
D. 设备控制器与设备的接口
<!-- page: 326 -->
06. DMA方式是在( )之间建立一条直接数据通路。
A. I/O设备和主存
B. 两个I/O设备
C. I/O设备和CPU
D. CPU和主存
07. 在操作系统中,( )指的是一种硬件机制。
A. 通道技术
B. 缓冲池
C. SPOOLing技术
D. 内存覆盖技术
08. 若 I/O 设备与存储设备进行数据交换不经过 CPU 来完成,则这种数据交换方式是( )。
A. 程序查询
B. 中断方式
C. DMA方式
D. 直接存取方式
09. 下列关于DMA方式的描述中,正确的是( )。
A. DMA 是一个专门负责输入/输出的处理机
B. 数据传输过程由 DMA 控制器负责,CPU 只在预处理和后处理阶段进行干预
C. CPU 通过程序的方式给出 DMA 可以解释的程序
D. DMA 不需要 CPU 指出所取数据的地址与长度
10. 计算机系统中,不属于 DMA 控制器的是( )。
A. 命令/状态寄存器
B. 内存地址寄存器
C. 数据寄存器
D. 堆栈指针寄存器
11. DMA 传输前需要进行预处理,传输后需要进行后处理,则下列说法中正确的是( )。
A. 预处理程序运行在用户态,后处理程序运行在内核态
B. 负责预处理和后处理程序的进程都是请求 I/O 的进程
C. 预处理阶段不需要 CPU 参与,后处理阶段需要 CPU 参与
D. 预处理阶段请求 I/O 的进程处于运行态,后处理阶段处于阻塞态
12. 在下列问题中,( )不是设备分配中应考虑的问题。
A. 及时性
B. 设备的固有属性
C. 设备独立性
D. 安全性
13. 将系统中的每台设备按某种原则统一进行编号,这些编号作为区分硬件和识别设备的代号,该编号称为设备的( )。
A. 绝对号
B. 相对号
C. 类型号
D. 符号
14. 关于通道、设备控制器和设备之间的关系,以下叙述中正确的是( )。
A. 设备控制器和通道可以分别控制设备
B. 对于同一组输入/输出命令,设备控制器、通道和设备可以并行工作
C. 通道控制设备控制器、设备控制器控制设备工作
D. 以上答案都不对
15. 一个计算机系统配置了 2 台相同类型的绘图机和 3 台相同类型的打印机,为了正确驱动这些设备,系统应该提供( )个设备驱动程序。
A. 5
B. 3
C. 2
D. 1
16. 将系统调用参数翻译成设备操作命令的工作由( )完成。
A. 用户层 I/O
B. 设备无关的操作系统软件
C. 中断处理
D. 设备驱动程序
17. 向设备寄存器的写命令是在 I/O 软件的( )中完成的。
A. 用户层软件
B. 设备独立性软件
C. 设备驱动程序
D. 中断处理程序
18. 一个典型的文本打印页面有 50 行,每行 80 个字符,假定一台标准的打印机每分钟能打印 6 页,向打印机的输出寄存器中写一个字符的时间很短,可忽略不计。若每打印一个字符都需要花费 $50\mu s$ 的中断处理时间(包括所有服务),使用中断驱动 I/O 方式运行这台打印机,中断的系统开销占 CPU 的百分比为( )。
A. $2\%$
B. $5\%$
C. $20\%$
D. $50\%$
<!-- page: 327 -->
19. 在接收和处理一个输入设备的中断的过程中,一定不由硬件来完成的工作是( )。
A. 判断产生中断的类型
B. CPU 模式由用户态切换到内核态
C. 主机获取设备输入
D. 保存用户程序的断点
20. 下列几种 I/O 方式中,会导致用户进程进入阻塞态的是( )。
I. 程序直接控制
II. 中断方式
III. DMA 方式
A. II
B. I、III
C. II、III
D. I、II、III
21. 当一个进程请求 I/O 操作时,该进程将被挂起,直到 I/O 设备完成 I/O 操作后,设备控制器便向 CPU 发送一个中断请求,CPU 响应后便转向中断处理程序,下列关于中断处理程序的说法中,错误的是( )。
A. 中断处理程序将设备控制器中的数据传送到内存的缓冲区(读入),或将要输出的数据传送到设备控制器(输出)。
B. 对于不同的设备,有不同的中断处理程序
C. 中断处理结束后,需要恢复 CPU 现场,此时一定会返回到被中断的进程
D. I/O 操作完成后,驱动程序必须检查本次 I/O 操作中是否发生了错误
22. 在 I/O 系统与高层之间的接口中,根据设备类型的不同,又进一步分为若干类接口,若某设备的数据传输速率较高,且可寻址,则比较适合采用( )。
A. 块设备接口
B. 网络设备接口
C. 字符设备接口
D. 流设备接口
23.【2010 统考真题】本地用户通过键盘登录系统时,首先获得键盘输入信息的程序是( )。
A. 命令解释程序
B. 中断处理程序
C. 系统调用服务程序
D. 用户登录程序
24.【2011 统考真题】用户程序发出磁盘 I/O 请求后,系统的正确处理流程是( )。
A. 用户程序 → 系统调用处理程序 → 中断处理程序 → 设备驱动程序
B. 用户程序 → 系统调用处理程序 → 设备驱动程序 → 中断处理程序
C. 用户程序 → 设备驱动程序 → 系统调用处理程序 → 中断处理程序
D. 用户程序 → 设备驱动程序 → 中断处理程序 → 系统调用处理程序
25.【2012 统考真题】操作系统的 I/O 子系统通常由 4 个层次组成,每层明确定义了与邻近层次的接口,其合理的层次组织排列顺序是( )。
A. 用户级 I/O 软件、设备无关软件、设备驱动程序、中断处理程序
B. 用户级 I/O 软件、设备无关软件、中断处理程序、设备驱动程序
C. 用户级 I/O 软件、设备驱动程序、设备无关软件、中断处理程序
D. 用户级 I/O 软件、中断处理程序、设备无关软件、设备驱动程序
26.【2017 统考真题】系统将数据从磁盘读到内存的过程包括以下操作:
① DMA 控制器发出中断请求
② 初始化 DMA 控制器并启动磁盘
③ 从磁盘传输一块数据到内存缓冲区
④ 执行“DMA 结束”中断服务程序
正确的执行顺序是( )。
A. ③ → ① → ② → ④
B. ② → ③ → ① → ④
C. ② → ① → ③ → ④
D. ① → ② → ④ → ③