内存缓冲区管理

Posted fusiji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存缓冲区管理相关的知识,希望对你有一定的参考价值。

  在现代操作系统中,几乎所有的设备在涉及数据交换的地方都设置了缓冲区。缓冲区由专门的寄存器组成,但由于硬件成本较高,容量相应也比较小,一般用于速度要求非常高的地方(相对于内存,作为内存的缓冲)。而对于低速的I/O设备,内存就可以作为缓冲区。内存缓冲区管理主要提供组织、获得和释放等能力。

引入缓冲的原因

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

  数据的输入输出速率不一样。由于数据的输入和输出速率不同,导致某一硬件的数据上行或下行产生时间差,为了减少这种时间差,引入缓存。

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

  如果缓冲只有一位,那么没来一为数据就要CPU中断一次,起到的缓冲效果一般;如果缓冲有更大,那么装满缓冲区就要一段时间,对于CPU来讲中断次数明显减少。

3.解决数据粒度不匹配

  缓冲区可以解决生产者和消费者之间单位数据大小问题。比如生产者消费者问题中,生产者单位数据小于消费者单位数据时,生产者为了满足消费者需求可以一连续生产好几个单位;而大于的话,消费者可以分几次取一个单位。

4.提高CPU与I/O设备的并行性

  提高并行性和吞吐量。比如,CPU向块设备输出数据时,可以先将数据存放在缓冲区中(快),然后返回,接下来由缓冲区慢慢向块设备写数据,而不是由CPU直接向慢速的块设备直接输出。

单缓冲、双缓冲和环形缓冲

1.单缓冲

  I/O设备之间只有一块缓冲区,当数据来临时,I/O设备到缓冲区的时间M和在工作区的执行时间C会产生重合,所以对于一块数据而言,T=max(C,M)+Q,Q是从缓冲区移到工作区的时间,看C和M那个更大,盖住了对方。

2.双缓冲

  在I/O设备与工作区之间有两组相同的缓冲区,典型的代表就是CPU的超线程技术。在一个CPU核心内有两组一样寄存器,当计算单元和一组寄存器交互时,另一组寄存器和内存交互,将另一个引发中断的进程的数据放入寄存器,这样当发生中断时,CPU只需要一个时钟周期,就能从一组切换到另一组,进而执行进程;否则,必须要等若干个时钟周期。

3.环形缓冲区

(1)组成:多个缓冲区(空的,满的,正在使用的)和多个指针

(2)使用:申请和释放

(3)同步:当空指针指向满指针的位置时,所有缓冲区满,不能再申请;当满指针赶上空指针时,所有缓冲区为空,不能释放

缓冲池

  为了提高缓冲的利用率,将多个缓冲区封装在一个缓冲池中,包含一系列的操作和数据结构。缓冲区一般都包含空白缓冲队列、输入队列、输出队列,除此之外——收容输入数据,提取输入数据,收容输出数据,提取输出数据的工作区缓冲。缓冲块有缓冲块号,设备号等内容。缓冲池可抽象成成下列四种块:hin收容进程输入到工作区;sin提取进程输入到缓冲池;sout提取进程输出到工作区;hout收容进程输出到缓冲池。

 

以上是关于内存缓冲区管理的主要内容,如果未能解决你的问题,请参考以下文章

Linux 0.11-内存缓冲区的管理-19

顶点缓冲区数据的内存管理

内存管理:命名该结构

6LwIP协议规范翻译——缓冲及内存管理

使用“unsigned char”指向原始数据缓冲区时需要了解内存管理

RTT之内存管理及异常中断