我们的电脑设备可以接⾮常多的输⼊输出设备,⽐如键盘、⿏标、显示器、⽹卡、硬盘、打印机、⾳响等

等,每个设备的⽤法和功能都不同,那操作系统是如何把这些输⼊输出设备统⼀管理的呢? 为了屏蔽设备之间的差异,每个设备都有⼀个叫设备控制器(Device Control) 的组件,⽐如硬盘有硬盘 控制器、显示器有视频控制器等。

设备控制器_输出设备

因为这些控制器都很清楚的知道对应设备的⽤法和功能,所以 CPU 是通过设备控制器来和设备打交道的。

设备控制器⾥有芯⽚,它可执⾏⾃⼰的逻辑,也有⾃⼰的寄存器,⽤来与 CPU 进⾏通信,⽐如: 通过写⼊这些寄存器,操作系统可以命令设备发送数据、接收数据、开启或关闭,或者执⾏某些其他 操作。 通过读取这些寄存器,操作系统可以了解设备的状态,是否准备好接收⼀个新的命令等。

实际上,控制器是有三类寄存器,它们分别是状态寄存器(Status Register)、 命令寄存器(Command

Register)以及数据寄存器(Data Register)

这三个寄存器的作⽤:

数据寄存器,CPU 向 I/O 设备写⼊需要传输的数据,⽐如要打印的内容是「Hello」,CPU 就要先发 送⼀个 H 字符给到对应的 I/O 设备。 命令寄存器,CPU 发送⼀个命令,告诉 I/O 设备,要进⾏输⼊/输出操作,于是就会交给 I/O 设备去 ⼯作,任务完成后,会把状态寄存器⾥⾯的状态标记为完成。 状态寄存器,⽬的是告诉 CPU ,现在已经在⼯作或⼯作已经完成,如果已经在⼯作状态,CPU 再发 送数据或者命令过来,都是没有⽤的,直到前⾯的⼯作已经完成,状态寄存标记成已完成,CPU 才能 发送下⼀个字符和命令。