首页 > 其他分享 >第五章 输入输出系统 5.7 缓冲管理

第五章 输入输出系统 5.7 缓冲管理

时间:2023-05-14 10:36:28浏览次数:32  
标签:5.7 队列 缓冲 输入输出 进程 缓冲区 数据 输入

一、缓冲的引入

  1.缓和CPU与I/O设备间速度不匹配的矛盾

  2.减少对CPU的中断频率,放宽对CPU中断响应时间的限制

  3.解决数据粒度不匹配的问题 

  4.提高CPU和I/O设备之间的并行性

二、缓冲区的组织形式 (单缓冲,双缓冲,循环缓冲属于专用缓冲)

  1.单缓冲

  • 每当用户进程发出一I/O请求时,OS便在主存中为之分配一缓冲区,CPU和外设轮流使用,一方处理完之后接着等待对方处理 。
  • 块设备输入时,C和T可并行,M和C或M和T不能并行,因此处理一块数据时间:Max(C,T)+M   ?
  • 字符设备输入时,缓冲区用于暂存用户输入的一行数据,在输入期间,用户进程被阻塞以等待数据输入完毕;在输出时,用户进程将一行数据输入到缓冲区后,继续执行处理。当用户进程已有第二行数据输出时,如果第一行数据尚未被提取完毕,则此时用户进程应阻塞。 

 

  2.双缓冲

  • 在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时OS可以从第一缓冲区中移出数据,并送入用户进程。接着由CPU对数据进行计算。
  • CPU和外设都可以连续处理而无需等待对方。要求CPU和外设的速度相近。
  • 收发可双向同时传送。 

  • 双机通信时缓冲区的设置 :若仅配置单缓冲,在任意时刻只能实现单方面的数据传输;设置两个缓冲区,即可实现双向数据传输。

  3.循环缓冲

  • 考虑增加缓冲区的数量以改善系统性能,这就是多缓冲区方式 
  • 双缓冲可以看作是循环缓冲的一个特例
  • 循环缓冲的组成:

      R:空缓冲; G:满缓冲; C:当前缓冲;Nexti:输入进程下一个可用空缓冲区R;Nextg:计算进程下一个可用满缓冲区G 

  • Getbuf过程 :当计算进程要使用缓冲区中的数据时或是输入进程要往缓冲区中输送数据时

             

  • Releasebuf过程 :当计算进程把C缓冲区中的数据提取完毕时,便调用该过程将缓冲区G释放。当输入进程把缓冲区装满时,也调用该进程将缓冲区释放

           

  • 进程同步:

          Nexti追赶上Nextg:输入速度大于计算速度,缓冲区满,输入进程阻塞,此情况称为系统受计算限制 

           Nextg追赶上Nexti:输入速度低于计算速度,缓冲区空,计算进程阻塞,此情况称为系统受I/O限制 

  4.缓冲池(包含了管理的数据结构和管理机制,用于管理多个缓冲区)

  • 分类:

          用于块型设备的缓冲池:缓冲区较大,其长度通常与外部设备物理块的长度相同;

          用于字符型设备的缓冲池:缓冲区较小,其长度通常为8个字节、16个字节等。 

  • 公用缓冲池的组成
          ① 空(闲)缓冲区->空缓冲队列emq           ② 装满输入数据的缓冲区->输入队列inq           ③ 装满输出数据的缓冲区->输出队列outq           ④收容输入数据的工作缓冲区hin,提取输入数据的工作缓冲区sin,收容输出数据的工作缓冲区hout,提取输出数据的工作缓冲区sout。
  • Getbuf过程和Putbuf过程

          ①两个过程:Getbuf(type);Putbuf(type,number) 

          ②设置两个信号量:

          MS(互斥信号量),每个队列一个MS(type),互斥访问缓冲池队列;

          RS(资源信号量),每个队列一个RS(type),同步使用缓冲区。

  • 缓冲区的工作方式

         ①收容输入hin:输入进程需要输入时,在空白缓冲队列取得空缓冲区,装满后放入输入队列。hin=getbuf(emq);putbuf(inq,hin)  

         ②提取输入sin:计算进程需要输入时,在输入队列取缓冲区,提取数据后挂在空缓冲区队列上。 sin=getbuf(inq); putbuf(emq,sin) 

         ③收容输出hout:计算进程需要输出时,在空白缓冲队列取空缓冲区,装满数据后挂在输出缓冲队列上。 hout=getbuf(emq) putbuf(outq, hout)

         ④提取输出sout:输出进程需要输出时,在输出队列取缓冲区,提取完数据后挂在空缓冲区上。 sout=getbuf(outq);putbuf(emq,sout)

