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指令访问端口
-
统一编址
- 给每个端口分配唯一的内存地址(靠近地址空间顶端)