(二)设备独立软件
1. 缓冲区管理
1.1. 引入
功能
缓和 CPU 和 IO 设备速度不匹配的矛盾;
减少 CPU 中断触发的频率,放宽对 CPU 中断响应时间的要求;
解决 CPU 和 IO 设备数据粒度和数据结构不匹配的问题;
提高 CPU 和 IO 设备的并行性;
1.2. 单/双缓冲区
单缓冲区

进程发出 IO 请求时,OS 便在内存中划分一个缓冲区;
设备花费
时间输入数据后,必须花费 的时间等待数据传送到进程; 处理一块数据的总时间:
;
双缓冲区

进程发出 IO 请求时,OS 便内存中划分两个缓冲区;
考虑到进程处理时间
通常小于 和 ,可实现 IO 设备无等待持续放入; 处理一块数据的总时间:
; 双缓冲区用于机器之间的通信:在两个机器上都设置发送和接收缓冲区,实现数据并行双向传输,提高通信效率;

1.3. 环形缓冲区

包含多个大小相同的缓冲区,每个缓冲区可分为三种:
待装入数据的空缓冲区 R;
已装入数据的满缓冲区 G;
进程正在使用的缓冲区 C;
环形缓冲区的使用:
Get;
Release;
1.4. 缓冲池
管理多个缓冲区,每个缓冲区有用于标识和管理的缓冲头和存放数据的缓冲体;
- 缓冲头:一般包含缓冲区编号,设备号,数据块,信号量,链接指针等;
缓冲池将相同类型的缓冲区链接成队列,一般有三种(了解)
空白缓冲区队列 emq;
输入缓冲区队列 inq;
输出缓冲区队列 outq;
2. 设备分配与回收
2.1. 数据结构
设备控制表 DCT:记录设备的情况,如图;

控制器控制表 COCT;
通道控制表 CHCT;
系统设备表 SDT:记录了 OS 中全部设备的情况,每个设备占一项,包括设备类型,标识符,DCT 和驱动程序入口等;
后三种表图示

2.2. 基本设备分配程序
设备分配过程
进程提出 IO 请求;
查表 SDT,检查是否有对应设备,并获取其 DCT,驱动程序入口等;
根据 DCT,获取其控制器 DOCT 和 通道 CHCT,分配对应内存来存放;
顺序:设备
控制器 通道;
3. 逻辑设备名到物理设备名
3.1. 逻辑设备表 LUT(Logic Uint Table)

用于将逻辑设备名映射到物理设备名;
也包含对应设备驱动程序入口地址
3.2. LUT 的设置方式
1)OS 全局共享一张 LUT;
2)为每个用户配置单独的 LUT(现代 OS 采用);
4. 假脱机技术(Spooling)
脱机 IO 技术:指通过专门的外围设备,将低速 IO 设备的数据先输入到磁盘上,再由 CPU 处理。CPU 处理完毕时,也先将数据放至磁盘,再由外围设备传给低速 IO 设备;
假脱机技术:对脱机 IO 技术的模拟,以通道技术和多道程序技术为软件基础,以磁盘(高速随机外存储)为硬件基础。实现外围设备与 CPU 并行计算;
主要由四部分组成
IO 井:主要是磁盘;
IO 缓冲:主要是内存;
IO 进程;
井管理程序;
特点
提高了 IO 的速度(逻辑意义上的);
实现了虚拟设备技术,将物理上独占的设备变为逻辑上可共享的;
例:假脱机打印机系统
通过 Spooling 技术,将物理上独占的打印机变为可让多用户共享的逻辑设备;
共享打印机系统广泛用于多用户系统和局域网中;
主要由三部分组成
磁盘缓冲区;
打印缓冲区;
假脱机管理进程和假脱机打印进程;
5. 设备驱动程序接口
是 OS 内核和硬件之间的接口,由一组函数和一些私有数据组成;
是应用程序和硬件设备间的桥梁;