缓冲区管理

在现代操作系统中,几乎所有的I/O设备在与处理机交换数据时都用了缓冲区。

缓冲的引入 

  引入缓冲区的原因有很多,可归结为以下几点:
  
(1) 缓和CPUI/O设备间速度不匹配的矛盾。
  
(2) 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
  
(3) 解决数据粒度不匹配的问题。
  
(4) 提高CPUI/O设备之间的并行性。

单缓冲区和双缓冲区 

  1. 单缓冲区(Single Buffer)
  在单缓冲情况下,每当用户进程发出一I/O请求时,操作系统便在主存中为之分配一缓冲区,如图所示。

2. 双缓冲区(Double Buffer)
  缓冲区是共享资源,生产者与消费者在使用缓冲区时必须互斥,故而需要设置了两个缓冲区来提高效率。实现外部设备的并发。

如果在实现两台机器之间的通信时仅为它们配置了单缓冲,如图(a)所示,那么,它们之间在任一时刻都只能实现单方向的数据传输。例如,只允许把数据从A传送到B,或者从B传送到A,而绝不允许双方同时向对方发送数据。为了实现双向数据传输,必须在两台机器中都设置两个缓冲区,一个用作发送缓冲区,另一个用作接收缓冲区,如图(b)所示。

3.环形缓冲区
  
1. 环形缓冲区的组成
  (1) 多个缓冲区。在环形缓冲中包括多个缓冲区,其每个缓冲区的大小相同。作为输入的多缓冲区可分为三种类型:用于装输入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在使用的现行工作缓冲区C,如图所示。

2. 进程之间的同步问题
  使用输入循环缓冲,可使输入进程和计算进程并行执行。相应地,指针Nexti和指针Nextg将不断地沿着顺时针方向移动,这样就可能出现下述两种情况:
  
(1) Nexti指针追赶上Nextg指针。
  
(2) Nextg指针追赶上Nexti指针。

缓冲池(Buffer Pool) 

  1. 缓冲池的组成
  缓冲池管理着多个缓冲区,每个缓冲区由用于标识和管理的缓冲首部以及用于存放数据的缓冲体两部分组成。缓冲首部一般包括缓冲区号、设备号、设备上的数据块号、同步信号量以及队列链接指针等。为了管理上的方便,一般将缓冲池中具有相同类型的缓冲区链接成一个队列,于是可形成以下三个队列:
  
(1) 空白缓冲队列emq
  
(2) 输入队列inq
  
(3) 输出队列outq

2. 缓冲区的工作方式
  
缓冲区可以工作在如下四种工作方式,如图所示。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值