一、概述
I/O系统管理的主要对象是I/O设备和相应的设备控制器。最主要的任务是,完成用户提出的I/O请求,提高I/O速率,以及提高设备的利用率,并为更高层的进程方便地使用这些设备提供手段。
将I/O设备按传输速率分类,分为:
(1)低速设备:每秒几个到数百个字节,如键盘、鼠标等;
(2)中速设备:每秒数千至数万个字节,如行式打印机、激光打印机等;
(3)高速设备:每秒数百个千字节至千兆字节,如磁带机、磁盘机、光盘等。
二、I/O控制方式
设备管理的主要任务之一就是控制设备和内存或处理机之间的数据传送。外围设备和内存之间的I/O控制方式有以下四种:
1.程序直接控制方式(程序查询方式)
数据在CPU和外围设备之间的传送完全靠计算机程序控制。
计算机从外部设备读取数据到存储器,每次读一个字的数据。对读入的每个字,CPU需对外设状态进行循环检查,直至确定该字已在I/O控制器的数据寄存器中,如图中(a)。由于CPU高速和I/O低速,使得CPU的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中,造成CPU资源的极大浪费。
需要循环检测,就是因为CPU中没有采用中断机构,使I/O设备无法向CPU报告它已完成了一个字符的输入操作。
2.中断驱动方式
外围设备用来主动通知CPU,准备送出输入数据或接收输出数据的一种方法。一个中断发生时,CPU暂停现行程序,而转向中断处理程序,从而可以输入或输出一个数据。中断处理完成后,CPU又返回原来的任务,从它停止的地方开始执行程序。
基本原理:允许I/O设备主动打断CPU的运行并请求服务,从而解放CPU,使得其向I/O控制器发送读命令后可以继续做其他有用的工作。
从I/O控制器角度看,I/O控制器从CPU接收一个读命令,然后从外围设备读数据。一旦数据读入到该I/O控制器的数据寄存器,便通过控制线给CPU发出一个中断信号,表示数据已准备好,然后等待CPU请求该数据。I/O控制器收到CPU发出的取数据请求后,将数据放到数据总线上,读入到寄存器中,如图中(b)。
从CPU角度看,CPU发出读命令。然后保存现场,转去执行其他程序。当发生I/O中断请求后,即转去执行中断。读出一个字后,恢复现场继续运行。
由于数据中的每个字在存储器与I/O控制器之间的数据传输都需经过CPU的寄存器,仍会消耗大量CPU时间。
3.DMA方式
DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和外围设备之间进行,以高速传送数据。
基本思想:在I/O设备和内存之间开辟直接的数据交换通路,彻底解放CPU,数据传输是在DMA控制器的控制下完成的。
CPU收到I/O设备的DMA请求后,它给I/O控制器发出一条命令,启动DMA控制器,然后继续执行其他工作。之后CPU把所有工作委托给DMA控制器。该控制器直接与内存交互,传输数据,该过程不需要CPU参与。当传送完成后,DMA控制器发送中断信号给CPU。因此,只有在传送开始和结束才需要CPU参与,如图中(c)。
4.通道控制方式
CPU将部分权力下放给通道。通道是一个具有特殊功能的处理器,某些应用中称为输入输出处理器(IOP),它可以实现对外围设备的统一管理和外围设备与内存之间的数据传送。
I/O通道是指专门负责输入/输出的处理机。如CPU要完成一组相关的读(或写)操作及有关控制时,只需向I/O通道发送一条I/O指令,以给出其所要执行的通道程序的首地址和要访问的I/O设备,通道接到该指令后,通过执行通道程序便可完成CPU指定的I/O任务,数据传送结束时,向CPU发中断请求。比DMA拥有更高的自主权,进一步减少CPU的干预。
I/O通道与DMA方式的区别:DM方式需要CPU来控制传输的数据块大小、传输的内存位置,而通道方式中这些信息是由通道控制的。
三、I/O子系统的层次结构
将系统中的设备管理模块分为若干个层次,每一层都是利用下层提供的服务,完成输入输出功能中的某些子功能,并屏蔽这些功能实现的细节,向高层提供服务。
(1)用户层I/O软件:实现与用户交互的接口,用户可直接调用该层所提供的、与I/O操作有关的库函数对设备进行操作。
(2)设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命名、设备的保护及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
(3)设备驱动程序:与硬件直接相关,用于具体实现系统对设备发出的操作命令,驱动I/O设备工作的驱动程序。
(4)中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完毕再恢复被中断进程的现场后,返回被中断的进程。
(5)硬件:包括 一个机械部件(设备本身)和一个电子部件(控制器)。设备控制器的主要作用:
1)接收和识别CPU或通道发出的命令,如读、写等;
2)实现数据交换,包括设备与控制器之间,控制器与主存之间的数据传输;
3)发现和记录设备及自身的状态信息,供CPU处理使用;
4)设备地址识别。
四、用户层的I/O软件
1.系统调用
一方面,为使诸进程有条不紊地使用I/O设备,且能保证设备的安全性,不允许运行在用户态的应用进程去直接调用运行在核心态(系统态)的OS过程。另一方面,应用进程运行时,又必须取得OS所提供的服务。因此,OS引入了中介过程——系统调用,应用程序可以通过它间接调用OS中的I/O过程,对I/O设备进行操作。
当应用程序需要执行某种I/O操作时,在应用程序中必须使用相应的系统调用。当OS捕获到应用程序中的该系统调用后,便将CPU的状态从用户态转换到核心态,然后转向OS中相应过程,由该过程完成所需的I/O操作。执行完成后,系统又将CPU状态从核心态转换到用户态,返回到应用程序继续执行。
2.库函数
用户程序通过调用对应的库函数使用系统调用,这些库函数与调用程序连接在一起,被嵌入在运行时装入内存的二进制程序中。如C语言中的库函数,对于I/O方面,主要是对文件和设备进行读/写的库函数,是I/O系统的组成部分。内核与库函数之间的关系:内核提供了OS的基本功能,而库函数扩展了OS内核,使用户能方便取得OS的服务。
3.SPOOLing技术
SPOOLing(Simulataneous Peripheral Operation On-Line)技术是在批处理OS时代引入的,即假脱机I/O技术。这种技术用于对设备的操作,实质上就是对I/O操作进行批处理,是一种以空间换时间的技术。
(1)组成
该技术缓和了CPU高速性和I/O低速性之间的矛盾 。利用专门的外围控制机,将低速I/O设备上的数据传送到高速的磁盘上;或者相反。SPOOLing的意思是外部设备同时联机操作,是OS中采用的一项将独占设备改造成共享设备的技术。建立在通道技术和多道程序技术的基础上,以磁盘为后援存储器,如下图。
1)输入井和输出井:在磁盘上开辟的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据;输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。
2)输入缓冲区和输出缓冲区:在内存中开辟两个缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后再传送到输出设备。
3)输入进程和输出进程:输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,CPU要求时,把数据从输入井送到内存;输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备。
4)井管理程序:用于控制作业与磁盘井之间的信息交换。当作业执行过程中向某台设备发出启动输入或输出操作请求时,由OS调用井管理程序,由其控制从输入井读取信息或将信息输出到输出井。
(2)工作原理
如下图。
(3)特点
1)提高I/O的速度。对数据执行的I/O操作,从低速I/O设备执行的I/O操作演变为对磁盘缓冲区中数据的存取,缓和CPU与低速I/O设备之间速度不匹配的矛盾。
2)将独占设备改造为共享设备。实际上并不为任何进程分配设备,只是在磁盘缓冲区为进程分配一个空闲盘块和建立一张I/O请求表。
3)实现虚拟设备功能。宏观上,虽是多个进程在同时使用一台独占设备,而对于每个进程而言,它们都认为自己独占了一个设备。