为什么要引入缓冲?
1.缓和CPU与I/O设备间速度不匹配的矛盾。
2.减少对CPU的中断频率, 放宽对CPU中断响应时间限制。
3. 提高CPU和I/O设备之间的并行性。
缓冲的类型:单缓冲、双缓冲、循环缓冲、缓冲池
单缓冲
单缓冲,当用户既想输入又想输出就会产生矛盾,单缓冲只能单向通信
双缓冲
所以引出了双缓冲,双缓冲提高了设备利用率,加快了输入输出速率,双缓冲还可以实现双机通信
循环缓冲
循环缓冲:链表,每个结点就是一个缓冲区,一类存储输入数据(输入缓冲区)一类用于输出数据(输出缓冲区)
空缓冲区和满缓冲区被循环利用,环形缓冲区可以被输入进程和输出进程同时使用
当缓冲区都空时
放数据:Getbuf
取数据:Releasbuf
缓冲池
对于即用于输入又由于输出的公共缓冲池应至少包含以下三种类型的缓冲区:
- 空闲缓冲区
- 装满输入数据的缓冲区
- 装满输出数据的缓冲区
为了方便管理,将相同类型的缓冲区组成了一个队列,形成三个对列:
- 空缓冲队列emq
- 输入队列inq
- 输出队列outq
缓冲池的工作方式: