缓冲区管理
廖家龙 用心听,不照做

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

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区

使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)

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

缓冲区的作用:(内存作为缓冲区)

  1. 缓和CPU与I/O设备之间速度不匹配的矛盾

  2. 减少对CPU的中断频率,放宽对CPU中断相应时间的限制

  3. 解决数据粒度不匹配的问题:如输出进程每次可以生成一块数据,但I/O设备每次只能输出一个字符

  4. 提高CPU与I/O设备之间的并行性

单缓冲

双缓冲

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

两台机器之间通信时,可以配置缓冲区用于数据的发送和接收,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输,若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输

管道通信中的“管道”其实就是缓冲区,要实现数据的双向传输,必须设置两个管道

循环缓冲

将多个大小相等的缓冲区链接成一个循环队列

缓冲池

  1. 输入进程请求输入数据:从空缓冲队列中取出一块作为收容输入数据的工作缓冲区,充满数据后将缓冲区挂到输入队列队尾
  2. 计算进程想要取得一块输入数据:从输入队列中取得一块充满输入数据的缓冲区作为“提取输入数据的工作缓冲区”,缓冲区读空后挂到空缓冲区队列
  3. 计算进程想要将准备好的数据冲入缓冲区:从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区”,数据充满后将缓冲区挂到输出队列队尾
  4. 输出进程请求输出数据:从输出队列中取得一块充满输出数据的缓冲区作为“提取输出数据的工作缓冲区”,缓冲区读空后挂到空缓冲区队列