如图所示是一个I/O接口的通用结构,I/O 接口在主机侧通过IO总线与内存、CPU 相连。
I/O接口中可以分为以下几个部分:
- 数据缓冲寄存器:用来暂存与CPU或内存之间传送的数据信息;
- 状态寄存器:用来记录接口和设备的状态信息;
- 控制寄存器:用来保存 CPU 对外设的控制信息;
- 数据线:传送的是读/写数据、状态信息、控制信息和中断类型号;
- 地址线:传送的是要访问I/O接口中的寄存器的地址;
- 控制线:传送的是读/写控制信号,以确认是读寄存器还是写寄存器,还会传送中断请求和响应信号、仲裁信号和握手信号;
- I/O 控制逻辑:能对控制寄存器中的命令字进行译码,并将译码得到的控制信号通过外设界面控制逻辑送到外设,同时将数据缓冲寄存器的数据发送到外设或从外设接收数据到数据缓冲寄存器,还要具有收集外设状态到状态寄存器的功能;
其中要注意:
- 状态寄存器和控制寄存器在传送方向上是相反的,在访问时间上也是错开的;
- 对数据缓冲寄存器、状态/控制寄存器的访问操作是通过相应的指令来完成的,通常称这类指令为I/O指令,I/O 指令只能在操作系统内核的底层I/O 软件中使用,它们是一种特权指令;
- 端口和接口是两个不同的概念,端口是指接口电路中可以进行读/写的寄存器。I/O 端口是指I/O接口电路中可被 CPU直接访问的寄存器,主要有数据端口、状态端口和控制端口。通常,CPU 能够对数据端口中的数据进行读/写操作;但对状态端口中的外设状态只能进行读操作,对控制端口中的各种控制命令只能进行写操作。
- I/O端口要想能够被 CPU访问,就必须要对各个端口进行编址,每个端口对应一个端口地址。而对/O端口的编址方式有与存储器独立编址和统一编址两种。
写在后面
这个专栏主要是我在学习408真题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!
参考资料
[1]王道408教材(2025版)
[2]王道课程资料