设备管理学习之设备分配
一、设备分配的策略
为了使系统能够安全高效地工作,系统在进行设备分配时应考虑的因素有:⑴设备的固有属性;⑵设备的分配算法;⑶设备分配的安全性。
1.根据设备的固有属性而采取的策略
在分配设备时,首先应考虑设备的属性。根据设备的固有属性采取以下三种策略:
(1)独享方式
独享方式是指将一个设备分配给某进程后,便一直由它独占,直至该进程完成或释放该设备为止,系统才能将该设备分配给其它进程使用。这种分配方式是对独占设备采用的分配策略。它不仅往往造成设备利用率低,而且还会引起系统死锁。
(2)共享方式
共享方式是指将共享设备(磁盘)同时分配给多个进程使用。但是这些进程对设备的访问需进行合理的调度。
(3)虚拟方式
虚拟方式是指通过高速的共享设备,把一台慢速的以独占方式工作的物理设备改造成若干台虚拟的同类逻辑设备,这就需要引入SPOOLing技术。虚拟设备属于逻辑设备。
2.设备分配算法
与进程的调度算法相似,通常只采用以下两种分配算法:
(1)先来先服务
当多个进程同时向某一设备提出I/O请求时,该算法就根据对该设备提出请求的先后次序将这些进程排列成一个设备请求队列,设备分配程序把设备首先分配给队首进程。
(2)优先级高者优先
对优先权高的进程所提出的I/O请求赋予高优先权,在形成设备队列时,将优先级高的进程排在设备队列前面,先得到分配。而对于优先权相同的I/O请求,则按先来先服务原则排队分配。
3.设备分配中的安全性
(1)安全分配方式
每当进程发出一个I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。当它运行时不保持任何设备资源,打破了产生死锁一个必要条件—“请求和保持”,所以这种分配方式是安全的。但是这种分配算法使得CPU与I/O设备串行工作,设备的利用率比较低。
(2)不安全分配方式
进程发出一个I/O请求后仍可以继续运行,需要时还可以发第二个I/O请求、第三个I/O请求。只有当进程所请求的设备已被另一个进程占用时,进程才进入阻塞状态。这种分配方式是不安全,因为它可能具备“请求和保持”条件,从而可能造成系统死锁。如图2-15所示进程P1发出第一个I/O请求,占有了资源R1后,在继续向前推进时,又要申请资源R2;此时,进程P2却占有了资源R2,在继续向前推进时,又要申请资源R1,从而造成系统死锁。所以,在设备分配程序中应该增加安全性检查的功能。
二、独享设备的分配程序
主机系统的独享设备分配程序是负责向对系统提出I/O请求的进程分配设备,及其相应的控制器和通道。
1.设备分配中数据结构
在进行设备分配时,通常要借助于一些用于记录系统中有关设备、控制器和通道的信息。基本的表格有:系统设备表(SDT)、设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)。每个表的具体内容如图4-13所示。
在整个系统中,有一张系统设备表(SDT),用于记录系统中全部设备的信息。每个设备占一个表目,其中包括物理设备类型、设备标识符、设备控制表指针及设备驱动程序的入口地址等表项。
系统为每一个设备都配置了一张设备控制表(DCT),用于记录该设备的情况。表中除了有用于指示设备类型的字段和设备标识符字段外,还应有下列字段:
(1)设备状态:当设备自身处于“忙”状态时,将设备的忙标志置“l”。若与该设备相连接的控制器或通道处于“忙”状态,而不能启动该设备,则将设备的等待标志置“l”。
(2)设备队列的队首、队尾指针:凡因请求本设备而未得到满足的进程,其PCB都应按照一定的策略排成一个队列,称为设备请求队列或简称为设备队列。其队首、队尾指针指向设备请求队列的队首、队尾的PCB。
(3)COCT表指针:该指针指向与该设备相连接的控制器的控制表。在具有多条通路的情况下,一个设备可与多个控制器相连接。此时,在DCT中应设置多个控制器表指针。
(4)重复执行次数:外部设备在传送数据时,若发生信息传送错误,系统并不立即认为传送失败,而是允许它重新传送。只要在规定的重复次数或时间内恢复正常传送,则仍认为传送成功,否则才认为传送失败。
系统也为每个控制器设置一张用于记录本控制器情况的控制器控制表(COCT),为每个通道都配有一张通道控制表(CHCT)。
2.单通道的系统设备分配程序
对于具有单通道的系统,则当进程提出I/O请求后,系统依次查找图4-13的SDT和DCT、COCT、CHCT四个表,分别从中找出设备、相连的控制器、通道,根据相应表目状态字可知它是否正忙(DCT表目还要看状态字是否等待)。若忙,便将请求I/O进程的PCB挂在它的等待队列上;否则,便将它分配给进程。只有在设备、控制器和通道三者都分配成功时,这次的设备分配才算成功。然后,便可启动该I/O设备进行数据传送。
3.设备分配程序的改进
为了获得设备的独立性,进程应用逻辑设备名代替物理设备名请求I/O。这样,系统首先从 SDT中找出同类设备的DCT集合表。从集合表中寻找不忙的设备进行分配,若找不到则将进程阻塞,排入该类设备的等待队列中。
实际上,系统为了提高可靠性和灵活性,通常采用多通路的I/O系统结构。此时对多个控制器和通道的分配,必须查找所有的控制器和通道,才能决定是否将该进程挂起。