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

  • 什么是I/O设备:将数据Input/Output(输入/输出)计算机的外部设备
  • 按使用特性分类
    • 人机交互类外部设备
    • 存储设备
    • 网络通信设备
  • 按传输速率分类
    • 低速设备
    • 中速设备
    • 高速设备
  • 按信息交换的单位分类
    • 块设备(传输快,可寻址)
    • 字符设备(传输慢,不可寻址,常采用中断驱动方式)

I/O控制器

  • 主要功能
    • 接受和识别CPU发出的命令(要有控制寄存器)
    • 向CPU报告设备的状态(要有状态寄存器)
    • 数据交换(要有数据寄存器,暂存输入/输出的数据)
    • 地址识别(由I/O逻辑实现)
  • 组成
    • CPU与控制器之间的接口(实现控制器与CPU之间的通信)
    • I/O逻辑(负责识别CPU发出的命令,并向设备发出命令)
    • 控制器与设备之间的接口(实现控制器与设备之间的通信)

IO控制器的组成

  • 两种寄存器编址方式

    • 内存映像I/O
      • 控制器中的寄存器与内存统一编址
      • 可以采用对内存进行操作的指令来对控制器进行操作
    • 寄存器独立编址
      • 控制器中的寄存器独立编址
      • 需要设置专门的指令来操作控制器

    两种寄存器

I/O控制方式

  • 程序直接控制方式
    • 完成一次读/写的过程:CPU发出I/O命令后需要不断轮询
    • CPU干预频率:极高
    • 每次I/O的数据传输单位:字
    • 数据流向
      • 设备$\Rightarrow$CPU$\Rightarrow$内存
      • 内存$\Rightarrow$CPU$\Rightarrow$设备

程序直接控制方式

程序直接控制方式

  • 中断驱动方式

    • 完成一次读/写的过程:CPU发出I/O命令后可以做其他事,本次I/O完成后设备控制器发出中断信号
    • CPU干预频率:高
    • 每次I/O的数据传输单位:字
    • 数据流向
      • 设备$\Rightarrow$CPU$\Rightarrow$内存
      • 内存$\Rightarrow$CPU$\Rightarrow$设备

    中断驱动方式

  • DMA方式

    • 完成一次读/写的过程:CPU发出I/O指令后可以做其他事,本次I/O完成后设备控制器发出中断信号
    • CPU干预频率:中
    • 每次I/O的数据传输单位:块
    • 数据流向
      • 设备$\Rightarrow$内存
      • 内存$\Rightarrow$设备

    DMA

    DMA

  • 通道控制方式

    • 完成一次读/写的过程:CPU发出I/O命令后可以做其他事。通道会执行通道程序以完成I/O,完成后通道向CPU发出中断信号
    • CPU干预频率:低
    • 每次I/O的数据传输单位:一组块
    • 数据流向
      • 设备$\Rightarrow$内存
      • 内存$\Rightarrow$设备

通道控制方式

  • 优缺点
    • 每一个阶段的优点都是解决了上一阶段的最大缺点
    • 总体来说,整个发展过程就是要尽量减少CPU对I/O过程的干预,把CPU从繁杂的I/O控制事务中解脱出来,以便更多地去完成数据处理任务

I/O软件层次结构

  • 用户层软件:实现与用户交互的接口,向上提供方便易用的库函数
  • 设备独立性软件
    • 向上层提供统一的调用接口(如read/write系统调用)
    • 设备的保护
    • 差错处理
    • 设备的分配与回收
    • 数据缓冲区管理
    • 建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序
  • 设备驱动程序:设置设备寄存器、检查设备状态
  • 中断处理程序:进行中断操作
  • 硬件:执行I/O操作,有机械部件、电子部件组成

IO系统软件层次部分

操作系统内核部分

输入/输出应用程序接口&设备驱动程序接口

  • 输入/输出应用程序接口

输入输出应用程序接口

  • 阻塞/非阻塞I/O
    • 阻塞I/O:应用程序发出I/O系统调用,==进程需转为阻塞态等待==
    • 非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,==进程无需阻塞等待==
  • 设备驱动程序接口:若各公司开发的设备驱动程序接口不统一,则操作系统很难调用设备驱动程序

设备驱动程序接口

  • 统一标准的设备驱动程序接口:操作系统规定号设备驱动的接口标准,各厂商必须按要求开发设备驱动程序

统一标准的设备驱动程序接口

I/O核心子系统

  • I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求
  • 设备保护
    • 操作系统要实现==文件保护功能==
    • 在UNIX系统中,==设备被看作是一种特殊的文件==,每个设备也会有对应的FCB

IO核心子系统

假脱机技术

  • 脱机技术
    • 外围控制机+更高速的设备——磁带
    • 作用:缓解设备与CPU的速度矛盾,实现预输入、缓输出
  • 假脱机技术
    • 又叫SPOOLing技术,用软件的方式模拟脱机技术
    • 输入井和输出井——模拟脱机输入/输出时的磁带
    • 输入进程和输出进程——模拟脱机输入/输出时的外围控制机
    • 输入缓冲区和输出缓冲区——内存中的缓冲区,输入、输出时的“中转站”

假脱机技术

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

