适用计算机操作系统(OS)(第四版)
自己的学习笔记,PPT及图片来源网络及自己老师,侵删。
1、缓冲的引入
1 )缓和CPU与I/O设备间速度不匹配的矛盾。
2 )减少对CPU的中断频率, 放宽对CPU中断响应时间的限制。
3 )提高CPU和I/O设备之间的并行性。
4 )解决数据粒度不匹配的问题
2、I/O缓冲区设置
- 缓冲区实现
- 硬缓冲:
在设备中(硬件寄存器)设置缓冲区,由硬件实现。 - 软缓冲:
在内存中开辟一个空间,用作缓冲区。
- 硬缓冲:
- 缓冲区管理
- 简单缓冲:单缓冲和双缓冲
- 多缓冲:循环缓冲和缓冲池
3、单缓冲与双缓冲区
缓冲区 :缓冲区非空,不能输入数据,只有当缓冲区中的数据全部传送至工作区,才能接受下一次的数据。缓冲区为空时,可以输入数据,但只有当缓冲区为满之后,才可以向工作区传输数据。
3.1 单缓冲区
平均工作时间 : Max(T,C)+M
初始状态 :工作区满,缓冲区空。
1)T > C
平均时间 T+M
2)T < C
平均时间 C+M
3.2 双缓冲区
初始状态 :工作区为空,一个缓冲区满,另一个缓冲区为空
平均工作时间 : Max(T,M+C)
1 )T > M + C
平均时间 :T
2 )T < M + C
平均时间 :M + C
找不到一个和初始状态相同的时间,但是会发现每经过M+C段时间会完成对一个数据块的处理
3.3 双机通信时缓冲区的设置
单缓冲区 :只能进行单方面的通信,即不允许双方同时向对方发送数据。
双缓冲区 :可以实现同时通信,一个作为发送缓冲区,一个作为接受缓冲区。
4 、循环缓冲
指针:
-
Nextg:指示计算进程下一个可用的满缓冲
-
Nexti:指示输入进程下一个可用的空缓冲
-
Current:指示计算进程正在使用的缓冲区
进程同步 :
Nexti和Nextg同向移动
-
Nexti指针追上Nextg:则输入速度>计算速度,全部缓冲区已满。则输入进程阻塞,等待有空缓冲区出现。此时称为系统受计算限制。
-
Nextg指针追上Nexti:则输入速度<计算速度,全部缓冲区已空。则计算进程阻塞,等待有满缓冲区出现。此时称为系统受I/O限制。
这种循环缓冲只适用于特定的I/O进程和计算进程,属于专用缓冲,系统较大时,会有许多这样的循环缓冲,占用大量内存,利用率低
5、缓冲池
包含了三种队列 :
空缓冲队列
输入队列
输出队列
四种工作缓冲区:
收容输入缓冲区(hin):用于收容设备输入的数据。
提取输入缓冲区(sin):用于提取设备输入的数据。
收容输出缓冲区(hout):用于收容CPU输出的数据。
提取输出缓冲区(sout):用于提取CPU输出的数据。
四种情况 :
1)输入进程请求输入数据
从空缓冲队列队头取下一块缓冲区,作为收容输入缓冲区,当其充满之后,就会挂到输入队列队尾上。
2)计算进程请求一块输入数据
从输入队列队头取下一块缓冲区,作为提取输入缓冲区,当其为空之后,就会挂到空缓冲队列尾上。
3)计算进程请求将准备好的数据冲入缓冲区
从空缓冲队列队头取下一块缓冲区,作为收容输出缓冲区,当其充满之后,就会挂到输出队列队尾上。
4)输出进程请求输出数据到用户进程
从输出队列队头取下一块缓冲区,作为提取输出缓冲区,当其为空之后,就会挂到空缓冲队列尾上。