也称与设备无关的软件,是 I/O 系统的最高层软件。设备独立性软件包括执行所有设备公有操作的软件。

高速缓存与缓冲区

磁盘高速缓存(Disk Cache)

与介于 CPU 和内存之间的 Cache 不同,Disk Cache 是位于磁盘和内存之间的缓存。磁盘高速缓存逻辑上属于磁盘,物理上是内存中的盘块。

缓冲区

设备分配与回收

设备控制表(DCT)

DCT 包含以下字段:

  1. 设备类型。如打印机、扫描仪、键盘等
  2. 设备标识符。即物理设备名(唯一)
  3. 设备状态。当前设备状态(空闲/忙碌)
  4. 指向控制器表的指针
  5. 重复执行次数或时间。重复 n 次仍不成功时,才认为此次 I/O 失败
  6. 设备队列的队首指针。指向正在等待该设备的进程队列(由 PCB 组成)的队首

控制器控制表(COCT)

每个设备控制器对应一张 COCT。字段包含:

  1. 控制器标识符(id)
  2. 控制器状态(忙碌/空闲)
  3. 与控制器连接的通道表指针
  4. 控制器队列的队首指针
  5. 控制器队列的队尾指针

通道控制表(CHCT)

每个通道对应一张 CHCT。字段包含:

  1. 通道标识符(id)
  2. 通道状态(忙碌/空闲)
  3. 与通道连接的控制器表指针
  4. 通道队列的队首指针
  5. 通道队列的队尾指针

系统设备表(SDT)

整个系统只有一张 SDT。每个物理设备对应一项。每项的字段包含:

  1. 设备类型
  2. 设备标识符
  3. 指向 DCT 的指针
  4. 驱动程序入口

设备分配应考虑的因素

设备的固有(共享)属性

  1. 独占设备
  2. 共享设备
  3. 虚拟设备

设备分配算法

  1. FCFS 算法
  2. 最高优先级优先算法。优先级相同则按 FCFS 排队

设备分配中的安全性

  1. 安全分配方式。每当进程发出 I/O 请求后,便进入阻塞态,知道 I/O 操作完成时才被唤醒
  2. 不安全分配方式。进程发出 I/O 请求后仍继续运行,可能会发出更多的 I/O 请求。仅当进程所请求的设备被另一进程占用时,才进入阻塞态。

设备分配的步骤

  1. 分配设备。根据 I/O 请求中的物理设备名,查找 SDT,从中找出该设备的 DCT,在根据 DCT 中的设备状态字段判断设备状态。若忙,则将进程 PCB 挂到设备等待队列中;若不忙,则根据 设备分配算法 将设备分配给该进程
  2. 分配控制器。设备分配后,根据 DCT 找到 COCT,查询控制器状态。若忙,则将进程 PCB 挂到控制器等待队列中;若不忙,则将控制器分配给该进程
  3. 分配通道。控制器分配后,根据 COCT 找到 CHCT,查询通道状态。若忙,则将 PCB 挂到通道等待队列中;若不忙,则将通道分配给该进程。只有设备、控制器、通道都分配成功时,才是一次成功的设备分配。

总结:因为 SDT 一个系统只有一张,所以从 SDT 开始,SDT CDTCOCTCHCT 按顺序分配。

逻辑设备名到物理设备名的映射

逻辑设备名就是设备类型(如 printer)

逻辑设备表 LUT 用于将逻辑设备名映射为物理设备名。

可采用两种方式:

  1. 整个系统中只设置一张 LUT
  2. 每个用户设置一张 LUT

SPOOLing 技术

SPOOLing (假脱机) 技术是为了缓和 CPU 的高速性和 I/O 设备的低速性。该技术将独占设备改造成共享设备。

SPOOLing 系统由预输入程序、井管理程序、缓输出程序组成。

输入井和输出井是磁盘空间中的两块固定区域。输入井模拟脱机输入时的磁盘设备,用于暂存 I/O 设备输入的数据;输出井模拟脱机输出时的磁盘,用于暂存用户程序的输出数据。

假脱机系统的特点:

  1. 提高了 I/O 速度
  2. 将独占设备改造成共享设备
  3. 实现了虚拟设备功能
  4. 需要外存的支持
  5. 需要支持多道程序设计技术