第五章 输入输出系统 5.5 与设备无关的I/O软件

发布时间 2023-05-06 19:35:15作者: 一只朋克小狗

一、与设备无关软件的概念 

  1.在应用程序中,使用逻辑设备名称来请求使用某类设备;而系统在实际执行时,还必须使用物理设备名称。 应用程序独立于具体使用的物理设备 。

  2.系统须具有将逻辑设备名称转换为某物理设备名称的功能 。

  3.实现设备独立性后,有利于设备分配时的灵活性,易于实现I/O 重定向。

二、与设备无关的软件

  与设备无关的软件是I/O系统的最高层软件,主要功能如下:

  1.执行所有设备的公有操作 

  • 独立设备的分配与回收:独立设备必须由系统统一分配
  • 将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序 
  • 对设备进行保护,禁止用户直接访问设备
  • 缓冲管理:对字符设备和块设备的缓冲区进行有效的管理 
  • 差错控制

  2.向用户层软件提供统一接口 

三、设备分配

  1.设备分配中的数据结构

    ①设备控制表DCT 

      为每个设备配置一张设备控制表,用于记录设备的特性及I/O控制器连接的情况。 

    ②控制器控制表COCT

      每个控制器配置一张表,它反映控制器的使用状态以及和通道的连接状况等 。

    ③通道控制表CHCT

      为每个通道配置一张表,它反映通道的使用状态 。

    ④系统设备表SDT

      记录已被连接到系统中的所有物理设备的情况,每个物理设备占一个表目。整个系统配置一张

  2.设备分配过程

    ①分配设备 

    首先根据 I/O 请求中的物理设备名,查找系统设备表(SDT),从中找出该设备的 DCT

    再根据 DCT 中的设备状态字段,可知该设备是否正忙;

    若忙,便将请求 I/O 进程的 PCB 挂在设备队列上;否则,便按照一定的算法来计算本次设备分配的安全性。如果不会导致系统进入不安全状态,便将设备分配给请求进程;否则,仍将其 PCB 插入设备等待队列。 

    ②分配控制器 

    在系统把设备分配给请求 I/O 的进程后,再到其 DCT 中找出与该设备连接的控制器的 COCT,从 COCT 的状态字段中可知该控制器是否忙碌;

    若忙,便将请求 I/O 进程的 PCB 挂在该控制器的等待队列上;否则,便将该控制器分配给进程。 

    ③分配通道 

    在该COCT中又可找到与该控制器连接的通道的CHCT,再根据CHCT内的状态信息, 可知该通道是否忙碌;

    若忙,便将请求 I/O 的进程挂在该通道的等待队列上;否则,将该通道分配给进程。

只有在设备、 控制器和通道三者都分配成功时,这次的设备分配才算成功。 然后,便可启动该 I/O 设备进行数据传送。

  3.设备分配时应考虑的因素

    ①设备的固有属性:独占性,共享性,可虚拟性

  • 独占设备是不能同时共用的设备,即在一段时间内,该设备只允许一个进程独占
  • 共享设备允许多个进程同时共享
  • 虚拟设备是利用某种技术把独占设备改造成可由多个进程共享的设备 

    ②设备分配算法

    ③设备分配中的安全性

  • 安全分配方式 :每当进程发出I/O请求后,便进入阻塞状态,I/O操作完成后唤醒 摒弃了“请求和保持”条件,不会产生死锁 
  • 不安全分配方式 :进程发出I/O请求后仍继续运行 可操作多个设备,推进迅速 

四、逻辑设备名到物理设备名映射的实现  

  1.逻辑设备表(LUT) 

  用于实现将应用程序中的逻辑设备名映射为物理设备名。 

  2.逻辑设备表的设置

  整个系统中设置一张LUT;在多用户系统中,为每个用户设置一张LUT 。

  例子:当将针式打印机换成激光打印机时,我们仅修改逻辑设备表LUT的物理设备名和对应的驱动程序入口地址,而用户使用的逻辑设备名不做修改。  逻辑设备名不做修改则应用程序不做修改,提高了系统管理的可适应性。