I/O系统管理的主要对象是I/O设备和相应的设备控制器。其最主要的任务是,完成用户提出的I/O请求,提高I/O速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段。
为了满足系统和用户的要求,I/O系统应该具有以下几方面的基本功能
I/O设备类型多,差异大。利用设备控制器(硬件)进行控制。隐藏物理设备的使用细节,仅向上层提高少量的,抽象的读写命令。
用户仅提供逻辑设备名来使用设备;例如打印时,它只需要提高读写命令和抽象的逻辑设备名即可,不必要指明是那一台打印机。
设备之间、设备与处理机之间均可并行操作。要求CPU快速响应I/O请求,减少对设备运行的干预时间。
对I/O设备进行控制是驱动程序的功能。目前对I/O设备有四种控制方式:① 采用轮询的可编程I/O方式;② 采用中断的可编程I/O方式;③ 直接存储器访问方式;④ I/O通道方式。 具体控制方式与设备的传输速率和传输数据单位有关。
以共享属性来分类,分为独占设备、共享设备。
大多数的设备都包括了较多的机械和电气部分,运行时容易出现错误和故障。从处理的角度,可将错误分为临时性错误和持久性错误。对于临时性错误,可通过重试操作来纠正,只有在发生了持久性错误时,才需要向上层报告。
I/O软件向下与硬件相关,向上与文件系统、虚拟存储、用户直接交换,都需要 I/O系统来实现 I/O操作。目前均为层次式 I/O系统设计,单向调用。
a.I/O系统的上.下接口
处于两个接口直接的部分就是I/O系统
b.I/O系统的分层
I/O系统本身也可以分为如下三个层次:
在I/O系统与高层之间的接口中,根据设备类型的不同,又进一步分为若干个接口。比如块设备接口、流设备接口和网络接口。
块设备接口是块设备管理器和高层之间的接口。该接口反应了大部分磁盘存储器和光盘存储器的本质特征,用于控制该类设备的输入或者输出。
a.块设备
块设备是指,数据的存取和传输都是以数据块为单位的设备,典型的块设备如磁盘。该设备的基本特征就是传输速率较高,另一特征就是可寻址,即能指定数据的输入源地址和输出的目标地址,可随机的读写磁盘中任一块;磁盘中的I/O常采用DMA方式
b.隐藏了磁盘的二维结构
块设备接口将磁盘上所有扇区从0到n-1依次编号。这样编号以后,就把磁盘的二维结构改变成一种一维线性序列。
c.将抽象命令映射所为低层操作
块设备接口支持上层发来的对文件或设备的打开,读写,关闭等抽象命令,该接口将上述命令映射为设备可以识别的教低层的具体命令。
流设备接口是流设备管理程序与高层之间的接口。该接口又称为字符设备接口,用来控制字符设备的输入或者输出。
a.字符设备
字符设备是指,数据的存取和传输是以字符为单位的设备,如光盘和打印机。该设备的基本特征是传输速率低。另一特征是不可寻址,即不确定数据的输入源和输出地址。字符设备在输入输出时,常采用中断驱动方式。
b.get和put操作
由于字符设备是不可寻址的,因此对它只能采取顺序存取的方式,通常是为其建立一个字符缓冲区(队列)。用户程序获取或者输出字符的通常方式就是采取get和put操作,get操作用从字符缓冲区取得一个字符(到内存),他返回给调用者。而put操作用于把一个新字符(从内存)输送到字符缓存区中。以待送到设备。
c.in-control指令
字符设备类型非常多,且差异较大,为了可以能够统一的处理他们,通常在流设备中提供一种通用的in-control指令,在该指令中包含许多的参数,每一个参数表示一个与设备相关的特定功能。
由于大部分流设备都是独占设备,必须采取互斥的方式实现共享,为此,流设备接口了打开和关闭操作。使用这类设备时,必须先用打开操作来打开该设备,如果设备已经被打开,则表示它正在被其他进程使用。
在现代OS中,都提供了面向网络的功能。但首先还需要通过某种方式把计算机连接到网络上。同时操作系统也必须提供相应的网络软件和网络通信接口,使计算机能通过网络与网络上的其它计算机进行通信或上网浏览。
I/O设备由机械部分和电子部分组成。机械部分即为一般的I/O设备,电子部分称为设备控制器或适配器(控制卡、接口卡、网卡)
设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应含有与设备控制器间的接口,在该接口中有三种类型的信号(见图所示),各对应一条信号线。
设备控制器的主要功能是:控制一个或者多个I/O设备,以实现I/O设备和计算器之间的数据交换,它是CPU和I/O设备之间的接口。设备控制器是一个可编址的设备,当它控制一个设备时具有唯一的设备地址。如果控制多个,则应该含有多个设备地址,每一个设备地址对应一个设备。
由于设备控制器位于CPU与设备之间,它既要与CPU通信,又要与设备通信,还应具有按照CPU所发来的命令去控制设备工作的功能,因此,现有的大多数控制器都是由以下三部分组成:
a.设备控制器与处理机的接口
该接口用于实现CPU与设备控制器之间的通信,在该接口有三类信号线:数据线,地址线和控制线和两类寄存器。信号线的作用见上文。
两类寄存器:
b.设备控制器与设备的接口
在一个设备控制器上有一个或者多个设备,相应的,在控制器中便有一个或者多个设备接口,每个接口中都存在数据、控制、状态三种信号。控制器中的I/O逻辑根据处理机发来的地址信号去选择一个设备接口。
c. I/O逻辑
I/O逻辑用与实现对设备的控制,它通过一组控制线与处理机交换,处理机利用该逻辑向控制器发送I/O命令,每当CPU要启动一个设备时,一方面将启动命令发给控制器,另一方面通过地址线把地址发送给控制器,由控制器对收到的地址进行译码,再根据所译出的命令对所选设备进行控制。
驱动程序将抽象的I/O命令转换为一系列的具体命令,参数等数据装入设备控制器的相应寄存器,由控制器来执行这些命令,具体实施对I/O设备的控制,这一工作可以用如下两种方式完成。
在早期的计算机中,包括大型计算机,为实现CPU和设备控制器之间的通信,为每个控制寄存器分配一个I/O端口,这是一个8位或16位的整数,另外还设置了一些特定的I/O指令。
如,将CPU寄存器的内容存入内存的某个单元(k)中:Store cpu-reg , k
访问设备: io-Store cpu-reg, dev-no, dev-reg
缺点:访问内存和访问设备需要两种不同的指令。
####2.内存映像I/O
在这种方式中,在编址上不再区分内存单元地址和设备控制器中的寄存器地址,都采用k。当k值处于0~n-1范围时,被认为是内存地址,若k大于等于n时,被认为是某个控制器的寄存器地址。 因此如果想要将CPU寄存器中的内容发送到设备控制器0的第一个寄存器内opcode,只需要用下面的一般存储命令
store cpu-reg,n
定义:通道是专门用于处理I/O的处理机,它控制内存和外设直接进行数据交换。
目的:减轻CPU的负担
工作方式:CPU向通道发送I/O命令,通道执行通道程序,完成I/O后向CPU发送中断信号。
通道与一般处理机的不同:指令类型单一,仅能执行I/O指令。通道没有自己的内存,通道程序放在主存中。
根据信息交换方式的不同,可以将通道分为以下三种类型
a.字节多路通道
这是一种按字节交叉方式工作的通道。它通常都含有许多非分配型子通道,每一个子通道连接一台I/O设备,并控制该设备的I/O操作。这些子通道按时间片轮转方式共享主通道。
下图展示了字节多路通道的原理:
b.数组选择通道
字节多路通道不适于连接高速设备,这推动了按数组方式进行数据传送的数组选择通道的形成。 这种通道虽然可以连接多台高速设备,但它只含有一个分配型子通道,在一段时间内只能执行一道通道程序。这种方式导致通道的利用率很低。
c.数组选择多路通道
数组多路通道是将数组选择通道传输速率高和字节多路通道能使各子通道(设备)分时并行操作的优点相结合而形成的一种新通道。
由于通道价格昂贵,致使机器中所设置的通道数量势必较少,这往往又使它成了I/O的瓶颈,进而造成整个系统吞吐量的下降。
解决瓶颈的问题的最有效方法,便是增加设备到主机间的通路而增加通道。即把一个设备连接到多个控制器上,而一个控制器又到多个通道,这样既解决了瓶颈问题,也增加了系统的可靠性。如下图
《操作系统第四版》