数据缓冲:由于I/O设备的速率较低,而CPU和内存的速率较高,因此在驱动控制器中设置一个缓冲区。在输出的时候,利用这个缓冲区暂存主机高速传输过来的数据,然后把缓冲区中的数据按照I/O设备的速率传输给I/O设备;输入时,缓冲区使用它暂存从I/O设备发来的数据,并在接收到一批数据后,将缓冲区中的数据高速传输给主机。
错误控制:设备控制器还负责对I/O设备传输的数据进行错误检测。如果在传输过程中出现错误,通常会设置错误检测码并上报给CPU,因此CPU将本次传输的数据作废并进行新的传输。这确保了正确的数据输入。
数据交换:这是指实现CPU与控制器之间、控制器与设备之间的数据交换。对于前者,CPU通过数据总线向控制器并行写入数据,或者从控制器并行读取数据;对于后者,设备向控制器输入数据,或将数据从控制器传输到设备。为此,必须在控制器中设置数据寄存器。
Status描述:识别并报告设备的状态controller应该记录设备的状态,以便CPU知道。例如,只有当设备准备好发送时,CPU才能启动控制器从设备中读取数据。为此,在控制器中应设置一个状态寄存器,它们中的每一个都用来反映设备的某种状态。当CPU读取寄存器的内容时,就可以了解设备的状态。
接收和识别命令:CPU可以向控制器发送各种命令,设备控制器应该能够接收和识别这些命令。为此,控制器中应有相应的控制寄存器,用于存储接收到的命令和参数,并对接收到的命令进行译码。例如,磁盘控制器可以接收CPU发送的Read、Write、Format等15条不同的命令,有些命令还带有参数;相应地,磁盘控制器中有多个寄存器和命令译码器。
地址识别:就像内存中的每个单元都有一个地址一样,系统中的每个设备也有一个地址,设备控制器能够识别它所控制的每个设备的地址。此外,为了让CPU向(或从)寄存器写入(或读取)数据,这些寄存器应该具有一个地址。