单缓冲、双缓冲、循环缓冲
缓冲区管理
什么是缓冲区?有什么作用?
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区。
使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度非常高的场合(存储器管理寄存器,有对页表访问的频率较高,因此使用速度很快的联想寄存器 来存放页表项的副本)
一般情况下更多的是使用内存作为缓冲区,“设备独立性软件”的缓冲区就是要组织管理好这些缓冲区。
缓冲区的作用
- 缓和CPU和IO设备之间速度不匹配矛盾。
- 减少对CPU的中断频率,放宽对CPU中断相应的时间限制
- 解决数据粒度不匹配的问题
- 提高CPU和IO设备之间的并行性。
单缓冲
什么是单缓冲:
假设某用户进程请求某块设备读入若干块数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区。
当缓冲区不为空时不能往里面放入数据,只有缓冲区为空才能放入数据,但是一次放入的数据必须充满整个缓冲块,才能从缓冲区把数据传出。
结论:采用单缓冲策略,处理一块数据平均耗时MAX(C,T)+M。其中C是CPU处理工作区的时间,T是从IO到缓冲区的时间,M是缓冲区的数据存到工作区的时间。
双缓冲
若采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区。
采用双缓冲策略,处理一个数据块的平均耗时是Max(T, C+M).
使用单缓冲/双缓冲在通信时的区别
单缓冲
双缓冲。若是双缓冲通信,则同一时刻可以实现双向的数据传输。
管道通信中的管道就是缓冲区。要想实现双向通信必须设置两个管道。
循环缓冲区
将大小相等的缓冲区连接成一个循环队列。循环队列中有两种缓冲区,一种是没有数据的空闲缓冲区,一种是由数据的满缓冲区。又有两个指针分别指向空缓冲区和满缓冲区。
缓冲池
缓冲池有系统中共用的缓冲区组成。这些缓冲区按照使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列。
根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)。
单缓冲、双缓冲、循环缓冲相关推荐
- 5.2.4 OS之缓冲区管理(单缓冲-双缓冲-循环缓冲-缓冲池)
文章目录 0.思维导图 1.什么是缓冲区?有什么作用? 2.单缓冲 3.双缓冲 4.单缓冲和双缓冲通信时的区别 5.循环缓冲区 6.缓冲池 0.思维导图 1.什么是缓冲区?有什么作用? 2.单缓冲 T ...
- 操作系统之I/O管理:4、缓冲区管理(单缓冲、双缓冲、循环缓冲、缓冲池)
4.缓冲区管理 思维导图 什么是缓冲区 缓冲区作用 单缓冲 双缓冲 循环缓冲区 缓冲池 1.输入进程请求输入数据 2.计算进程想要取得一块输入数据 3.计算进程想要将准备好的数据冲入缓冲区 4.输出进 ...
- 双缓冲技术绘图原理及简单的VC实现
为了增加自己对双缓冲绘图技术的理解,简要做个笔记(以Windows为例): 1.Windows 绘图原理 我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是&qu ...
- framebuffer之overview/双缓冲/alpha与colorkey/窗口平移与virtual screen平移
本文介绍了s3c6410中的framebuffer,参考代码为Linux2.6.28.网上介绍framebuffer的文章很多,内核代码中也有关于framebuffer的文档,所以本文只介绍一些其它文 ...
- 双缓冲异步日志(Async Logging)
文章目录 一.日志系统简介 二.功能需求 三.性能需求 四.高效的异步日志 1.异步日志的概念 2.双缓冲异步日志解析 3.AsyncLogging源码 4.代码运行图示 五.双缓冲异步日志的相关问题 ...
- Java Swing 经典小游戏《飞机大战》———— (一)获取素材,创建窗口,添加滚动背景,双缓冲
(一)最终效果 1.窗口 2.项目框架 (二)效果实现 1.获取素材 获取步骤省略,大家可自行到我的资源获取,放置在src目录下 2. 创建窗口 WinGame.java import java.aw ...
- EGE基础入门篇(九):双缓冲与手动渲染
EGE专栏:EGE专栏 上一篇:EGE基础入门篇(八):清屏与重绘 下一篇: 文章目录 一.双缓冲机制 1. 单缓冲绘图 1.1 单缓冲绘图的缺点 1.2 系统读取帧缓冲 2. 双缓冲绘图 2.1 双 ...
- MFC---定时器和双缓冲机制绘制旋转的金刚石图案
双缓冲原理 MFC中绘制动画的基本思路是在固定时间间隔内绘制图像,然后擦除旧图像再绘制新图像,这样连续 起来就在人类的视觉上形成动画.为了实现这种"绘制-擦除-再绘制&quo ...
- 【学习总结】MFC(CImagelist)(重绘)(双缓冲)
双缓冲实现按钮列表 本文通过介绍双缓冲与CImageList,重写CButton类,来实现按钮列表. 简单的效果图 双缓冲实现 双缓冲的技术原理: 在Windows中每一种设备都在内存中有一个设备描述 ...
最新文章
- 各种语言中对指针的叫法
- flume源码学习4-SourceRunner与ExecSource实现
- 更多的结构化命令(第十三章)
- “接着奏乐接着舞”,大脑也是这么想的
- Python中使用元组对ndarray矩阵的某个维度进行选取和调序的操作
- Keras之MLP:利用MLP【Input(8)→(12)(relu)→O(sigmoid+二元交叉)】模型实现预测新数据(利用糖尿病数据集的八个特征实现二分类预测
- 招聘webgis开发经理和程序员
- TensorFlow——基于Keras子类API的fashion-mnist数据集图像分类
- 卧槽!Python学习神器~
- 跨时代的传承者:天美如何用游戏重塑“敦煌印象”?
- oracle数据库主键自增序列_Oracle数据库序列详解
- (原)Ubuntu14中安装GraphicsMagick
- 大牛用emacs还是vim_Emacs,Vim还是其他?
- python __repr__
- 深入一点 让细节帮你和Fragment更熟络
- 教你正确说话的6个玄机
- C++ 什么是句柄?为什么会有句柄?HANDLE
- 数据结构期末考题总结(附答案)
- 地类图斑代码大全_使用字段计算器对同一地类图斑自动编号(标记重复记录)...
- 基于HL7-V3医疗系统信息交换标准SOAP开发
热门文章
- 英文星期的来历(都是来自神人)
- 联想3650服务器配置信息,【联想x3650参数】联想x3650系列服务器参数-ZOL中关村在线...
- linux没有系统如何删除sda,Linux:解决U盘可以识别,但在/dev目录下只有sda,却无设备节点(sda1)的问题...
- LM2576在嵌入式系统中的应用
- SAP ABAP 业务对象 BUS6041 AssetSubCostRev 后续资产成本和收入 BAPI 清单和相关 TCODE
- php xls 繁体字 问号,【专题】如何显示CAD中的繁体字,繁体字出现问号怎么办?...
- 21年1.9c#halcon机器视觉软件系统框架源码visi onpro
- 2021年全球医用气体压力调节器收入大约180.9百万美元,预计2028年达到226.3百万美元
- LintCode 数字组合 题解
- 麻将胡牌算法带癞子 python实现