标签:5.7,队列,缓冲,输入输出,进程,缓冲区,数据,输入
From: https://www.cnblogs.com/05-ReFrain-19/p/17378458.html

相关文章

  • 三菱fx3u模拟量FB 输入输出功能块程序 不是只有西门子才有模拟
    三菱fx3u模拟量FB输入输出功能块程序不是只有西门子才有模拟量库,三菱也可以有,最新的三菱模拟量FB来了。所需硬件:3u一台,fx2n-2AD和fx2n-2DA或者4AD,4DA都可以。功能实现:如视频所示,通过模拟量FB,实现变频器频率的直接写入,转换后的频率,转速的显示。本例中使用了2AD,2DA模块,4AD,4......
  • CentOS5.7 下mysql5.7自动备份数据脚本
    mysql5.7自动备份数据库脚本1.root用户下用cd命令进入到想要的位置创建一个脚文文件://创建脚本命令vimbackup.shvim脚本名.sh#!/bin/bashsource/etc/profile#加载系统环境变量source~/.bash_profile#加载用户环境变量set-onounset......
  • Windows的Mysql5.7社区版的安装详细操作,从无到有,安装配置一条龙服务。(压缩包自行安装,
    换了一个电脑,所有软件、环境都得重新来安装一次,安装到Mysql的时候,发现网上有两种安装方式,一种是Mysql的压缩包安装方式,这种方式直接到官网下载Mysql的压缩包,解压之后做些配置就可以了,另一种是Mysql的Installer一站式的安装,这种方法步骤相对来说少点,但是要先安装个Installer在......
  • MySQL 5.7 解压版安装教程 [Windows]
    前言谨以此记录MySQL安装过程中的各种问题及安装步骤(好像这是我的第一条博客?)一、MySQL的版本选择压缩版(.zip)与安装版(.msi)对比二者的安装方式一样简便,相较压缩版MySQL,安装版MySQL不能指定安装位置,而安装版的好处便是具有可视化安装界面(虽然是全英文),对新手较为友好(不过也......
  • Centos7安装Mysql5.7.42
    安装前的清理查看是否安装了Mysql版本yumlistinstalledmysql*rpm–qa|grepmysql*如果安装了请自行卸载查看是否安装了MariaDBrpm-qa|grepmariadb如果安装了MariaDB,则进行删除操作rpm-e--nodepsmariadb-libs下载Mysql5.7.42wgethttps://cdn.mysql.com//Downl......
  • Mac安装MySQL5.7开发环境的详细步骤
    1.进入官网下载MySQL5.7的安装包。下载地址:https://www.mysql.com/downloads/      跟着上面图示下载即可,我这里选择的是5.7.31的版本,根据个人喜好选择版本,但是注意有的版本是没有mac版本的,换个版本就行了。2.安装包下载完成后双击pkg文件进行安装,无脑点下一步......
  • 每周总结5.1-5.7
    23.5.1-23.5.7总结如下,经过短暂的五一假期后,回到学习开始学习,本周进行了web,数据库sqllite以及matlab的学习,也学习了计算机网络及数据库组成原理以及最优化算法中的运筹学知识,在紧张的考试前一个月,能够比较合理的规划和安排复习与软工学习,并抽空进行英语的学习,报名了cet6(捐款)......
  • linux环境部署--MySQL5.7二进制源码文件安装
    linux环境部署--MySQL5.7二进制源码文件安装mysql-5.7.11-Linux-glibc2.5-x86_64.tar提取码:1999MySQL5.7卸载1、将安装包解压到/usr/local/sudotarzxvfmysql-5.7.11-Linux-glibc2.5-x86_64.tar.gz-C/usr/local/2、解压后为了方便后面操作可把解压后文件名修改为mysql......
  • 5.7学习总结
    JAVAWEB学习(图片来源自《javaweb黑马程序员教程》)——Maven 一、Maven1.简介2.项目结构3.构建流程4.依赖管理5.Maven模型6.Maven仓库二、Maven的使用1.常用命令:2.生命周期3.default生命周期4.如何配置Maven环境(IDEA) 5.Maven坐标详解6.IDEA创建Mav......
  • MySQL双写缓冲区(Doublewrite Buffer)
    本文已收录至Github,推荐阅读......