zoukankan      html  css  js  c++  java
  • OS-输入输出系统

    第六章 输入输出系统

    6.1 I/O系统的功能,模型,和接口

    基本功能

    • 隐藏物理设备的细节
    • 与设备的无关性
    • 提高处理机和I/O设备的利用率
    • 对I/O设备进行控制
    • 确保对设备的正确共享
    • 错误处理

    层次结构

    NTviQI.png

    NTvVw8.png

    I/O系统接口

    • 块设备接口
      • 块设备
      • 隐藏了磁盘的二维结构
      • 将抽象命令映射为低层操作
    • 流设备接口
      • 字符设备
      • get和put操作
      • in-control指令
    • 网络通信接口

    6.2 I/O设备和设备控制器

    I/O设备

    • 类型
      • 按使用特性分类
        • 存储设备,I/O设备
      • 按传输速率分类
        • 高速,中速,低速
    • 设备与控制器的接口

    NTxf5F.png

    设备控制器

    • 基本功能
      • 接收和识别命令
      • 数据交换
      • 标识和报告设备状态
      • 地址识别
      • 数据缓冲区
      • 差错控制
    • 组成
      • 设备控制器和处理机的接口
      • 设备控制器和设备的接口
      • I/O逻辑

    NTzVPg.png

    内存映像I/O

    对I/O设备的控制可用以下两种方法

    • 利用特定的I/O指令
      • cpu-reg:CPU的某个寄存器
      • dev-no:控制器地址
      • dev-reg:指定控制器中的寄存器
      • 缺点:访问内存和访问设备用两种不同指令
    • 内存映像I/O
      • 优点:统一了对内存和对控制器的访问方法

    N7SpYF.png

    I/O通道

    • 目的:建立独立的I/O操作,使原来由CPU处理的I/O任务转由通道承担

    • I/O通道是特殊的处理机,指令类型单一,没有自己的内存,与CPU共享内存

    • 通道类型

      • 字节多路通道

        • 每个子通道完成一个字节的交换后把主通道让给下个子通道

        N7SX1H.png

      • 数组选择通道

      • 数组多路通道

    • 瓶颈问题

      • 价格昂贵导致通道数量少,通道不足导致瓶颈问题

        • 如想要启动设备4,需要通道1和控制器2,但如果通道1被占用则无法启动

        N7pvPU.png

      • 解决办法:增加设备到主机的通路而不增加通道

        N79SxJ.png

    6.3 中断机构和中断处理程序

    中断

    • 中断分类
      • 中断
        • 中断是指CPU对I/O设备发来的中断信号的一种响应
        • CPU暂停正在执行的程序,保留CPU环境后,自动转去执行I/O设备的中断处理程序
        • 执行完再回到断点,继续执行程序
      • 陷入
        • 由CPU内部事件所引起的中断,这类中断称为内中断或陷入
        • 如运算上下溢,程序出错,电源故障
    • 中断向量表
      • 每种设备配相应中断处理程序,并把该程序入口地址放在中断向量表的一个表项中
      • 为每个设备的中断请求规定一个中断号,对应中断向量表中的表项
    • 中断优先级
    • 对多中断源的处理方式
      • 屏蔽中断
        • 处理机在处理中断时,屏蔽所有其他中断,让它们等待
      • 嵌套中断
        • 优先响应最高优先级的中断请求
        • 高优先级的中断请求可以抢占正在运行的低优先级中断的处理机

    中断处理程序

    处理过程

    • 测定是否由未响应的中断信号

    • 保护被中断进程的CPU环境

      N7eW9I.png

    • 转入相应的设备处理程序

    • 中断处理

    • 恢复CPU现场并退出中断

    N7JIKJ.png

    6.4 设备驱动程序

    概述

    主要任务:接收上层软件发来的抽象I/O要求,转为具体要求发送给设备控制器,启动设备区执行,反之将设备控制器发来的信号传送给上层软件

    功能

    • 接收由与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的低层操作序列
    • 检查用户I/O请求的合法性,了解I/O设备的工作状态,传递参数和设置设备工作方式
    • 发出I/O命令
    • 及时响应由设备控制器发来的中断请求

    设备处理方式

    • 为每一类设备设置一个进程,专门用于执行这类设备的I/O操作
    • 在整个系统中设置一个I/O进程,辅助执行系统中各类设备的I/O操作
    • 只为设备设置相应的设备驱动程序

    处理过程

    1. 将抽象要求转换为具体要求

    2. 对服务请求进行校验

    3. 检查设备状态

      N7Nw8K.png

    4. 传递必要参数

    5. 启动I/O设备

    对I/O设备的控制方式

    N7IOF1.png

    • 使用轮询的可编程I/O方式
      • 启动输入设备输入数据时,要同时把昨天寄存器中的忙/闲标志busy置为1
      • 然后不断地循环测试busy(轮询)
        • busy=1时,表示输入及尚未输完一个字(符),继续测试
        • busy=0时,表示输入机已将输入数据送人控制器的数据寄存器中,于是处理机将数据寄存器中的数据取出,送入内存指定单元中,完成了一个字(符)的I/O
      • 再去启动读下一个数据
    • 使用中断的可编程I/O方式
    • 直接存储器访问方式
      • 上面两种方式都是以字(节)为单位进行I/O,用于块设备极其低效
      • 按存储器访问方式的引入
        • 该方式数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次至少传送一个数据块
        • 所传送数据从设备之间送入内存
        • 仅在传送一个或多个数据块的开始和结束时才需要CPU干预
      • DMA控制器的组成
        • 主机,DMA控制器的接口,DMA控制器与块设备的接口,I/O控制逻辑
        • N7oX7j.png
        • 命令/状态寄存器CR,内存地址寄存器MAR,数据寄存器DR,数据计数器DC
        • N7TluD.png
    • I/O通道控制方式
      • DMA方式的发展,把对一个数据块的读或些为单位的干预,减少为对一组数据块的读或写及相关控制和管理为单位的干预
      • 实现CPU,通道,I/O设备三者的并行操作
      • 通道程序
        • 通道是通过执行通道程序并于设备控制器共同实现对I/O设备的控制的
        • 通道程序是由一系列通道指令所构成的,指令包含以下信息
          • 操作码
          • 内存地址
          • 计数
          • 通道程序结束位P
            • P=1表示本条指令是通道程序最后一条指令
          • 记录结束标志R
            • R=0表示本指令和下条指令所处理的数据同属于一个记录
            • R=1表示这是处理某记录的最后一条指令

    6.5 与设备无关的I/O软件

    为了实现设备独立性,必须在设备驱动程序之上再设置一层软件,称为与设备无关的I/O软件

    基本概念

    • 以物理设备名使用设备
      • 早期OS中,程序使用I/O设备时,用的设备的物理名称,导致如果所请求的物理设备已被分配其他进程,尽管由其他相同设备空闲可用,但物理名不同,所有不能分配给程序
    • 引入逻辑设备名
      • 应用程序可用申请分配不同物理名,但逻辑设备名(类型名)相同的设备
      • 用于I/O操作的设备可更换(即重定向),而不必改变应用程序
    • 逻辑设备名称到物理设备名称的转换
      • 配置逻辑设备表进行转换

    与设备无关的I/O软件

    • 设备驱动程序的统一接口
    • 缓冲管理
    • 差错控制
      • 暂时性错误
      • 持久性错误
    • 对独立设备的分破坏回收
    • 独立于设备的逻辑数据块

    设备分配

    • 设备分配中的数据结构

      N7bAHg.png

      N7bgPA.png

    • 考虑因素

      • 设备固有属性

        不同设备分配策略不同

        • 独占设备
        • 共享设备
        • 虚拟设备
      • 设备分配算法

        • 先来先服务
        • 优先级高者优先
      • 设备分配中的安全性

        • 安全分配方式
          • 一旦进程以获得某设备后便阻塞,直到I/O操作完成才被唤醒
        • 不安全分配方式
    • 独占设备的分配程序

      • 基本的设备分配程序

      • 依次进行分配设备,控制器,通道

    逻辑设备表(Logical Unit Table,LUT)

    1. 整个系统设置一张LUT,用于单用户系统
    2. 每个用户设置一张LUT

    N7qNdg.png

    6.6 用户层的I/O软件

    假脱机系统SPOOLing

    假脱机技术

    • 为了缓和CPU的高速性和I/O设备低速性之间的矛盾,引入了脱机输入,输出技术。
    • 用一道程序模拟脱机输入时外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上
    • 再用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上
    • 实质是将独占设备转化为共享设备的技术。
    • 这种联机情况下实现的同时外围操作技术称为SPOOLing技术,或称为假脱机技术

    SPOOLing组成

    NHiRu4.png

    NzOQGq.png

    • 输入井和输出井:在磁盘上开辟出来的,用于模拟脱机输入,输出时的磁盘
    • 输入缓冲区和输出缓冲区:在内存中开辟出来的,用于缓和CPU和磁盘之间速度不匹配的矛盾
    • 输入进程和输出进程,用于模拟脱机输入/输出时的外围控制机
    • 井管理程序:用于控制作用和磁盘井之间信息的交换

    特点

    • 提高了I/O速度
    • 将独占设备改造为共享设备
    • 实现了虚拟设备功能

    假脱机打印机系统

    • 每当用户进程发出打印输出请求时
      • 在磁盘缓冲区中为之申请一个空闲盘块,将要打印的数据送入其中暂存
      • 为用户进程申请一张空白用户请求打印表,并把打印要求填入,将表挂在假脱机文件队列上
    • 真正打印输出由假脱机打印进程负责
      • 从假脱机文件队列队首取出一张用户请求打印表,将数据由输出井传送到内存缓冲区,再交付打印机打印

    NHF2JP.png

    守护进程

    • 允许使用打印机的唯一进程
    • 若有打印请求,唤醒,否则睡眠
    • 还有很多其他的守护进程,如网络守护进程

    6.7 缓冲区管理

    缓冲的引入原因

    • 缓冲CPU与I/O设备间速度不匹配的矛盾
    • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
    • 解决数据粒度不匹配的问题
    • 提高CPU与I/O设备之间的并行性

    缓冲区分类

    把用户进程称为生产者,产生输出;系统为消费者,提取数据输出。如果生产者已经生产,消费者还未准备好结束,则生产者必须暂停等待,若设置了缓冲区,则无需等待就绪,数据可以先输出到缓冲区

    单缓冲区

    • 磁盘把数据输入到缓冲区时间T,OS把缓冲区数据传送到用户区时间M,CPU对数据出来时间C,T和C可并行
    • NHEKRP.png
    • 若用户进程已有第二行数据输出时,第一行数据尚未提取完毕,则进程应被阻塞

    双缓冲区

    • 若缓冲区数据仍未被取走,生产者还是得等待,所以引入了双缓冲取机制,又称为缓冲对换
    • NLSKXQ.png
    • 双缓冲区还能让两台机器连接时双向数据传输
    • NLS17n.png

    环形缓冲区

    组成
    • 多个缓冲区
      • 装输入数据的空缓冲区R
      • 已装满数据的缓冲区G
      • 计算进程正在使用的现行工作缓冲区C
    • 多个指针
      • 指示计算进程下个可用缓冲区G的指针Nextg,
      • 计算进程正在使用的缓冲区C的指针Current
      • 指示输入进程下次可用的空缓冲区指针Nexti
    使用
    • Getbuf过程
    • Releasebuf过程
    进程间的同步问题

    使用输入循环缓冲,可让输入进程和计算进程并行执行,相应的指针Nexti和Nextg不断沿着顺时针方向移动,可能出现

    • Nexti指针追赶上Nextg指针
      • 意味着输入进程输入数据速度大于计算进程处理数据速度,已把全部可用空缓冲区装满,此时输入进程应该被阻塞
    • Nextg指针追赶上Nexti指针
      • 意味着输入进程输入数据速度小于计算进程处理数据速度,全部装有输入数据的缓冲区都被抽空,此时计算进程应该被阻塞

    缓冲池Buffer Pool

    缓冲池与缓冲区的区别在于:缓冲区仅仅是一组内存块的链表,缓存池是包含一个管理的数据结构及一组操作函数的管理机制,用于管理多个缓冲区

    组成
    • 空白缓冲队列emq
    • 输入队列inq
    • 输出队列outq

    还有四种工作缓冲区:收容输入数据/输出数据的工作缓冲区,用于提前输入/输出数据的工作缓冲区

    工作方式

    为使进程都能互斥的访问缓冲池队列,为每个队列设置了一个互斥信号量MS(type),为了进程都能同步的使用缓冲区,又为每个缓冲队列设置了一个资源信号量RS(type)

    void Getbuf(unsigned type)
    {
    	Wait(RS(type));
    	Wait(MS(type));
    	B(number)=Takebuf(type);
    	Signal(MS(type));
    }
    
    void Putbuf(type,number)
    {
    	Wait(MS(type));
    	Addbuf(type,number);
    	Signal(MS(type));
    	Signal(RS(type));
    }
    

    NLCXuD.png

    6.8 磁盘存储器的性能和调度

    磁盘性能简述

    NLPM80.png

    磁盘类型

    • 软盘和硬盘
    • 单片盘和多片盘
    • 固定头磁盘和移动头磁盘
      • 固定:每条磁道都有读写磁头
      • 移动:每个盘面仅有一个磁头,为访问盘面上的所有磁道,磁头必须移动进行寻道,本节主要针对该磁盘

    磁盘访问时间

    • 寻道时间Ts:磁头移动道指定磁道所经历时间
      • 启动时间s,移动n条磁道,每条m时间
      • Ts=m x n+s
    • 旋转延迟时间Tr
    • 传输时间Tt

    磁盘调度算法

    以下图例子进程请求访问磁盘先后次序按FCFS为准!

    先来先服务FCFS

    • 按进程请求访问磁盘的先后次序进行调度

    最短寻道时间优先SSTF

    • 要求访问的磁道与当前磁头所在磁道距离最近,使每次寻道时间最短

    NLkEDO.png

    基于扫描的磁盘调度算法

    • 扫描SCAN算法/电梯算法

      • 基于优先级的调度算法
      • 不仅考虑与当前磁道的距离,更优先考虑磁头当前的移动方式
    • 循环扫描CSCAN算法

      • 将最小磁道号紧接最大磁道号构成循环,进行循环扫描

      NLAEzq.png

    • NStepSCAN和FSCAN调度算法

      • NStepSCAN
        • 将磁盘请求队列分成若干个长度为N的子队列,按FCFS算法依次处理,每处理一个队列时又是按SCAN算法,避免出现粘着现象
        • 粘着现象即是磁臂停留在某处不动的情况
      • FSCAN
        • 将磁盘请求队列分成两个子队列
          • 由当前所有请求磁盘I/O的进程形成的
          • 在扫描期间新出现的所有请求磁盘I/O的进程放入等待处理的请求队列
  • 相关阅读:
    day01【MySQL数据库软件、SQL】
    【Junit单元测试、反射、注解】
    day13【Stream流、方法引用】
    day12【函数式接口】
    day11【网络编程】
    day10【缓冲流、转换流、序列化流】
    day09【字节流、字符流】
    day08【File类、递归】
    day07【线程池、Lambda表达式】
    day06 【线程、同步】
  • 原文地址:https://www.cnblogs.com/AMzz/p/13339883.html
Copyright © 2011-2022 走看看