8.3  设备分配

OS设备管理的功能之一就是为计算机系统接纳的每个作业分配它们所需要的外部设备。

8.3.1  设备分配原则

设备分配原则包含:
设备的固有特性,即该设备仅适于某进程独占还是可供几个进程共享;
设备分配算法,先请求先服务分配算法,优先级最高者优先算法;
设备分配的安全性,避免发生死锁。
(一)静态分配和动态分配
①静态分配:针对独占设备,一旦分配给某作业或进程,由它们独占使用;
②动态分配:针对共享设备,使一台设备交替的为多个进程服务。
(二)I/O设备分配算法
1.先请求行服务
将进程对设备的请求形成I/O请求块;将多个I/O请求块链成请求队列,按进程提出请求的先后顺序排列;
2.优先级最高者优先
I/O请求队列按发出请求的进程的优先级排序;
(三)设备分配的安全性
①针对独占设备,采用静态分配,否定发生死锁的互斥条件;
②针对共享设备,一个进程一次只能发出一个I/O请求,循环等待资源条件被否定,不会发生死锁;

③作死锁的检测工作。

8.3.2  虚拟设备技术

上独占设备的分配往往只能采用静态分配方式。这样是不利于提高系统效率的。
为了克服独占设备的这些缺点,操作系统可提供外部设备联机同时操作的功能,又称假脱机操作。外部设备联机同时操作即为SPOOL(Simultaneous Peripheral Operation On Line)。
预输入:在作业执行前,OS已将作业信息通过独占设备预先输入到磁鼓或磁盘上存放好,此后,作业执行使用数据时不必再启动独占设备读入,只需从磁鼓或磁盘输               入数据即可。
缓输出:作业执行中,不必直接启动独占设备输出数据,而只要将作业输出数据写入磁鼓或磁盘中存放,在作业执行完毕后,由OS来组织信息输出。
采用外部设备联机操作技术后,可把独占设备输入和输出的信息,先复制到辅助存储器的一个特定的存储区域(称之为“井”)中,当进程需要从输入设备上读入信息时,就把这一要求转换成从辅助存储器中读入的请求,并从辅助存储器中读入。输出时,先把要输出的信息存入辅助存储器,在适当的时候(如:当一个作业执行过错毕,或在外存中存储了一个逻辑意义完整的信息集合时),再通过相应的输出设备把它从辅助存储器中复制出来。也就是说,把一台不能共享的输入设备(或输出设备)转换成了一台可共享的缓冲输入设备(或输出设备)。上述过程可用图8.5示意。

 

图8.5  虚拟设备

因此,所谓虚拟技术,是在一类物理设备上模拟另一类物理设备的技术,是将独占设备转化为共享设备的技术。
通常把用来代替独占型设备的那部分外存空间(包括有关的控制表格)称为虚拟设备。这种功能的实现是由于系统采用了假脱机技术,它把独占设备改造成为共享设备,使得每一个用户感到好像拥有各类独占设备一样。在这种情况下,称操作系统给用户提供了虚拟设备。这样做改造了设备特性,提高了设备的利用率,有利于资源的动态分配。

8.3.3  慢速字符设备的分配

从设备分配的角度看,外部设备可分为独占设备和共享设备两类。虚拟技术把独占设备改造为共享设备,这样,它不过是独占与共享分配的特殊情况。对于设备的分配,都须作出静态和动态分配的决定。静态决定主要涉及确定将哪些独享和共享设备分配给一个作业的问题。独占设备一旦分配给作业后即为该作业在整个运行期间所独占。共享设备在进程提出I/O请求进还须实施动态分配。下面主要讨论独占设备(慢速字符设备)分配中所需的数据结构及其相应的分配程序。
(一)分配机构
用于慢速字符设备分配的数据结构有设备类表和设备表。系统建立一张设备类表,每类设备对应设备类表中的一栏。该表说明了各类设备拥有的设备台数、现存台数,以及对于每类设备的设备表的始址。而每一类设备又具有各自的设备表。它们的具体格式分别如表8.2和8.3所示。
表8.2  设备类表


设备类

拥有设备台数

现有台数

设备表始址

 

表8.3  设备表


物理设备名

逻辑设备名

占有设备作业号

已/末分配

好/坏

设备表始址

 

 

 

 

 

各类设备如纸带输入机、电传输入机、行式打印机等等都有各自的设备表,它用来登记该类设备中每一台的情况。例如,设备的物理名(或设备地址码)、设备的逻辑名。这是为了提供“设备的独立性”功能,建立设备的物理名和逻辑名之间的对应关系而设置的。还有用于分配的信息,例如,设备是已分配的还是空闲的、设备是否能正常使用等。另外,还指出该设备控制块首址。设备控制块反映了设备的硬件特性并记录了用于控制传输所必需的状态信息。
(二)分配程序
下面我们提出一个I/O设备分配程序方案。
作业在执行前,应对它所需的I/O设备提出分配申请,即以逻辑设备名提出申请分配某类设备多少台,然后由系统根据设备类表和各设备表的信息进行分配。系统进行设备分配时,先根据申请分配的设备类查设备类表,如果该类设备现存台数可以满足申请要求,变继续进行分配工作,否则申请被拒绝。分配时,系统依次查设备表,找出未分配且是好的那些设备对应的各栏,将申请者的作业号等项填入对应栏,这样分配工作就远成了。图8.6给出了申请某类设备若干台的分配工作流程(若申请多种类型的设备只须将此流程图稍作修改即可)。由上述过程可看出,在进行设备分配时建立了设备的物理名和逻辑名的对应关系。由于用户申请时不指明外部设备的具体台号,因此,在编制程序时,也不知道运行时将启动哪台外部设备。所以,作业在执行中要启动外部设备时,也只能给出外部设备的逻辑名。例如,某作业要求使用两台纸带输入机时,它可以定义0和1为这两台纸输入机的逻辑号。进程是通过系统调用命令启动纸带输入机的。系统调用命令的参数中给出了“设备类”和“逻辑号”。假如设备类是纸带输入机,逻辑号为1,那就表示要求启动逻辑号为1的那台纸带输入机。操作系统每当分配外部设备时,就在设备表中填写“物理名”和“逻辑号”。由于有上述的对庆关系,因此,从设备类逻辑号很容易查出相应外部设备的物理号,也可得到该设备的设备控制块(dcb)首址,从而获得控制该设备所需的一切信息。
 

图8.6  慢速字符设备分配流程

在单作业系统中,因为系统不需要为作业分配外部设备,相当于所有的外部设备都已分配给这个作业,这时用于设备分配的表就变成一张系统表。这张表登记了系统所拥有的所有设备的物理名及dcb表首址,称为“设备名称表”。因不分配外部设备,故作业使用的设备逻辑名和物理名的参应关系只能由用户直接用程序来定义。也就是说,在正式用逻辑名使用设备之前,应该用系统调用命令告诉系统逻辑设备所对应的实际设备名称(或号),然后由操作系统在执行此系统调用命令时填写这个对应关系。

 
 Copyright © 2007 华中师范大学计算机科学系  All Rights Reserved