缓冲区管理
一、缓冲区的概念
(一)实现方式
缓冲区是一个存储区域,可以有两种实现方式:
-
用专门的硬件寄存器组成缓冲区 :
成本较高,容量较小,一般仅用在对速度要求非常高的场合
-
利用内存的一部分作为缓冲区:
一般情况下的选择。I/O 软件层次结构的“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区
——补充:本节介绍的是“内存作为缓冲区”
(二)作用
- 缓和 CPU 与 I/O 设备之间速度不匹配的矛盾
- 减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制
- 解决数据粒度不匹配的问题(对粒度的理解:数据交换规模)
- 提高 CPU 与 I/O 设备之间的并行性
二、单缓冲
理解:
-
缓冲区为空时将其设为写状态,只有写满后才可以设为读状态,读状态时只有把数据读完才能变为写状态。
-
这里比较抽象难理解,往缓冲区输入数据和输出数据都是原子操作,空的时候才能输入,满的时候才能输出。如何定义“空”和“满”则实际由用户编程决定。
结论:采用单缓冲策略,处理一块数据平均耗时 Max(T, C)+M
三、双缓冲
采用双缓冲的策略即在主存中为其分配两个缓冲区
(补充,第二张甘特图有点问题,建议自己画一遍捋一捋)
结论:采用双缓冲策略,处理一块数据平均耗时 Max(T, C+M)
——使用单/双缓冲在通信时的区别
假设两台机器 A,B 之间通信时,配置缓冲区用于数据的发送和接受。
两台机器各自配置:
- 单缓冲区:在任一时刻只能实现数据的单向传输。(类比半双工通信)
- 双缓冲区:在同一时刻可以实现双向的数据传输。(类比全双工通信)
四、循环缓冲区
理解:看作循环队列,其中
out 指针类比充满数据的缓冲区队列的队头,用于取
in 指针类比空缓冲区的队列的队头,用于存
五、缓冲池
(绿色对话框模拟的时④的过程)
标签:类比,队列,缓冲,管理,缓冲区,数据,CPU From: https://www.cnblogs.com/Wind730/p/18609867/buffer-management-3cgck