I/O 设备管理
IO系统结构
- 微机IO系统
- 总线型IO系统: CPU和内存可以直接交换信息, 但是不能和设备直接进行信息交换, 需要经过设备控制器
- 主机IO系统
- 主机, 通道, 控制器, 设备
IO设备分类
- 按速率分类
- 按信息交换的单位分类
- 按共享性
按速率分类
高速(几十万~几兆), 中速(数千~数万字节), 低速(几百字节)
按信息交换的单位分类
- 块设备: 存取以数据块为单位
- 字符设备: 传送字节流
- 通信端口, 鼠标, 打印机, 终端
按共享性
- 独占设备: 必须作为临界资源互斥访问的设备
- 共享设备: 允许多个进程共同访问的设备
- 虚拟设备: 通过某种虚拟技术把一台物理设备变成若干逻辑设备
设备控制器
设备控制器是一个可编址设备, 是CPU和IO设备之间的接口, 接收IO的命令并控制设备完成IO工作
设备控制器功能
- 接收和识别命令
- 数据交换
- 数据缓冲
- 设备状态的了解和报告
- 地址识别
- 差错控制
设备控制器组成
- 设备控制器与 处理机 的接口
- 设备控制器与 设备 的接口
- IO逻辑: 指令译码器, 地址译码器
IO通道
大型主机中设备控制器的对等功能
IO控制方式
- 轮询
- 中断: CPU和IO 并行 工作, IO完成后设备控制器向CPU发送中断请求信号告知完成
- DMA
DMA
需要特殊的设备控制器
- 组成
- 主机与DMA的接口
- DMA与设备的接口
- IO控制逻辑
- 内部寄存器
- CR 命令/状态寄存器: 接收命令
- MAR 内存地址寄存器: 存放内存地址
- DR 数据寄存器: 用于暂存DMA传输中要传输的数据
- DC 数据计数器: 指示DMA 本次要向CPU 发中断信号前要读或写的次数
缓冲管理: TODO
引入缓冲原因
- 处理数据流的生产者和消费者之间的速度差异
- 协调传输数据大小不一致的设备
- 降低对 CPU 中断频率的要求,提高 CPU 和 IO 设备之间的并行性
优点
- 降低对CPU中断频率的要求
- 放宽对中断响应时间的限制
- 提高CPU和IO设备之间的并行性
类别
- 单缓冲
- 双缓冲
- 循环缓冲
- 组成
- 多个缓冲区
- 空缓冲区R
- 已装满数据的缓冲区G
- 现行工作缓冲区C
- 多个指针
- Nextg 用于指示消费者下一个可用的装有缓冲数据的缓冲区
- Nexti 用于指示生产者进程下一个可用的空缓冲区
- Current 指示当前正在使用的工作缓冲区
- 多个缓冲区
- 使用
- GetBuf:
- ReleaseBuf:
- 组成
- 缓冲池
- 缓冲区
- 空缓冲区
- 装满输入数据的缓冲区
- 装满输出数据的缓冲区
- 列队
- 空缓冲列队 emq: 由空缓冲区链接形成的队列
- 输入列队 inq: 由装满输入数据的缓冲区链接成的列队
- 输出列队 outq: 由装满输出数据的缓冲区链接成的列队
- 工作缓冲区
- 收容输入数据的缓冲区: 收容完输入数据后, 缓冲区被插入输入列队
- 提取输入数据的缓冲区: 存在于输入列队中, 进程需要输入数据时, 先从输入列队中获取这些缓冲区
- 收容输出数据的缓冲区: 收容完输出数据后, 缓冲区被插入输出队列
- 提取输出数据的缓冲区: 存在于输出队列中, 进程需要输出数据时, 先从输出队列中获取这种缓存区
- 工作方式
- P182
- 缓冲区
设备分配
- 设备控制表 DCT
- 控制器控制表 COCT
- 通道控制表 CHCT
- 系统设备表 SDT
设备分配考虑因素
- 设备的固有属性: 独占, 共享, 可虚拟设备
- 设备分配算法
- 先来先服务 (1)
- 基于优先权的分配 (2)
-
设备分配方式
- 安全分配方式: 设备获取到资源后就阻塞, 不能再申请别的资源, 摒弃了请求和保持
- 不安全分配方式
-
先来先服务算法根据进程对某设备提出请求的先后顺序将这些经常排成一个设备请求队列, 总是把设备分配个队首进程
- 基于优先权算法形成队列时, 将优先级高的进程放在队列前面, 对于相同优先级的进程的请求则按先来先服务原则排队
设备独立性/设备无关性
应用程序独立于具体使用的物理设备, 使用逻辑设备名, 系统实际执行时使用物理设备名
设备独立性好处
- 应用与物理设备无关, 系统增减或变更外围设备时不需要修改应用程序
- 易于处理输入输出设备的故障
- 提高了系统的可靠性, 增加了设备分配的灵活性
设备独立性主要功能
- 执行所有设备的公有操作
- 向用户层软件提供统一的接口
独占设备的分配
- 分配设备
- 根据设备物理名, 查找系统配置表, 找到设备控制表检查设备状态字, 若忙则阻塞进程
- 分配控制器
- 分配通道
SPOOLing(假脱机)
利用高速共享设备(通常是磁鼓或者是磁带)将低速的独享设备模拟为高速的共享设备. 这样从逻辑上讲, 计算机系统为每一个用户都分配了一台独立的高速独享设备
组成
输入井和输出井(位于磁盘): 它们是在磁盘上开辟的两大存储区。 * 输入井是模拟脱机输入时的磁盘, 用于收容输入设备输入的数据; * 输出井是模拟脱机输出时的磁盘, 用于收容用户程序的输出数据
输入缓冲区和输出缓冲区(主存): 它们是在主存中开辟的两个缓冲区。 * 输入缓冲区用于暂存由输入设备送来的数据, 以后再传送到输入井; * 输出缓冲区用于暂存从输出井送来的数据, 以后再传送给输出设备
输入进程SPi 和输出进程 SPo:
* 输入进程模拟脱机输入时的外围控制机, 将用户要求的数据从输入设备, 通过输入缓冲区送到输入井。当CPU需要数据时, 直接从输入井读入主存。
* 输出进程模拟脱机输出时的外围控制机, 把用户要求输出的数据, 先从主存送到输出井, 待输出设备空闲时, 再将输出井中的数据, 经过输出缓冲区送到输出设备上。
请求IO列队
用途: 实现共享打印机
SPOOLing特点
- 提高了IO速度
- 将独占设备改造为共享设备
- 实现了虚拟设备的功能
IO 软件原理
设备管理软件层次
- 用户层软件
- 与设备无关的软件层
- 设备命名, 设备分配, 设备独立性和缓冲管理
- 设备驱动程序(与硬件最密切)
- 设备服务程序
- 中断处理程序
设备管理关键的功能
- 实现IO设备的独立性
- 错误处理
- 异步传输
- 缓冲管理
- 设备的分配和释放
- 实现IO控制方式
磁盘管理
磁盘访问时间
寻道时间 + 旋转延迟时间 + 传输时间
磁盘调度
- 先来先服务
- 最短寻道时间优先(容易出现磁臂黏着)
- 扫描SCAN算法(电梯调度算法) (1)
- 循环扫描算法(CSCAN) (2)
- NStepScan: 分为n个部分, 每个部分是Scan, 内部是FCFS
-
Fscan: NStepScan 的的简化, 将磁盘请求列队分成两个队列.
-
- 首先自里向外访问, 下一个对象是其欲访问的磁道既在当前磁道之外, 又是距离最近的;
- 直至无更外的磁道需要访问时, 才将磁臂换向为自外向里移动;
- 下一个访问的磁道在当前位置内为距离最近者;直至再无更里面的磁道要访问。
-
- 首先自里向外访问, 当磁头移到最外的磁道并访问后, 磁头返回到最里的欲访问磁道, 即将最小磁道号紧接着最大磁道号构成循环, 继续循环扫描
- 直至无更外的磁道需要访问时, 才将磁臂换向为自外向里移动
- 下一个访问的磁道在当前位置内为距离最近者;直至再无更里面的磁道要访问
提高IO速度的方法
- 提前读
- 延迟写
- 优化物理块的分布
- 虚拟盘(RAM盘)
- 磁盘高速缓存