单缓冲、双缓冲、循环缓冲

缓冲区管理

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

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

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

缓冲区的作用

  1. 缓和CPU和IO设备之间速度不匹配矛盾。
  2. 减少对CPU的中断频率,放宽对CPU中断相应的时间限制
  3. 解决数据粒度不匹配的问题
  4. 提高CPU和IO设备之间的并行性。

单缓冲

什么是单缓冲:

假设某用户进程请求某块设备读入若干块数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区。
当缓冲区不为空时不能往里面放入数据,只有缓冲区为空才能放入数据,但是一次放入的数据必须充满整个缓冲块,才能从缓冲区把数据传出。

结论:采用单缓冲策略,处理一块数据平均耗时MAX(C,T)+M。其中C是CPU处理工作区的时间,T是从IO到缓冲区的时间,M是缓冲区的数据存到工作区的时间。

双缓冲

若采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区。
采用双缓冲策略,处理一个数据块的平均耗时是Max(T, C+M).

使用单缓冲/双缓冲在通信时的区别

单缓冲
在这里插入图片描述
双缓冲。若是双缓冲通信,则同一时刻可以实现双向的数据传输。
在这里插入图片描述
管道通信中的管道就是缓冲区。要想实现双向通信必须设置两个管道。

循环缓冲区

将大小相等的缓冲区连接成一个循环队列。循环队列中有两种缓冲区,一种是没有数据的空闲缓冲区,一种是由数据的满缓冲区。又有两个指针分别指向空缓冲区和满缓冲区。

在这里插入图片描述

缓冲池

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

在这里插入图片描述

原文地址:https://www.cnblogs.com/itjiangpo/p/14181374.html