操作系统-I/O
2020 年 12 月 18 日 210 2229 字 暂无评论

01.I/O设备的基本概念和分类

  • 什么是I/O设备

    • 将数据Input/Output(输入/输出)计算机的外部设备。

  • 按使用特性分类

    • 人机交互类外部设备。
    • 存储设备。
    • 网络通信设备。

  • 按传输速率分类

    • 低速设备
    • 中速设备
    • 高速设备

  • 按信息交换的单位分类

    • 块设备(传输快,可寻址)。
    • 字符设备(传输慢,不可寻址,常采用中断驱动方式)。

02.I/O控制器

  • 主要功能

    • 接受和识别CPU发出的命令(要有控制寄存器)。
    • 向CPU报告设备的状态(要有状态寄存器)。
    • 数据交换(要有数据寄存器,暂存输入/输出的数据)。
    • 地址识别(由I/O逻辑实现)。
  • 组成

    • CPU与控制器之间的接口(实现控制器与CPU之间的通信)。
    • I/O逻辑(负责识别CPU发出的命令,并向设备发出命令)。
    • 控制器与设备之间的接口(实现控制器与设备之间的通信)。

  • 两种寄存器编址方式

    • 内存映射I/O

      • 控制器中的寄存器与内存统一编址。
      • 可以采用对内存进行操作的指令来对控制器进行操作。
    • 寄存器独立编址

      • 控制器中的寄存器独立编址。
      • 需要设置专门的指令来操作控制器。

03.I/O控制方式

3.1程序直接控制方式

  • 优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可。
  • 缺点CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低。

3.2中断驱动方式

  • 引入中断机制
  • 由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。
  • 当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。
  • 处理中断的过程中,CPU从I/O控制器读一个字的数据传到CPU寄存器,再写入主存。
  • 接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行
  • 优点:CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。
  • 缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间

3.3DMA方式

  • DMA方式Direct Memory Access,直接存储器存取。主要用于块设备的I/O控制)

    • 数据的传送单位是“块”。不再是一个字、一个字的传送。
    • 数据的流向是从设备直接放入内存,或者从内存直接倒设备。不再需要CPU作为“快递小哥”。
    • 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。
  • 优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。
  • 缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成。

3.4通道控制方式

  • 通道:一种硬件,可以理解为“弱版的CPU”。通道可以识别并执行一系列通道指令
  • 优点CPU、通道、I/O设备可并行工作,资源利用率很高
  • 缺点:实现复杂,需要专门的通道硬件支持。

3.5区别比较

04.I/O软件层次结构

  • 用户层软件

    • 用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。
  • 设备独立性软件

    • 设备独立性软件,又称设备无关软件。与设备的硬件特性无关的功能几乎都在这一层实现。
    • 向上一层提供统一的调用接口。
    • 设备保护。
    • 差错处理。
    • 设备的分配与回收。
    • 数据缓冲区管理。
    • 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。
  • 逻辑设备表(LUT)

  • 设备驱动程序

    • 主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特点设备“能听得懂”的一系列操作。
    • 包括设置设备寄存器。检查设备状态等。
    • 驱动程序一般会以独立进程的方式存在。
  • 中断处理程序

    • 当I/O任务完成时,I/O控制器会发生一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:

05.I/O核心子系统

06.假脱机技术(SPOOLing技术)

6.1脱机技术

  • 外围控制机+更高速的设备——磁带。
  • 作用:缓解设备与CPU的速度矛盾,实现预输入、缓输出。

6.2假脱机技术

  • 假脱机技术又叫SPOOLing技术,用软件的方式模拟脱机技术。
  • 输入井和输出井——模拟脱机输入/输出时的磁带。
  • 输入进程和输出进程——模拟脱机输入/输出时的外围控制机。
  • 输入缓冲区和输出缓冲区——内存中的缓冲区,输入、输出时的“中转站”。

6.3共享打印机

  • SPOOLing技术将独占式的打印机“虚拟”成共享打印机。

07.设备的分配与回收

  • 应考虑的因素

    • 固有属性:独占设备、共享设备、虚拟设备(SPOOLing)
    • 分配算法:先来先服务、优先级高者优先、短任务优先等。
    • 安全性:安全分配方式、不安全分配方式。
  • 静态分配与动态分配

    • 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源。
    • 动态分配:进程运行过程中动态申请设备资源。
  • 设备分配管理中的数据结构

    • 设备控制表(DCT):每个设备对应一张DCT,关键字段:类型/标识符/状态/指向COCT的指针/等待队列指针。
    • 控制器控制表(COCT):每个控制器对应一张COCT,关键字段:状态/指向CHCT的指针/等待队列指针。
    • 通道控制表(CHCT):每个控制器对应一张CHCT,关键字段:状态/等待队列指针。
    • 系统设备表(SDT):记录整个系统中所有设备的情况,每个设备对应一个表目,关键字段:设备类型/标识符/DCT/驱动程序入口。
  • 设备分配的步骤

    • 根据进程请求的物理设备名查找SDT

  • 根据SDT找到DCT并分配设备。

  • 根据DCT找到COCT并分配控制器

  • 根据COCT找到CHCT并分配通道。

  • :只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送。
  • 缺点:用户编程时必须使用“物理设备名”,若换了一个物理设备,则程序无法运行。若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程页必须阻塞等待。
  • 设备分配步骤的改进

    • 用户编程时使用的逻辑设备名申请设备,操作系统负责实现从逻辑设备名到物理设备名的映射(通过LUT)
    • 逻辑设备表的设置问题

      • 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复。
      • 每个用户一张LUT:各个用户的逻辑设备名可重复。

08.缓冲区管理

  • 缓冲区的概念

    • 一般利用内存作为缓冲区。
    • 缓解CPU与设备的速度矛盾、减少对CPU的中断频率、解决数据粒度不匹配的问题、提高CPU与I/O设备之间的并行性。
  • 单缓冲

    • 设备-(T)-缓冲区-(M)-工作区-(C)-处理。
    • 处理一块数据平均耗时Max(C,T)+M
    • 分析问题的初始状态:工作区满,缓冲区空。

  • 双缓冲

    • 处理一块数据平均耗时Max(T,C+M)
    • 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空。

  • 循环缓冲

    • 多个缓冲区链接成循环队列,in指针指向第一个空缓冲区,out指针指向第一个满缓冲区。

  • 缓冲池

    • 三个队列空缓冲队列、输入队列、输出队列
    • 四种工作缓冲区

      • 用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区。
      • 用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区。


版权属于:zfh

本文链接:http://zfhblog.com/index.php/archives/189/



评论已关闭