从硬件角度看,输入/输出(I/O)设备是电子芯片、导线、电源、电子控制设备、电机等组成的物理设备,从软件角度只关注输入/输出设备的编程接口。
(一)I/O设备
分类 | 说明 | |
1 | 块设备 | 把信息存放在固定大小的块中,每个块都有自己的地址,独立于其他块,可寻址。例如磁盘、USB闪存、CD-ROM等。 |
2 | 字符设备 | 以字符为单位接收或发送一个字符流,字符设备不可以寻址。 例如打印机、网卡、鼠标键盘等。 |
I/O设备一般都包含设备控制器,一般以芯片的形式出现,如南桥芯片。
不同的控制器可以控制不同的设备。
南桥芯片中包含了多种设备的控制器,如硬盘控制器、USB控制器、网卡、声卡控制器等。
I/O设备通过总线以及卡槽与其他部件进行连接,如PCI、PCI-E、SATA、USB 等。
不同设备控制器的操作控制通过驱动程序进行。每个控制器都有几个寄存器与CPU进行通信。通过写入这些寄存器,可以命令设备发送或接收数据,开启或关闭。通过读取寄存器就能知道设备状态。
由于寄存器数量和大小有限,设备一般会有一个RAM性质的缓冲区,来存放一些数据。比如硬盘读写缓存、显卡显存等。一方面提供数据存放,另一方面是提高I/O操作速度。
(二)CPU与I/O通信
CPU与I/O设备控制器中的寄存器或数据缓冲区通信
通信方式 | 描述 | |
1 | 为每个控制器分配一个I/O端口号 | 所有控制器形成一个I/O端口空间,这些信息存放在内存中,一般程序不能访问,操作系统则通过特殊的指令和端口号从设备读取或是写入数据。 早期计算机的处理方式,通常使用汇编语言进行操作。 |
2 | 所有控制器的寄存器映射到内存空间 | 每个设备寄存器都有一个唯一地址,称为内存映射I/O。 不需要特殊指令控制,对待I/O设备和其他普通数据访问方式相同,可以使用C语言编程。 |
3 | 上述两种方式相结合 | 如寄存器拥有I/O端口,而数据缓冲区则映射到内存空间 |
CPU无论是从内存还是I/O设备读取数据,都需要把地址放到地址总线上,然后向控制总线传递一个读信号,还要用一条信号线来表示是从内存还是I/O读取数据。
(三)程序控制方式
控制方式 | 说明 | 作用 | |
1 | 无条件传送 | 外设总是准备好的,可以无条件随时接收CPU发来的输出数据,也能够无条件随时向CPU提供需要输入的数据。 | |
2 | 程序查询方式 | 通过CPU执行程序来查询外设状态,判断外设是否准备好接收数据或准备好了向CPU输入的数据。 CPU根据状态有针对性地为外设的输入/输出服务。 | 降低了CPU效率 对外部突发事件无法做出及时响应 |
(四)中断方式
在中断方式下,I/O设备工作时CPU不再等待,而是进行其他操作,当I/O设备完成后,通过一个硬件中断信号通知CPU,CPU再来处理接下来的工作。
与程序控制方式相比,中断方式因为CPU无须等待而提高了效率。
输入/输出过程:
①当系统与外设交换数据时,CPU无须等待也不必去查询I/O设备状态,而是处理其他任务。
②当I/O设备准备好以后,就发出中断请求信号通知CPU,CPU接到中断请求信号后,保存正在执行程序的现场,转入I/O中断服务程序执行,完成与I/O系统的数据交换,然后再返回被打断的程序继续执行。
中断方法 | 说明 | |
1 | 多中断信号线法 | 每个中断源都有属于自己的一根中断请求信号线向CPU提出中断请求 |
2 | 中断软件查询法 | 当CPU检测到一个中断请求信号后,即转入到中断服务程序去轮询每个中断源以确定是谁发出了中断请求信号。 对各设备的响应优先级由软件设定。 缺陷:花费时间太多。 |
3 | 菊花链法 | 是一种硬件查询法。 所有I/O模块共享一根共同的中断请求线,中断确认信号以链式在各模块间相连。 当CPU检测到中断请求信号时,发出中断确认信号。 中断确认信号依次在I/O模块间传递,直到发出请求的模块,该模块则把它的ID送往数据线由CPU读取。 |
4 | 总线仲裁法 | 一个I/O设备在发出中断请求前,必须先获得总线控制权,可由总线仲裁机制来裁定谁可以发出中断请求信号。 当CPU发出中断响应信号后,该设备即把自己的ID发往数据线。 |
5 | 中断向量表法 | 中断向量表用来保存各个中断源的中断服务程序的入口地址。 当外设发出中断请求信号(INTR)以后,由中断控制器(INTC)确定其中断号,并根据中断号查找中断向量表来取得其中断服务程序的入口地址,同时INTC把中断请求信号提交给CPU。 中断源的优先级由INTC来控制。 |
(五)中断向量表
(六)中断优先级
在中断优先级控制系统中,给最紧迫的中断源分配高的优先级,给要求相对不紧迫的中断源分配低一些的优先级。
(1)当不同优先级的多个中断源同时提出中断请求时,CPU应优先响应优先级最高的中断源。
(2)当CPU正在对某一个中断源服务时,又有比它优先级更高的中断源提出中断请求,CPU应能暂时中断正在执行的中断服务程序,转去对优先级更高的中断源服务,服务结束后再回到原先被中断的优先级较低的中断服务程序继续执行。中断嵌套:即一个中断服务程序的执行中嵌套着另一个中断服务程序的执行过程。
(七)DMA
在计算机与外设交换数据的过程中,无论是无条件传送、利用查询方式传送还是利用中断方式传送,都需要由CPU通过执行程序来实现,这就限制了数据传送速度。
直接内存存取(Direct Memory Access, DMA):指数据在内存与I/O设备间的直接成块传送,即在内存与I/O设备间传送一个数据块的过程中,不需要CPU任何干涉,只需要CPU在过程开始启动(即向设备发出"传送一块数据"的命令)与过程结束(CPU通过轮询或中断得知过程是否结束和下次操作是否准备就绪)时的处理,实际操作由DMA硬件直接执行完成,CPU在此传送过程中可处理别的任务。
(1)外设向DMA控制器(DMAC)提出DMA传送的请求。
(2)DMA控制器向CPU提出请求,其请求信号通常加到CPU的保持请求输入端HOLD上。
(3)CPU完成当前总线周期后,立即对此请求进行响应,CPU响应包括两方面:一是CPU将有效地保持响应信号HLDA输出加到DMAC上,告诉DMAC它的请求已得到响应;二是CPU将其输出的总线信号置为高阻,意味着CPU放弃了对总线的控制权。
(4)此时DMAC获得了系统总线控制权,开始实施系统总线控制。同时向提出请求的外设送出DMAC的响应信号,告诉外设其请求己得到响应,准备开始进行数据传送。
(5)DMAC送出地址信号和控制信号,实现数据高速传送。
(6)当DMAC将规定字节数传送完时,它就将HOLD信号变为无效并加到CPU上,撤销对CPU的请求。CPU检测到无效HOLD就知道DMAC已传送结束,CPU送出无效HLDA响应信号,同时重新获得系统总线控制权,接着DMA前的总线周期继续执行下面的总线周期。
在DMA传送过程中,无须CPU干预,整个系统总线完全交给了 DMAC,由它控制系统总线完成数据传送。在DMA传送数据时要占用系统总线,根据占用总线方法不同,DMA可以分为中央处理器停止法、总线周期分时法和总线周期挪用法等。无论采用哪种方法,在DMA传送数据期间,CPU不能使用总线。
(八)输入输出处理器(IOP)
DMA方式减少了 CPU对I/O操作的控制,使得CPU效率显著提高,而通道的出现则进一步提高了CPU效率。
通道:是一个具有特殊功能的处理器,又称为输入输出处理器(Input/Output Processor, IOP),它分担了 CPU的一部分功能,可以实现对外围设备的统一管理,完成外围设备与主存之间的数据传送。
通道方式大大提高了CPU工作效率,这种效率的提高是以增加更多硬件为代价的。
外围处理机(Peripheral Processor Unit, PPU)方式是通道方式的进一步发展。PPU是专用处理机,它根据主机的I/O命令,完成对外设数据的输入输出。在一些系统中,设置了多台PPU,分别承担I/O控制、通信、维护诊断等任务。从某种意义上说,这种系统己变成分布式的多机系统。