设备的分配与回收

  • 应考虑的因素

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

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

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

    1. 根据进程请求的物理设备名查找SDT
    2. 根据SDT找到DCT并分配设备
    3. 根据DCT找到COCT并分配控制器
    4. 根据COCT找到CHCT并分配通道
    • 缺点
      • 用户编程时必须使用“物理设备名”,若换了一个物理设备,则程序无法运行。
      • 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待
  • 设备分配步骤的改进

    • 用户编程时使用逻辑设备名申请设备,操作系统负责实现从逻辑设备名到物理设备名的映射(通过LUT)
    • 逻辑设备表的设置问题
      • 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复
      • 每个用户一张LUT:各个用户的逻辑设备名可重复

缓冲区管理

  • 缓冲区的概念
    • 一般利用内存作为缓冲区
    • 缓解CPU与设备的速度矛盾、减少对CPU的中断频率、解决数据粒度不匹配的问题、提高CPU与I/O设备之间的并行性
  • 单缓冲^1
    • 设备-(T)-缓冲区-(M)-工作区-(C)-处理
    • 处理一块数据平均耗时Max(C, T) + M
    • 分析问题的初始状态:工作区满,缓冲区空
  • 双缓冲
    • 处理一块数据平均耗时Max(T, C+M)
    • 分析问题的初始状态:工作区空,一个缓冲区满,另一个缓冲区空
  • 循环缓冲:多个缓冲区链接成循环队列,in指针指向第一个空缓冲区,out指针指向第一个满缓冲区
  • 缓冲池
    • 三个队列:空缓冲队列、输入队列、输出队列
    • 四种工作缓冲区
      • 用于收容输入数据的工作缓冲区、用于提取输入数据的工作缓冲区
      • 用于收容输出数据的工作缓冲区、用于提取输出数据的工作缓冲区

磁盘的结构

  • 磁盘、磁道、扇区的概念
    • 磁盘由表面涂有磁性物质的圆形盘片组成
    • 每个盘片被划分为一个个磁道,每个磁道又划分为一个个扇区
  • 如何在磁盘中读/写数据:磁头移动到目标位置,盘片旋转,对应扇区划过磁道才能完成读/写
  • 盘面、柱面的概念
    • 磁盘有多个盘片“摞”起来,每个盘片有两个盘面
    • 所有盘面中相对位置相同的磁道组成柱面
  • 磁盘的物理地址:(柱面号, 盘面号, 扇区号)
  • 磁盘的分类
    • 根据磁头是否可移动
      • 固定头磁盘(每个磁道有一个磁头)
      • 移动头磁盘(每个盘面只有一个磁头)
    • 根据盘片是否可更换
      • 固定盘磁盘
      • 可换盘磁盘

磁盘调度算法

  • 一次磁盘读/写操作需要的时间
    • 寻找时间(寻道时间):启动磁臂,移动磁头所花的时间
    • 延迟时间:将目标扇区转到磁头下面所花的时间
    • 传输时间:读/写 数据花的时间
  • 磁盘调度算法
    • 先来先服务(FCFS):按访问请求到达的先后顺序进行处理
    • 最短寻找时间优先(SSTF)
      • 每次都优先响应距离磁头最近的磁道访问请求
      • 贪心算法的思想,能保证眼前最优,但无法保证总的寻道时间最短
      • 缺点:可能导致饥饿
    • 扫描算法(电梯算法,SCAN)
      • 只有磁头移动到最边缘的磁道时才可以改变磁头移动方向
      • 缺点:对各个位置磁道的响应频率不平均
    • 循环扫描算法(C-SCAN):只有磁头朝某个方向移动时才会响应请求,移动到边缘后立即让磁头返回起点,返回途中不响应任何请求
    • LOOK算法:SCAN算法的改进,只要在磁头移动方向上不再有请求,就立即改变磁头方向
    • C-LOOK算法:C-SCAN算法的改进,只要在磁头移动方向上不再有请求,就立即改变磁头方向

减少磁盘延迟时间的方法

  • 交替编号
    • 具体做法:让编号相邻的扇区在物理上不相邻
    • 原理:读取完一个扇区后需要一段时间处理才可以继续读入下一个扇区
  • 错位命名
    • 具体做法:让相邻盘面的扇区编号“错位”
    • 原理:与“交替编号”的原理相同。“错位命名法”可降低延迟时间
  • 磁盘地址结构的设计
    • 理解为什么要用==(柱面号, 盘面号, 扇区号)==
    • 理解为什么不用(盘面号, 柱面号, 扇区号)
    • 原因:在读取地址连续的磁盘块时,前者更不需要移动磁头

磁盘的管理

  • 磁盘初始化
    • 低级格式化/物理格式化:划分扇区
    • 磁盘分区(C盘、D盘、E盘)
    • 逻辑格式化:建立文件系统(建立根目录文件、建立用于存储空间管理的数据结构)
  • 引导块
    • 计算机启动时需要运行初始化程序(自举程序)来完成初始化
    • ROM中存放很小的自举装入程序
    • 完整的自举程序存放在初始块(引导块)中
  • 坏块的管理
    • 简单的磁盘:逻辑格式化时将坏块标记出来
    • 复杂的磁盘:磁盘控制器维护一个坏块链,并管理备用扇区