0%

【知识总结】 第五章-输入输出管理

IO管理基础

设备

  • 详见计组第7章的基本概念、外部设备、IO接口
  • 补充:IO设备的分类
    • 按功能分类
      • 人机交互设备:打印机、显示器、鼠标、键盘
      • 存储设备:磁盘、磁带、光盘
      • 网络通信设备:网络接口
    • 按传输速率分类
      • 低速设备:键盘、鼠标
      • 中速设备:打印机
      • 高速设备:磁盘、磁带、光盘
    • 按信息交换单元分类
      • 块设备:磁盘
      • 字符设备:打印机、键盘

IO控制方式

  • 详见计组第7章的IO方式

IO软件层次结构

  • 用户层IO软件
    • 和用户交互的接口
    • 通过系统调用获取操作系统IO服务
  • 设备独立软件
    • 执行设备的公有操作
      • 设备分配回收
      • 逻辑设备映射到物理设备
      • 设备保护
      • 缓存管理
      • 差错控制
    • 向用户层提供接口
  • 设备驱动程序
    • 实现系统对设备的操作指令,驱动设备工作的程序
    • 每个设备一个驱动程序
  • 中断处理程序
    • 保存被中断进程现场
    • 转入中断处理程序
    • 处理完恢复被中断进程现场,返回被中断进程
  • 硬件
    • 包括IO接口(设备控制器、适配器)和设备本身

输入输出应用程序接口

字符设备接口

  • 字符设备
    • 以字符为单位传输数据
    • 不可寻址、顺序存取、速度慢
    • 一般为中断驱动方式,如键盘、打印机
  • get操作:从缓冲区获得字符
  • put操作:输出字符到缓冲区
  • in-control指令:包含很多参数,每个参数表示一个具体设备的特定功能
  • 打开和关闭操作:实现互斥

块设备接口

  • 块设备
    • 以数据块为单位传输数据
    • 可寻址,速度快
    • 一般为DMA方式
  • 接口隐藏了磁盘的二维结构,线性一维编址
  • 将上层的设备打开、读写、关闭等抽象命令转换为设备可识别的具体操作
  • 内存映射接口提供内存字符数组,以访问磁盘,不提供读写操作

网络设备接口

  • 一般为网络套接字接口Socket
  • 本地应用程序通过套接字接口的系统调用,创建本地套接字,连接远程应用程序创建的套接字,实现数据收发

阻塞和非阻塞IO

  • 阻塞IO:用户调用IO操作,进程被阻塞,IO操作完成后唤醒进程
  • 非阻塞IO:用户调用IO操作,进程不阻塞,IO调用返回错误返回值。轮询方式查询IO操作是否完成
  • 目前大多数操作系统采用阻塞IO

IO调度

  • 指的是确定IO请求的执行顺序,不一定按照系统调用顺序
  • 目的是减少IO平均等待时间,完善整体性能
  • 后面外存管理的磁盘调度算法就是一种IO调度

设备独立软件

缓冲区管理

磁盘高速缓存

  • 本质是Disk Cache,磁盘内容的备份,逻辑上属于磁盘,物理上属于内存
  • 两个实现方法
    • 在内存开辟大小固定的空间
    • 利用内存空闲空间作为缓冲池

缓冲区

  • 本质是Buffer,CPU可以直接和缓冲区快速交换信息,解决CPU和IO设备速度不匹配的问题,提高了并行性
  • 两个实现方法
    • 硬件缓冲器:成本高,仅关键部位使用
    • 采用内存缓冲区
  • 特点:为空时只能传入数据,直到充满;充满后只能传出数据,直到为空
  • 缓冲技术分类(设T为输入缓冲时间,M为输出缓冲时间,C为处理器处理时间)
    • 单缓冲
      • 含义:一个单向的缓冲区
      • 周期(定量计算):max(C,T)+M(讨论T和C的大小)
    • 双缓冲
      • 含义:两个同向的缓冲区,一个缓冲区输入时,另一个缓冲区输出
      • 周期(定量计算):max(C+M,T)(讨论T和C+M的大小)
    • 循环缓冲
      • 含义:多个等大小的缓冲区首尾相连构成环,同时配备in指针、out指针
      • 使用(定性机理):输入时in指向第一个空缓冲区;输出时out指向第一个满缓冲区
    • 缓冲池
      • 含义:包含多个缓冲区,维护三个缓冲区队列和四个缓冲区
      • 三个缓冲区队列:空缓冲区队列Q1;满数据输入缓冲区队列Q2(从设备到进程方向);满数据输出缓冲区队列Q3(从进程到设备方向)
      • 收容输入缓冲区B1:从设备接收数据
      • 提取输入缓冲区B2:发送数据到进程
      • 收容输出缓冲区B3:从进程接收数据
      • 提取输出缓冲区B4:发送数据到设备
      • 设备到进程(定性机理):从Q1取缓冲区作为B1,装满后插入Q2;从Q2取缓冲区作为B2,用完后插入Q1
      • 进程到设备(定性机理):从Q1取缓冲区作为B3,装满后插入Q3;从Q3取缓冲区作为B4,用完后插入Q1

