I/O
分类和概念
把数据输入计算机和从计算机输出的设备
按特性
- 人机交互
- 存储设备
- 网络通信设备
按传输速率
- 低速
- 中速
- 高速
按信息交换单位
- 块设备
- 字符设备
I/O控制器
机械部件
用来执行具体I/O操作
如鼠标、键盘
电子部件
一般为印刷电路板
CPU无法直接控制I/O设备,需要电子部件作为中介实现CPU对设备的控制。因此电子部件的一个功能是制作I/O控制器,又称设备控制器。
I/O处理器的功能:
- 接收和识别CPU发出的指令
- 向CPU报告设备的状态
- 数据交换
- 地址识别
I/O控制器组成
I/O逻辑:负责接收和识别CPU的各种命令并向设备发出
CPU与控制器的接口:包括数据寄存器、控制寄存器、状态寄存器等,实现CPU与控制器之间的通信
控制器与设备的接口:实现控制器和设备之间的通信
I/O控制方式
程序直接控制
程序向IO模块发出读取命令,等待IO模块状态,未准备好的话会持续询问状况(类似停下来等待),等状态为准备好时读取数据继续运行
CPU需要不断轮询
实现简单,CPU利用率低
中断驱动方式
就中断
CPU利用率高
频繁中断会消耗较多的CPU时间
DMA方式
直接存储器存取,数据传送单位是块,数据流向是直接从内存到设备,不需要经过CPU。CPU只在传送一个或多个数据块的开始和结束时才干预。
CPU和IO设备并行性得到提升,但只能读写一个或多个连续的数据块
通道控制方式
通道:一种硬件,低配版CPU,可以识别并执行一系列通道指令
CPU发指令让通道进行IO处理,等全部活干完后再中断告诉CPU
过程中完全不需要CPU干预
假脱机技术
脱机技术:脱离主机的控制进行输入输出
spooling技术
就是假脱机技术
内存中运行了输入进程和输出进程,并各有一个缓冲区。在输入进程的控制下,输入缓冲区用于暂时存储从输入设备输入的数据,之后再转到输入井中。输出缓冲区暂时存储从输出井送来的数据,之后再送到输出设备上
设备的分配和回收
静态分配
进程运行前先分配全部所需资源,运行结束后归还资源
动态分配
运行过程中动态申请设备
设备分配管理中的数据结构
- 设备控制表DCT:系统为每个设备配置一张DCT,用于记录设备情况
- 控制器控制表COCT:每个设备控制器都会有一张对应的COCT。操作系统根据COCT的信息对控制器进行操作和管理
- 通道控制表CHCT:每个通道都会有一张对应的CHCT。操作系统根据CHCT的信息对通道进行操作和管理
- 系统设备表SDT:记录系统中全部设备的情况,每个设备对应一个表目
分配步骤
- 根据进程请求的物理设备名(改进:设置逻辑设备名,让操作系统来建立映射)查找SDT
- 根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中,不忙则将设备分配给进程
- 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙了则分配控制器
- 根据COCT找到CHCT,若通道忙则将进程PCB挂到通道等待队列中,不忙则分配给进程
缓冲区管理
缓冲区
一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区。使用硬件作为缓冲区成本高容量小,所以一般用内存
作用
- 缓和CPU与IO设备速度不匹配的矛盾
- 减少CPU中断频率
- 解决数据粒度不匹配
- 提高CPU与IO设备直接的并行性
单缓冲
操作系统在内存中分配一个缓冲区,当缓冲区数据为空时才能放入数据,数据满了才能读取
双缓冲
操作系统在内存中分配两个缓冲区,当缓冲区数据为空时才能放入数据,数据满了才能读取
循环缓冲区
多个大小相等的缓冲区链接成一个循环队列
缓冲池
由系统中共用的缓冲区组成