IO设备的机械部件主要用来执行具体的IO操作。
如我们看得见摸得着的鼠标和键盘的按键,显示器的LED屏,移动硬盘的磁臂,磁盘盘面。
IO设备的电子部件通常是一块出入主板扩充槽的印刷电路板,cpu无法直接控制IO设备的机械部件,因此电子部件充当CPU的机械部件的中介,用于实现CPU对机械部件的控制。
这个电子部件就是I/O控制器
(设备控制器)。CPU控制设备控制器,设备控制器控制机械部件。
友情提示:不同产品的的I/O控制器是不同的,及时完成同种功能的产品的控制器也是不同的,就像不同厂商的打印机。既然如此,CPU就无法去以同一种命令方式去控制I/O设备,因此,各种厂商会提供各自产品相应的驱动软件,由驱动软件作为CPU和I/O控制器中介,进行翻译工作,这样CPU及时用同一种命令方式就可控制不同类型的I/O设备。另外一个I/O控制器可能会控制多个机械部件
如果CPU发来读写命令,I/O控制器中会有相应的的
控制寄存器
来存放命令的参数。
I/O控制器中会有相应的
状态寄存器
,用于记录I/O设备的当前状态。如1表示空闲,0表示忙碌。
I/O控制器中会设置相应的
数据寄存器
。输出时,数据寄存器会暂存CPU发来的数据,之后由I/O控制器传给机械设备,输入时,数据寄存器暂存数据,之后有CPU取走。
为了区分I/O控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”,I/O控制器通过CPU提供的地址来判断CPU要读写的是哪个寄存器(前面友情提示中提到,一个I/O控制器可能对应多个机械部件,因此I/O控制器中可能有多个数据寄存器,状态寄存器和控制寄存器,因此需要一个特定的区域去记录各个寄存器的地址)。
注意 :一个I/O控制器可能会对应多个设备
前面提到I/O控制器有地址识别的功能,因此,寄存器首先要有自己的地址才能让I/O控制器找到自己。
I/O控制器中的寄存器与内存统一编址,理解为控制器内存和操作系统内存合为一套,在操作系统的基础上递增;这样就可以使用对内存进行操作的指令来对控制进行操作
控制器中的寄存器独立编址,这样的话,就相当于出现两套内存,需要设置专门的指令来操作指定的控制器。
大多数人,即使是在这个相对自由的国家,仅仅由于无知和失误,是生活中疲于应对各种自找的烦恼和多余的劳逸,乃至没有余力的去采摘那些美好的人生果实。他们的手指太过劳累,变得非常笨拙,而且抖个不停,所以五彩采摘果实. ——《瓦尔登湖》