缓冲区管理

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

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

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

缓冲区的作用

  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)。

单缓冲、双缓冲、循环缓冲相关推荐

  1. 5.2.4 OS之缓冲区管理(单缓冲-双缓冲-循环缓冲-缓冲池)

    文章目录 0.思维导图 1.什么是缓冲区?有什么作用? 2.单缓冲 3.双缓冲 4.单缓冲和双缓冲通信时的区别 5.循环缓冲区 6.缓冲池 0.思维导图 1.什么是缓冲区?有什么作用? 2.单缓冲 T ...

  2. 操作系统之I/O管理:4、缓冲区管理(单缓冲、双缓冲、循环缓冲、缓冲池)

    4.缓冲区管理 思维导图 什么是缓冲区 缓冲区作用 单缓冲 双缓冲 循环缓冲区 缓冲池 1.输入进程请求输入数据 2.计算进程想要取得一块输入数据 3.计算进程想要将准备好的数据冲入缓冲区 4.输出进 ...

  3. 双缓冲技术绘图原理及简单的VC实现

    为了增加自己对双缓冲绘图技术的理解,简要做个笔记(以Windows为例): 1.Windows 绘图原理  我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是&qu ...

  4. framebuffer之overview/双缓冲/alpha与colorkey/窗口平移与virtual screen平移

    本文介绍了s3c6410中的framebuffer,参考代码为Linux2.6.28.网上介绍framebuffer的文章很多,内核代码中也有关于framebuffer的文档,所以本文只介绍一些其它文 ...

  5. 双缓冲异步日志(Async Logging)

    文章目录 一.日志系统简介 二.功能需求 三.性能需求 四.高效的异步日志 1.异步日志的概念 2.双缓冲异步日志解析 3.AsyncLogging源码 4.代码运行图示 五.双缓冲异步日志的相关问题 ...

  6. Java Swing 经典小游戏《飞机大战》———— (一)获取素材,创建窗口,添加滚动背景,双缓冲

    (一)最终效果 1.窗口 2.项目框架 (二)效果实现 1.获取素材 获取步骤省略,大家可自行到我的资源获取,放置在src目录下 2. 创建窗口 WinGame.java import java.aw ...

  7. EGE基础入门篇(九):双缓冲与手动渲染

    EGE专栏:EGE专栏 上一篇:EGE基础入门篇(八):清屏与重绘 下一篇: 文章目录 一.双缓冲机制 1. 单缓冲绘图 1.1 单缓冲绘图的缺点 1.2 系统读取帧缓冲 2. 双缓冲绘图 2.1 双 ...

  8. MFC---定时器和双缓冲机制绘制旋转的金刚石图案

    双缓冲原理 MFC中绘制动画的基本思路是在固定时间间隔内绘制图像,然后擦除旧图像再绘制新图像,这样连续         起来就在人类的视觉上形成动画.为了实现这种"绘制-擦除-再绘制&quo ...

  9. 【学习总结】MFC(CImagelist)(重绘)(双缓冲)

    双缓冲实现按钮列表 本文通过介绍双缓冲与CImageList,重写CButton类,来实现按钮列表. 简单的效果图 双缓冲实现 双缓冲的技术原理: 在Windows中每一种设备都在内存中有一个设备描述 ...

最新文章

  1. 各种语言中对指针的叫法
  2. flume源码学习4-SourceRunner与ExecSource实现
  3. 更多的结构化命令(第十三章)
  4. “接着奏乐接着舞”,大脑也是这么想的
  5. Python中使用元组对ndarray矩阵的某个维度进行选取和调序的操作
  6. Keras之MLP:利用MLP【Input(8)→(12)(relu)→O(sigmoid+二元交叉)】模型实现预测新数据(利用糖尿病数据集的八个特征实现二分类预测
  7. 招聘webgis开发经理和程序员
  8. TensorFlow——基于Keras子类API的fashion-mnist数据集图像分类
  9. 卧槽!Python学习神器~
  10. 跨时代的传承者:天美如何用游戏重塑“敦煌印象”?
  11. oracle数据库主键自增序列_Oracle数据库序列详解
  12. (原)Ubuntu14中安装GraphicsMagick
  13. 大牛用emacs还是vim_Emacs,Vim还是其他?
  14. python __repr__
  15. 深入一点 让细节帮你和Fragment更熟络
  16. 教你正确说话的6个玄机
  17. C++ 什么是句柄?为什么会有句柄?HANDLE
  18. 数据结构期末考题总结(附答案)
  19. 地类图斑代码大全_使用字段计算器对同一地类图斑自动编号(标记重复记录)...
  20. 基于HL7-V3医疗系统信息交换标准SOAP开发

热门文章

  1. 英文星期的来历(都是来自神人)
  2. 联想3650服务器配置信息,【联想x3650参数】联想x3650系列服务器参数-ZOL中关村在线...
  3. linux没有系统如何删除sda,Linux:解决U盘可以识别,但在/dev目录下只有sda,却无设备节点(sda1)的问题...
  4. LM2576在嵌入式系统中的应用
  5. SAP ABAP 业务对象 BUS6041 AssetSubCostRev 后续资产成本和收入 BAPI 清单和相关 TCODE
  6. php xls 繁体字 问号,【专题】如何显示CAD中的繁体字,繁体字出现问号怎么办?...
  7. 21年1.9c#halcon机器视觉软件系统框架源码visi onpro
  8. 2021年全球医用气体压力调节器收入大约180.9百万美元,预计2028年达到226.3百万美元
  9. LintCode 数字组合 题解
  10. 麻将胡牌算法带癞子 python实现