目录
两个系统或两个部件之间的交接部分,一般就称为 接口。接口可以是硬件上两种设备间的连接电路;也可以是两个软件之间交互的逻辑边界。
主机与 I/O 设备之间,专门设置一套硬件电路、配合相应的软件控制,实现两者间的信息交互,这就是 I/O 接口。不同的 I/O 设备都有其相应的设备控制器,而它们往往都是通过 I/O 接口与主机取得联系的。
一、I/O 接口的功能
I/O 接口主要的功能如下:
选址功能:根据 I/O 指令中的设备码进行设备选择;
数据缓冲:I/O 设备速度不一,与 CPU 相差比较大,需要进行数据的缓冲达到速度匹配、防止丢失数据;
串并转换:有些 I/O 设备采用串行传输方式,而 CPU 一般为并行传输,需要进行数据格式转换;
电平转换:I/O 设备的输入输出电平可能与 CPU 不同,需要进行电平转换;
传送控制命令:CPU 会向 I/O 设备发出各种控制信号,需要相应的传输通路;
反馈状态信息:I/O 设备需要将工作状态(比如 “忙” “准备就绪” “错误” “中断请求” 等)报告给 CPU,并且可能需要将状态信息进行保存,供 CPU 查询。
二、I/O 接口的基本结构
总线结构的计算机中,每一台 I/O 设备都是通过 I/O 接口挂到 I/O 总线上的。
1. 总线连接的数据通路
由于需要实现设备选择、数据缓冲、传送命令和状态等功能,总线中必须有相应的数据通路:
上图中的 I/O 总线,就包含了 数据线、设备选择线、命令线 和 状态线。
数据线
数据线是 I/O 设备与主机之间传送数据的线路。
数据线的根数一般等于存储字长的位数,通常是 双向的。若采用单向数据总线,则必须用两组才能实现数据的输入和输出功能,而双向数据总线只需一组即可。
设备选择线
设备选择线用来传送设备码,如果把设备码看做是地址号,那么设备选择线又可称为 地址线。
设备选择线的根数取决于 I/O 指令中设备码的位数,决定了能够连接设备的数量。设备选择线一般是一组,也可以有两组,其中一组用于主机向 I/O 设备发送设备码,另一组用于 I/O 设备向主机回送设备码。
命令线
命令线主要用来传输 CPU 向设备发出的各种命令信号,比如启动、清除、屏蔽、读、写等。
命令线是一组单向总线,根数与命令信号的数量有关。
状态线
状态线主要用来向主机报告 I/O 设备的状态信号,比如设备是否准备就绪、是否向 CPU 发出中断请求等。
状态线也是一组单向总线。
2. I/O 接口的基本组成
根据 I/O 接口的功能,以及总线结构中整体的数据通路,就可以推出接口应该具有的硬件配置。
(1)选址功能
设备码通过设备选择线(地址线)送至所有设备的接口,因此需要每个接口都必须具有选址功能。
当设备选择线上的设备码与本设备码相符时,发出一个 设备选中信号 SEL,这种功能可通过接口内的设备选择电路来实现。
(2)传送命令的功能
当 CPU 向 I/O 设备发出命令时,要求 I/O 设备能做出响应,因此通常在 I/O 接口中设有存放命令的 命令寄存器 以及 命令译码器。
命令寄存器用来存放 I/O 指令中的命令码,它受设备选中信号 SEL 控制。命令线和所有接口电路的命令寄存器相连,只有被选中设备的 SEL 信号有效,才会将命令线上的命令码存入命令寄存器。
(3)传送数据的功能
接口处于主机与I/O设备之间,因此主机与 I/O 设备之间进行数据传输必须经过接口。这就要求接口中具有数据通路,完成数据传送。这种数据通路还应具有 缓冲 能力,也就是能将数据暂存在接口内。
接口中通常设有 数据缓冲寄存器(Data Buffer Register,DBR),它用来暂存 I/O 设备与主机准备交换的信息,与 I/O 总线中的数据线是相连的。
(4)反映 I/O 设备工作状态的功能
为了使 CPU 能及时了解 I/O 设备的工作状态,接口内必须设置一些反映设备工作状态的触发器。
比如,可以用 完成触发器 D 和 工作触发器 B 来标志设备所处的状态。
当 D = 1,B = 0 时,表示 I/O 设备已经准备就绪;
当 D = 0,B = 1 时,表示 I/O 设备正处于工作状态;
当 D = 0,B = 0 时,表示 I/O 设备处于暂停状态。
由于现代计算机系统中大多采用中断技术,因此接口电路中一般还设有 中断请求触发器 INTR,当为 “1” 时,表示该设备向 CPU 发出中断请求;
接口内还有 中断屏蔽触发器 MASK,它与中断请求触发器配合使用,完成设备的屏蔽功能。
所有的状态标志触发器都与I/O总线中的状态线相连。此外,不同的 I/O 设备的接口电路中还可根据需要增设一些其他状态标志触发器。
这样就可以得到 I/O 接口的基本组成:
目前大多数 I/O 设备所共用的电路都制作在一个芯片内,作为 通用接口芯片。另一些 I/O 设备专用的电路,制作在 I/O 设备的 设备控制器 中。
三、I/O 端口及其编址
需要注意区分 “接口” (Interface)和 “端口” (Port)的概念:
端口 指的是接口电路中的一些寄存器,这些寄存器用来存放数据信息、控制信息和状态信息,相应的端口就称为 数据端口、控制端口 和 状态端口。
CPU 执行 I/O 指令中的输入操作时,从端口读入信息;执行输出操作时,将寄存器(比如 ACC)的信息写入到端口中。这样,CPU 对 I/O 设备的操作,就可以转换为对 I/O 端口的操作。一些端口,再加上对应的控制逻辑,就组成了接口。
CPU 要想访问某个 I/O 端口,就需要对 I/O 端口进行统一编号,每个端口对应一个 端口地址。对 I/O 端口的编址,可以选择跟内存统一,也可以完全独立。
1. 统一编址
统一编址就是把 I/O 地址看作存储器地址的一部分,也就是把 I/O 端口当做存储器单元统一进行地址分配。也称为 存储器映射方式。
这样,CPU 访问 I/O 端口时就可以直接用访存指令,而不需要专门的 I/O 指令,CPU 控制 I/O 设备更加方便;而缺点是端口会占用内存地址空间,减少了主存容量。
2. 不统一编址
不统一编址就是 I/O 地址和存储器地址完全分开,两者都有自己独立的地址空间,所以又叫 独立编址。也称为 I/O 映射方式。
不统一编址时,CPU 访问一个地址时,就无法从地址码上进行区分;所以必须通过设置专门的 I/O 指令 来访问 I/O 端口。这样就不会占用主存地址空间,用专门的 I/O 指令编写程序也会更加清晰;缺点是让指令系统更加复杂,CPU 需要提供对内存和 I/O 设备的两套读/写控制信号,硬件成本也更高。
四、I/O 接口的类型
I/O 接口按不同的方式,可以有以下几种分类。
按数据传送方式:分为 并行接口 和 串行接口;
按功能选择的灵活性:分为 可编程接口 和 不可编程接口;
按通用性:分为 通用接口 和 专用接口;
按数据传送的控制方式:分为 程序型接口 和 DMA 型接口。
程序型接口用于连接速度较慢的 I/O 设备,如显示终端、键盘、打印机等;具体的控制方式包括 程序查询方式 和 程序中断方式。DMA 型接口用于连接高速 I/O 设备,如磁盘、磁带等;控制方式采用 DMA 方式。