操作系统 IO管理

学什么?

  • I/O  input / output  
  • 输入:鼠标 键盘 手柄 触摸屏 摄像头 MTC  扫描仪
  • 输出:显示器 打印机  耳机  音响 
  • 既是输入也是输出:光驱  网卡  磁盘  U盘
  • 硬件:设备如何把数据返回到PC机,但是不同种类的设备,适合不同的控制方式,引出了I/O控制方式(数据怎么输入输出)
  • 软件:输入输出时面对的多种问题,CPU与I/O速度不匹配,基本数据单元大小也不匹配 引出了,缓存技术;缓冲技术(内存);假脱机技术;spooling技术  ;因为使用硬件的进程数量很多,但是硬件设备比较少,如何对设备进行分配和回收?
  • I/O系统层次管理 ->  代码实现框架    各司其职,低耦合性,便于代码的修改和软件的更新、高效移植

IO管理硬件知识

IO管理设备分类(硬件分类)

  • 按照数据的传输速度进行分类(使用场合决定的 -> 人类设计)
  • 高速设备     以MB/GB为单位     磁带、磁盘、光盘、U盘、网卡等
  • 中速设备     以KB为单位            打印机(串口设备)
  • 低速设备     以B为单位              键盘、鼠标、手柄等
  • 注意事项:
  • 和人类接触的设备为低速设备
  • 中速设备: 机械设备,速度介于电子设备(CPU、内存)和人类之间
  • 高速设备:尽可能快
  • 按照信息交换的单位分
  • 块设备         以数据块为单位传输    U盘、硬盘、SD卡、网卡等    高速设备
  • 字符设备     以字符为单位传输     键盘、鼠标、手柄、打印机等    低速/中速设备

IO控制方式

控制方式的发展过程

  • 程序直接控制方式:cpu主动询问     费时费力,cpu利用率很低
  • 中断驱动方式:CPU被动通知,cpu利用率稍微提高,cpu取数据    最为常用
  • DMA方式:CPU被动通知,DMA控制器硬件,dma取数据,cpu利用取回的数据;dma需要知道取几个数据,以及数据取完之后,不同数据的存放地址,取数据操作结束之后,通知CPU进行下一步操作;减少了cpu被通知的次数,减少cpu中断的次数;缺点:cpu需要对DMA下达很多的指令,进一步优化
  • 通道方式:cpu的被动通知,减少cpu对dma下达的指令数;cpu利用率进一步提高;使用协处理器对DMA施加命令,整体完成之后才通知cpu
  • 从上往下 CPU的利用率提高,设计复杂度提高,成本也提高

程序直接控制方式

  • cpu周期性运行输入进程(50ms),当输入进程检测到键盘输入的数据之后,利用进程间通信的方式将数据传输给需要的进程
  • 该方式效率很低,几乎不再使用
  • mcu dsp 等还在使用
  • 通常用在低速设备中,高速设备容易丢失数据(键盘输入速度赶不上 cpu处理速度)

中断类控制方式

中断驱动方式

  • 新增控制总线 (中断信号在其中传输,提高成本)
  • 中断处理程序不是 进程
  • 键盘输入程序,引发控制总线的中断,中断会触发中断处理程序,中断处理程序会从数据总线获取数据,将数据传给其他进程
  • 广泛使用,使用在低速设备,比如键盘、手柄、鼠标等
  • 中断控制总线  数量有限,如果没有了,只能使用程序直接控制的方式

DMA方式

  • DMA 一般用于块设备、高速设备
  • DMA控制器的四个寄存器
  • 内存地址寄存器MAR  记录内存开始的地址                         地址
  • 数据计数寄存器DC   一次需要从外设读取的数据字节数     长度
  • 数据寄存器DR  接收物理外设输入的数据,将接收的数据再传给对应需要的进程,起到缓存的占用
  • 命令状态寄存器CR  控制读,读完执行的指令
  • 步骤
  • 1,磁盘向CPU发出DMA传输请求
  • 2,cpu接收请求,执行DMA配置程序,对四个寄存器的地址进行设置
  • 3,DMA控制器读取磁盘(设备)数据到数据寄存器DR,一个一个字节的读
  • 4,DMA控制器根据MAR的数值,寻找内存存放的位置,开始搬运数据
  • 5,DMA控制器开始搬运数量为 数据寄存器DC 存储的数值大小的值
  • 6,一组数据搬运完成之后,则DMA控制器产生中断信号给cpu
  • 7,cpu执行中断程序,利用信号量通知其他程序 数据传输完一组
  • 8,如果数据全部传输完毕,则传输自动结束;如果还有需要传输的数据,则重新执行 1-8

  • 优势
  • 减少了CPU被通知的次数  具体体现在上述流程的  4-5
  • 只有所有数据读完才执行一次中断处理程序 而不会每来一个数据就会产生一个字段 

