操作系统 第五章 IO管理 完结撒花

文章目录

  • 第五章 IO管理
    • 00-IO设备的概念和分类
      • 概念’
    • 01-IO控制器
    • 02-IO控制方式
      • 2.1 程序直接控制方式
      • 2.2 中断驱动方式
      • 2.3DMA方式 ——直接存储器存取
      • 2.4通道控制方式
    • 03-IO软件层次结构
    • 04-核心子系统
    • 05-假脱机技术
    • 06-设备的分配与回收
      • 设配分配考虑的因素
      • 静态分配和动态分配
      • 设备分配管理当中的数据结构
    • 设备分配的具体步骤
    • 07-缓冲区管理
      • 缓冲区的作用(为什么要引入)
      • 单缓冲
      • 双缓冲
      • 循环缓冲区
      • 缓冲池

第五章 IO管理

00-IO设备的概念和分类

概念’

IO设备

UNIX系统把外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作

Write操作:向外部设备写出数据

Read操作:从外部设备读入数据

分类

  1. 人机交互类

  2. 存储设备

  3. 网络通信

  4. 块设备(磁盘块、内存块)——速率高,可寻址

  5. 字符设备(鼠标、键盘,)——不可寻址,常采用中断驱动方式

01-IO控制器

  • 机械部件

    • 执行具体的物理操作
  • 电子部件IO控制器或者叫设备控制器)

    • 通常是主办扩充槽的印刷电路板

    • 功能

      • 是CPU和机械部件的中介
      • 接收和识别CPU发出的命令——有相应的控制寄存器来存储CPU发出的命令和参数
      • 向CPU报告设备的状态————状态寄存器
      • 数据交换——————————数据寄存器:CPU和物理设备之间的数据缓冲
      • 地址识别——————————为了区分设备控制器的各个寄存器,需要给各个寄存器设置一个特定的“地址”。IO控制器通过CPU提供的地址来判断要做什么事
  • IO控制器的组成

    • CPU与控制器的接口——各种需要的寄存器

    • I / O逻辑

      ? 对设备发出命令

    • 控制器与设备的接口

      ?

  • CPU用控制线和地址线让IO逻辑给出指令,同时CPU给各个**寄存器(在IO控制器的与CPU接口的部分)**基于数据,IO逻辑返回给状态寄存器状态

  • blablabla

  • 注意:

  • io控制器连接着多个设备

  • 各种寄存器可能有多个

    • 所以要针对状态寄存器编址
      • 内存映像IO
        • 顺着内存的地址继续往下编址
        • 优点:简化了指令,直接当是在操作内存
      • 寄存器独立编址
        • 寄存器自己有从0开始的寄存器

02-IO控制方式

  • 复习点:
      1. 完成一次读写操作的流程
      2. CPU干预的频率
      3. 数据传送的单位
      4. 数据的流向
      5. 主要缺点和主要优点

2.1 程序直接控制方式

  1. 完成一次读写操作的流程(轮询)

  2. CPU干预频率很频繁

  3. 数据传送的单位——每次一个字

  4. 数据的流向——

    读操作——IO设备-CPU-内存

    写操作——内存-CPU-IO设备

  5. 优缺点:实现简单但是串行工作效率奇低

2.2 中断驱动方式

当CPU发出读写命令后,让等待IO进程的阻塞,CPU检测到中断信号之后,会保存当前进程的运行环境信息,去处理中断程序处理这个IO的事

  1. 完成一次读写操作的流程

  2. CPU干预的频率

    1. 低很多
  3. 数据传送的单位

    1. 还是一个字
  4. 数据的流向

    1. 同上
  5. 主要缺点和主要优点

    相对程序直接控制方式CPU不用轮询了

    每个字和IO设备之间传输都要CPU停一下当前做的事,中断这个事需要保存和恢复当前运行进程的环境信息,时间开销大

2.3DMA方式 ——直接存储器存取

相对于中断驱动方式,用于块设备的IO有这样几个改进

  1. 数据传送单位是块(磁盘块,内存块)

  2. 数据直接在设备和内存之间流动

  3. 仅在传输一组数据的开始和结束时才需要CPU干预

  4. 数据的流向

    1. IO和内存(没有CPU)
  5. 优缺点:

    1. 减少了CPU的介入,
    2. 但是没办法让CPU读写多个离散存储的数据块,还是会多次中断

