为了确保计算机能够正常工作,必须提供数据通路,让信息在连接到个人计算机的CPU、RAM和I/O设备之间流动。
所有的计算机都拥有一条系统总线,它连接大部分内部硬件设备。任何I/O设备有且仅能连接一条总线。
CPU和I/O设备之间的数据通路通常称为I/O总线。每个I/O设备依次连接到I/O总线上,这种连接使用了包含3个元素的硬件组织层次:I/O端口、接口和设备控制器。
![ac560a7f0b1d9f05a2e46ca34526bea3.png](https://img-blog.csdnimg.cn/img_convert/ac560a7f0b1d9f05a2e46ca34526bea3.png)
每个连接到I/O总线上的设备都有自己的I/O地址集,通常称为I/O端口。在执行一条指令时,cpu使用地址总线选择所请求的I/O端口,使用数据总线在CPU寄存器和端口之间传递数据。
I/O端口还可以被映射到物理地址空间。因此,处理器和I/O设备之间的通信就可以使用对内存直接进行操作的汇编语言指令。
![d7254838380a863fe481d86cd00b59cc.png](https://img-blog.csdnimg.cn/img_convert/d7254838380a863fe481d86cd00b59cc.png)
I/O接口是处理一组I/O端口和对应的设备控制器之间的一种硬件电路。它起翻译器的作用,即把I/O端口中值转换成设备所需要的命令和数据。
在相反的方向上,它检测设备状态的变化,并对起状态寄存器作用的I/O端口进行相应的更新。还可以通过一条IRP线把这种电路连接到可编程中断控制器上,以使它代表相应的设备发出中断请求。
![1c71013b2447ed09f953d9e99e41624d.png](https://img-blog.csdnimg.cn/img_convert/1c71013b2447ed09f953d9e99e41624d.png)
复杂的设备可能需要一个设备控制器(device controller)来驱动。从本质来说,控制器起两个重要作用:
对从I/O接口接收到的高级命令进行解释,并通过向设备发送适当的电信号序列强制设备执行特定的操作;
对从设备接收到的电信号进行转换和适当地解释,并修改(通过I/O接口)状态寄存器的值。
典型的设备控制器是磁盘控制器,它从微处理器(通过I/O接口)接收诸如“写这个数据”之类的高级命令,并将其转换成诸如“把磁头定位在正确的磁道上”和“把数据写入这个磁道”之类的低级磁盘操作。