高速缓存和缓冲区对比

  • 相同点
    • 都介于高速设备和低速设备之间
  • 不同点
    • 存放的数据:高速缓存存放的是低速设备的备份数据;存放的是高低速设备之间传输的数据
    • 是否直接访问低速设备:高速缓存找不到数据时,直接访问低速设备;缓冲区则不会直接访问低速设备

设备分配和回收

设备固有属性

  • 独占式设备
    • 设备释放前不允许其他进程使用
    • 比如打印机
  • 分时式共享设备
    • 分时交替,提高利用率
    • 比如磁盘IO操作,各进程分时共享
  • 虚拟性设备
    • SPOOLing假脱机方式,在磁盘中开辟输入输出井来虚拟化低速外部设备,类似于Buffer
    • 因为磁盘是高速外部设备,所以这是空间换时间的策略

数据结构

  • 设备控制表DCT:和设备一一对应,表项为设备属性,包含指向COCT的指针
  • 控制器控制表COCT:和控制器(IO接口)一一对应,包含指向CHCT的指针
  • 通道控制表CHCT:对应多个COCT,因为通道对应多个设备控制器(IO接口)
  • 系统设备表SDT:整个系统一张表,记录连接到系统的物理设备情况(设备类、设备标识、DCT、驱动程序入口等)

设备分配策略

  • 分配原则:提高使用效率;避免死锁
  • 分配方式
    • 静态分配
      • 作业执行前一次性分配设备,作业撤销前独占设备
      • 无死锁但效率低
      • 独占设备一般采用静态分配
    • 动态分配
      • 执行过程中确定设备分配,使用完立刻释放
      • 效率高,但要考虑死锁
      • 共享设备一般采用动态分配
  • 分配算法:常用的是先请求先分配、优先级分配

安全性

安全性指的是设备分配中防止死锁 + 安全分配方式 * 进程发出IO请求后被阻塞,不保持资源,IO操作完成唤醒进程 * 缺点:CPU和IO设备串行工作 + 不安全分配方式 * 进程发出IO请求后继续运行,仅当请求设备被其他进程占用,才阻塞当前进程。 * 缺点:可能产生死锁

分配流程

  • 分配设备
    • 进程请求IO
    • 查SDT,找DCT
    • 根据DCT判断设备是否繁忙
      • 繁忙则把进程PCB挂到设备队列
    • 判断安全性
      • 安全则分配设备
      • 不安全则把PCB挂到设备队列
  • 分配控制器
    • 在DCT中找到COCT
    • 根据COCT判断控制器是否繁忙
      • 繁忙则把进程PCB挂到控制器队列
      • 否则分配控制器
  • 分配通道
    • 在COCT中找CHCT
    • 根据CHCT判断通道是否繁忙
      • 繁忙则把进程PCB挂到通道队列
      • 否则分配通道

设备独立性

之前的分配流程都是对具体的物理设备,未考虑设备独立性

设备独立性的实现如下 + 应用程序使用逻辑设备名请求设备分配IO操作 + 设置逻辑设备表LUT(可以系统全局一张LUT;也可以每个用户一张LUT,存入进程PCB) * 请求设备分配:建立LUT表项,包括逻辑设备名、物理设备名、设备驱动程序入口地址, * 请求IO操作:LUT表完成逻辑设备名到物理设备名的映射

假脱机技术

  • 又叫SPOOLing技术,把独占设备改造成共享设备,实现虚拟设备
  • 输入设备数据路径
    • 数据经过内存的输入缓冲区,到磁盘的输入井
    • 进程需要输入时,输入井的数据送入内存
  • 输出设备数据路径
    • 数据送到磁盘的输出井
    • 设备空闲时,数据经过内存的输出缓冲区到输出设备
  • 实例:共享打印机
    • 用户进程请求打印
    • 输出进程在输出井申请空间,传入数据
    • 输出进程为用户进程申请并填写用户请求打印表,插入请求打印队列

