计算机的输入/输出系统是整个计算机系统中最具有多样性和复杂性的部分。随着计算机系统的不断发展,应用范围的不断扩大,I/O设备的数量和种类也越来越多,它们与主机的联络方式及信息交换方式各不相同。
除了处理器和一组存储器模块外,计算机系统的第三个关键部分是一组输入/输出(I/O)模块。每个模块连接到系统总线或中央交换器,并且控制一个或多个外围设备。一个I/O模块不是简单地将设备连接到系统总线的一组机械连接器,而是包含了执行设备与系统总线之间通信功能的逻辑。
那大家可能会奇怪,为什么不把外设直接连接到系统总线上,原因如下:
(1)各种外设的操作方法是不同的,将控制一定范围的外设的必要的逻辑合并到某个处理器内是不现实的。
(2)外设的数据传送速度一般比存储器或处理器的慢得多,因此,使用高速的系统总线直接与外设通信是不切实际的。
(3)某些外设的数据传送速率比存储器或处理器要快,同样,若不适当管理,则速度失配将导致无效。
(4)外设使用的数据格式和字长度通常与处理器不同。
因此,I/O模块是必需的,它有两大主要功能(如下图所示):
(1) 通过系统总线或中同交换器与处理器和存储器连接。
(2) 通过专用数据线与一个或多个外设连接。

现代计算机系统中外部设备的种类繁多,各类外部设备不仅结构和工作原理不同,而且与主机的连接方式也是复杂多变的,主要有辐射型连接、总线型连接等。输入/输出接口(I/O接口)是主机和外设之间的交接界面,通过接口可以实现主机与外设之间的信息交换。
主机和外设之间进行信息交换为什么一定要通过接口呢?这是因为主机和外设各自具有自己的工作特点,它们在信息形式和工作速度上具有很大的差异,接口正是为了解决这些差异而设置的。
1. 接口的功能和组成
(1)总线连接方式的I/O接口

上图所示为总线结构的计算机,每一台I/O设备都是通过I/O接口中挂到系统总线上的。图中的I/O总线包括数据线、设备选择线、命令线和状态线。
1)数据线
数据线是I/O设备与主机之间数据代码的传送线,其根数一般等于存储字长的位数或字符的位数,它双向的,也可以是单向的。若采用单向数据总线,则必须用两组才能实现数据的输入和输出功能,而双向数据总线只需一组即可。
2)设备选择线
设备选择线是用来传送设备在码的,它的根数取决于I/O指令中设备码的位数。如果把设备码看做是地址号,那么设备选择线又可称为地址线。设备选择线可以有一组,也可以有两组,其中一组用于主机向I/O设备发送设备码,另一组用于I/O设备向主机回送设备码。当然设备选择线也可以采用一组双向总线代替两组单向总线。
3)命令线
命令线产要用以传输CPU向设备发出的各种命令信号,如启动、清除、屏蔽、读、写等。它是一组单向总线,其根数与命令信号多少有关。
4)状态线
状态是将I/O设备的状态向主机报告的信号线,例如,设备是否准备就绪,是否向CPU发出中断请求等。它也是一组单向总线。
(2)接口的功能和组成
接口通常具有以下几个功能:
1)选址功能
由于I/O总线与所有设备的接口电路相连,但CPU究竟选择哪台设备,还得通过设备选择线上的设备码来确定。该设备码将送至所有设备的接口中,因此,要求每个接口都必须具有选址功能,即当设备选择线上的设备码与本设备码相符时,应发出设备选中信号。
2)传送命令的功能
当CPU向I/O设备发出命令时,要求I/O接口不具备传送命令信息的功能,那么设备将无法响应,故通常在I/O接口中设有存放命令寄存器以及命令译码器。命令寄存器用来存放I/O指令中的命令码,它受设备选中信号控制。命令线和所有接口电路的命令寄存器相连,只有被选中设备的选中信号有效,命令寄存器才可接受命令线上的命令码。
3)传送数据的功能
既然接口处于主机与I/O设备之间,因此数据必须通过接口才能实现主机与I/O设备之间的传送。这就要求接口中具有数据通路,完成数据传送。这种数据通路还应具有缓冲能力,即能将数据暂存在接口内,接口中通常设有数据缓冲寄存器,用来暂存I/O设备与主机准备交换的信息,与I/O总线中的数据线是相连的。
4)反映I/O设备工作状态的功能
为了使CPU能及时了解I/O设备的工作状态,接口内必须设置一些反映设备工作状态的触发器。如完成触发器、工作触发器、中断请求触发器、屏蔽触发器等,所有的这些状态标志触发器都与I/O总线中的状态线相连。此外,不同的I/O设备的接口电路中还可根据需要增设一些其他状态标志触发器,如出错触发器、数据迟到触发器等,随着大规模集成电路制作工艺的不断进步,目前大多数I/O设备所共用的电路都制作在一个芯片内,作为通用接口芯片。本节所讲述的接口功能及组成均是指通用接口所具备的,其基本组成如下图所示:

