7.2.4 I/O硬件原理
1.I/O系统与I/O控制方式
(1)I/O系统
I/O设备及其接口线路、控制部件、通道和管理软件统称为I/O系统。I/O系统的性能经常成为整个计算机系统性能的瓶颈。通常将I/O系统的结构分为总线型I/O系统和通道型I/O系统。
总线型I/O系统的结构采用单总线结构,CPU和存储器直接连在总线上,I/O设备通过设备控制器连接在总线上。
通道型I/O系统的结构不采用单总线结构,而是增加了一级I/O通道,一个存储器可以连接多个通道,每个通道可以连接多个设备控制器,而每个设备控制器又可以连接多个设备。
(2)I/O控制方式
设备与内存之间进行的数据传输控制方式主要有4种:轮询方式(或称程序直接控制方式)、中断控制方式、DMA控制方式、通道控制方式。其中,通道控制方式占用CPU时间最短。
2.I/O设备组成
I/O设备由两部分组成:机械部件和电子部件。机械部件指设备本身,电子部件称为设备控制器或适配器。通常,设备并不直接与CPU进行通信,而是通过设备控制器,设备控制器卡上通常有一个连接器,设备通过自带的电缆插入连接器中完成与设备控制器的连接。设备与设备控制器之间的接口是一种低级接口。
3.设备控制器
设备控制器是CPU与I/O设备之间的接口,它接收CPU发来的命令,并去控制I/O设备工作,使处理机从繁杂的设备控制事务中解脱出来。设备控制器是一个可编址设备,当它仅控制一个设备时,它有一个唯一的设备地址;当连接多个设备时,它有多个设备地址,每一个设备地址对应一个设备。下面介绍设备控制器的主要功能。
(1)接收和识别命令
CPU可以向控制器发送多种不同命令,设备控制器应能接收并识别这些命令。在设备控制器中设置控制寄存器,用来存放接收的命令和参数,并对命令进行译码。
(2)数据交换
数据交换包括CPU与控制器之间的数据交换以及控制器与设备之间的数据交换。对于前者,是通过数据总线;对于后者,是设备将数据输入到控制器,或从控制器传送给设备。传输的数据存放在控制器中的数据寄存器中。
(3)设备状态的了解和报告
在控制器中设置了一个状态寄存器,用其中的一位来记录设备的状态,以供CPU了解。
(4)设备地址识别
系统中的每一个设备都有一个地址,设备控制器必须能够识别它所控制的每个设备的地址。
由于设备控制器处于CPU与设备之间,它既要与CPU通信,又要与设备通信,还应具有按照CPU所发来的命令去控制设备的工作功能。因此,现有的大多数设备控制器都是由以下3部分组成的。
1)设备控制器与CPU的接口:用于实现CPU与设备控制器之间的通信。共有3类信号线:数据线、地址线和控制线。数据线通常与两类寄存器相连接:
·与数据寄存器连接。在控制器中可以有一个或多个数据寄存器,用于存放从设备送来的数据输入,或从CPU送来的数据输出。
·与控制/状态寄存器连接。存放从CPU送来的控制信息或设备的状态信息。
2)设备控制器与设备的接口:一个设备控制器可以连接一个或多个设备。一个接口连接一台设备。每个接口中有3种类型的信号:
·数据信号:是由设备发送给设备控制器的;对输出而言,是由设备控制器所接收的比特流。
·控制信号:设备控制器发送给设备的、用于规定设备执行读或写操作的信号,或执行其他操作的信号,如移动磁盘的信号。
·状态信号:用于指示设备的当前状态。
3)I/O逻辑:用于实现对设备的控制,通过一组控制线与处理机交互,处理机利用该逻辑向控制器发送I/O命令;I/O逻辑对收到的命令进行译码。
4.I/O端口的编址方式
每个设备控制器中都有多个寄存器用于和CPU通信,因此,需要提供编址寻址机制。根据CPU体系结构的不同,CPU对I/O端口的编址方式有两种。
(1)I/O映射方式
I/O映射方式或称为I/O端口方式,是一种独立编址方式。该方式为每个控制寄存器分配一个I/O端口,即用端口号标识了设备控制寄存器的地址,端口号也称为I/O端口地址或端口地址。所有的I/O端口构成I/O端口空间(或I/O地址空间,简称为I/O空间)。
CPU通过特殊的I/O指令(如X86的IN和OUT指令)来访问这一空间中的地址单元,从而实现访问I/O设备,如读取控制寄存器端口内容并存入CPU寄存器中,或者将CPU寄存器的内容写入控制寄存器中。
在这种方式中,I/O空间与内存空间各自独立编址,也是独立寻址的。因为有独立的I/O空间,因此不占用内存空间;有独立的I/O指令;程序清晰,很容易看出是I/O操作还是存储器操作,译码电路也比较简单。对于这种编址方式,通常只有具有I/O读写控制线的处理器系统(如8086系统)才能使用。
因为I/O空间只能由操作系统使用特殊的I/O指令进行访问,I/O设备驱动程序一般使用汇编语言编写。
(2)内存映射方式
这种编址方式是将I/O地址空间与存储器地址空间合二为一,是一种统一编址方式,将端口与内存单元同等对待。
该方式也称为内存映射I/O、存储器映像I/O或MMIO,它是PCI规范的一部分,实际上I/O设备被放置在内存空间而不是I/O空间,即将所有的设备控制寄存器映射到内存空间,给每个设备控制寄存器分配了一个唯一、专属的内存地址,不会有内存被分配这一地址。
CPU可以像访问内存一样来访问I/O资源,如设备上的内存,而不需要设立专门的外设I/O指令。因为I/O操作使用的是存储器访问指令,因此,指令多而灵活,缺点是端口地址要占用一部分存储器地址。
采用内存映射I/O方式,I/O设备驱动程序可以完全采用C语言编写,设备控制器只是内存中的变量,在C语言中同其他变量一样可以直接寻址,简化了程序设计的难度和接口的复杂性。