目录
前置知识
标准设备
一个标准的硬件设备包括两部分:
- 面向系统其他部分展现的硬件接口(类似于软件的接口),供其他硬件或软件调用
- 内部结构,包括设备相关的特定实现,负责具体实现设备展示给系统的抽象接口
标准协议
一个标准设备的接口包含三个寄存器,通过读写这些寄存器,操作系统可以控制设备的行为:
- 一个状态(status)寄存器,可以读取并查看设备的当前状态
- 一个命令(command)寄存器,用于通知设备执行某个具体任务
- 一个数据(data)寄存器,将数据传给设备或从设备接收数据
操作系统与标准设备的交互:
- 第1步,操作系统通过反复读取状态寄存器,等待设备进入可以接收命令的就绪状态。我们称之为轮询(polling)设备(基本上,就是问它正在做什么)。
- 第2步,操作系统下发数据到数据寄存器。例如,你可以想象如果这是一个磁盘,需要多次写入操作,将一个磁盘块(比如4KB)传递给设备。如果主CPU参与数据移动(就像这个示例协议一样),我们就称之为编程的I/O(programmedI/O,PIO)。
- 第3步,操作系统将命令写入命令寄存器;这样设备就知道数据已经准备好了,它应该开始执行命令。最后一步,操作系统再次通过不断轮询设备,等待并判断设备是否执行完成命令(有可能得到一个指示成功或失败的错误码)。
缺点:轮询过程比较低效,等待设备就绪和等待设备执行完成命令浪费大量CPU时间