I/O管理
概述
按照使用特性分类
-
人机交互
-
网络通信设备
-
存储设备
按信息传输分类
-
块设备
-
磁盘
-
以 “块” 为单位
-
-
字符设备
-
键盘鼠标
-
以 “字符” 为单位
-
按速率分类
I/O控制器
功能
-
向CPU报告设备状态(要有状态寄存器)
-
识别CPU命令(要有控制寄存器)
-
地址识别(I/O逻辑)
-
数据交换(要有数据寄存器)
组成
-
外连CPU、设备
-
CPU与I/O控制器接口
-
设备与I/O控制器接口
-
-
I/O逻辑
编址方式
-
独立编址
- 需要设置专用指令对这些地址进行转译
-
混合编址
- 简单,不用设立单独处理逻辑
I/O控制方式
程序直接控制
-
程序每发一次数据,CPU就需要接受一次,CPU一直在轮询等待数据输入
-
设备-CPU-内存
-
字
中断驱动方式
-
发送数据指令后,CPU转而去执行其他进程,需要等待I/O的进程被中断,I/O完成后,CPU才会回来执行这个进程
-
设备-CPU-内存
-
字
DMA方式
-
I/O直接与内存进行交互数据
-
设备-内存
-
块
通道控制方式
-
I/O开始时,CPU中断,由通道执行I/O,执行完后,CPU继续执行此进程
-
设备-内存
-
一组块
-
1.一个通道可以管理多个控制器
2.一个控制器可以管理多个设备
I/O软件层次
设备分配
独占设备
- 打印机
共享设备
-
磁盘
- 宏观上共同使用,微观上交替使用
虚拟设备
-
采用SPOOLing技术将打印机共享
-
创建打印池,将打印任务都装到其中,宏观上每个进程都得到了打印机,并且不需要等待,可以进行其他任务
-
有输入/输出缓冲池
-
SPOOLing技术作用:
将独占设备改为共享设备
-
分配算法
-
动态分配
- 进程运行过程中,需要什么资源就申请什么资源
-
静态分配
- 运行前分配好所有资源
分配步骤
-
SDT
- 系统控制表
-
DCT
- 设备控制表
-
COCT
- 控制器控制表
-
CHCT
- 通道控制表
-
改进措施
-
增设LUT(逻辑设备表)
-
整个系统一张
-
适用于单用户系统
-
每个用户的逻辑设备名不可以重复
-
-
每个用户一张
- 每个用户的逻辑设备名可以重复
-
建立了逻辑设备名和物理设备名的映射,方便用户编程,也实现了I/O重定向,每次发送一个控制请求,是向一组相同类型的设备发送请求
-
-
缓冲
缓冲的作用
-
解决CPU与I/O设备数据交互速度不匹配的问题
-
减少CPU中断频率
-
解决数据粒度不匹配
- 可以将一段以 “字” 为单位的数据组合起来变成 “块” 为单位的数据
-
提高CPU与I/O设备并行性
缓冲策略
-
单缓冲
-
缓冲区只能满了才能读取
-
缓冲区正在读取(非空时),不能往其中写入数据
-
处理一块数据的平均时间:Max(C,T)+M
-
-
双缓冲
- 两台机器想要实现双向通信,那么就需要每台机器都设置两个缓冲区,一个用来接收数据,一个用来存储发送的数据
-
循环缓冲
- 一个in指针指向下一个空缓冲区
一个out指针指向第一个满缓冲区
- 一个in指针指向下一个空缓冲区
-
缓冲池
-
空缓冲队列
- 接收设备的输入数据,也存储准备发送的输出数据
-
输入缓冲队列
- 接收空缓冲队列过来的输入数据
-
输出缓冲队列
- 接收空缓冲队列过来的输入数据
-