zoukankan      html  css  js  c++  java
  • 单缓冲、双缓冲、循环缓冲

    缓冲区管理

    什么是缓冲区?有什么作用?

    缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区。
    使用硬件作为缓冲区的成本较高,容量也较小,一般仅用在对速度非常高的场合(存储器管理寄存器,有对页表访问的频率较高,因此使用速度很快的联想寄存器 来存放页表项的副本)

    一般情况下更多的是使用内存作为缓冲区,“设备独立性软件”的缓冲区就是要组织管理好这些缓冲区。

    缓冲区的作用

    1. 缓和CPU和IO设备之间速度不匹配矛盾。
    2. 减少对CPU的中断频率,放宽对CPU中断相应的时间限制
    3. 解决数据粒度不匹配的问题
    4. 提高CPU和IO设备之间的并行性。

    单缓冲

    什么是单缓冲:

    假设某用户进程请求某块设备读入若干块数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区。
    当缓冲区不为空时不能往里面放入数据,只有缓冲区为空才能放入数据,但是一次放入的数据必须充满整个缓冲块,才能从缓冲区把数据传出。

    结论:采用单缓冲策略,处理一块数据平均耗时MAX(C,T)+M。其中C是CPU处理工作区的时间,T是从IO到缓冲区的时间,M是缓冲区的数据存到工作区的时间。

    双缓冲

    若采用双缓冲策略,操作系统会在主存中为其分配两个缓冲区。
    采用双缓冲策略,处理一个数据块的平均耗时是Max(T, C+M).

    使用单缓冲/双缓冲在通信时的区别

    单缓冲
    在这里插入图片描述
    双缓冲。若是双缓冲通信,则同一时刻可以实现双向的数据传输。
    在这里插入图片描述
    管道通信中的管道就是缓冲区。要想实现双向通信必须设置两个管道。

    循环缓冲区

    将大小相等的缓冲区连接成一个循环队列。循环队列中有两种缓冲区,一种是没有数据的空闲缓冲区,一种是由数据的满缓冲区。又有两个指针分别指向空缓冲区和满缓冲区。

    在这里插入图片描述

    缓冲池

    缓冲池有系统中共用的缓冲区组成。这些缓冲区按照使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列
    根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)。

    在这里插入图片描述

  • 相关阅读:
    ubuntu 安装 redis desktop manager
    ubuntu 升级内核
    Ubuntu 内核升级,导致无法正常启动
    spring mvc 上传文件,但是接收到文件后发现文件变大,且文件打不开(multipartfile)
    angular5 open modal
    POJ 1426 Find the Multiple(二维DP)
    POJ 3093 Margritas
    POJ 3260 The Fewest Coins
    POJ 1837 Balance(二维DP)
    POJ 1337 A Lazy Worker
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181374.html
Copyright © 2011-2022 走看看