第5章:输入/输出(I/O)管理
5.1 I/O管理概述
计算机系统中的I/O设备按使用特性可分为以下类型:
1) 人机交互类外部设备:用于与计算机用户之间交互的设备,如打印机、显示器、鼠标、键盘等。这类设别数据交换速度相对较慢,通常以多字节组成的块进行数据交换。
2) 存储设备:用于存储程序和数据的设备,如磁盘、磁带、光盘等。这类设备用于数据交换,速度较快,通常以多字节组成的块为单位进行数据交换。
3) 网络通信设备:用于与远程设备通信的设备,如各种网络接口、调制调节器等。
I/O设备按传输速率分类:
1) 低速设备:传输速率仅为每秒几个到数百个字节的一类设备,如键盘、鼠标等。
2) 中速设备:传输速率在每秒几千字节至输完个字节的一类设备,如行式打印机、激光打印机等。
3) 高速设备:传输速率在数百个千字节至千兆自己的一类设备,如磁带机、磁盘机、光盘机等。
I/O设备按信息交换的单位分类:
1) 块设备:由于信息的存取总是以数据块为单位的,所以存储信息的设备称为块设备。
2) 自负设备:用于数据输入/输出的设备为字符设备,因为其传输的基本单位是字符。
5.2 I/O核心子系统
I/O子系统概述
I/O子系统将内核的其他方面从繁重的I/O设备管理中解放出来。I/O核心子系统提供的服务主要有I/O调度、缓冲与告诉缓存、设备分配与回收、假脱机、设备保护和差错处理等。
I/O调度概念
I/O调度就是确定一个好的顺序来执行这些I/O请求。操作系统开发人员通过为每隔设备维护一个请求队列来实现调度。当一个应用程序执行阻塞I/O系统调用时,该请求就加到其他设备的队列上。I/O调度会重新安排队列顺序以改善系统总体效率和应用程序的平均响应时间。
磁盘高速缓存(Disk Cache)
操作系统中使用磁盘高速缓存技术来提高磁盘的I/O速度,对高速缓存复制的访问要比原始数据访问更为高效。磁盘高速缓存技术是指利用内存的存储空间来暂存从磁盘中读出的一系列盘块中的信息。磁盘告诉缓存在逻辑上属于磁盘,物理上则是驻留在内存中的盘块。
高速缓存在内存中分为两种形式:
1) 一种是在内存中开辟一个单独的存储空间作为磁盘高速缓存,大小固定。
2) 另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享。
缓冲区(Buffer)
在设个呗管理子系统中,引入缓冲区的目的主要有:
1) 缓和CPU和I/O设备间速度不匹配的矛盾。
2) 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
3) 解决基本数据单元大小(即数据粒度)不匹配的问题。
4) 提高CPU和I/O设备之间的并行性。
其实现方法有:
1) 采用硬件缓存器,但由于成本太高,除一些关键部位外,一般不采用硬件缓存器。
2) 采用缓冲区(位于内存区域)。
缓冲区有一个特点,当缓冲区的数据非空的时候,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
根据系统设置缓冲器的个数,缓冲技术可以分为:
1) 单缓冲:在设备与处理机之间设置一个缓冲区。设备和处理机交换数据时,先把被交换数据写入缓冲区,然后需要数据的设备或处理机从缓冲区取走数据。
2) 双缓冲:根据单缓冲的特点,CPU在传送时间M内处于空闲状态,由此引入双缓冲。
双缓冲区处理一块数据的用时为MAX(C+M,T)。
3) 循环缓冲:包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,多个缓冲区构成一个环形。
4) 缓冲池:由多个系统共用的缓冲区组成,缓冲区按其使用状况可以形成三个队列:空缓冲队列、装满输入数据的缓冲队列(输入队列中)和装满输出数据的缓冲队列(输出队列)。还应具有四种缓冲区:用于收容数据的工作缓冲区、用于提取输入数据的工作缓冲区、用于收容数据的工作缓冲区以及用于提取输出数据的工作缓冲区。
高速缓存和缓冲区的对比
高速缓存使可以保存数据拷贝的高速存储器,访问高速缓存比访问原始数据更高效,速度更快。
设备分配的概述
设备分配是指根据用户的I/O请求分配所需的设备。分配的总原则使充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁。按设备的特性可分为:
1) 独占式使用设备。指在申请设备时,如果设备空闲,就将其独占,不再允许其他进程申请使用,一直等到该设备被释放采允许其他进程申请使用。
2) 分时式共享使用设备。独占式使用设备时,设备利用率很低,当设备没有独占使用的要求时,可以通过分时共享使用提高利用率。
3) 以SPOOLing(Simultaneous Peripheral Operation On-Line)方式使用外部设备。SPOOLing技术是在批处理操作系统时引入的,即假脱机I/O技术,就是对I/O操作进行批处理。SPOOLing技术实质上是一种以空间换时间的技术,而请求分页系统中的页面调度算法刚好相反,是以时间换空间的技术。
设备分配的数据结构
设备分配依据的主要数据结构有设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)和系统设备表(SDT)。
设备控制表DCT:一般一个设备控制表就表征一个设备,而DCT控制表中的表项就是设备的各个属性。
系统控制表SDT:整个系统只有一张SDT,记录连接到系统中的所有物理设备的情况,每个物理设备占一个表目。
设备分配的策略
设备分配原则:设备分配应根据设别特性、用户要求和系统配置情况。分配的总原则:既要充分发挥设备的使用效率,又要避免造成进程死锁,还要将用户程序和具体设备个离开。
设备分配方式:
1) 静态分配:主要用于对独占设备的分配,在用户作业开始执行前,由系统一次性分配该作业所要求的全部设备、控制器(如通道等)。一单分配后,这些设备、控制器(和通道)就一直为该作业所占用,知道该作业被撤销。静态分配方式不会出现死锁,但设备的使用效率低。
2) 动态分配:是在进程执行过程中根据执行需要进行。当进程需要设备时,通过系统调用命令向系统提出设备请求,由系统按照实现规定的策略给进程分配所夙瑶的设备、I/O控制器,一旦用完后立即释放。动态分配有利于提高设备的利用率。
设备分配算法:常用的动态分配算法有先请求分配、优先级高者优先。
设备分配的安全性
设备分配的安全性是指设备分配中应防止发生进程死锁。
1) 安全分配方式:每当进程发出I/O请求后便进入拥塞状态,知道其I/O操作完成时才被唤醒。
2) 不安全分配方式:进程在发出I/O请求后继续运行,需要时又发出第二个、第三个I/O请求等。
逻辑设备名到物理设备名的映射
为提高设备分配的灵活性和设备的利用率、方便实现I/O重定向,引入设备独立性。设备独立性是指应用程序独立于具体使用的物理设备。
在系统中采取两种方式建立逻辑设备表:
1) 在整个系统中只设置一张LUT。这样所有进程的设备分配情况都记录在这张表中,故不允许有相同的逻辑设备名,主要适用于单用户系统汇中。
2) 为每隔用户设置一张LUT。当用户登录时,系统便为该用户建立一个进程,同时页为之建立一张LUT,并将该表放入进程的PCB中。
SPOOLing技术(假脱机技术)
为了缓和CPU的高速性与I/O设备低速性之间的矛盾引入脱机输入/输出技术。该技术利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上,是操作系统中采用一项将独占设备改造称共享设备的技术。
输入井和输出井
在磁盘上开辟出两个存储区域,输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。
输入缓冲区和输出缓冲区
在内存中开辟的两个缓冲区。输入缓冲区用于暂存输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后在传送到输出设备。
输入进程和输出进程
输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。当CPU需要输入数据时,直接将数据从输入井读入内存。输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备。