通道方式

  • 新增通道协处理器
  • 每传输一次数据 会进行一次DMA配置
  • 步骤
  • 1,磁盘(设备)向cpu发出通道传输请求
  • 2,cpu接收请求,激活通道协处理器,并告知通道协处理器的位置
  • 3,通道协处理器执行通道程序进行DMA配置
  • 4,DMA控制器 开始读取数据到 数据寄存器DR
  • 5,DMA控制器根据MAR的数值,寻找内存存放的位置,开始搬运数据
  • 6,DMA控制器开始搬运数量为 数据寄存器DC 存储的数值大小的值
  • 7,如果还有下一组数据 则继续执行 3-7
  • 8,如果没有下一组数据,则说明几组数据传输完成,通道协处理器向cpu发出中断信号
  • 9,中断程序通知其他进程,几组数据全部传输完成

 

缓存技术

  • 缓存的原因:通过在高速存储器里面保存低速存储器的副本,来提高cpu对数据的访问速度
  • 例如
  • 快表是页表的缓存
  • 请求分页中,cache中的页面是内存中工作集页面的缓存
  • 内存中工作集页面是磁盘中程序页面的缓存
  • 现在 快速 的里面找,如果没有才会到慢速的设备里面寻找

为什么引入缓存技术

  • 对低速设备产生的数据进行堆积,放在缓存区中,积少成多,然后cpu对其进行集中性处理
  • 目的和好处
  • 缓和cpu和IO设备速度不匹配的矛盾
  • 解决基本数据单元大小不匹配的问题 
  • 减少IO对cpu中断频率(缓冲区大小 如DMA传输)
  • 提高cpu与IO设备的并行性

单缓冲区

  • 设置缓冲区和工作区,比如播放器是将缓冲区的内容取到工作区之后,对工作区的数据进行操作,然后缓冲区继续缓冲数据。就可以实现,播放器一边播放,一边缓冲数据。播放和缓存同时进行
  • 软存区为空的时候,才可以输入数据,直到充满为止
  • 缓存区满的时候,才可以取出,直到为空的时候为止
  • 生产时间 > 消费时间 ->  处理一块缓存区数据的平均时间 = 取用时间 + 生产时间
  • 生产时间 < 消费时间 ->  处理一块缓存区数据的平均时间 = 取用时间 + 消费时间
  • 处理一块缓存区数据的平均时间 = 取用时间 + MAX(消费时间 , 生产时间)
  • 处理一块缓存区数据的平均时间 = MAX(生产时间,消费时间 + 取用时间)

双缓冲区

  • 相较于先前 单缓冲区,利用了 播放器将数据从缓冲区到工作区这段时间   (取时间)
  • 生产时间 > 取用时间 + 消费时间 ->  取用时间 + 生产时间
  • 生产时间 < 取用时间 + 消费时间(产生断层,数据中断) -
  • 结论一致  处理一块缓存区数据的平均时间 = MAX(生产时间,消费时间 + 取用时间)
  • 生产时间 > 取用时间 + 消费时间 IO设备可以连续输入数据,cpu会等待
  • 生产时间 < 取用时间 + 消费时间 IO设备不可以连续输入数据,cpu繁忙

循环缓冲区 

  • 使用循环链表 的形式首尾相连,每个缓冲区的大小相等
  • 两个指针 in 和 out,in负责输入数据,out负责取出数据
  • 会产生追赶问题,in和out指针
  • 生产 > 输出,不可以连续输入,cpu忙,处理数据
  • 生产 < 输出,可以连续输入,cpu等待