设备驱动程序接口

  • 不同设备的驱动程序与操作系统的接口相近
    • 方便设备驱动程序的添加和编写
  • 操作系统为每种设备类型(如磁盘类型)定义驱动程序支持的函数
    • 比如磁盘的读、写、格式化
    • 驱动程序包含一个表格,包含支持的函数的指针
    • 驱动程序装载时,操作系统记录表格的地址
    • 操作系统调用函数时,通过表格间接调用
  • 设备作为命名对象出现在文件系统,文件保护规则也适用于IO设备

外存管理

磁盘

磁盘结构

  • 磁头:用于读数据,和磁道一样宽
  • 磁道:磁盘上的同心圆,分为多个扇区
  • 扇区:即一个盘块,通常为512B
    • 按角度划分,内道比外道密度大
    • 磁盘存储能力受限于最内道的最大记录密度
  • 柱面:多个磁盘组成磁盘组时,各磁盘同一个磁道在一个柱面上
  • 磁盘地址:柱面号、盘面号、扇区号(块号)
  • 磁盘安装在磁盘驱动器内
  • 按磁头是否固定于磁盘
    • 固定头磁盘
    • 活动头磁盘
  • 按磁盘是否固定于驱动器
    • 固定盘磁盘
    • 可换盘磁盘

磁盘调度方法

磁盘调度解决的是多个磁盘读写请求的服务顺序 + 磁盘读写时间 * 寻找(道)时间 - 启动磁臂时间 - 跨过条磁道时间 - * 旋转延迟时间 - 转速 - 一般取转半圈的时间 * 传输时间 - 读写字节,一个磁道字节,转速 - + 磁盘调度算法(主要考虑减少寻道时间) * 先来先服务算法FCFS - 最早请求的优先处理 - 公平简单;性能差 * 最短寻道时间优先SSTF - 与当前磁头最近的磁道对应请求优先处理 - 比FCFS性能好;但有饥饿现象 * 扫描算法SCAN(电梯调度算法) - 在当前磁头移动方向侧,最近的磁道对应请求优先处理 - 初始时需要告知磁头方向 - 性能好;但不利于某一端的访问 * 循环扫描算法C-SCAN - 在SCAN基础上要求只能单向扫描,扫到磁盘端点则快速返回另一端 - 使得磁道两端的请求处理比较公平 * LOOK和C-LOOK - 一般默认SCAN和C-SCAN在变向时都需要扫描至磁盘端点,可以改进为只扫描到最靠近端点的请求 - 当然也可以默认SCAN和C-SCAN就是LOOK和C-LOOK * 减少延迟时间 - 同盘面不同扇区交替编号 - 不同盘面错位编号 - 比如盘面1编号:02413,盘面2编号:30241

格式化和分区

  • 低级格式化(物理分区)
    • 一个空白磁盘划分出柱面磁道,每个磁道划分成多个扇区
    • 由硬盘生产商进行
  • 逻辑分区
    • 一个物理盘分成多个逻辑盘分区,比如分成C盘,D盘
    • 每个分区由若干柱面组成
  • 高级格式化(逻辑格式化)
    • 简单来说:操作系统在硬盘上的初始化
    • 具体来说:创建文件系统,把初始时的数据结构(比如空闲空间、已分配空间、空目录)存储到磁盘上

逻辑地址到物理地址

  • 磁盘物理地址(从开始)
    • 当前的柱面号、磁头号、扇区号
  • 转换需知的一些量
    • 起始扇区柱面号、磁头号、扇区号
    • 硬盘每个磁道的扇区数、每个柱面的磁头(道)数
  • 磁盘逻辑编址(从开始)
    • 前面块设备接口小节提到过,逻辑上一维编址
    • 先变扇区、再变磁头、最后变柱面(因为寻道需要移动机械臂,耗时最长)
    • 物理到逻辑地址
    • 逻辑到物理地址

固态硬盘

  • 主要内容见计组第三章,此处补充两点
  • 读写性能特性
    • 不使用磁头,寻道时间几乎为0
    • 采用闪存为存储介质,读取速度快
    • 持续写入速度远快于机械硬盘
  • 磨损均衡
    • 是基于SSD主控芯片的内置平衡机制
    • 作用是均衡SSD内部各个区块闪存颗粒的使用程度,延长整体使用寿命