1、存储设备
2、I/O设备
1、字符设备
2、块设备
1、低速设备
2、中速设备
3、高速设备
1、独占设备
2、共享设备
3、虚拟设备
1、设备分配。按照设备类型和相应的分配算法觉得将I/O设备分配给哪一个进程。
2、设备处理。设备处理程序用以实现CPU和设备控制器之间的通信。
3、缓冲管理。设置缓冲区的目的是为了缓和I/O设备与CPU速度不匹配的矛盾。缓冲管理程序负责完成缓冲区的分配、释放及有关的管理工作。
4、设备独立性。设备独立性又称为设备无关性,是指应用程序独立于物理设备。用户在编程时要尽量避免直接使用实际设备名。若程序中使用了实际设备名,则当该设备没有连续在系统中或者该设备发生故障时,用户程序无法执行,若要运行用户程序,则需要修改程序。如果用户程序不涉及实际设备而使用逻辑设备,那么它所要求的输入输出便与物理设备无关。设备独立性可以提高用户程序的可适应性。
设备的电子部分通常成为设备控制器。设备控制器处于CPU与I/O之间,接收来自CPU的命令,并控制I/O设备工作。设备控制器是一个可编址的设备,当它只控制一个设备时,它只有一个设备地址;当它可连接多个设备时,它应该具有多个设备地址。
设备控制器应具备以下功能:①接收和识别来自CPU的各种指令;②实现CPU与设备控制器、设备控制器与设备之间的数据交换;③记录设备的状态供CPU查询;④识别所控制的每个设备的地址。
大多数设备控制器由设备控制器与处理器的接口、设备控制器与设备的接口及I/O逻辑3部分组成,如下图所示:
由于CPU速度远远快于I/O设备,因此CPU需要不断地测试I/O设备,这种控制方式又称为轮询或忙等。
以数据输入为例,当用户进程需要输入数据时,由处理器向设备控制器发出一条I/O指令启动设备进行输入。当设备输入数据期间,处理器通过循环执行测试指令不断地检测I/O设备状态寄存器的值,当状态寄存器的值显示设备输入完成时,处理器将书籍寄存器中的数据读取出来并送入内存指定单元,然后再启动设备输出并等待输出操作完成。
优点:过程简单。
缺点:CPU利用率相当底。由于CPU速度远远快于I/O设备,致使绝大部分时间都在测试I/O设备是否已经完成数据传输,从而造成CPU的极大浪费。
以数据输入为例,当用户进程需要输入数据时,由处理器向设备控制器发出一条I/O指令启动设备进行输入。在输入数据的同时,CPU可以做其他工作。当输入完成时,设备管理器向CPU发出一个中断信号,CPU接收到中断信号以后,转去执行设备中断处理程序。设备终中断处理程序将输入数据寄存器中的数据传送到内存的指定单元中,供要求输入的进程使用,然后再启动设备去读下一个数据。
优点:有了中断硬件的支持后,CPU与I/O设备之间可以并行工作,CPU只需要收到中断后处理即可,大大提高了CPU利用率。
缺点:如果每台设备每输入/输出一个数据,都要求中断CPU,这样在一次数据传送过程中的中断次数太多,从而耗费大量CPU时间。
I/O完成时发出的中断处理程序的处理过程如下:
1、唤醒被阻塞的驱动(程序)进程;
2、保护被中断进程的CPU环境;
3、转入想要的设备处理程序;
4、中断处理,执行中断处理程序;
5、恢复被中断进程的现场。
DMA控制方式的思想是在外设和内存之间开辟直接的数据交换通路。在DMA控制方式中,设备控制器具有更强的功能,在其控制下,设备和内存之间可以成批地进行数据交换,而不用CPU干预。这样既减轻了CPU的负担,也是I/O数据传输速度大大提高。这种方式一般用于块设备的数据传输。
以数据输入为例,当用户进程需要输入数据时,CPU将准备存放数据的内存起始地址以及要传送的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器中,并启动设备开始进行输入。在输入数据的同时,CPU可以去做其他事情,输入设备不断地挪用CPU工作周期,将数据寄存器中的数据源源不断地写入内存,直到要求传送的数据全部传输完毕。DMA控制器在传输完毕时向CPU发送一个中断信号,CPU收到中断信号后转中断处理程序,中断结束后返回被中断程序。
DMA控制方式的特点为:数据传输的基本单位是数据块,而且数据是单向传输,从设备到内存或者相反。
DMA控制方式与中断控制方式的主要区别是:中断控制方式在每个数据传送完毕后中断CPU,而DMA控制方式则是在所有要求传送的一批数据传送完毕后中断CPU;中断控制方式的数据传送实在中断处理时由CPU控制完成的,而DMA控制方式则是在DMA控制器的控制下完成的。
优点:设备和CPU可以并行工作,同时设备与内存的数据交换速度更快,并且不需要CPU干预。
缺点:数据传送的方向、存放输入数据的内存起始地址及传送数据的长度等都由CPU控制,并且每台设备都需要一个DMA控制器,当设备增加时,多个DMA控制器的使用也不经济。
与DMA类似,也是一种以内存为中心,实现设备与内存直接数据交换的控制方式。与DMA相比,通道需要的CPU干预更少,即把对一个数据块的读写为单位的干预减少为对一组数据块读写及有关的控制和管理为单位的干预,而且可以做到一个通道控制多台设备。
通道本质上是一个简单的处理器,它独立于CPU,有运算和逻辑,有自己的指令系统,也在程序控制下工作,专门负责输入、输出控制,具有执行I/O指令的能力,并通过执行通道I/O程序来控制I/O操作。通道的指令系统比较简单,一般只有数据传送指令、设备控制指令等。
在通道控制方式中,CPU只需要发出启动指令,指出要求通道执行的操作和使用的I/O设备,该指令就可以启动通道并使该通道从内存中调出相应的通道程序执行。以数据输入为例,当用户进程需要输入数据时,CPU发出启动指令指明要执行的I/O操作、所使用的设备和通道。当对应通道接收到CPU发来的启动指令后,把存放在内存中的通道程序读出,并执行通道程序,控制设备将数据传送到内存中指定的区域。在设备进行输入的同时,CPU可以去做其他事情。当数据传送结束后时,设备控制器向CPU发送一个中断请求,CPU收到中断信号后转中断处理程序,中断结束后返回被中断程序。
优点:解决了I/O操作的独立性和各部件工作的并行性。不仅能实现CPU与通道的并行操作,而且通道与通道之间也能实现并行操作,各个通道上的外设也能实现并行操作,从而提高了整个系统效率。
缺点:需要更多硬件(通道处理器),成本较高,常用于大型数据交互的场合。
通道控制方式与DMA控制方式的区别:首先,DMA控制方式中需要CPU来控制所传输数据块的大小,传输的内存,而通道控制方式中这些信息都是由通道来控制管理的。其次,一个DMA控制器对应一台设备与内存传递数据,而一个通道可以控制多台设备与内存的数据交换。
I/O通道与一般处理器的区别:I/O通道的指令类型单一,其所能执行的命令主要局限于与I/O操作有关的指令;通道没有自己的内存,通道所执行的通道程序放在主机的内存中,也就是说通道是与CPU共享内存的。
(六)
中断处理是控制输入/输出设备和内存与CPU之间的数据传送的主要方式。中断与硬件相关,I/O设备的中断服务程序的代码与任何进程无关。当I/O完成时,设备便向CPU发送一个中断信号,CPU响应中断后便转入中断处理程序。
所有与设备相关的代码全部放在设备驱动程序中,由于设备驱动程序与设备密切相关,因此应为每一类设备配置一个驱动程序。
设备驱动程序的任务是接收来自上层的设备独立性软件的抽象请求,将这些请求转换成设备控制器可以接收的具体命令,再将这些命令发送给设备控制器,并监督这些命令正确执行。若请求到来时设备驱动程序是空闲的,则立即开始执行这个请求;若设备驱动程序正在执行一个请求,则将信道来的请求插入等待队列中。设备驱动程序是操作系统中唯一知道设备控制器中设置了多少个寄存器以及这些寄存器有何用途的程序。
设备驱动程序处理过程:①将抽象要求转换为具体要求;②检查I/O请i去的合法性;③读出和检查设备的状态;④传送必要参数;⑤设置工作方式;⑥启动I/O设备。
设备独立性软件的基本任务是:实现一般设备都需要的I/O功能,并向用户空间软件提供一个统一接口。设备独立性软件通常应实现的共嗯那个包括设备驱动程序的统一接口,设备命名,设备保护,提供与设备无关的逻辑块,缓冲、存储设备的块分配,独占设备的分配和释放,出错处理。
大部分I/O软件都包含在操作系统中,但仍有一部分是由与用户程序链接在一起的库函数,甚至运行于内核之外的程序构成的。通常的系统调用把偶哦I/O系统调用,是由库函数实现的。SPOOLing系统也处于这一层。
(六)
通过重新安排队列顺序以改善系统总体效率和应用程序的平均响应时间。
缓冲区的引入是为了缓和CPU与设备速度不匹配的矛盾,提高了设备和CPU的并行操作成都,提高了系统吞吐量和设备利用率。
当用户进程发出一个I/O请求时,操作系统便在内存中为它分配一个缓冲区。设备与处理器对缓冲区的操作是串行的。
可以提高处理器与设备的并行操作程度。当用户进程发出一个I/O请求时,操作系统便在内存中为它分配两个个缓冲区。数据先放入第一个缓冲区进行处理,再来的数据放入第二个缓冲区,当第一个缓冲区中的数据处理完后,若第二个缓冲区已经装满,则处理器又可以处理第二个缓冲区的数据,而输入设备又可以装填第一个缓冲区。
为了解决设备输入/输出速度与处理器处理数据速度不匹配的情况。循环缓冲包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区的指针指向第一个缓冲区,这样多个缓冲区构成了一个环形。循环缓冲用于输入输出时,还需要有两个指针in和out。
对于输入而言,首先要从设备接收数据到缓冲区中,in指针指向可以输入数据的第一个空缓冲区;当用户进程需要数据时,从循环缓冲中取出一个装满数据的缓冲区,提取数据,out指针指向可以提取数据的第一个满缓冲区,显然,对输出而言正好相反,进程将处理过的需要输出的数据送到空缓冲区中,而当设备空闲时,从满缓冲区中取出数据由设备输出。
目前计算机系统中广泛使用缓冲池,缓冲池由多个缓冲区组成,其中的缓冲区可供多个进程共享,并且既能用于输入又能用于输出。缓冲池中的缓冲区按其使用状况可以形成以下三个队列:
1、空缓冲队列;
2、装满输入数据的缓冲队列(输入队列);
3、装满输出数据的缓冲队列(输出队列);
除上述三个队列外,还应具有以下四种工作缓冲区:
1、用于收容输入数据的工作缓冲区;
2、用于提取输入数据的工作缓冲区;
3、用于收容输出数据的工作缓冲区;
4、用于提取输出数据的工作缓冲区;
当输入进程需要输入数据时,便从空缓冲队列的队首摘下一个空缓冲区,把其作为收容输入数据的工作缓冲区,然后把数据输入其中,装满后再把它挂到输入队列队尾。
当计算进程需要输入数据时,便从输入队列取得一个缓冲区作为提取输入数据的工作缓冲区,计算进程从中提取数据,数据用完后再将其挂到空缓冲队列队尾。
当计算进程需要输出数据时,便从空缓冲队列的队首取得一个空缓冲区,作为收容输出数据的工作缓冲区,当其中装满输出数据后,再将其挂到输出队列队尾。
当要输出时,由输出进程从输出队列中取得一个装满输出数据的缓冲区,作为提取输出数据的工作缓冲区,当数据提取完后,再将其挂到空缓冲队列的末尾。
1、两者存放的数据不同。高速缓存存放的是低速设备上的某些数据的备份;而缓冲区中放的则是低速设备传递给高速设备的数据,在低速设备中不一定有备份。
2、两者的目的不同。引入高速缓存的目的是为了存放低速设备上经常要被访问到的数据的备份;而缓冲区是为了缓和高速设备和低速设备间速度不匹配的矛盾。高速设备每次都会通过缓冲区与低速设备通信,不会直接访问低速设备。
1、设备控制表(DCT)。用于记录设备的特性及I/O控制器的连接情况。
2、设备控制器控制表(COCT)。用于反应设备控制器的使用状态和通道的连接情况等。
3、通道控制表(CHCT)。用于反映通道的状态等。
4、系统设备表(SDT)。整个系统只有一张系统设备表,记录了已经连接到系统中的所有物理设备的情况,每个设备占有一个表目。
1、独享设备。
2、共享设备。
3、虚拟设备。
1、先来先服务算法。
2、优先级高者优先算法。
指在设备分配中应保证不发生进程的死锁。分配方式分为以下两种方式:
静态分配:指用于作业开始执行前,由系统一次性分配该作业所需的所有资源。
动态分配:指在进程执行过程中根据执行需要进行设备分配。在进程需要设备时申请,不需要时释放。动态分配又分为安全分配和不安全分配。安全分配方式中,每当进程发出I/O请求后就进入阻塞状态,直到I/O完成才被唤醒。不安全分配方式中,允许进程发出I/O请求后仍然执行,且可以继续发出I/O请求,可能发生死锁,需要安全性检测。
设备独立性是指应用程序独立于具体使用的物理设备,现代操作系统全部实现了设备独立性。
为实现独立性,引入了物理设备和逻辑设备的概念,在系统中需要一张逻辑设备表(LUT),其中每个表项中都有逻辑设备名、物理设备名和设备驱动程序入口地址。
操作系统实现独立性的方法包括设置设备独立性软件、配置逻辑设备表以及实现逻辑设备到物理设备的映射。
步骤如下:
1、分配设备;
2、分配设备控制器;
3、分配通道;
在分配时,如遇到对应设备忙的情况,则将进程插入到对应的等待队列中。
即一个设备与多个设备控制器相连,设备控制器也与多个通道相连。步骤如下:
1、根据设备类型,检索系统设备控制表,找到第一个空闲设备,并检测分配的安全性,如安全则分配;反之,插入该类设备的等待队列;
2、设备分配后,检索设备控制器控制表,找到第一个与已分配设备相连的空闲设备控制器,如无空闲,则返回第一步查找下一个空闲设备;
3、设备控制器分配后,同样查找于其相连的通道,找到第一个空闲通道,如无空闲通道,则返回第二步查找下一个设备控制器。如有空闲通道,则此次设备分配成功,将相应的设备、设备控制器和通道分配给进程,并启动I/O设备传输信息。
当进程使用完对应的I/O设备后,释放所占有的设备、设备控制器及通道,系统进行回收修改对应的数据结构,以便下次分配使用。
通过共享设备来虚拟独占设备,将独占设备改造成共享设备,从而提高了设备利用率和系统的效率,该技术成为假脱机(SPOOLing)技术。是低速输入输出设备与主机交换的一种技术。
其核心思想是以联机的方式得到脱机的效果,低速设备经通道和设在主机内存的缓冲存储器与高速设备相连,该高速设备通常是辅存。为了存放从低速设备上输入的信息,在内存中形成缓冲区,在高速设备上形成输入输出井,传递时信息从低速设备传入缓冲区,再传到高速设备的输入井,再从告诉设备的输出井传到缓冲区,再传到低速设备。
1、输入输出井;
2、输入缓冲区和输出缓冲区;
3、输入进程和输出进程;
将一台独享打印机改造成可供多个用户共享打印是SPOOLing技术的典型应用,具体做法为:
系统对于用户的打印输出,并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。
1、提高了I/O速度;
2、设备并没有分配给任何进程;
3、实现了虚拟设备功能;
4、SPOOLing除了是一种速度匹配技术外,也是一种虚拟设备技术。