输入输出系统主要包括硬件和软件两部分,硬件由外部设备和它与主机的接口构成,而I/O 软件则用于协调、控制主机与接口之间进行数据交换。
IO软件的主要任务:将用户编制的程序或数据输入主机内。将运算结果输送给用户。实现输入输出系统与主机工作协调。
外设的地位和作用
人机对话的重要设备:要把数据、程序送入计算机,或要把计算机的计算结果及各种信息送出来,都要通过外部设备来实现。
完成数据媒体变换的设备:在人机对话交换信息时,首先需要将各种信息变成计算机能识别的二进制代码形式,然后再输入计算机;计算机处理的结果也必须变换成人们所熟悉的表示方式,这两种变换只能通过外部设备来实现。
计算机系统软件和信息的驻在地:随着计算机技术的发展,信息量越来越大,不可能全部存放在主存中。以磁盘存储器或光盘存储器为代表的辅助存储器已成为各种信息的驻在地。
计算机在各领域应用的重要工具:随着计算机应用范围的扩大,从早期的数值计算已扩展到文字、表格、图形、图像和语音等非数值信息的处理。
外设的特点
I/O 设备是计算机系统的重要组成部分,计算机通过它与外部交换信息,完成实际工作任务。 外设的种类繁多,结构、原理各异。各种外设的数据传输速率相差甚大,外设的输入输出信号形式也可能不同,外设的信息传送方式又分为并行和串行传送两种。另外,外设的工作具有一定的独立性,一般它具有自己独立的时序控制逻辑,CPU 不能像访问主存和寄存器那样直接存取。CPU 与外设的数据交换一般采用异步方式。但当外设的速度与 CPU 相当时,则也需要采用同步方式。 因此,与其他计算机部件相比,外设具有工作速度差异大、结构原理差异大、时序独立、异步性明显等特点,处理的信息从数据格式到逻辑时序一般不可能直接与 CPU 兼容。鉴于此,计算机与 I/O 设备间的连接与信息交换不能直接进行,而必须设计一个“接口电路”作为两者之间的桥梁,使 CPU 和外设协调工作,这种 I/O 接口电路又叫“I/O 适配器”(I/O Adapter)。
外设的分类
按照功能:输入设备用于将各种形式的外部信息转换为计算机所能识别的二进制信息。输出设备用于将计算机中的二进制信息转换为人或其他机器所能识别的信息形式。
按照外设的工作速度:低速设备、中速设备、高速设备。
根据外设在计算机系统中所起的作用:人—机交互设备、外存储器设备、通信设备(调制解调器)。
外设的编址方式
外设的地址实际上是指接口电路中能被 CPU 直接访问的寄存器的地址,又称为端口地址。每个外设可以根据需要占用多个端口地址。当设备通过接口与主机相连时,CPU可以通过接口地址来访问IO设备。
统一编址(存储器映射方式):这种编址方式,存储器单元与 I/O 端口统一编址,它们共用一个线性地址空间。指令系统中不设置专用的 I/O 指令,用功能很强的访存指令来访问 I/O 端口,通过地址来区分访问的是存储器单元还是 I/O 端口。访存指令功能丰富,便于编程;外设数目或 I/O 寄存器数几乎不受限制;微机的读写控制逻辑较为简单。缺点是I/O 端口占用了有限的存储器空间。
独立编址(I/O 映射方式):存储器与 I/O 端口分开编址,它们有各自独立的地址空间。指令系统中设置专用的 I/O 指令,用 I/O 指令来访问 I/O 端口,用访存指令来访问存储器,因此,虽然 I/O 端口地址与存储器地址有部分重叠,但可以通过指令区分。 I/O 端口不占用存储器空间;I/O 端口数量不多,占用地址线少,地址译码简单、速度快;专用的 I/O 指令短,执行速度快;程序的可读性强。
IO设备与主机的连接方式
总线式:外设接口通过总线与 CPU 连接。CPU 访问外设的实质是访问外设接口中的寄存器(端口)。相比存储器的访问,CPU 访问外设的过程是完全等同的,不同的是所发送的读写信号有区别。CPU 首先将要访问的外设端口地址送上地址总线 AB,然后通过控制总线发送 I/O(而非存储器)的读写信号,外设接口将对端口地址进行译码,若属于自己的端口地址范围,则可以启动外设的读写操作,否则不动作。在外设中,通常包含有外设控制器,它接收接口对外设发送的操作命令,从而控制外设的机械、机电或者电磁装置动作。
辐射式:要求每台IO设备都有一套控制线路和一组信号线,因此所用的器件和连线较多,对IO设备的增删都比较困难。大多出现在计算机发展的初级阶段。
传送方式:并行传送数据快,但要求数据线多。串行方式传送数据慢,但只需要一根数据线,当IO设备与主机距离很远时,采用串行传送较为合理。不同的传送方式需要配置不同的接口电路(并行传送接口,串行传送接口或并串联用的接口)。
联络方式
立即响应方式:对于工作速度十分缓慢的IO设备,当他们与CPU发生联系时,通常已使其出于某种等待状态,只要CPU指令一到,他们便立即响应,无需特殊的联络信号。
异步工作采用应答信号:当IO设备与主机工作速度不匹配时采用异步工作方式。这种方式在交换信息前,IO设备与CPU各自完成自身的任务,一旦出现联络信号,彼此才准备交换信息。
同步工作采用同步时标联络:同步工作要求IO设备与CPU的工作速度完全同步,这种联络相互之间还得配有专用电路,用以产生同步时标来控制同步工作。
所谓接口是指不同部件之间的连接部分,软件的接口又叫协议。而 I/O 接口则是指中央处理器与 I/O 设备及存储器之间的用于交换信息的连接电路,及其相应的软件控制。不同的IO设备都有相应的设备控制器,他们往往都是通过IO接口与主机取得联系。在 CPU 与外设之间设置接口有利于提高 CPU 的工作效率,也便于便于外设自身的多样化发展。
功能:
实现数据缓冲:接口中设置数据缓冲寄存器或锁存器,以弥补主机高速与外设低速的差异,避免因速度不一致而造成的数据丢失。每个接口中的数据缓冲寄存器的位数可以各不相同,取决于各类IO设备的不同需要。
执行 CPU 的命令:CPU对外设的各种命令通常是以控制代码形式发送到接口电路,暂存于命令寄存器,再经过接口电路进行译码后,形成一系列控制信号去控制外设。
返回外设的状态:为了便于联络,接口电路还要提供数据寄存器“空”、“满”、“准备好”、“忙”、“闲”等状态信号,并在 CPU 查询时,反馈这些状态。
设备选择:当 CPU 访问外设时,在地址总线上给出外设端口地址,外设接口必须具有识别自我的能力,只有当 CPU 给出的端口地址处于自己的地址范围内(即被选中)时,接口才能与 CPU交换信息,否则不允许有任何操作。
实现数据格式的转换:CPU 与外设接口交换数据时,传送的是并行数据,但有的外设只能收发串行数据,因此,作为 CPU 与外设的桥梁,接口就应该具有数据并串和串并的变换功能。为此,在接口中设置移位寄存器。
实现信号的转换:由于外设所提供的状态信号和它所需要的控制信号往往同计算机的总线信号不兼容,主要表现在功能定义、逻辑关系、电平高低、工作时序等方面。
中断管理功能:当外设迫切需要 CPU 的服务时,特别在出现故障需要 CPU 即刻处理时,就会要求在接口中设置中断控制器,实现 CPU 与外设的中断传送,这样既增加了计算机系统对外界的响应速度,又使 CPU 与外设并行工作,大大提高了 CPU 的工作效率。
监视设备的工作状态:及时向CPU报告,保存状态信息,供CPU查询。
接口芯片绝大多数是可编程的,这样可以在不改动硬件的情况下,只修改驱动程序即可改变和选择接口的工作方式和功能,大大增加了接口的灵活性和可扩充性,使接口向智能化发展。
上述各种功能并非每种接口都具备,不同配置和不同用途的输入输出系统,其接口功能不尽相同,接口电路的复杂程度也大不一样。
端口是指接口电路中的一些寄存器,用来存放数据信息,控制信息和状态信息,相应的端口分别称为数据端口,控制端口和状态端口。若干个端口加上相应的控制逻辑才能组成接口。
基本电路:基本电路主要包括寄存器及其控制逻辑。接口寄存器又称为端口,包括命令寄存器(控制寄存器,控制口)及其译码器、数据缓冲寄存器(数据口)、状态寄存器(状态口)。 接口的控制逻辑则用以执行 CPU 命令、返回状态、传送数据,是接口中的控制核心。它根据 CPU 送来的 I/O 读写控制信号和端口地址译码电路的译码结果,来决定 CPU 访问的是哪一个寄存器,并控制外设。 端口视功能的不同,可以只读、只写或可读可写。一个端口可以写入或读出多种信息。端口地址是对接口中端口(寄存器)的编码,但是与存储器地址不同,端口的个数与接口中寄存器的个数不一定相等。可以一个寄存器拥有一个端口地址,也可以若干个寄存器拥有一个端口地址。
端口地址译码电路:对地址总线上的外设端口地址进行译码,用以决定是否选中设备自身。若没有被选中,各个寄存器不会进行数据的传送,而接口与外设之间的各种信号(数据、状态、控制信息)也不会有效。
供选电路:由于接口的功能和结构有很大的区别,因此各接口电路中可能选择使用中断控制逻辑、定时器、计数器、移位器等器件。
数据线:数据代码的传送线。若采用单向数据线,则必须用两组才能实现数据的输入和输出功能,双向数据线只需要一组即可。
设备选择线:传送设备码,它的根数取决于IO指令中设备码的位数。可以是一组双向线或两组单向线。
命令线:传输命令信息。一组单向线,根数与命令信号多少有关。
状态线:向主机报告的信息线,一组单向线。
在程序查询方式中,CPU 和外设(接口)之间的数据传送完全靠 CPU 执行计算机查询程序来实现。要求IO接口内设置一个能反映IO设备是否准备就绪的状态标记,通过对此标记的检测,可得知IO设备的状态。每个IO设备都必须配有一套独立的逻辑电路与CPU相连,线路十分散乱,庞杂。IO设备与CPU串行工作。每个IO设备的逻辑控制电路与CPU的控制器构成一个不可分割的整体,更换设备非常困难。
程序查询方式是一种天然的同步控制机构,因此能很好地协调 CPU 与外设之间的工作,数据传送可靠。程序查询方式的接口比较简单,往往不需要增加额外的硬件电路,易于实现。但外部设备动作很慢,大量的时间浪费在查询状态和等待外设准备数据上,降低了 CPU 效率;并且对于多个外设要按一定的查询顺序执行外设的传送操作,会造成实时性差等问题。因此,一般应用于简单控制场合以及单片机中。
服务单个设备的程序查询方式的控制流程:在程序中,CPU 首先查询外设是否准备好数据交换(发送或者接收),若准备好,则在 CPU和外设之间传送一个数据,否则,CPU 循环测试与等待,直至外设准备好。
当系统中有多个外部设备时,CPU 可以使用轮询方式依次为各个外部设备服务,此时,轮询的顺序规定了 CPU 响应外设传送请求的优先级。如果 I/O处理的的实时性要求很高,或者 CPU 的任务很繁忙,则不宜采用轮询方式。
程序中断查询的指令
测试指令:查询IO设备是否准备就绪。
传送指令:当设备就绪时执行传送指令。
转移指令:未就绪继续测试。
CPU 首先在程序中启动外设工作,然后继续执行自身程序(与交换数据无关)。当外设准备好数据时,再以中断请求的方式主动通知 CPU。当 CPU 执行完当前指令后,响应外设的中断请求:CPU 中断了现行程序,继而转去执行特定的处理程序(中断服务程序)。在中断服务程序中,CPU 与外设交换一个数据。当中断服务程序执行完毕后,CPU 又返回到它原来的任务,并从它停止的地方开始执行程序。
虽然外部设备工作速度比较低,但是 CPU在外设准备数据时,仍然可以运行其他程序,不仅使 CPU 与外设并行工作,而且节省了设备状态查询的时间,提高了 CPU 的效率。适合计算机工作量十分饱满,而 I/O 处理的实时性要求又很高的系统。但是,这种控制方式需要一系列中断逻辑电路支持,所以它的硬件比较复杂,时间开销也较大。中断方式是一种异步控制机构,中断请求信号的出现是完全随机的,在主程序的任意两条指令之间,中断请求都可能插入执行一段完全不同的、甚至与它们相冲突的中断子程序,使整个程序执行流程无法预料,因此其软件开发调试比查询传送方式复杂和困难。 CPU 可以同时被多个外设占用,是管理 I/O 操作的一个比较有效的方法。
中断传送是由 CPU 通过程序来实现的,每处理一次 I/O 操作,都要执行中断服务程序,经过保护现场、断点保存、数据传送和现场恢复、中断返回等一系列操作,这样时间开销很大。对于一些高速的外设或者块设备(如磁盘),中断次数过于频繁,不仅影响传送速度,而且耗费大量 CPU 的时间。
直接存储器访问(DMA ,Direct Memory Access)方式是一种完全由硬件执行 I/O 交换的工作方式,可使数据的传送不经过 CPU,由 DMA 控制器来实现内存与外设或外设与外设之间的直接快速传送。DMA 方式将输入输出过程中,与内存交换数据的操作交由DMA 控制器来控制,进一步提高了 CPU 的效率。 在查询和中断方式下,数据传送过程中的一些操作是由软件控制相应的的指令实现的。在 DMA 方式下,这些操作都由 DMA 控制器的硬件实现,因此传送速率很高。它要求设置 DMA 控制器,硬件开销大,结构复杂,适合高速大批量的数据传送。
DMA 方式的工作过程分三个阶段:
初始化阶段,由 CPU 根据 I/O 传送要求,初始化 DMA 控制器,设置传送的方向、主存的起始地址和传送的数据字节数。该阶段由CPU执行几条输入输出指令完成。
第二阶段是数据传送阶段,当设备准备好一个字时,发出选通信号,将该字读到DMA的数据缓冲寄存器中,表示数据缓冲寄存器满(当DMA数据缓冲寄存器已经将输出数据送至IO设备后,表示数据缓冲寄存器已空)。与此同时,设备向DMA接口发请求,DMA接口向CPU申请总线控制权。CPU发送允许信号表示将总线的控制权交给DMA接口。将DMA主存地址寄存器的主存地址送地址总线,并命令存储器写(读)。通知设备已被授予一个DMA周期,并为交换下一个字做准备。将DMA数据缓冲寄存器的内容送数据总线。(送输出设备)。主存将数据总线上的信息写至地址总线指定的存储单元中(读入到数据缓冲寄存器中)。修改主存地址和字计数值。判断数据块是否传送结束,若未结束则继续传送,否则向CPU申请程序中断,标志数据块传送结束。
第三个阶段是后处理:当DMA的中断请求得到响应后,CPU停止原程序的执行,转去执行中断服务程序,做一些DMA的结束工作。包括校验送入主存的数据,决定是否用DMA传送其他数据块,若继续传送,则要对DMA接口初始化,否则,停止外设。测试传送过程中是否发生错误,若出错则转错误诊断及处理错误程序。
DMA 控制器只能实现对数据输入/输出传送的控制,而对输入/输出设备的管理和其他操作,仍需由 CPU 来完成。若为每台IO设备配置专用的DMA接口不仅增加硬件成本,而且为了解决众多DMA接口同时访问主存的冲突问题会使控制变的十分复杂,CPU对众多的DMA接口进行管理也会影响CPU的整体工作效率。
CPU 将部分权力下放给通道。通道是一个具有特殊功能的处理器,它可以实现对外围设备的统一管理和外围设备与内存之间的数据传送。通道能独立地执行用通道指令编写的输入输出控制程序,产生相应的控制信号送给由它管辖的设备控制器,继而完成复杂的输入输出过程。具有通道的输入输出系统,大大提高了 CPU 的工作效率,但其硬件更为复杂。
输入输出处理机(IOP)通常称作外围处理机(PPU),它是通道方式的进一步发展。既能完成IO通道要完成的IO控制,又可以完成码制转换,格式处理,检错纠错等。这种 PPU 基本上独立于主机工作,它的结构更接近一般处理机,甚至就是微小型计算机。 在 I/O 处理机方式中,I/O 处理机几乎接管了原来由 CPU 承担的控制输入/输出操作及输入/输出信息的全部功能。有自己的指令系统,能够直接存取系统主存储器,也能独立地执行程序,能对外设进行控制、对输入/输出过程进行管理,并能完成字与字之间的装配和拆卸、码制的转换、数据块的错误检测和纠错,以及格式变换等操作。
I/O 处理机完成 I/O 操作和预处理后,再以查询或中断方式与 CPU 交换数据,向 CPU 报告外设和外设控制器的状态,对状态进行分析,并对输入/输出系统出现的各种情况进行处理。为了使 CPU 的操作与输入/输出操作并行进行,必须使外设在任何时刻都能独立地工作,并且要让外设工作所需要的各种控制命令和定时信号与 CPU无关,由外设控制器自动地独立形成。
输入输出处理机通常应用于中、大型计算机中。在一些系统中,设置了多台 IOP,分别承担 I/O 控制、通信、维护诊断等任务。从某种意义上说,这种系统已变成分布式的多机系统。 实际中也不一定将全部 I/O 设备都交由专用 I/O 处理器去控制,而可以将高速 I/O 设备和低速 I/O 设备分开来。专用处理器专门负责高速 I/O 设备,完成实时 I/O。