目录
一、I/O设备的概念和分类
I/O设备是可以将数据输入到计算机,或可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作
1.按使用特性分类
- 人机交互类外部设备【数据传输速度慢】
- 存储设备【数据传输速度快】
- 网络通信设备
2.按传输速率分类
- 低速设备
- 中速设备
- 高速设备
3.按信息交换的单位分类
- 块设备【传输速率较高,可寻址,即对它可随机地读/写任一块】
- 字符设备【传输速率慢,不可寻址,在输入/输出时常采用中断驱动方式】
二、I/O控制器
I/O设备分为机械部件和电子部件(I/O控制器、设备控制器)
I/O设备的机械部件主要用来执行具体I/O操作。如鼠标/键盘的按钮、显示器的LED屏、移动硬盘的磁臂
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制。
这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件
I/O控制器的功能——
- 接受和识别CPU发出的命令【如CPU发来的read/write命令,I/O控制器中要有相应的控制寄存器来存放命令和参数】
- 向CPU报告设备的状态【I/O控制器中要有相应的状态寄存器,用于记录I/O设备的当前状态】
- 数据交换【作为中介必定会涉及数据交互,I/O控制器中会设置相应的数据寄存器。输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据】
- 地址识别【类似于内存的地址,为了区分设备控制器中的各个寄存器,也需给各个寄存器设置一个特定的“地址”。I/O控制器通过CPU提供的“地址”来判断CPU要读/写的是哪个寄存器,由I/O逻辑实现】
I/O控制器的组成——
- CPU与控制器的接口
- I/O逻辑【负责识别CPU发出的命令,并向设备发出命令】
- 控制器与设备的接口
1.CPU与控制器的接口
CPU与控制器的接口实现CPU和控制器之间的通信
I/O控制器接收和识别了CPU的命令之后需要将命令翻译成具体设备能够明白的一些命令,然后通过控制器与设备的接口发送给具体的设备,让设备执行相应的操作。
一个I/O控制器可能会负责控制多个具体的I/O设备,为了区别CPU此时要操作的到底是哪一个设备,要给设备编号或者说给各个设备接口一个地址,同时CPU要指明需操纵的设备
流程如下——
CPU通过控制线向I/O控制器发出一个具体的I/O指令,同时通过地址线说明要操纵的设备,如果此时要输出一个数据,CPU会通过数据总线把自己要输出的数据放到I/O控制器的数据寄存器中,然后I/O逻辑可以从数据寄存器中取得CPU要输出的数据。
CPU发出指令的参数放到控制寄存器中,I/O逻辑从控制寄存器中读出相应的参数
为了实现对各个设备的管理,I/O逻辑会往状态寄存器中写入各个设备状态,CPU会从状态寄存器中读出各个设备的一个状态
2.控制器与设备的接口
控制器与设备的接口实现控制器和设备之间的通信。
若此时要输出一个数据,首先由cpu通过数据总线把数据写入到数据寄存器中,然后IO逻辑取出数据寄存器中的内容,通过控制器与设备的接口把这些数据输出到外部设备上。
如果要输入数据,数据可以通过这个接口输入,IO逻辑会把这些数据放到数据寄存器中,CPU从数据寄存器中取走数据
另外,设备还需及时地向I/O控制器反馈自己的状态。设备通过这个接口向I/O控制器报告此时自己的状态,I/O逻辑把这个设备的状态写入到它对应的状态寄存器中
控制器与设备的接口还能实现设备控制,IO逻辑根绝cpu发出的命令,对对应的设备发出一些控制命令,让这些设备执行具体的工作
①一个I/O控制器可能会对应多个设备
②数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址