缓冲池

  • 缓冲池中的缓冲区是公用的
  • 分别设置 输入队列、输出队列和空闲队列
  • 收容输入 取空闲队列的头部的容器块,装载来自服务器的数据;
  • 提取输入 将装载数据的容器块,送到指定的进程工作区,然后将没有数据的容器块重新放到排队队列等待装载数据
  • 收容输出 取空闲队列的头部的容器块,装载来自进程工作区产生的数据
  • 提取输出 将装载数据的容器块,送到指定的进程服务器,然后将没有数据的容器块重新放到排队队列等待装载数据

SpooLing技术

  • 输入设备 将数据放到内存中的输入缓冲区,当缓冲区满的时候,由spi进程将缓冲区的数据保存到磁盘中的输入井中的脱机输入文件里。如果其他进程要使用,则读取脱机输入文件即可
  • 其他进程输出数据的时候,先将其保存到输入井中的脱机输出文件里,再由SPO进程依次将输出文件数据输出到内存的输出缓冲区,再输出到输出设备里面
  • 例子 共享打印机
  • 优势:掉电不会丢失

设备的分类

  • 从软件思维对设备分类
  • 独占式设备 -> 打印机  
  • 虚拟设备 -> spooling虚拟出来的设备
  • 分时共享设备 -> 磁盘网卡 

设备的数据结构

  • OS 内核
  • 硬件系统
  • 设备 = 机械部分 + 电子部分
  • 查询过程  SDT -> DCT -> COCT -> CHCT
  • SDT 系统设备表  PC机已有设备
  • DCT 设备控制表  具体设备,比如键盘、鼠标
  • COCT 控制器控制表
  • CHCT 通道控制表

IO层级结构

  • 软件分层思想
  • 用户层IO软件      ->api接口
  • 设备独立性软件   ->将不同的设备进行封装,统一接口,如linux将所有的设备都视为文件 Dev目录下,设备的文件
  • 设备驱动软件      ->控制设备的程序 不同的设备 需要不同的操作程序
  • 中断处理程序      ->中断处理 IO控制方式
  • 硬件                    ->机械部分 + 电子部分 = 设备

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++面向对象高级编程 学习九 pointer-like classes

c的class设计出来有两种形式&#xff0c;一种像指针&#xff0c;一种像函数 智能指针里包含普通指针&#xff0c;要写 * 和 -> 的函数 sp->method(); //sp-> 经 T* operator*() const 函数&#xff0c;得到px //由于 箭头符号&#xff08;->&#xff09;作用下去…

const int *a和int*const a 的区别详解

补充知识 “const int i”与“int const i”之间的区别对变量来说&#xff0c;const 关键字可以限定一个变量的值不允许改变&#xff0c;从而保护被修饰的东西&#xff0c;防止意外修改&#xff0c;在一定程度上可以提高程序的安全性和可靠性。 代码 const int * int i1 10…

c++面向对象高级编程 学习十 function-like classes

本节是设计一个class&#xff0c;使它的行为像一个函数。 如果一个东西能接受小括号()操作符&#xff0c;那么这个东西就称之为函数&#xff0c;或像函数的东西。 下图为三个函数对()的重载&#xff0c;这三个类均为像函数的类&#xff0c;它们可接受()操作符&#xff0c; 标…

英语口语 Week14 Monday

英语文章 Thailand, a country in Southeast Asia with an area of about 514,000 square kilometers, has been increasingly prosperous in its tourism industry in the past few decades. Its capital is Bangkok and its major languages are Thai, Chinese and English.…

c++面向对象高级编程 学习十一 类模板、函数模板、成员模板

namespace经验谈&#xff1a; 团队中函数或类的名字可能会冲突&#xff0c;因此使用namespace进行区分。 类模板&#xff1a; template<typename T> 函数模板&#xff1a; template<class T>&#xff0c;此处class可改成typename 函数模板在使用的时候&#xff0…

操作系统面试 总结

以下文章来源于程序员cxuan &#xff0c;作者cxuan 原文链接什么是操作系统 操作系统是管理硬件和软件的一种应用程序。操作系统是运行在计算机上最重要的一种软件&#xff0c;它管理计算机的资源和进程以及所有的硬件和软件。它为计算机硬件和软件提供了一种中间层&#xff…

英语口语week 14 Thursday

英语文章 A couple decided to go out to celebrate their wedding anniversary, so they called a babysitter. When the babysitter arrived, the two children had already been asleep. The babysitter soon got bored and went to the kitchen where she blended some wh…

