Skip to content

(二)设备独立软件

1. 缓冲区管理

1.1. 引入

  • 功能

    • 缓和 CPU 和 IO 设备速度不匹配的矛盾;

    • 减少 CPU 中断触发的频率,放宽对 CPU 中断响应时间的要求;

    • 解决 CPU 和 IO 设备数据粒度和数据结构不匹配的问题;

    • 提高 CPU 和 IO 设备的并行性;

1.2. 单/双缓冲区

  • 单缓冲区

    img_eWjQfygblV

    • 进程发出 IO 请求时,OS 便在内存中划分一个缓冲区;

    • 设备花费 Ti 时间输入数据后,必须花费 Mi 的时间等待数据传送到进程

    • 处理一块数据的总时间:max{T,C}+M

  • 双缓冲区

    img_yEGLlFXInz

    • 进程发出 IO 请求时,OS 便内存中划分两个缓冲区;

    • 考虑到进程处理时间 C 通常小于 MT,可实现 IO 设备无等待持续放入;

    • 处理一块数据的总时间:max{T,C}

    • 双缓冲区用于机器之间的通信:在两个机器上都设置发送和接收缓冲区,实现数据并行双向传输,提高通信效率;

      img_CwX7UEvElz

1.3. 环形缓冲区

img_GzQ7XRyUU3

  • 包含多个大小相同的缓冲区,每个缓冲区可分为三种:

    • 待装入数据的空缓冲区 R;

    • 已装入数据的满缓冲区 G;

    • 进程正在使用的缓冲区 C;

  • 环形缓冲区的使用:

    • Get;

    • Release;

1.4. 缓冲池

  • 管理多个缓冲区,每个缓冲区有用于标识和管理的缓冲头和存放数据的缓冲体;

    • 缓冲头:一般包含缓冲区编号,设备号,数据块,信号量,链接指针等;
  • 缓冲池将相同类型的缓冲区链接成队列,一般有三种(了解)

    • 空白缓冲区队列 emq;

    • 输入缓冲区队列 inq;

    • 输出缓冲区队列 outq;

2. 设备分配与回收

2.1. 数据结构

  • 设备控制表 DCT:记录设备的情况,如图;

    img_bmflMRElXv

  • 控制器控制表 COCT

  • 通道控制表 CHCT

  • 系统设备表 SDT:记录了 OS 中全部设备的情况,每个设备占一项,包括设备类型,标识符,DCT 和驱动程序入口等;

  • 后三种表图示

    img_W1dnRfePX3

2.2. 基本设备分配程序

  • 设备分配过程

    • 进程提出 IO 请求;

    • 查表 SDT,检查是否有对应设备,并获取其 DCT,驱动程序入口等;

    • 根据 DCT,获取其控制器 DOCT 和 通道 CHCT,分配对应内存来存放;

    • 顺序:设备 控制器 通道;

3. 逻辑设备名到物理设备名

3.1. 逻辑设备表 LUT(Logic Uint Table)

img_nmSa21kZ7i

  • 用于将逻辑设备名映射到物理设备名;

  • 也包含对应设备驱动程序入口地址

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 内核和硬件之间的接口,由一组函数和一些私有数据组成;

  • 是应用程序和硬件设备间的桥梁;