内存缓冲区管理

来源:互联网 发布:java刷题app 编辑:程序博客网 时间:2024/06/05 01:18

在现代操作系统中,几乎所有的设备在涉及数据交换的地方都设置了缓冲区。缓冲区由专门的寄存器组成,但由于硬件成本较高,容量相应也比较小,一般用于速度要求非常高的地方(相对于内存,作为内存的缓冲)。而对于低速的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收容进程输出到缓冲池。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩脖子睡歪了怎么办 脸部三角区肿了怎么办 面部三角区挤了怎么办 胳膊扭着了肿了怎么办 多囊卵巢综合症治不好怎么办 胳膊受了风发麻怎么办 胳膊抻筋了很疼怎么办 腰抻了怎么办最有效 孩子胳膊抻着了怎么办 胳膊伤筋了疼怎么办 宝宝胳膊抻了疼怎么办 练完普拉提头晕怎么办 生完孩子腰背疼怎么办 宝宝不肯把屎尿怎么办 存的电话删除了怎么办 脚踝的韧带断了怎么办 买了双鞋子想退怎么办 鞋子大了一码怎么办 nba篮球大师身体素质满了怎么办 钉鞋大了一码怎么办 篮球鞋鞋垫会向里面跑怎么办 穿高跟鞋脚肿了怎么办 衣服弄到单车油怎么办 高低床孩子摔下来怎么办 量血压时老紧张怎么办 牛仔外套的扣子掉了怎么办 裤子的裤筒大了怎么办 衣服拉链驰坏了怎么办 小脚裤裤腿紧了怎么办 地垫粘地板了怎么办 棉麻衬衣皱了怎么办 麻料衣服烫皱了怎么办 在京东买一双奥康鞋没有防伪怎么办 足球鞋丁掉了一颗怎么办 鼻子有点大想变小该怎么办 阿勒泰小东沟风景区边防证怎么办 孩子上一年级了学习很差怎么办 孩子作息时间不规律怎么办 冬天冻脸怎么办小妙招 冬天冻脚怎么办小妙招 冬天脚冷怎么办小妙招