缓冲区管理
什么是缓冲区?有什么作用?
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区
使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)
一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区
缓冲区的作用:(内存作为缓冲区)
缓和CPU与I/O设备之间速度不匹配的矛盾
减少对CPU的中断频率,放宽对CPU中断相应时间的限制
解决数据粒度不匹配的问题:如输出进程每次可以生成一块数据,但I/O设备每次只能输出一个字符
提高CPU与I/O设备之间的并行性
单缓冲
双缓冲
使用单/双缓冲在通信时的区别:
两台机器之间通信时,可以配置缓冲区用于数据的发送和接收,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输,若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输
管道通信中的“管道”其实就是缓冲区,要实现数据的双向传输,必须设置两个管道
循环缓冲
将多个大小相等的缓冲区链接成一个循环队列
缓冲池
- 输入进程请求输入数据:从空缓冲队列中取出一块作为收容输入数据的工作缓冲区,充满数据后将缓冲区挂到输入队列队尾
- 计算进程想要取得一块输入数据:从输入队列中取得一块充满输入数据的缓冲区作为“提取输入数据的工作缓冲区”,缓冲区读空后挂到空缓冲区队列
- 计算进程想要将准备好的数据冲入缓冲区:从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区”,数据充满后将缓冲区挂到输出队列队尾
- 输出进程请求输出数据:从输出队列中取得一块充满输出数据的缓冲区作为“提取输出数据的工作缓冲区”,缓冲区读空后挂到空缓冲区队列