第五章:输入/输出(I/O)管理
知识框架
5.1 I/O 管理概述
5.1.1 I/O 设备
概述
I/O设备管理是操作系统设计中最凌乱也最具挑战性的部分。由于它包含了很多领域的不同设备以及与设备相关的应用程序,因此很难有一个通用且一致的设计方案。所以在理解设备管理之前,应该先了解具体的I/O设备类型。
分类
1、按使用特性分类
- 人机交互类外部设备
- 用于与计算机用户之间交互的设备,如打印机、显示器、鼠标、 键盘等。
- 这类设备数据交换速度相对较慢,通常是以字节为单位进行数据交换的。
- 存储设备
- 用于存储程序和数据的设备,如磁盘、磁带、光盘等。
- 这类设备用于数据交换,速度较快,通常以多字节组成的块为单位进行数据交换。
- 网络通信设备
- 用于与远程设备通信的设备,如各种网络接口、调制解调器等。
- 其速度介于前两类设备之间。网络通信设备在使用和管理上与前两类设备也有很大不同。
2、按传输速率分类
-
低速设备:传输速率仅为每秒几个到数百个字节的一类设备,如键盘、 鼠标等。
-
中速设备:传输速率在每秒数千个字节至数万个字节的一类设备,如行式打印机、激光打印机等。
-
高速设备:传输速率在数百个千字节至千兆字节的一类设备,如磁带机、磁盘机、光盘机等。
3、接信息交换的单位分类
-
块设备
- 由于信息的存取总是以数据块为单位的,所以存储信息的设备称为块设备。它属于有结构设备,如磁盘等。
- 磁盘设备的基本特征是传输速率较高,以及可寻址,即对它可随机地读/写任一块。
-
字符设备
- 用于数据输入/输出的设备为字符设备,因为其传输的基本单位是字符。它属于无结构类型,如交互式终端机、打印机等。
- 它们的基本特征是传输速率低、不可寻址,并且在输入/输出时常采用中断驱动方式。
5.1.2 I/O 控制方式
概述
设备管理的主要任务之一是控制设备和内存或处理机之间的数据传送。
外围设备和内存之间的输入/输出控制方式有以下4种:
1、程序直接控制方式
- 计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU需要对外设状态进行循环检查,直到确定该字已经在 I/O 控制器的数据寄存器中。
- 优点:简单易于实现。
- 缺点:由于CPU的高速性和I/O设备的低速性,致使CPU的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中,导致CPU 的利用率相当低。
2、中断驱动方式
- 允许I/O设备主动打断CPU的运行并请求服务,从而 “解放” CPU, 使得其向I/O控制器发送读命令后可以继续做其他有用的工作。
- 中断驱动方式比程序直接控制方式有效, 但由于数据中的每个字在存储器与I/O控制器之间的传输都必须经过CPU,这就导致了中断驱动方式仍然会消耗较多的CPU时间。
3、DMA方式
- 在I/O设备和内存之间开辟直接的数据交换通路,彻底 “解放” CPU。
- DMA 方式的特点:
- 基本单位是数据块。
- 所传送的数据,是从设备直接送入内存的,或者相反。
- 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在DMA控制器的控制下完成的。
- 为了实现在主机与控制器之间成块数据的直接交换,必须在DMA控制器中设置如下四类寄存器:
- 命令/状态寄存器( CR ):用于接收从CPU发来的I/O命令或有关控制信息,或设备的状态。
- 内存地址寄存器( MAR ):在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
- 数据寄存器( DR ):用于暂存从设备到内存,或从内存到设备的数据。
- 数据计数器( DC ):存放本次要传送的字(节)数。
- DMA 控制方式 & 中断驱动方式的主要区别:
- 中断驱动方式在每个数据需要传输时中断CPU,而DMA控制方式则是在所要求传送的一批数据全部传送结束时才中断CPU。
- 中断驱动方式数据传送是在中断处理时由CPU控制完成的,而DMA控制方式则是在DMA控制器的控制下完成的。
4、通道控制方式
- I/O通道是指专门负责输入/输出的处理机。I/O通道方式是DMA方式的发展,可以实现CPU、通道和I/O设备三者的并行操作,从而更有效地提高整个系统的资源利用率。
- I/O通道与一般处理机的区别:通道指令的类型单一,没有自己的内存,通道所执行的通道程序是放在主机的内存中的,也就是说通道与CPU共享内存。
- I/O通道与DMA方式的区别:
- DMA方式需要CPU来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。
- 每个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。
5.1.3 I/O 子系统的层次结构
整个 I/O 系统可以看成具有四个层次的系统结构,各层次及其功能如下:
1、用户层I/O软件
- 实现与用户交互的接口,用户可直接调用在用户层提供的、与I/O操作有关的库函数,对设备进行操作。
- 用户层软件必须通过一组系统调用来获取操作系统服务。
2、设备独立性软件
- 用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护、 以及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
- 设备独立性也称设备无关性,使得应用程序独立于具体使用的物理设备。为了实现设备独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名来请求使用某类设备;而在系统实际执行时,必须将逻辑设备名映射成物理设备名使用。
- 使用逻辑设备名优点:① 增加设备分配的灵活性。② 易于实现I/O重定向 ( I/O重定向,是指用于I/O操作的设备可以更换,而不必改变应用程序)。
- 设备独立性软件的主要功能:① 执行所有设备的公有操作。② 向用户层(或文件层)提供统一接口。
3、设备驱动程序
与硬件直接相关,负责具体实现系统对设备发出的操作指令 ,驱动I/O设备工作的驱动程序。
4、中断处理程序
用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回到被中断进程。
5、硬件设备
I/O设备通常包括一个机械部件和一个电子部件,为了达到设计的模块性和通用性,一般将其分开:
- 电子部件:又称为设备控制器(或适配器),在个人计算机中,通常是一块插入主板扩充槽的印刷电路板。
- 机械部件:设备本身。
设备控制器通过寄存器与CPU通信,在某些计算机上,这些寄存器占用内存地址的一部分, 称为内存映像I/O;另一些计算机则采用I/O专用地址, 寄存器独立编址。
设备控制器的主要功能:
- 接收和识别CPU或通道发来的命令,如磁盘控制器能接收读、写、查找等命令。
- 实现数据交换,包括设备和控制器之间的数据传输;通过数据总线或通道,控制器和主存之间的数据传输。
- 发现和记录设备及自身的状态信息,供CPU处理使用。
- 设备地址识别。
设备控制器组成部分:
- 设备控制器与CPU的接口
- 该接口有三类信号线 : 数据线、地址线和控制线。
- 数据线通常与两类寄存器相连接:**数据寄存器 **(存放从设备送来的输入数据或从CPU送来的输出数据) 和 控制/状态寄存器(存放从CPU送来的控制信息或设备的状态信息)。
- 备控制器与设备的接口
- 设备控制器连接设备需要相应数量的接口,一个接口连接一台设备。每个接口中都存在数据、控制和状态三种类型的信号。
- I/O控制逻辑
- 用于实现对设备的控制。它通过一组控制线与CPU交互,对从CPU收到的命令进行译码。
5.1.4 小结
知识架构
5.2 I/O核心子系统
5.2.1 I/O 子系统概述
概述
由于I/O设备种类繁多,功能和传输速率差异巨大,需要多种方法来进行设备控制。这些方法共同组成了操作系统内核的I/O子系统,它将内核的其他方面从繁重的I/O设备管理中解放出来。
I/O核心子系统提供的服务主要有:I/O调度、缓冲与高速缓存、设备分配与回收、假脱机、设备保护和差错处理等。
5.2.2 I/O调度概念
概述
I/O 调度就是确定一个好的顺序来执行这些I/O请求。应用程序所发布的系统调用的顺序不一定总是最佳选择,所以需要I/O调度来改善系统整体性能,使进程之间公平地共享设备访问, 减少I/O完成所需要的平均等待时间。
操作系统开发人员通过为每个设备维护一个请求队列来实现调度。
I/O子系统还可以使用主存或磁盘上的存储空间的技术,如缓冲、高速缓存、假脱机等来改善计算机效率。
5.2.3 高速缓存与缓冲区
磁盘高速缓存( Disk Cache)
操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度, 对高速缓存复制的访问要比原始数据访问更为高效。
磁盘高速缓存技术不同于通常意义下的介于CPU与内存之间的小容量高速存储器, 而是指利用内存中的存储空间来暂存从磁盘中读出的一系列盘块中的信息。因此,磁盘高速缓存在逻辑上属于磁盘,物理上则是驻留在内存中的盘块。
高速缓存在内存中分为两种形式:
- 在内存中开辟一个单独的存储空间作为磁盘高速缓存,大小固定;
- 把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享。
缓冲区( Buffer)
引入缓冲区的目的:
-
缓和CPU与I/O设备间速度不匹配的矛盾。
-
减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
-
解决基本数据单元大小(即数据粒度)不匹配的问题。
-
提高CPU和I/O设备之间的并行性。
实现方法:
-
采用硬件缓冲器,但由于成本太高,除一些关键部位外,一般不采用硬件缓冲器。
-
采用缓冲区 (位于内存区域) 。
缓冲区特点:当缓冲区的数据非空的时候,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
根据系统设置缓冲器的个数,缓冲技术可以分为:
-
单缓冲
- 在设备和处理机之间设置一个缓冲区。设备和处理机交换数据时,先把被交换数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据。
- 单缓冲区处理每块数据用时: M a x ( C , T ) + M Max(C,T)+M Max(C,T)+M
-
双缓冲
-
根据单缓冲的特点, CPU在传送时间M内处于空闲状态,由此引入双缓冲。双缓冲机制提高了处理机和输入设备的并行操作的程度。
-
双缓冲区处理每块数据用时: M a x ( C + M , T ) Max(C+M,T) Max(C+M,T)
- 为了实现双向数据传输,必须在两台机器中都设置两个缓冲区,一个用做发送缓冲区,另一个用做接收缓冲区。
-
循环缓冲
- 包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形。
- 循环缓冲用于输入/输出时,还需要有两个指针in和out。
-
缓冲池
高速缓存与缓冲区的对比
5.2.4 设备分配与回收
设备分配概述
设备分配是指根据用户的I/O请求分配所需的设备。分配的总原则是充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁。
从设备的特性来看, 采用下述三种使用方式的设备分别称为独占设备、共享设备 和 虚拟设备。
- 独占式使用设备
- 指在申请设备时,如果设备空闲,就将其独占,不再允许其他进程申请使用,一直等到该设备被释放才允许其他进程申请使用。
- 例如,打印机,在使用它打印时,只 能独占式使用,否则在同一张纸上交替打印不同任务的内容,无法正常阅读。
- 分时式共享使用设备
- 独占式使用设备时,设备利用率很低,当设备没有独占使用的要求时,可以通过分时共享使用提高利用率。
- 例如,对磁盘设备的I/O操作,各进程的每次I/O操作请求可以通过分时来交替进行。
- 以SPOOLing方式使用外部设备
- SPOOLing (Simultaneous Peripheral Operation On-Line) 技术是在批处理操作系统时代引入的,即假脱机I/O技术。这种技术用于对设备的操作,实质上就是对I/O操作进行批处理。
设备分配的数据结构
设备分配依据的主要数据结构有设备控制表 (DCT)、控制器控制表 (COCT)、通道控制表 (CHCT)和系统设备表 (SDT)。
- 设备控制表DCT:一个设备控制表就表征一个设备,而这个控制表中的表项就是设备的各个属性。
-
控制器控制表COCT:每个DCT都需要一个表项来表示控制器,也就是需要一个指向控制器控制表 (COCT) 的一个指针,因此DCT与COCT有一一对应的关系。
-
通道控制表CHCT:每个COCT必定有一个表项存放指向相应通道控制表 (CHCT) 的指针,而一个通道可以为多个设备控制器服务,因此,CHCT中必定有一个指针,指向一个表,这个表上的信息表达的是CHCT 提供服务的那几个设备控制器。CHCT与COCT的关系是一对多的关系。
-
系统设备表 SDT:整个系统只有一张SDT,它记录己连接到系统中的所有物理设备的情况,每个物理设备占一个表目。
由于在多道程序系统中,进程数多于资源数,会引起资源的竞争。因此,要有一套合理的分配原则,主要考虑的因素有:I/O设备的固有属性、I/O设备的分配算法、I/O设备分配的安全性。
设备分配的策略
设备分配原则:既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序和具体设备隔离开。
设备分配方式:
- 静态分配
- 主要用于对独占设备的分配,它在用户作业开始执行前,由系统一次性分配该作业所要求的全部设备、控制器 (如通道等)。一旦分配后,这些设备、控制器(和通道)就一直为该作业所占用,直到该作业被撤销。
- 静态分配方式不会出现死锁,但设备的使用效率低。因此, 静态分配方式并不符合分配的总原则。
- 动态分配
- 是在进程执行过程中根据执行需要进行。当进程需要设备时,通过系统调用命令向系统提出设备请求,由系统按照事先规定的策略给进程分配所需要的设备、I/O控制器,一旦用完之后,便立即释放。
- 动态分配方式有利于提高设备的利用率,但如果分配算法使用不当,则有可能造成进程死锁。
设备分配算法:常用的动态设备分配算法有先请求先分配、优先级高者优先等。
设备分配的安全性
设备分配的安全性是指设备分配中应防止发生进程死锁。
-
安全分配方式
- 每当进程发出I/O请求后便进入阻塞状态,直到其 I/O操作完成时才被唤醒。这样,一旦进程已经获得某种设备后便阻塞,不能再请求任何资源,而且在它阻塞时也不保持任何资源。
- 优点:设备分配安全。
- 缺点:CPU和I/O设备是串行工作的(对同一进程而言) 。
-
不安全分配方式
- 进程在发出I/O请求后继续运行,需要时又发出第二个、第三个I/O请求等。仅当进程所请求的设备己被另一进程占用时,才进入阻塞状态。
- 优点:一个进程可同时操作多个设备,从而使进程推进迅速。
- 缺点:这种设备分配有可能产生死锁。
逻辑设备名到物理设备名的映射
为了实现设备独立性,在应用程序中使用逻辑设备名来请求使用某类设备,在系统中设置一张逻辑设备表 (Logical Unit Table, LUT) ,用于将逻辑设备名映射为物理设备名。 系统通过查找LUT来寻找相应的物理设备和驱动程序。
建立逻辑设备表两种方式:
-
在整个系统中只设置一张LUT:所有进程的设备分配情况都记录在这张表中,故不允许有相同的逻辑设备名,主要适用于单用户系统中。
-
为每个用户设置一张LUT:当用户登录时,系统便为该用户建立一个进程,同时也为之建立一张LUT,并将该表放入进程的PCB中。
5.2.5 SPOOLing 技术(假脱机技术)
概述
该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上,或者相反。SPOOLing 的意思是外部设备同时联机操作,又称为假脱机输入/输出操作,是操作系统中采用的一项将独占设备改造成共享设备的技术。
组成
1、输入井和输出井:在磁盘上开辟出的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。
2、输入缓冲区和输出缓冲区:在内存中开辟的两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送到输出设备。
3、输入进程和输出进程:输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备。
特点
-
提高了I/O的速度。
-
将独占设备改造为共享设备。
-
实现了虚拟设备功能。
5.2.6 小结
知识架构