缓冲区管理

适用计算机操作系统(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)输出进程请求输出数据到用户进程

从输出队列队头取下一块缓冲区,作为提取输出缓冲区,当其为空之后,就会挂到空缓冲队列尾上。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从今天起请叫我小张

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值