7.2.9 设备分配与回收

当进程向系统提出I/O请求时,由设备分配程序按照一定的策略依次分配设备、分配设备控制器、分配通道,形成一条数据传输通路,供I/O与主机进行信息交换。I/O操作完成后,由设备分配程序按照一定的策略回收分配出去的设备。在进行设备分配时,需要考虑的因素有:设备的固有属性;设备分配算法;设备分配的安全性;设备独立性。

1.设备分配数据结构

实现设备分配,需要在系统中建立相应的数据结构,主要是设备类表和设备表。

(1)设备控制表

系统为每一个设备设置了一张设备控制表(Device Control Table,DCT),用于记录设备的状况、设备与控制器的连接情况。设备控制表中除了设备类型和设备标志符字段外,还包括设备队列队首指针、设备状态、与设备连接的控制器表指针、重复执行次数等。

(2)控制器控制表

系统为每一个设备控制器设置了一张控制器控制表(Controller Control Table,COCT),用于记录本控制器的使用状态和与对应通道的连接状况。主要表项有控制器标志符、控制器状态、控制器等待队列指针、通道控制器指针等。

(3)通道控制表

每个通道都配有一张通道控制表(Channel Control Table,CHCT),用于记录通道的使用状态和与对应设备控制器的连接状况。主要表项有通道标志符、通道状态、通道等待队列指针、控制器控制表指针等。

(4)系统设备表

整个系统配有一张系统设备表(System Device Table,SDT),用于记录整个系统所有设备的使用情况。每个设备占一个表目,其中包括设备类型、设备标志符、设备控制表指针以及设备驱动程序的入口等内容。

2.设备分配方式

设备分配和回收方式因设备类型的差异而不同。通常,对于独占设备、共享设备和虚拟设备采用相应的管理和分配策略。

(1)静态分配方式

在进程创建时分配,在进程退出时释放。由于设备在进程运行前就一次性分配完成,不会出现死锁,但设备利用率不高。

(2)动态分配方式

进程执行过程中根据需要在提出申请后,由设备管理模块进行设备分配,进程使用完毕后立即释放。该方式有利于提高设备利用率。但是,由于这类设备的独占性是产生死锁的必要条件之一,因此在实施设备动态分配方式时必须考虑分配的安全性,避免由于分配不当而导致死锁发生。

3.设备分配算法

(1)先来先服务

当有多个进程对同一设备提出I/O请求时,该算法是根据进程对某设备提出请求的先后次序,将这些进程排成一个设备请求队列,设备分配程序总是把设备首先分配给队首进程。

(2)优先级高者优先

在进程调度中的这种策略,是优先权高的进程优先获得处理机。这种高优先权进程所提出的I/O请求,赋予高优先权显然有利于这种进程尽快完成。在利用该算法形成设备队列时。将优先级高的进程排在设备队列前面,而对于优先级相同的I/O请求,则按先来先服务原则排队。

4.设备分配中的安全性

从进程运行的安全性上考虑,设备分配有以下两种方式。

(1)安全分配方式

每当进程发出I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。这种分配方式破坏了死锁的4个必要条件之一的“请求和保持”条件,因而分配是安全的。

(2)不安全分配方式

一个进程可同时控制,或者操作多个设备,从而使进程推进迅速,其缺点是分配不安全,因而它可能具备“请求和保持”条件,从而可能造成死锁。

5.独占设备的分配与回收

采用独享分配策略,即将一个设备分配给某个作业或进程之后,一直由该作业或进程独占,直至该进程完成或释放该设备,此设备才能由系统分配给其他作业或进程使用。对于独占设备,系统可以采用静态分配方式,也可采用动态分配方式。

由于单个作业或进程往往不是连续地、自始至终地使用某台设备,所以静态分配方式下的设备利用率较低。为了提高设备利用率,可采用动态分配方式,即将设备的分配推迟到作业或进程真正使用某设备时才进行,并且一旦停止使用便立即收回,而不管整个作业或进程是否运行结束。

独占设备的分配策略可以采用先来先服务算法或者优先级高者优先算法。在配有通道的计算机系统中,实施分配时应考虑整个数据传输通路的分配,即同时要分配设备以及与其相连的控制器和通道。

6.共享设备的分配与回收

采用共享分配策略,即进行动态分配。共享设备可以同时被分配给多个进程使用,来自不同进程的I/O传输可以以块为单位交叉进行。在多道程序系统中,各个进程对共享设备的访问极其频繁,因而对共享设备的管理相对比较复杂,操作系统应准备随时进行设备的分配和回收,还要保证当两个以上的进程需要同时使用某个共享设备时,确定一个合理的服务次序。此外,还要考虑如何合理利用设备以改善系统的性能,例如,磁盘管理中,要合理选择竞争的使用要求,使得磁头移动距离最短,这需要制定磁盘调度策略。

7.虚拟设备的分配与回收

虚拟设备实际上就是代替独占设备的那部分外存空间及有关的控制结构。对虚拟设备采用虚拟分配,即当进程申请独占设备时,系统就将共享设备的一部分存储空间分配给它,当进程与独占设备进行信息交换时,系统先将要交换的信息存放在那部分存储空间中,在适当的时候,如独占设备空闲,再对这些信息进行相应的处理。

因为虚拟设备已属可共享设备,因而也可将它分配给多个进程使用,系统同样需要控制这些进程对虚拟设备的先后访问次序。