在整个IO控制方式的发展过程中,始终贯穿着这样一条宗旨:即尽量减少主机对IO控制的干预,把主机从繁杂的IO控制事务中解脱出来,以便更多地去完成数据处理任务。
程序IO方式处理机对IO采用程序IO方式,即采用“忙――等待“方式,在处理机向控制器发出一条IO指令启动输入设备输入数据时,要同时把状态寄存器中的忙闲标志置为1.然后便不断的循环测试,直到标志为0.
当标志为1时,表示输入机未输完一个字符;
当标志为0时,表示输入机已经将输入数据送往控制器的数据寄存器中。
在这种方式中,由于CPU高速性和IO设备的低速性,致使CPU的绝大部分时间都处于忙等状态。造成了CPU极大的浪费。
如果当一个字符输入完后,由IO设备向CPU报告,这样就可以不让CPU忙等了,于是中断处理方式产生了
中断驱动IO控制方式即当某进程要启动某个IO设备工作时,便由CPU向相应的设备控制器发出一条IO命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定IO设备。此时,CPU与IO设备并行操作。一旦数据进入数据寄存器,控制器便通过控制线向CPU发送一中断信息,由CPU检查输入过程中是否有错,若无错,便向控制器发送取走数据的信号,然后再通过控制器及数据线,将数据写入内存指定单元中。
直接存储器访问DMA IO控制方式虽然中断驱动IO比程序IO方式更有效,但注意到,它仍是以字(节)为单位进行IO的,每当完成一个字(节)的IO时,控制器便要向CPU请求一次中断。采用中断驱动IO方式时的CPU,是以字(节)为单位进行干预的。如果将这种方式用于块设备的IO中,显然是极其低效的。为了进一步减少CPU对IO的干预而引入了直接存储器访问方式。
该方式的特点:
数据传输的基本单位是数据块
所传送的数据是从设备直接送入内存,或者相反。
仅在传送一个或多个数据块的开始或结束时,才需要CPU干预,整块数据的传送是在控制器的控制下。
可以看出:DMA方式较之中断驱动方式,又是成百倍的减少了CPU对IO的干预,进一步提高了CPU与IO设备的并行操作程度。
DMA控制器由三部分组成:
l 主机与DMA控制器的接口
l DMA控制器与块设备的接口
l IO控制逻辑
四类寄存器:
l 命令状态寄存器:用于接收从CPU发来的IO命令或有关控制信息,或设备的状态
l 内存地址寄存器MAR。在输入时,它存放把数据从设备传送起始目标地址;在输出时,它存放由内存到设备的内存源地址。
l 数据寄存器DR:用于暂存从设备到内存,或从内存到设备的数据。
l 数据计数器DC:存放本次CPU要读或写的字(节)数。
IO通道控制方式虽然DMA可以一次读一个块,但是当我们要读取多个块时,还是要多次中断。
IO通道方式是DMA方式的发展,它可进一步减少CPU干预,即把对一个数据块的读写为单位的干预,减少为对一组数据块的读写及有关的控制和管理为单位。从而提高了整个系统的资源利用率。
当CPU要完成一组相关的读写操作及有关控制时,只要向IO通道发送一条IO指令,以给出其所要执行的通道程序的首址和要访问的IO设备,通道接到该指令后,通过执行通道程序便可完成CPU指定的IO任务。
IO通道是一种特殊的处理器,它具有执行IO指令的能力,并通过执行通道程序来控制IO操作。但IO通道以与一般的处理机不同,主要表现在:
指令类型单一,主要是IO指令。
通道没有自己的内存,所执行的通道程序是放在主机内存中的,也就是说IO通道与CPU共享内存
设备独立性为了提高OS的可适应性和可扩展性,在现代OS中都采用了设备独立性,也就是设备无关性。其基本的含义是:应用程序独立于具体使用的物理设备。为了实现设备的独立性而引入了逻辑设备和物理设备这两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际的执行时,还必须使用物理设备名称。因此系统还须具有将逻辑设备名称转换为物理设备名称的功能。这个东西就是逻辑设备表。
设备独立性的好处l 设备分配时的灵活性:当应用程序以物理设备名称来请求使用某一个设备时,如果该设备已经分配给其他设备或正在检修,而此时尽管还有几台其它的设备下在空闲,该进程却仍阻塞。如果采用逻辑名来请求,就可以把其他一台设备分配给它。
l 易于实现IO重定向:是指用于IO操作的设备可以更换,而不必改变应用程序。如果一个程序的输出是屏幕,而现在要输出到文件,只需要把IO重定向的数据结构即逻辑设备表中的显示终端改为文件即可。
设备独立性软件驱动程序是一个与硬件地址紧密相关的软件,为了实现设备独立性,还要在驱动程序上加上一层软件,称为设备独立性软件。具体操作有:
l 对独立设备的分配与回收
l 将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序
l 对设备保护,禁止用户直接访问设备
l 缓冲管理
l 差错控制
l 向用户层软件提供统一接口,比如read,write
逻辑设备名到物理设备名映射的实现采用逻辑设备表
Spooling技术通过Spooling技术可以将一台物理IO设备虚拟为多台逻辑IO设备,同样允许多个用户共享一台物理IO设备。