缓冲技术

来源:互联网 发布:南京软件学院 编辑:程序博客网 时间:2024/05/19 09:11

在操作系统中,引入缓冲的主要原因,可归结为以下几点:

1.改善CPU与I/O设备间速度不匹配的矛盾。

例如一个程序,它时而进行长时间的计算而没有输出,时而又阵发性把输出送到打印机。由于打印机的速度跟不上CPU,而使得CPU长时间的等待。如果设置了缓冲区,程序输出的数据先送到缓冲区暂存,然后由打印机慢慢地输出。这时,CPU不必等待,可以继续执行程序。实现了CPU与I/O设备之间的并行工作。事实上,凡在数据的到达速率与其离去速率不同的地方,都可设置缓冲,以缓和它们之间速度不匹配的矛盾。众所周知,通常的程序都是时而计算,时而输出的。

2.可以减少对 CPU的中断频率,放宽对中断响应时间的限制。

如果I/O操作每传送一个字节就要产生一次中断,那么设置了n个字节的缓冲区后,则可以等到缓冲区满才产生中断,这样中断次数就减少到1/n,而且中断响应的时间也可以相应的放宽。

3.提高 CPU和 I/O设备之间的并行性。

缓冲的引入可显著提高 CPU和设备的并行操作程度,提高系统的吞吐量和设备的利用率。

与DMA的区别:DMA技术是直接将设备输入数据传送到用户进程的内存区域内,中断后数据不需要在内存中进行移动。而缓冲区则是先将数据存放在内存划定的缓冲区域中,当中断后将数据从缓冲区复制到用户进程内存中(这个速度很快)。

 

缓冲区的类型有两种:硬件缓冲和软件缓冲。硬件缓冲是在硬件上专门增加寄存器组存放缓冲数据。软件缓冲就是在内存中分配一块数据缓冲数据,这个缓冲区由操作系统进行管理。

根据缓冲区设置个数的多少,可分为单缓冲、双缓冲和多缓冲。根据缓冲区的从属关系,可以分为专用缓冲区和缓冲池。

1.单缓冲

为了提高 CPU和设备的并行操作程度,每当一个用户进程发出一个I/O请求时,操作系统便在主存的系统区中为之分配一个缓冲区。例如,CPU从磁盘上读一块数据进行计算要分三步:先从磁盘把一块数据读入到缓冲区中,然后由操作系统将缓冲区的数据传送到用户区,最后由CPU对这一块数据进行计算。当连续读入一组数据时,读入某数据的第一步(输入)和读入它前一个数据的最后一步(计算)是可以并行执行的,这样就提高了CPU和外设的利用率。但是对缓冲区中数据的输入和传送是串行工作的。为使两者能并行工作,必须引入双缓冲。时间为MAX(T,C)+M,M为传送时间。

当输入时间远远大于计算时间的时候,系统的性能并没有显著的提高,当缓冲区不能及时释放,也不会提高性能。

2.双缓冲

双缓冲工作方式(也称为缓冲对换方式)基本方法是在设备输入时,先将数据输入到缓冲区A,装满后便转向缓冲区B。此时操作系统可以从缓冲区A中提取数据传送到用户区,最后由CPU对数据进行计算。

这样可以实现对缓冲区中读入某数据的第一步(输入)和读入它前一个数据的后二步(传送和计算)二者的并行工作,特别是缓冲区中数据的输入和传送的速度基本相匹配时,可获得较好的效果。所以双缓冲进一步加快了I/O的速度,提高了设备的利用率。

但是,双缓冲只是理想模型,实际系统中并不能实现并行操作。

3.循环缓冲

由于数据I/O多数是间断的,可增加缓冲区的个数来改善CPU与I/O设备间速度不匹配的矛盾。我们可以将多个缓冲区组织成循环队列的形式,其中一些队列专门用于输入,另一些队列专门用于输出。例如供给输入进程和计算进程使用的输入缓冲区循环队列,输入进程先不断向队列中空缓冲区R输入数据,计算进程再从队列中装满数据的缓冲区G中提取数据用于计算。

4.缓冲池

当系统配置较多的设备时,使用专用缓冲区就要消耗大量的内存空间,且其利用率不高。为了提高缓冲区的利用率,目前广泛使用公用缓冲池,池中的缓冲区可供多个进程共享

对于同时用于输入/输出的公用缓冲池,至少含有三种类型的缓冲区:空缓冲区、装满输入数据的缓冲区和装满输出数据的缓冲区。为了管理上的方便,可将相同类型的缓冲区链成一个队列,于是就形成三个队列:空缓冲区队列emq、输入缓冲区队列inq和输出缓冲区队列outq

缓冲池中有四种工作缓冲区:收容输入、提取输入、收容输出、提取输出。这些工作缓冲区只在数据的输入输出和提取的时候后使用,工作区是从缓冲队列中选取的。

例如数据输入时的步骤:

(1)从空闲队列中选取空闲缓冲区输入,该空闲缓冲区充当了收容输入缓冲区,当缓冲区满的时候放入输入满缓冲队列。

(2)cpu从输入满缓冲区中选择一个缓冲区作为提取输入工作区,当提取完毕后将缓冲区放入空闲缓冲队列中。

数据的输出与输入过程类似。

0 0