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
- 按角度划分,内道比外道密度大
- 磁盘存储能力受限于最内道的最大记录密度
- 柱面:多个磁盘组成磁盘组时,各磁盘同一个磁道在一个柱面上
- 磁盘地址:柱面号、盘面号、扇区号(块号)
- 磁盘安装在磁盘驱动器内
- 按磁头是否固定于磁盘
- 固定头磁盘
- 活动头磁盘
- 按磁盘是否固定于驱动器
- 固定盘磁盘
- 可换盘磁盘
磁盘调度方法
磁盘调度解决的是多个磁盘读写请求的服务顺序 + 磁盘读写时间 *
寻找(道)时间
格式化和分区
- 低级格式化(物理分区)
- 一个空白磁盘划分出柱面磁道,每个磁道划分成多个扇区
- 由硬盘生产商进行
- 逻辑分区
- 一个物理盘分成多个逻辑盘分区,比如分成C盘,D盘
- 每个分区由若干柱面组成
- 高级格式化(逻辑格式化)
- 简单来说:操作系统在硬盘上的初始化
- 具体来说:创建文件系统,把初始时的数据结构(比如空闲空间、已分配空间、空目录)存储到磁盘上
逻辑地址到物理地址
- 磁盘物理地址(从
开始) - 当前的柱面
号、磁头号 、扇区号
- 当前的柱面
- 转换需知的一些量
- 起始扇区柱面号
、磁头号 、扇区号 - 硬盘每个磁道的扇区数
、每个柱面的磁头(道)数
- 起始扇区柱面号
- 磁盘逻辑编址(从
开始) - 前面块设备接口小节提到过,逻辑上一维编址
- 先变扇区、再变磁头、最后变柱面(因为寻道需要移动机械臂,耗时最长)
- 物理到逻辑地址
- 逻辑到物理地址
固态硬盘
- 主要内容见计组第三章,此处补充两点
- 读写性能特性
- 不使用磁头,寻道时间几乎为0
- 采用闪存为存储介质,读取速度快
- 持续写入速度远快于机械硬盘
- 磨损均衡
- 是基于SSD主控芯片的内置平衡机制
- 作用是均衡SSD内部各个区块闪存颗粒的使用程度,延长整体使用寿命