12、操作系统原理知识复习(day12)--缓冲技术

1,104 阅读6分钟

第十二章:缓冲技术

1、缓冲概述

中断技术和通道技术可以缓解CPU和I/O设备间速度不匹配的问题,为了进一步解决这一矛盾还必须引入缓冲技术。

1.1、什么是缓冲

缓冲是在两种不同速度的设备之间传输信息时平滑传输过程的常用手段。缓冲可以用缓冲器和软件性缓冲来实现。缓冲器是种容量较小,用来暂时存放数据的一种存储装置, 它以硬件方式和软代由于硬件缓冲器比较资,除了在关键的地方采用外,大都采用软件缓冲。

软件缓冲是指在I/O操作期间用来临时存放I/O数据的块存储区域。 缓冲是为了解决中央处理机的速度和I/O在设备的速度不匹配的问题而提出来的,但它也可解决程序所请求的逻辑记录大小和设备的物理记录大小失配的问题,是有效地利用中央处理机的重要技术。

1.2、利用缓冲技术进行I/O操作

缓冲的工作原理是在进程请求I/O传输时,利用缓冲区来临时存放I/O传输信息,以缓解传输信息的源设备和目标设备之间速度不匹配的问题。

(1) 进程活动期间,请求读操作

在进程活动期间,请求从输入设备进行读操作的步骤如图所示。

image.png

①当用户要求在某个设备上进行读操作时,首先从系统中获得缓冲区; ②将一个物理记录送到缓冲区中; ③当用户要求使用这些数据时,系统将依据逻辑记录特性从缓冲区中提取并发送到用户进程存储区中。

当缓冲区空而进程又要从中取用数据时该进程被迫等待。此时,操作系统需要重新送数据填满缓冲区,进程才能从中取数据继续运行。要注意操作②与操作③的同步关系。

(2)进程活动期间,请求写操作:

在进程活动期间,要从输出设备输出信息时,其操作步骤如图所示。

①当用户要求写操作时,先从系统获得1个空缓冲区。 ②将一个逻辑记录从用户的进程存储区传送到缓冲区中。若为顺序写请求,则把数据写到缓冲区中,直到它完全装满为止。 ③当缓冲区写满时,系统将缓冲区的内容作为物理记录文件写到设备上,使缓冲区再次为空。 只有在系统还来不及腾空缓冲区之前,进程又企图输出信息时,它才需要等待。要注意操作②与操作③的同步关系。

image.png

2、缓冲区管理

0、思维导图

image.png

1、什么是缓冲区?有什么作用?

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)

一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区

image.png

image.png

2、单缓冲

假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。

注意: 当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。

image.png

T>C, 因此CPU处理完数据后暂时不能将下一块数据传送到工作区,必须等待缓冲区中冲满数据

T<C, 因此缓冲区中冲满数据后暂时不能继续冲入下一块数据,必须等待CPU处理结束后将数据从缓冲区传送到工作区

image.png

3、双缓冲

双缓冲描述了缓冲管理中最简单的一种方案。 它对于一个具有低频度活动的I/O系统是比较有效的。

在双缓冲方案下,为输入或输出分配两个缓冲区。这两个缓冲区可以用于输入数据,也可用于输出数据;还可既用于输入,又用于输出数据。

(1)双缓冲用于数据输入

image.png

双缓冲用于数据输入时,可提高设备并行操作的能力,读人数据的示意图如上图所示。 ①用双缓冲读入数据时,输入设备首先填满buf1; ②进程从buf1提取数据的同时,输入设备填充buf2 ③当buf1空、buf2满时,进程又可从buf2提取数据,与此同时,输入设备又可填充buf1,这两个缓冲区如此交替使用,使CPU和输入设备并行操作程度进一步提高。 只有当两个缓冲区都空,进程还要提取数据时,该进程才被迫等待。这种情况只有在进程执行频繁,又有大量的I/O操作时才会发生。解决此问题经常使用的方法是增加更多的缓冲区

(2)双缓冲用于数据输出

双缓冲用于数据输出时,同样可提高设备并行操作的能力,双缓冲输出数据的示意图如图所示。它的操作过程与数据输入操作类似,只是方向相反。

image.png

假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。双缓冲题目中,假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空

T>C+M时:

image.png

T<C+M时:

image.png

结论:采用双缓冲策略,处理一个数据块的平均耗时为Max (T, C+M)

4、单缓冲和双缓冲通信时的区别

单缓冲: 两台机器之间通信时,可以配置缓冲区用于数据的发送和接受。

image.png

显然,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。

双缓冲:

image.png

若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。 注:管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道

5、循环缓冲区

将多个大小相等的缓冲区链接成一个循环队列。 注:以下图示中,橙色表示已充满数据的缓冲区,绿色表示空缓冲区。

image.png

6、缓冲池

缓冲池(bulfer pool )由主存中的一组缓冲区组成,其中每个缓冲区的大小一般等于物理记录的大小。在缓冲池中各个缓冲区作为系统公共资源为进程所共享,并由系统进行统一分配和管理。缓冲池中的缓冲区既可用于输出,也可用于输入。

使用缓冲池的主要原因是避免在消费者多次访问相同数据时会重复产生相同数据的问题。例如,当用户程序(消费者)要多次读相同的文件块时,I/O系统(生产者)不必从磁盘反复读取磁盘块,而是可以采用缓冲池作为高速缓存保留最近访问过的块,准备为将来所用。许多操作系统都采用了缓冲池技术,特别是UNIX系统的缓冲区管理设计巧妙,运行效果好。可以类比线程池

缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列(输入队列)、装满输出数据的缓冲队列(输出队列)。另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入 数据的工作缓冲区(hin) 、用于提取输入数据的工作缓冲区(sin) 、用于收容输出数据的工作缓冲区(hout) 、用于提取输出数据的工作缓冲区(sout)

image.png