OS-I/O管理
下方文字版是思维导图的大纲导出
I/O设备
I/O设备分类
传输速率
低速设备
- 百字节以下(每秒)
- 键盘、鼠标
中速设备
- 千字节到万字节(每秒)
- 激光打印机
高速设备
- 十万字节以上(每秒)
- 磁盘机、光盘机
按照使用特性
人机交互类
- 速度最慢
存储设备
- 速度最快
网络通信设备
信息交换的单位
块设备
以数据块为单位
- 例:磁盘(常采用DMA)
基本特征
- 传输速率较高、可寻址
有结构设备
字符设备
以字符为单位
- 交互式终端机??
- 打印机
基本特征
- 传输速率低
- 不可寻址
- 时常采用IO中断
无结构设备
硬件构成
- 机械设备
- 电子设备
IO接口(设备控制器)
组成
设备控制器与CPU的接口
三类信号线
数据线
相连寄存器
数据寄存器
- 设备输入信息
- CPU输出信息
- 实现设备与CPU之间的数据缓存
控制寄存器
- CPU输出的控制信息
状态寄存器
- 设备状态信息
- 获取执行结果
到设备控制器
控制线
- 到设备控制器
地址线
- 到设备控制器
设备控制器与设备的接口
设备控制器可连接多个同类设备,每个设备有一个设备接口
三类信号线
数据线
- 从设备
控制线
- 到设备
状态线
- 从设备
IO逻辑
功能
- 实现对设备的控制
- 对CPU发送的命令进行译码
功能
- 接收识别CPU命令
- 数据交换(设备与内存)
- 标识报告设备状态
- 地址识别
- 数据缓冲
- 差错控制
IO软件层次结构
用户层IO软件
实现与用户的交互接口
用户可直接调用库函数
实现假脱机技术SPOOLing
以软件方式实现脱机技术
实现原理
组成
输入设备/输出设备
输入缓冲区/输出缓冲区
- 存在意义???(可能是因为设备数据只能直接到内存,不可以直接到磁盘)
输入进程/输出进程
- 模拟外围控制机
输入井/输出井
- 磁盘上
输入
- 输入设备–>输入缓冲区–>输入井–>CPU读入内存
输出
- 内存–>输出井–>输出缓冲区-等待输出设备空闲->输出设备
应用程序IO接口(非层次部分,只是接口分类)
字符设备接口
块设备接口
网络设备接口(网络套接字接口)
- 创建网络套接字,绑定端口
- 端口映射到应用程序
阻塞IO/非阻塞IO
- 调用IO时进程是否阻塞
- 一般为阻塞型
设备独立性软件
功能
执行所有设备的公有操作
设备的分配回收
逻辑设备名到物理设备名的映射
逻辑设备表LUT
记录设备的设备驱动程序入口地址
管理
- 系统设置一张LUT
- 每个用户一张LUT
设备保护(禁止用户直接访问)
缓冲管理
- 还需补充
- 提供大小统一的逻辑块,以屏蔽设备差异
差错处理
向用户层/文件层提供统一的接口
实现IO调度、设备保护、设备分配与回收、缓冲区管理
设备驱动程序
功能
- 硬件直接相关
- 实现系统对设备发出的操作指令
- IO进程与设备控制器之间的通信程序(进程)
每类设备一个
向上层提供标准接口,封装具体设备差异
中断处理程序
硬件
IO控制方式
程序直接控制
CPU和设备串行工作
CPU轮询
数据流向
- 设备–CPU寄存器–内存
数据传送单位
- 字节
中断驱动方式
CPU与设备并行
数据流向
- 设备–CPU寄存器–内存
数据传送单位
- 字节
DMA(直接存取器存取)方式
DMA 控制器
主机-控制器接口
CR命令/状态寄存器
- CPU发来的命令、控制信息
- 设备状态信息
MAR内存地址寄存器
- 要传送数据在内存中的首址
DR数据寄存器
- 暂存传输数据
DC数据计数器
- 要传送的字节数
控制器-块设备接口
IO控制逻辑
以数据块为单位,每次传送一个字节
缺点
- 每次cpu发出io指令,只能读写连续的块
数据流向
- 设备–内存
通道控制方式
IO通道
- 专门负责输入输出的处理机
一个通道控制多台设备(提供DMA共享功能)
传送单位
- 每次读写一组数据块
数据流向
- 设备–内存
根据数据传输方式
字节多路通道
- 慢速中速数据传输速率
- 以字节为单位
- 交叉复用
选择通道
- 高数据传输速率
- 一台设备独占通道
数组多路通道(组多路通道)
- 高数据传输速率
- 交叉复用
- 以数据块为单位
- 应用较多
缓冲区
实现
硬件缓冲器
- 成本高
缓冲区(内存)
作用
- 缓解CPU与IO设备之间的速度不匹配
- 减少对CPU的中断频率
- 解决数据粒度不匹配问题
- 提高CPU与IO并行性
技术
单缓冲
双缓冲
循环缓冲
缓冲池
三种队列
- 空队列
- 输出队列(装满输出数据块)
- 输入队列
四种缓冲区
提取输入sin
- 输入队列–>空队列
收容输入hin
- 空队列–>输入队列
提取输出sout
- 输出队列–>空队列
收容输出hout
- 空队列–>输出队列
设备的分配与回收
设备类型
- 独占设备
- 共享设备
- 虚拟设备
设备分配的数据结构
设备控制表DCT
对应一个设备
表项为设备信息
- 设备状态
- 设备类型
- 指向控制器表的指针
- 设备标识符
- 重复执行次数或事件
- 设备队列的队首指针
请求该设备而不得的进程,将进程PCB,组织一个设备请求队列(阻塞队列)
控制器控制表COCT
表项
- 控制器标识符
- 控制器状态
- 与控制器链接的通道表指针
- 控制器队列的队首指针
- 控制器队列的队尾指针
通道控制表CHCT
表项
- 通道标识符
- 通道状态
- 与通道连接的控制器表首址
- 通道队列的队首指针
- 通道队列的队尾指针
系统设备表SDT
表项
- DCT
- 驱动程序入口
- 设备标识符
- 设备类
整个系统一张
每个物理设备一个表目
分配原则
因素
IO设备的
- 固有属性
- 分配算法
- 分配的安全性
- 独立性
原则
- 充分发挥设备效率
- 避免进程死锁
- 将用户程序与具体设备隔离
分配方式
静态分配
- 独占设备的分配
- 一次性分配作业所需全部设备、控制器
- 无死锁
动态分配
- 进程执行时根据需要分配
- 可能死锁
- 使用分配算法
分配算法
分配的安全性
安全分配方式
- 进程请求IO后立即阻塞
- 无死锁但CPU与设备串行效率低
不安全分配方式
- 可能出现死锁
- 效率高
- 进程可多次请求IO,只有请求的IO被其他进程占用才阻塞
实现CPU与IO端口通信
两种方式
独立编址
- 为每一个IO端口分配端口号,OS可用特殊的IO指令访问端口
统一编址
- 给每个端口分配唯一的内存地址(靠近地址空间顶端)