2.4通道控制方式

弱鸡版的CPU

  1. 流程

    1. CPU给通道发指令
    2. 通道执行内存中的通道程序
    3. 执行完向CPU发中断信号CPU进行后续处理(完成IO后需要做的事)
  2. CPU干预的频率极低

  3. 数据传送的单位

    1. 一组数据块(可以是离散的
  4. 数据的流向

    1. 内存和设备之间

5.优缺点

? 缺点:实现复杂,需要专门的通道硬件支持

优点:CPU、通道、IO设备可并行工作,资源利用率很高

03-IO软件层次结构

用户层软件 ————假脱机技术(SPOOLing技术)
设备独立性软件————与设备硬件特性无关的功能都在这里实现————IO调度、设备保护、设备分配与回收、缓冲区管理
设备驱动程序—————厂家实现的对设备的具体控制——————
中断处理程序—————有点像回调函数
硬件—————————机械部件和IO控制器

04-核心子系统

重点功能:

【IO调度】

用算法确定好的顺序处理各个请求

【设备保护】

设备有相应的FCB,也有访问权限控制

【假脱机技术】

【SPOOLing技术】

【设备分配与回收】

【缓冲区管理】

05-假脱机技术

SPOOLing技术,用软件的而方式模拟脱机技术

Spooling

  • spooling系统的组成
    • 输入井和输出井——模拟脱机输入输出时的磁带
    • 输入进程和输出进程——模拟脱机输入输出的外围机
    • 输入缓冲区和输出缓冲区——内存中的缓冲区
  • spooling如何共享打印机
      1. 磁盘输出井中为进程申请空闲缓冲区、把数据放在缓冲区里面
      2. 给用户进程申请一个打印请求表,把打印请求表填入表中,再把这个表挂到假脱机文件队列上
      3. 输出进程根据假脱机文件队列取一个请求表,进行输出

06-设备的分配与回收

设配分配考虑的因素

  1. 设备的固有属性:独占设备、共享设备、虚拟设备

    1. 独占设备——一个时段只能分享给一个进程
    2. 共享设备——宏观共享微观交替
    3. 虚拟设备——采用SPOOLing技术将独占设备改造成虚拟的共享设备,可分配给多个进程使用
  2. 设备分配算法

    1. 先来先服务
    2. 优先级高者优先
    3. 短任务优先
  3. 设备安全分配方式

    1. 安全分配方式:为进程分配一个设备后就将进程阻塞,完成IO之后才将进程唤醒(串行的优缺点)
    2. 不安全分配方式:只有当某个io请求得不到满足的时候阻塞(并行的优缺点)

静态分配和动态分配

  1. 静态分配

    1. 进程运行之前就给他分配所需的全部的资源
  2. 进程运行过程中动态的申请设备资源

设备分配管理当中的数据结构

一个通道可以控制多个设备控制器,每个设备控制器可以控制多个设备

系统会给每一个设备配备一个设备控制表DCT,用于记录设备情况

  • DCT
    • 设备类型
    • 设备(唯一)标识符
    • 设备状态
    • 指向控制器表的指针
    • 重复执行次数或时间(用于记录失败了几次,足够数量才认为这次io失败)
    • 设备队列的对手指针(正在等待该设备的进程队列(由进程PCB组成队列))

每个设备控制器都有一张控制器控制表COCT。操作系统根据COCT的信息对控制器进行操作和管理

  • COCT
    • 控制器(唯一)标识符
    • 控制器状态
    • 指向通道表的指针
    • 控制器队列的队首指针(指向了正在等待这个设备控制器的进程)
    • 控制器队列的队尾指针(指向了正在等待这个设备控制器的进程)

**通道控制表CHCT:**每个通道都对应一张CHCT。

  • CHCT
    • 通道标识符
    • 通道状态
    • 与同道链接的控制器表首地址
    • 通道队列的队首指针(指向等待通道的进程的等待队列)
    • 通道队列的队尾指针(指向等待通道的进程的等待队列)

**系统设备表SDT:**记录了系统中全部设备的情况(用户用设备名请求的时候,系统从这里找

  • SDT
    • 每一个设备对应一个表目
      • 【设备类型】【设备标识符】【DCT设备控制表】【驱动程序入口】

设备分配的具体步骤

    1. 根据进程请求的物理设备名查找SDT(物理设备名是进程请求分配设备时提供的参数)
    2. 根据SDT找DCT(操作系统在逻辑设备表LUT中新增一个表项)
    3. 根据DCT找COCT
    4. 根据COCT找CHCT

缺点:

  1. 用户变成需要用【物理设备名】,用户不方便变成
  2. 换个设备就运行不了
  3. 进程请求的物理设备正在忙,即使系统中还有同类型的设备,进程也必须等待

改进方法

? 建立逻辑设备与物理设备名的映射机制,用户编程只用提供逻辑设备名

? 第一步更改成根据进程请求的逻辑设备名查找

两种逻辑设备表设置方式:

  1. 整个系统只有一张LUT:各个用户使用的逻辑设备不允许重复,,适合单用户操作系统
  2. 每个用户一张LUT:不同用户逻辑设备名可重复,适合多用户操作系统

07-缓冲区管理

缓冲区的作用(为什么要引入)

  1. 缓和CPU和IO设备速度不匹配
  2. 减少CPU的中断频率,
  3. 解决数据粒度不匹配的问题
  4. 提高COU和IO设备的并行性

单缓冲

假设某用户进程请求某种块设备读入若干的数据。

操作系统会在主存中为其分配一个缓冲区(默认是一个块)

缓冲区数据非空时,不能往缓冲区冲入数据,只能把缓冲区数据传出,才可以。且必须缓冲区满了才可以传出数据

求平均处理一个块要多久

假设初始状态为工作区满,缓冲区空,

  • 计算时间就是
  • 每次缓冲区给工作区数据的时间,CPU处理块设备缓冲都不能工作,所以是个单独的时间
  • 缓冲区把数据都给工作区了之后,CPU处理块设备缓冲一起开始工作,无论这两个哪个先完成都不能进行下一次缓冲传送,
  • 所以一次的时间就是缓冲区把数据给工作区的时间加上CPU处理块设备缓冲中时间更长的哪个

双缓冲

假设某用户进程请求某种块设备读入若干的数据。

操作系统会在主存中为其分配两个个缓冲区(默认是两个块)

循环缓冲区

多个大小相等的缓冲区连接成一个循环队列

in指针指向下一个可以冲入数据的空缓冲区

out指针指向下一个可以取出数据的满缓冲区

缓冲池

缓冲池由系统的共用的缓冲区组成

  • 根据使用状况分为:

    • 空缓冲队列
    • 装满输入数据的缓冲队列
    • 装满输出数据的缓冲队列
  • 根据功能分为:

    • 收容输入的工作缓冲区
    • 提取输出的工作缓冲区
    • 提取输入的工作缓冲区
    • 收容输出的工作缓冲区
  • 四种操作:

    • 输入进程请求输入数据
        1. 【空缓冲队列】队头取下一块空缓冲区作为【收容输入的工作缓冲区】,
        2. 等上面 的【收容输入的工作缓冲区】充满了之后把它挂到【输入队列】的队尾上
    • 计算进程想要取得一块输入数据
        1. 【输入队列】的队头取下一块缓冲区把它作为【提取输入的工作缓冲区】
        2. 等上面【提取输入的工作缓冲区】被取空了之后就把他挂到【空缓冲队列】的队尾上
    • 计算进程想要将准备好的数据冲入缓冲区
        1. 从【空缓冲队列】队头取下一块作为【收容输出数据的工作缓冲区】
        2. 等上面的【收容输出数据的工作缓冲区】充满后再挂到【输出队列】的队尾
    • 输出进程请求输出数据
        1. 从【输出队列】队头取下一块作为【提取输出数据的工作缓冲区】
        2. 等上面的【提取输出数据的工作缓冲区】释放没了,再把它挂到【空缓冲队列队尾上】

来源:哈希瓜

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月1日
下一篇 2021年6月1日

相关推荐