目的

  • 缓和 CPU 与 I/O 设备速度不匹配的矛盾
  • 减少对 CPU 的中断频率
  • 实现数据流的平滑和暂存
  • 允许 CPU 和设备在数据传送速率上解耦

缓冲类型

类型描述处理时间公式
单缓冲一个缓冲区,CPU 和 I/O 交替使用
双缓冲两个缓冲区,CPU 和 I/O 可同时工作(可重叠)
循环缓冲多个缓冲区组成环形队列,生产者-消费者模式适合连续数据流
缓冲池系统统一管理多个缓冲区,动态分配全局共享,利用率高

工作原理

单缓冲(Single Buffer)

  • 系统在内存中分配一个缓冲区
  • 输入:设备 → 缓冲区 → CPU(交替进行)
  • CPU 处理缓冲区数据时,设备不能向缓冲区写入新数据
  • CPU 处理时间 和 I/O 传输时间 串行重叠
  • 处理 块数据的总时间:
  • 适用于 CPU 和设备速率接近的场景

双缓冲(Double Buffering)

  • 两个缓冲区交替使用:缓冲区 1 和缓冲区 2
  • 设备填充缓冲区 1 的同时,CPU 处理缓冲区 2
  • 设备填充缓冲区 2 的同时,CPU 处理缓冲区 1
  • CPU 和 I/O 可并行工作(缓冲区大小设置合理时)
  • 处理 块数据的总时间:
  • 适用于 CPU 和设备速率相当且数据块较大的场景

循环缓冲(Circular Buffer)

  • 多个缓冲区组成环形队列
  • 典型的生产者-消费者模式
  • 输入:设备(生产者)向空缓冲区填入数据
  • 输出:CPU(消费者)从满缓冲区取走数据
  • 使用指针/索引管理缓冲区状态(空/满)
  • 解决多缓冲区的组织管理问题
  • 适用于持续数据流(如音频、视频播放)

缓冲池(Buffer Pool)

  • 系统维护一组大小相同的缓冲区
  • 支持三种队列:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列
  • 按需从缓冲池获取和释放缓冲区
  • 优点:全局统一管理,缓冲区利用率高,灵活性好
  • 现代操作系统普遍采用

数据流向

  • 输入:I/O 设备 → 缓冲区 → CPU
  • 输出:CPU → 缓冲区 → I/O 设备
  • 缓冲区在内存中实现数据的暂存和速度匹配