IO 控制器结构
- CPU与控制器接口
- 实现控制器和CPU之间的通信
- 数据寄存器
- 控制寄存器
- 状态寄存器
- 寄存器的独立编址/统一编制(操作系统更详细些)
- 实现控制器和CPU之间的通信
- IO 逻辑
- 识别CPU的命令并对设备发出响应的命令
- 控制器与设备之间的接口
- 实现控制器与设备的通信
IO的控制方式(相对于计组多了通道)
流程 IO设备-IO控制器-CPU寄存器-内存
-
程序直接控制方式(轮询)
- CPU在请求一个数据时,不断进行轮询检查
-
中断请求
- CPU在发出请求后将IO进程阻塞执行其他任务,当数据准备好后,控制器发送一个中断请求,CPU恢复等待的环境,继续执行IO进程,每次传输一个字
- 优点
- IO CPU可以并行工作
- 缺点
- 中断频繁会消耗很多时间
-
DMA
- 另设一个DMA,使得IO通过DMA和主存进行传输,但每次一只能传输一块或者多个连续的块
-
通道
- 类似于DMA,增加了程序(可以执行多条指令),也就是一次可以传输一组块
IO的层次结构
-
用户层软件
- 实现与用户之间的接口,为用户提供库程序
-
设备独立性软件
- 向上提供系统调用接口
- 保护程序
- 差错处理
- 维护缓冲区
- 建立逻辑名和物理名的映射
- 设备的分配与回收
- 选择驱动
-
设备驱动程序
- 设置设备寄存器,查看设备状态
-
中断处理程序
- 中断处理
-
硬件
核心子系统
-
SPOOLING 假脱机技术(类似操作系统中的脱机技术)
-
磁盘中设置输出井和输入井,作为一个缓存器
-
多个任务写入缓存井来让独占变共享(疑问,不是内存有一个缓存区了吗)
-
设备分配
-
设备的固有属性
- FCFS…
-
设备的安全性
- 安全分配方式
- 为进程分配一个设备后就阻塞,不会死锁
- 不安全分配方式
- 进程分配到设备后,进程继续执行,还可以请求新的设备,IO请求得不到满足的时候才会阻塞(吃着碗里的看着锅里的,这样不仅可能因为"请求和保持"而导致死锁,更有可能成为海皇)
- 安全分配方式
-
静态分配和动态分配
- 静态分配
- 顾名思义,一次性分配给所有的,执行过程不再更改
- 动态分配
- 进程在运行过程会动态的申请资源
- 静态分配
-
流程
- 系统设备表-控制器表-通道表-设备控制表
- 但这里只能用物理设备名,如果设备更换则不能正常使用,所以对这个分配流程又进行了改进
- 改进
- 用户只提供逻辑设备名,逻辑设备名在系统设备表所对应的是设备类型,找到后,在一张逻辑设备表中找到相同类型的设备的物理地址(类似于逻辑和物理的映射)
-
缓冲区
缓冲区的特性 : 只有写满才能取走,只有为空才能写(管道通信),一般在主存中开辟
- 作用
- 解决CPU与设备速度不匹配的问题
- 减少CPU中断频率
- 解决数据粒度不匹配的问题
- 提高设备和CPU的并行性
- 数据传输流程
- IO数据先传送到缓冲区(时间为I),在从缓冲区传送到用户进程工作区(时间M),CPU读取数据(时间O)
- 单缓冲 时间 MAX(I,O)+M
- 双缓冲 MAX(M+O,I)