操作系统缓冲区管理(单缓冲,双缓冲,循环缓冲,缓冲池)
目录
- 1.什么是缓冲区
- 1.有什么作用
- 2.单缓冲
- 1.常考题型:计算每处理一块数据平均需要多久
- 1.假设输入时间T大于处理时间C
- 2.假设输入时间T小于处理时间C
- 2.单缓冲通信
- 3.双缓冲
- 1.计算数据处理的时间
- 1. 假设T>C+M
- 2.假设T<C+M
- 2.双缓冲通信
- 4.循环缓冲
- 5.缓冲池
- 1.共用缓冲区
- 2.工作缓冲区
- 3.数据输入输出操作
1.什么是缓冲区
缓冲区是一个存储区域,可以由专门的
硬件寄存器
组成,也可利用内存作为缓冲区。
使用硬件作为缓冲区的成本较高,容量也较小
,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)
一般情况下,更多的是利用内存作为缓冲区
,“设备独立性软件”的缓冲区管理就是要组织管理
好这些缓冲区。
1.有什么作用
①缓和CPU与I/O设备之间速度不匹配的矛盾
②减少对CPU的中断频率,放宽对CPU中断相应时间的限制
③解决数据粒度不匹配的问题
如:输出进程每次可以生成一块数据,但I/O设备每次只能输出一个字符
④提高CPU与I/O设备之间的并行性
2.单缓冲
假设某用户进程请求某种块设备读入若干块的数据。
若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区
(若题目中没有特别说明,一个缓冲区的大小就是一个块)。
注意:当缓冲区数据非空
时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;
当缓冲区为空
时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。
1.常考题型:计算每处理一块数据平均需要多久
技巧:假定一个初始状态,分析下次到达相同状态需要多少时间,这就是处理一块数据平均所需时间。
在“单缓冲”题型中,可以假设初始状态为工作区满,缓冲区空
。
1.假设输入时间T大于处理时间C
处理一块数据的平均用时=T+M。(M为传送时间)
2.假设输入时间T小于处理时间C
处理一块数据的平均用时=C+M。
结论:
采用单缓冲策略,处理一块数据平均耗时Max(C,T)+M
。
2.单缓冲通信
两台机器之间通信时,可以配置缓冲区用于数据的发送和接受。
显然,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输
。
3.双缓冲
假设某用户进程请求某种块设备读入若干块的数据。
若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区
(若题目中没有特别说明,一个缓冲区的大小就是一个块)
双缓冲题目中,假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空
1.计算数据处理的时间
1. 假设T>C+M
处理一块数据的平均用时=T.
2.假设T<C+M
总之,T<C+M意味着设备输入数据块的速度要比处理机处理数据块的速度更快。
每处理一个数据块平均耗时C+M
结论::采用双缓冲策略,处理一个数据块的平均耗时为Max (T, C+M)
2.双缓冲通信
若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输
。
4.循环缓冲
将多个
大小相等
的缓冲区链接成一个循环队列
。
注:以下图示中,橙色表示已充满数据的缓冲区,绿色表示空缓冲区。
5.缓冲池
1.共用缓冲区
缓冲池
由系统中共用的缓冲区组成。
这些缓冲区按使用状况可以分为:空缓冲队列
、装满输入数据的缓冲队列(输入队列
)、装满输出数据的缓冲队列(输出队列
)。
2.工作缓冲区
另外,根据一个缓冲区在实际运算中扮演的功能不同,
又设置了四种工作缓冲区:用于收容输入数据
的工作缓冲区(hin)、用于提取输入
数据的工作缓冲区(sin)、用于收容输出
数据的工作缓冲区(hout)、用于提取输出
数据的工作缓冲区(sout)
3.数据输入输出操作
①输入进程请求输入数据
从空缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin)。
冲满数据后将缓冲区挂到输入队列队尾。
②计算进程想要取得一块输入数据
从输入队列中取得一块冲满输入数据的缓冲区作为“提取输入数据的工作缓冲区(sin)”。
缓冲区读空后挂到空缓冲区队列。
③计算进程想要将准备好的数据冲入缓冲区
从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout) ”。数据冲满后将缓冲区挂到输出队列队尾。
④输出进程请求输出数据
从输出队列中取得一块冲满输出数据的缓冲区作为“提取输出数据的工作缓冲区(sout) ”。
缓冲区读空后挂到空缓冲区队列。