缓冲区管理

缓冲区管理

image


一、缓冲区的概念

(一)实现方式

缓冲区是一个存储区域,可以有两种实现方式:

  1. 专门的硬件寄存器组成缓冲区

    成本较高,容量较小,一般仅用在对速度要求非常高的场合

  2. 利用内存的一部分作为缓冲区:

    一般情况下的选择。I/O 软件层次结构的“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区

——补充:本节介绍的是“内存作为缓冲区”

(二)作用

  • 缓和 CPU 与 I/O 设备之间速度不匹配的矛盾
  • 减少对 CPU 的中断频率,放宽对 CPU 中断响应时间的限制
  • 解决数据粒度不匹配的问题(对粒度的理解:数据交换规模)
  • 提高 CPU 与 I/O 设备之间的并行性

image

二、单缓冲

image

理解:

  • 缓冲区为空时将其设为写状态,只有写满后才可以设为读状态,读状态时只有把数据读完才能变为写状态。

  • 这里比较抽象难理解,往缓冲区输入数据和输出数据都是原子操作,空的时候才能输入,满的时候才能输出。如何定义“空”和“满”则实际由用户编程决定。

image

image

结论:采用单缓冲策略,处理一块数据平均耗时 Max(T, C)+M

三、双缓冲

采用双缓冲的策略即在主存中为其分配两个缓冲区

image

image

(补充,第二张甘特图有点问题,建议自己画一遍捋一捋)

结论:采用双缓冲策略,处理一块数据平均耗时 Max(T, C+M)

——使用单/双缓冲在通信时的区别

假设两台机器 A,B 之间通信时,配置缓冲区用于数据的发送和接受。

两台机器各自配置:

  • 单缓冲区:在任一时刻只能实现数据的单向传输。(类比半双工通信)
  • 双缓冲区:在同一时刻可以实现双向的数据传输。(类比全双工通信)

四、循环缓冲区

理解:看作循环队列,其中

out 指针类比充满数据的缓冲区队列的队头,用于取

in 指针类比空缓冲区的队列的队头,用于存

image

五、缓冲池

image

(绿色对话框模拟的时④的过程)

posted @   Wind_730  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示