首页 理论教育 操作系统原理中的缓冲技术解决快慢设备矛盾

操作系统原理中的缓冲技术解决快慢设备矛盾

时间:2023-10-17 理论教育 版权反馈
【摘要】:为了解决这个矛盾,可采用缓冲技术。缓冲技术同样适用于输出的情况,CPU把产生的记录放入缓冲区,输出设备从中取出来输出它们。采取缓冲技术可以解决快速通道与慢速外设之间的矛盾,节省通道时间。利用缓冲技术可以大大减少对CPU的中断次数,放宽CPU对中断的响应时间要求。

操作系统原理中的缓冲技术解决快慢设备矛盾

1.缓冲技术的引入

计算机系统中各个部件间速度的差异是很大的。CPU的速度以微秒甚至毫微秒计量,而一般设备的处理速度以毫秒甚至秒计算。在不同时刻,系统中各部分的负荷也常常很不均衡。例如,某进程可能在一段相当长的时间内只进行计算而无输出;过一段时间之后,又要在很短时间内把产生的大量数据输出到打印机上。这种阵发性的I/O操作,使得CPU又不得不停下来,等待慢速设备的工作。这样,系统中各个部件的并行程度仍不能得到充分发挥。

为了解决这个矛盾,可采用缓冲技术。缓冲技术的基本思想很简单:读入一个记录之后,CPU正在启动对它的操作,输入设备被指示立即开始下面的输入,CPU和输入设备就同时运行起来了。这样,输入设备将数据或指令送入缓冲区,由缓冲区再很快地送到内存。CPU不断地从内存中取出信息进行加工处理,而输入设备也不断地把信息送进来。如果配合得当,那么CPU处理完一个记录,输入设备又送入下一个记录,这样两者就充分地并行起来了。

缓冲技术同样适用于输出的情况,CPU把产生的记录放入缓冲区,输出设备从中取出来输出它们。

实际上,缓冲区不仅限于CPU和I/O设备之间,凡是数据到达速率和离去速率不同的地方都可设置缓冲区。采取缓冲技术可以解决快速通道与慢速外设之间的矛盾,节省通道时间。例如,卡片输入机把一张卡片的内容送到内存大约占用通道60ms,若设置一个80字节的缓冲区,那么卡片机可预先把一张卡片内容送入这个缓冲区,当启动通道请求读入卡片信息时,便可把缓冲区中的内容高速地送到内存,仅需要约100μs的约通道时间。利用缓冲技术可以大大减少对CPU的中断次数,放宽CPU对中断的响应时间要求。例如,从远程终端发来的信息若仅用一位缓冲寄存器接收,那么每发来一个脉冲便中断一次CPU,而且在下次脉冲到来之前,必须将缓冲寄存器中的内容取走,否则会丢失信息。如果设置一个16位缓冲寄存器来接收信息,则仅当16位都装满时才中断一次CPU,从而把中断的频率降低为原中断频率的1/16。

总之,引入缓冲的主要目的有如下几个:

①缓和CPU与I/O设备间速度不匹配的矛盾;

②提高CPU与I/O设备之间的并行性;

③减少对CPU的中断次数,放宽CPU对中断响应时间的要求。

2.缓冲区的设置

缓冲区可以用硬件寄存器实现,如有些终端或打印机都带有缓冲区。这种由硬件实现的缓冲区速度较快,但成本很高,一般容量也不会很大。另外一种较经济的办法是在内存中开辟一片区域充当缓冲区,有人称之为软缓冲。软缓冲的数量可在系统生成时由管理员进行配置。为了管理方便,缓冲区的大小一般与盘块的大小一样。缓冲区的个数可根据数据I/O的速率和加工处理的速率之间的差异情况来确定,可设置单缓冲、双缓冲或多缓冲。

(1)单缓冲(www.xing528.com)

如果数据到达率与离去率相差很大,则可采用单缓冲方式。例如,需要输出的信息很多,而输出设备工作很慢,这时可用一个缓冲区存放从内存中取来的部分输出信息。当输出设备取空缓冲区后,产生中断;CPU处理中断,然后很快装满缓冲区,启动输出,CPU转去执行其他程序。CPU与I/O设备之间是并行工作的。此时,对缓冲区来说,信息的输入和输出是串行工作的。但由于两者速度相差很大,所以这个过程所用的时间基本上是输出设备传送信息所用的时间。

(2)双缓冲

如果信息的输入和输出速率相同(或相差不大),则可利用双缓冲区,实现两者的并行,如图9-3所示。首先把一张卡片读入缓冲区1,装满后打印缓冲区1中的内容,同时启动读卡机向缓冲区2读入下一张卡片。正好当缓冲区l中的内容打印完时,缓冲区2也被装满;然后交换动作,打印缓冲区2的内容,读卡片信息到缓冲区1。如此反复进行。此时,读卡机和打印机处于完全并行的工作状态,I/O设备得到最充分的利用。这种技术有时也叫作缓冲对换技术。

图9-3 双缓冲工作示例

(3)多缓冲

对于阵发性的输入、输出,双缓冲区往往不够使用,并且不能获得令人满意的CPU和I/O设备的并行操作。例如,输入机输入数据的速度有时远高于CPU消耗数据的平均速度,则输入机很快地把缓冲区装满而处于空闲;有时CPU消耗数据的速度又远高于输入机输入数据的速度,CPU不得不处于等待状态。为了解决阵发性I/O的速度不匹配问题,可以设立多个缓冲区。例如,用n个缓冲区构成一个缓冲池,将它们按顺序编号,如0,1,2,3,…,n-1。输入机依次把卡片内容读入各个缓冲区,CPU也按同样的顺序从中取出内容进行处理,由于缓冲区数量多,它们的容量就大,在一般情况下(阵发性:I/O的信息量不是很大),可协调CPU和输入机的并行工作。

可见,双缓冲是多缓冲的一种特例。多缓冲具有双缓冲的优点,同时提高了处理速度,却增加了空间消耗。

在多缓冲的基础上,可以构造循环缓冲或缓冲池。循环缓冲需要另加两个指针:一个指针指向缓冲区中数据的第一个字,另一个指针指向首个空闲区位置。取走并处理数据时,第一个指针后移;而添加新数据时,第二个指针后移。多个缓冲区组成环形结构,这样,两个指针各自到达缓冲池末尾后,下一步就又指向缓冲池的开头。

为了提高缓冲区的利用率,往往采用公用缓冲池的方式,池中的缓冲区可供多个进程共用。当一个进程需要使用缓冲区时,就申请缓冲区,使用完后就释放缓冲区。

在UNIX/Linux系统中,无论对于块设备还是字符设备,都使用了多重缓冲技术,尤其是块设备,它作为文件系统的物质基础,使用了完整的多重缓冲技术,从而提高了文件系统的效率

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