8.2 缓冲技术
8.2.1 缓冲概述
为了进一步解决CPU和I/O设备间速度不匹配的矛盾,引入了缓冲技术。
缓冲技术是用来在两种不同速度的设备之间传输信息时匹配其传输速度的常用手段。
●定义:缓冲区:容量较小,用来暂时存放数据的一种存储装置。
●缓冲的实现方法:
①硬件的缓冲器(如:数据缓冲寄存器)
②软件缓冲区(在内存中划出专门的区域用作缓冲)
●缓冲区如何工作:
①从设备读数据:申请空缓冲区 送数据至缓冲区 提数
据至进程存贮区;
②向设备写数据:申请空缓冲区 送数据至缓冲区 写数
据到设备上;
8.2.2 双缓冲
双缓冲描述了缓冲管理中最简单的一种方案。
在这种方案下,为输入或输出分配两个缓冲区。在读入时,输入设备首先填满buf1,进程buf1提取数据的同时,输入设备填充buf2。当buf1出空,buf2满时,进程双可从buf2提取数据,与此同时,输入设备又可填充buf1。这两上缓冲区如此交替使用,使CPU和输入设备并行操作程度进一步提高。只有当两个缓冲区都空,进程还要提取数据时,该进程才被迫等待。
举例:
这个例子是把一迭卡片从卡片输入机读入并从行式打印机输出。
为此,系统设置两个缓冲区(buf1,buf2)。它们的作用是接收从卡片输入机读入的数据,并提供给打印机输出。
假定读卡机的标定速度为1000卡/分,打印机的标定速度为1000行/分。行将一张卡片读入buf1,然后,在打印这一缓冲区内容时,把下一张卡片读入buf2;当打印完buf1中内容时,再启动读卡机把下一张卡片读到缓冲区并重复上述过程。图8.2描述了上述过程的策略。此时,读卡机和打印机并行操作的程序大大提高,I/O设备得到了较好的利用。
8.2.3 环形缓冲
在环形缓冲方案中,从自由主存区中分配若干个大小相等的缓冲区,它们对于各个不同的物理记录而言是等效的。每一个缓冲区中有一个勾链指针,用以指示下一缓冲区的地址,最后一个缓冲区指针指向第一个缓冲区地址,这样n个缓冲区链成一个环形。还有一个链头指针,指向环形缓冲中的第一个缓冲区。其结构如图8.3所示。
数据已被取用,又成为可用的缓冲区
图8.3 环形缓冲实例
8.2.4 缓冲池
从自由主存区中分配一组缓冲区组成缓冲池,每个缓冲区的大小可以等于物理记录的大小。在缓冲池中各个缓冲区作为系统公共资源为大家所共享,并由系统进行统一分配和管理。缓冲池既可用于输出,也可用于输入。各缓冲区根据数据处理的需要组织成各种队列。缓冲池的概念可通过缓冲自动管理系统的例子加以说明。
在缓冲区自动管理系统中,系统设置了多个缓冲区组成缓冲池。这些缓冲区可分为几种用途:
①输入缓冲区:它接收输入设备送来的未经处理的一个信息块。
②处理机缓冲区:用于存放在处理机上运行的程序所需要的信息或已处理过的数据信息。
③输出缓冲区:包括一块已处理的信息,它正在被传送到输出的设备上。
为了管理各种缓冲区队列,实施各种操作,必须设计专门的软件程序,这就形成了缓冲区自动管理系统,如图8.4所示。

图中,标有“×”的方框为空缓冲区;标有点子的方框为满缓冲区;处在转换过程中的缓冲区方框内没有任何记号。缓冲区管理程序要管理几种缓冲队列。假定图中只有一个I/O通道,它既可作为输入又可作为输出。对于该通道所连连的各种外部设备,它具有两种队列:
①装入队列:这是一列(相互连接的)缓冲区,它们等待着由输入设备把它们装满信息,其中排在队列第一个位置上的缓冲区可能正在进行装入。
(2)出空队列。这也是一列(相互连接的)缓冲区,它们等待着输出设备使它出空,其中排在队列第一个位置上的缓冲区可能正在出空。
缓冲区管理程序以另外两种队与正在运行的程序建立关系。
①文件队列。其中的每一个文件不久就要在程序中使用(或刚被处理过)。
还可以进一步把文件队列分成输入文件队列和输出文件队列。通常程序总是处理从输入文件队列来的数据,然后把结果送到输出文件队列中去。
②一个几个后备队列。它拥有若干同样大小的空而可用的缓冲区。
图8.4还说明程序运行时与进行信息处理时队列中所发生的操作。这几种操作如下:
①程序对输入文件队列中排在第一个位置上的缓冲区的数据进行操作。
②程序运行时,把结果放到输出文件队列中排在第一个位置上的缓冲区中去。
③装入队列中排出第一个位置上的缓冲区正在进行装入信息的操作。
④出空队列中排在第一个位置上的缓冲区正在进行输出信息的操作。
⑤当输出文件队列或装入队列需要空缓冲区时,从后备队列中提取空缓冲区。
程序中有三种不同情况需要缓冲区管理程序对缓冲区队列实施管理。
1.信息处理
①当一个记录被处理完毕、程序需要使用另一个记录时,可把已用过的输入文件缓冲区摘下送入后备队列中,即释放用过的缓冲区。
输入文件队列→后备队列
②输出文件缓冲区中的记录完成之后,缓冲区管理程序把它从输出文件队列中摘下,并加入到空队列的后部。
输出文件队列→出空队列
③缓冲管理程序还可执行以下操作
后备队列→输出文件队列
后备队列→装入队列
即将缓冲区作为输出文件缓冲区或输入缓冲用。
2.输入中断
当输入完成时,出现一次中断以调用缓冲区管理程序,它执行下面的操作:
装入队列→输入文件队列
即将已装满信息的装入缓冲区从装入队列摘下,加入到输入文件队列尾。
缓冲区管理程序还执行如下操作:
后备队列→装入队列
即将一个缓冲区作为装入新信息之用。
3.输出中断
输出完成之后,产生中断信号,由缓冲区管理程序执行操作;
出空队列→后备队列
即将输出信息的缓冲区从出空队列中摘下,并加入到后备队列尾部,然后调出空队列中的下一个缓冲区进行输出操作。 |