设备管理的主要任务之一是控制设备和内存或处理机之间的数据传送。外围设备和内存的输入/输出控制方式有4种,即本文的内容。
1 I/O控制器
在介绍I/O控制方式前,先需要了解I/O控制器。
I/O设备是由机械部件和电子部件组成的。
I/O设备的机械部件主要用来执行具体的I/O操作。如鼠标、键盘的按钮、显示器的LED屏等。
I/O 设备的电子部件通常是一块插入主板扩充槽的印刷电路板。
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要一个电子部件作为CPU和I/O设备机械部件之间的中介,用于实现CPU对设备的控制。
这个电子部件就是I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制机械部件。
I/O控制器需要提供的功能
(1) 接受和识别CPU发出的命令:CPU可以控制I/O控制器,所以I/O控制器肯定要能接受并识别CPU的命令。如CPU发来的read/write命令,I/O控制器中会有相应的的控制寄存器来存放命令参数。
(2) 向CPU报告设备的状态:I/O控制器会有相应的状态寄存器,用于记录I/O设备当前的状态。如1表示空闲,0表示忙碌。
(3) 数据交换:I/O控制器作为机械部件和CPU的中介,需要实现两者之间的数据交换。I/O控制器中会设置相应的数据寄存器。输出时,数据寄存器用于暂存CPU发出的数据,之后再由控制器传动设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存其中取走数据。
地址识别:类似于内存地址,为了区分上面提到的各个寄存器,也需要给各个寄存器设置一个特定的地址。I/O控制器通过CPU提供的地址来判断CPU要读/写哪个寄存器。
2 I/O控制器的组成
I/O控制器由以下三个部分组成:CPU与控制器的接口、I/O逻辑、控制器与设备的接口。
IO控制器作为CPU和设备之间的中介,左边的部分是中介与CPU连接的部分,即CPU与控制器的接口,用于实现CPU与控制器之间的通信。CPU通过控制线发出命令,通过地地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据。
右边的部分是中介与设备之间的连接,即控制器与设备的接口,用于实现控制器和设备之间的通信。
中间的部分I/O逻辑是用于负责接收和识别CPU的各种命名(如地址译码),并根据CPU的命令对相应的设备发送命令。
以一个输出的例子说明,如果CPU想通过设备输出一个数据,首先CPU控制线向IO逻辑发出一个输出的指令,同时在地址线上说明自己要操作哪个设备,并把要输出的数据存放在数据寄存器中(如果指令中带有参数,那么参数就会存放在控制寄存器中),I/O逻辑接收命令并识别了CPU的指令,找到相应的设备,并得根据该设备的状态寄存器判断当前设备的状态,如果当前设备是空闲的,那么I/O逻辑将数据寄存器中的值取出,通过设备与控制器的接口将数据输出外部设备上。
这里总结一下各个寄存器的作用:
(1) 数据寄存器:存放从设备发送来的输入数据或从CPU发送来的输出数据。
(2) 控制期存器:存放从CPU发送来的控制信息。
(3) 状态寄存器:用于存放从设备发送来的设备的状态信息。
注:一个I/O控制器可能会对应多个设备,所以数据寄存器、控制寄存器和状态寄存器可能会有多个(如每个控制器/状态寄存器对应一个具体的设备)。并且这些寄存器要有相应的地址,才能方便CPU操作。
3 I/O控制方式
3.1程序直接控制方式
以完成一次读操作为例
程序直接控制的流程:
(1) CPU通过控制线向I/O控制器发出一个读指令,I/O控制器会根据CPU的要求启动相应的设备,并将这个设备相应的状态设置为1,表示设备忙碌(未就绪)。
(2) 接下来设备就准备CPU想要读入的数据,但是由于设备和CPU处理速度的差异,所以在设备还没有完成I/O之前,CPU会一直不断的轮询检查设备的状态,即状态寄存器的值。其实就是在不在的执行程序的循环,若状态为一直是1,说明设备还没有准备好要输入的数据,于是CPU会不断轮询。
(3) 如果设备已经准备好了输入的数据,设备会向I/O控制器传送要输入的数据,并且报告自身的装填=态是已就绪状态。
(4) 之后I/O逻辑将要输入的数据放到数据寄存器中,并且将状态寄存器的值改为0(已就绪)。
(5) 在状态寄存器改为0时,CPU轮询检查到了数据已经准备好了,就设备已就绪,即可将数据寄存器中的内容读入CPU自己的寄存器中,再把寄存器的内容放入内存的值(数据从设备到内存需要经过CPU)。这样就完成了一次读操作。
程序直接控制方式分析
(1) CPU 干预频率:很频繁,I/O操作开始之前、完成之后需要需要CPU介入,并且在等待I/O完成的过程中需要CPU不断轮询检查。
(2) 数据的传送单位:每次读/写一个字。
(3) 数据流向
读操作(数据输入):I/O设备—>CPU—>内存
写操作(数据输出):内存—>CPU—>I/O设备
每个字的读/写都需要CPU的帮忙。
(4) 主要优缺点
优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)。
缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于"忙等"状态,CPU利用率低。
3.2 中断驱动方式
对于程序直接控制方式CPU利用率低的问题,引入了中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行,但I/O完成之后,控制器会向CPU发出一个中断信号,CPU会在每个指令周期的末尾检查中断,当CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。当处理中断的过程中,CPU从I/O控制器读一个字的数据传送的CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程(或者其他进程)的运行环境,然后继续执行。
中断驱动方式分析:
(1) CPU 干预频率:每次I/O操作开始之前、完成之后需要需要CPU介入,等待I/O完成的过程中CPU可以切换到别的进程执行。
(2) 数据的传送单位:每次读/写一个字。
(3) 数据流向
读操作(数据输入):I/O设备—>CPU—>内存
写操作(数据输出):内存—>CPU—>I/O设备
(4) 主要优缺点
优点:与“程序直接控制方式相比”,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停的轮序。CPU可以和I/O设备并行工作,CPU利用效率明显提升。
缺点:每个字在I/O设备和内存之间传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。
3.3 DMA方式
与“中断驱动方式”相比,DMA(Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)有这样几个改进:
(1) 数据传送的单位是块,不再是一个字一个字的传送。
(2) 数据的流向是从设备直接放入内存,或者直接从内存到设备,不再需要CPU干预。
(3) 仅在一个块或多个块的开始和结束时,才需要CPU干预。
DMA控制器组成:主机(CPU)—控制块的接口、I/O控制逻辑、块设备—控制器接口。
(1) 数据寄存器(DR,Data Register):暂存从设备到内存,或者从内存到设备的数据。
(2) 内存地址寄存器(MAR,Memory Address Register):在设备向内存输入数据时,MAR表示输入的数据应该存放到内存的什么位置,在内存向设备输出数据时,MAR表示要输出的数据放在内存的什么位置。
(3) 数据计数器(DC,Data Counter):表示剩余要读/写的字节数。
(4) 命令/状态寄存器(CR,Command Register):用于存放CPU发来的I/O命令,或设备的状态信息。
DMA方式过程:首先CPU给I/O模块一个的指令,CPU指明此次要进行的操作(如读操作),并说明要读入多少数据、数据存放在内存什么地方,以及数据在外部设备上的地址等,之后CPU就可以去做其他事了。
接下来DMA控制器就可以根据CPU的命令参数来完成指令一系列的读工作,DMA控制器从磁盘的指定位置读取一个字(DMA一次读取的也是一个字),然后存储在DR中,再从DR写入到CPU指定的内存位置中,当一个(多个)块的数据读完后,DMA控制器会向CPU发出一个中断信号,CPU检测到中断信号后会处理这个中断。
DMA方式分析:
(1) CPU 干预频率:仅在传送一个或多个数据块开始和结束时,才需要CPU干预。
(2) 数据的传送单位:每次读/写一个或多个块。(注:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)
(3) 数据流向(不再需要经过CPU)
读操作(数据输入):I/O设备—>内存
写操作(数据输出):内存—>I/O设备
(4) 主要优缺点
优点:数据传输以“块”为单位,CPU介入的频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加,CPU和I/O设备的并行性能得到提升。
缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。如果要读/写多个离散的块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断操作。
3.4 通道
通道:一种硬件,可以把通道理解为一种“低配版的CPU”。通道可以识别并执行一系列通道指令。
通道方式过程:当CPU要完成一组相关的读(或写)操作及相关控制时,只需向I/O通道发送一条I/O指令,以给出其所要指向的通过程序的首地址和要访问的I/O设备,之后CPU就可以去执行其他操作了。
通道在接收到该指令后,根据通道程序首地址来找到通道程序在内存中的位置并执行通道程序,当通道完成通道程序完成数据传送后就会向CPU发出一个中断信号,CPU检测到中断信号后会处理这个中断。
通道方式中,读/写入多少数据,数据存放的位置都是通道控制的。通道控制方式通俗来说就是CPU告诉通道去执行一个任务,CPU把任务的清单已经放在内存中,具体的任务并不是CPU告诉通道的,而是直接读取通道程序中的内容知道的。
(1) 通道和CPU的区别在于:通道能识别的指令单一,通道没有自己的内存,需要和CPU共享内存。所以说可以把通道看作“低配版的CPU”。
(2) 通道和DMA方式的区别:DMA方式需要CPU来控制传输的数据块的大小、传输的位置,而通道方式中的这些信息是由通道控制的。另外,每个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存数据交换。
通道控制方式分析:
(1) CPU 干预频率:极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预。
(2) 数据的传送单位:每次读/写一组块。
(3) 数据流向(不再需要经过CPU)
读操作(数据输入):I/O设备—>内存
写操作(数据输出):内存—>I/O设备
(4) 主要优缺点
优点:CPU、通道、I/O设备可并行工作,资源利用率很高。
缺点:实现复杂,需要专门的硬件支持。
网友评论