2. 接口类型
I/O接口按不同方式分类有以下几种:
1)按数据传送方式分类,有并行接口和串行接口两类。并行接口是将一个字节(或一个字)的所有位同时传送;串行接口是在设备与接口间一位一位传送。由于接口号主机之间是按字节或字并行传送,因此对串行接口而言,其内容还必须有串-并转换装置。
2)按功能选择的灵活性分类,有可编程接口和不可编程接口两种。可编程接口听功能及操作方式可用程序来改变或选择;不可编程接口不能由程序来改变其功能,但可通过硬连线逻辑来实现不同的功能。
3)按通用性分类有通用接口和专用接口。通用接口可供多种I/O设备使用;专用接口虽为某类外设或某种用途专门设计的。
4)按数据传送的控制方式分类,有程序型接口和DMA型接口中。程序型接口用于连接速度较慢的I/O设备,如显示终端、键盘、打印机等。现代计算机一般都可采用程序中断方式实现主机与I/O设备之间的信息交换,故都配有这类接口。DMA型接口用于连接高速I/O设备,如磁盘、磁带等。
1. 外围设备的定时
外围设备的种类相当繁多,有机械式和电动式、也有电子式和其他形式。其输入信号可以是数字式的电压也可以是模拟式的电压和电流。从信息传输速率来讲,相差也很悬殊。如果把高速工作的处理机同不同速度工作的外围设备相连接,那么首先遇到的一个问题,就是如何保证处理机与外围设备在时间上同步?这就是我们要讨论的外围设备的定时问题。
首先,我们来学习一下输入/输出设备同CPU交换数据的过程:
输入过程:
(1)CPU把一个地址值放在地址总线上,这一步将选择某一输入设备;
(2)CPU等候输入设备的数据成为有效;
(3)CPU从数据总线读入数据,并放在一个相应的寄存器中。
输出过程:
(1)CPU把一个地址值放在地址总线上,选择输出设备;
(2)CPU把数据放在数据总线上;
(3)输出设备认为数据有效,从而把数据取走。
从上述输入/输出的过程看出,问题的关键在于:究竟什么时候数据才成为有效? 很显然,由于输入/输出设备本身的速度差异很大,因此,对于不同速度的外围设备,需要有不同的定时方式,总的说来,CPU与外围设备之间的定时,有以下三种情况:
(1)速度极慢或简单的外围设备
对于这一类设备,CPU认为数据一直有效,CPU只要接收或发送数据就可以了。
例如:对机械开关来讲,CPU可以认为输入的数据一直有效,因为机械开关的动作相对CPU的速度来讲是非常慢的;
对显示二极管来讲,CPU可以认为输出一定准备就绪,因为只要给出数据,显示二极管就能进行显示。
(2)慢速或中速的外围设备
由于这类设备的速度和CPU的速度并不在一个数量级,或者由于设备(如键盘)本身是在不规则时间间隔下操作的。因此,CPU与这类设备之间的数据交换通常采用异步定时方式。其定时过程如下:
如果CPU从外设接收一个字,则它首先询问外设的状态,如果该外设的状态标志表明设备已“准备就绪”,那么CPU就从总线上接收数据。CPU在接收数据以后,发现输入响应信号,告诉外设已经把数据总线上的数据取走。然后,外设把“准备就绪”的状态标志复位,并准备下一个字的交换。如果外设没有“准备就绪”那么它就发出“忙”的标志。于是,CPU将进入一个循环程序中等待,并在每次循环中询问外设的状态,一直到外设发出“准备就绪”信号以后,才从外设接收数据。
CPU发送数据的情况也与上述情况相似,外设先发出请求输出信号,而后,CPU询问外设是否准备就绪。如果外设已准备就绪,CPU便发出准备就绪信号,并送出数据。外设接收数据以后,将向CPU发出“数据已经出走”的通知。
通常,把这种在CPU和外设之间用问答信号进行定时的方式叫做应答式数据交换。
(3)高速的外围设备
由于这类外设是以相等的时间间隔操作的,而CPU也是以等间隔的速率执行输入/输出指令的,因此,这种方式叫做同步定时方式。一旦CPU和外设发生同步,它们之间的数据交换便靠时钟脉冲控制来进行。
更快的同步传送要采用直接内存访问(DMA)方式。
2. 信息交换方式
(1)程序查询方式
程序查询方式是早期计算机中使用的一种方式。数据在CPU和外围设备之间的传送完全靠计算机程序控制,优点是CPU的操作和外围设备的操作能够同步,硬件结构比较简单。但问题是,外围设备动作很慢,程序进入查询循环时将白白浪费掉CPU很多时间。这种情况下,CPU此时只能等待,不能处理其他业务。即使CPU采用定期地由主程序转向查询设备状态的子程序进行扫描轮询的办法,CPU宝贵资源的浪费也是可观的。
(2)程序中断方式
中断是外围设备用来“主动”通知CPU,准备送出输入数据或接收输出数据的一种方法。通常,当一个中断发生时,CPU暂停它的现行程序,而转向中断处理程序,从而可以输入或输出一个数据。当中断处理完毕后,CPU又返回到它原来的任务,并从它停止的地方开始执行程序。这种方式节省了CPU宝贵的时间,是管理I/O操作的一个比较有效的方法。中断方式一般适用于随机出现的服务,并且一旦提出要求,应立即进行。
(3)直接内存访问(DMA)方式
用中断方式交换数据时,每处理一次I/O交换,约需几十微秒到几百微秒。对于一些高速的外围设备,以及成组交换数据的情况,仍然显得速度太慢。直接内存访问(DMA)方式是一种完全由硬件执行I/O交换的工作方式。这种方式既考虑到中断响应,同时又要节约中断开销。此时,DMA控制器从CPU完全接管对总线的控制,数据交换不经过CPU,而直接在内存和外围设备之间进行,以高速传送数据。这种方式主要优点是数据传送速度很高,传送速率仅受到内存访问时间的限制。与中断方式相比,需要更多的硬件。DMA方式适用于内存和高速外围设备之间大批数据交换的场合。
(4)通道方式
DMA方式的出现已经减轻了CPU对I/O操作的控制,使得CPU的效率有显著的提高,而通道的出现则进一步提高了CPU的效率。这是因为,CPU将部分权力下放给通道。通道是一个具有特殊功能的处理器,某些应用中称为输入输出处理器(IOP),它可以实现对外围设备的统一管理和外围设备与内存之间的数据传送。这种方式大大提高了CPU的工作效率。然而这种提高CPU效率的办法是以花费更多硬件为代价的。
(5)外围处理机(PPU)方式
外围处理机方式是通道方式的进一步发展,基本上独立于主机工作结构更接近于一般的处理机,甚至就是微小型计算机。在一些系统中,设置了多台PPU,分别承担I/O控制、通信、维护诊断等任务,从某种意义上说,这种系统已经变成了分布式多机系统。
综上所述,外围设备的输入/输出方式可用下图来表示。

程序查询方式和程序中断方式适用于数据传输率比较低的外围设备,而DMA方式、通道方式适用于数据传输率比较高的设备。目前,程序中断方式和DMA方式多用于微型机中,通道方式用在大型计算机中。在以下的章节中,我们主要介绍程序查询方式、程序中断方式、直接内存访问(DMA)方式这三控制方式。
接口:Interface
端口:Port
数据缓冲寄存器(DR):Data Register
程序查询方式:Program Direct Control
程序中断方式:program interrupt control
直接内存访问(DMA)方式:Direct Memory Access
通道方式:Channel Mode
外围处理机方式:peripheral processor