c++面向对象高级编程 学习十二 模板

模板特化&#xff1a; 模板是一种泛化的形式&#xff0c;特化是将参数类型进行指定&#xff0c;写出特化的版本&#xff0c;当在调用下图cout<<hash()(1000);的时候&#xff0c;由于特化中有struct hash{ }的版本&#xff0c;因此会直接调用特化部分。 模板偏特化&…

英语口语 week14 Friday

英语文章 Shopping is taking place every second. However, the prices of the same goods may differ from store to store. A name-brand dress may cost several hundred pounds at a boutique, but only half the price in a discount store or a big chain store. Moreo…

数据结构 树

定义 树是节点的优先集合度&#xff1a;孩子的数量&#xff0c;度为0 就是终端节点&#xff0c;不为零就是根节点有序树&#xff1a;有顺序&#xff0c;不可以替换无序树&#xff1a;无顺序&#xff0c;可以替换深度 和 树的深度相反&#xff0c;第一层深度为1 树的深度为 3 二…

英语口语 Week15 TuesDay

英语文章 One day, when Bella was doing sports in the school yard, the squirrel fled out of her sleeve. Threading its way through a considerable number of people, the squirrel disappeared in the distance After a sequence of movements, it hopped onto the ar…

c++面向对象高级编程 学习十四 引用

文章目录referencereference的常见用途reference 变量有三种形式&#xff1a;值&#xff0c;指针&#xff0c;引用 int x0; //值 int* p&x;//指向整型的指针&#xff0c;地址&#xff0c;指针在之后的程序中可以指向其他变量 int& rx;//引用&#xff0c;此处表示 r代…

google浏览器 隐藏功能开启

网址 chrome://flags/ 1&#xff0c;多线程下载 2&#xff0c;暗黑模式3&#xff0c;标签缩略图4&#xff0c;PWA 渐进式web应用 网页即应用5&#xff0c;阅读模式&#xff0c;排除广告&#xff0c;点击阅读模式去除干扰chrome://net-internals6&#xff0c;解决有问题的代理IP…

英语口语Week 15 Wednesday

英语文章 Accomplishing the task assigned by the teacher; Julia rushed out. Squatting at the gate and playing with the squirrel, Bella waved at the sight of Julia and yelled out here" . Julia ran quickly towards them, pointed at the squirrel and asked…

c++面向对象高级编程 学习十五 组合继承关系下的构造和析构

文章目录继承关系组合关系继承和组合继承关系 构造由内而外&#xff0c;析构由外而内&#xff0c;内即是父类 组合关系 A拥有B&#xff0c; 构造由内而外&#xff0c;析构由外而内&#xff0c;内即是B 继承和组合 构造和析构顺序如图&#xff1a;

英语口语Week16 Wednesday

英语文章 Recently my friend received a gift from her boyfriend - a very expensive bracelet. But the substance of her response left us in astonishment - she didn’t attend to the exquisiteness(of the gift and wanted to return it to him In terms of salary, …

C++ 查漏补缺

特性关系 C语言面向过程C面向过程 面向对象(封装 继承 多态)C具备C语言的全部特性的基础上&#xff0c;并且支持更多新的特性 内存泄露 申请内存&#xff0c;没有释放申请 malloc new释放 free deleteProcessExplorer查看内存是否释放 代码移植 将生成的exe运行在别的平台&…

c++面向对象高级编程 学习十六 vptr和vtbl

当一个类中有一个或多个虚函数时&#xff0c;内存中会多一个虚指针&#xff08;vptr&#xff0c;virtual pointer&#xff09;&#xff0c;指向一个虚表&#xff08;vtbl&#xff0c;virtual table&#xff09; 父类有虚函数&#xff0c;则子类一定有虚函数 在下图示意图中&a…

英语口语Week16 Thursday

英语文章 It is an impossibility that everything runs smoothly in everyday life. Where there is trouble, there could be anxiety.Anxiety is a common phenomenon; you are not the only one carrying it. But, it could be somewhat poisonous if you don’t let it o…

static内容相关介绍学习

说一下static关键字的作用 当程序执行到函数内部定义的变量时&#xff0c;编译器为它在栈上分配空间&#xff0c;函数在栈上分配的空间在此函数执行结束时会释放掉&#xff0c;这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时&#xff0c;如何实现&#xf…