如何理解操作系统的资源分配图呢?

资源分配图是死锁的一种准确而形象地描述,通过资源分配图,可以对当前系统资源分 配和申请情况一目了然,便于对死锁进行分析并采取对策。

一、资源分配图

资源分配图是一张有向图,一个系统资源分配图SRAG (System Resource Allocation Graph)可定义为一个二元组,即SRAG= (V, E),其中V是顶点的集合,而E是有向边的集合。顶点集合可分为两种部分:P= (P1,P2,…,Pn),是由系统内的所有进程组成的集合,每一个P代表一个进程;R = (r1,r2,…,rn),是系统内所有资源组成的集合, 每一个r代表一类资源。

在有向图中,用圆圈表示进程,用方框表示每类资源。每一类资源r,可能有多个实例, 可用方框中的圆点(实心圆点)表示各个资源实例。申请边为从进程到资源的有向边,表示进程申请一个资源,但当前该进程在等待该资源。分配边为从资源到进程的有向边,表示 有一个资源实例分配给进程。注意:一条申请边仅指向代表资源类的方框,表示申请时不 指定哪一个资源实例,而分配边必须由方框中的圆点引出,表明哪一个资源实例已被占有。

当进程P,请求资源类r的一个实例时,将一条请求边加人资源分配图,如果这个请求是 可以满足的,则该请求边立即转换成分配边;

当进程随后释放了某个资源时,则删除分配边。图5-10是一个资源分配图的示例。

图5-10给出的内容如下。

集合P,R,E分别为:

P = {P1,P2,P3} R = { r1, r2, r3, r4}

E = {< P1,r1>,< P2,r2>,< r1,P2>,< r2,P3>,< r3,P1 >,< r3,P2>}

资源实例个数为:

I r1|= 1,| r2 | =1,| r3 | =2,| r4 | =3

进程状态如下

(1)进程h已占用一个r3类资源,且正在等待获得一个r1类资源。

(2)进程P2已占用r1和r3类资源各一个且正在等待获得一个r2类资源。

(3)进程P3已占用一个r2类资源。

二、死锁定理

基于上述资源分配图的定义,可给出判定死锁的法则,又称为死锁定理。

(1)如果资源分配图中没有环路,则系统没有死锁。

(2)如果资源分配图中出现了环路,则系统中可能存在死锁。

①如果处于环路中的每个资源类中均只包含一个资源实例,则环路的存在即意味着死 锁的存在。此时,环路是死锁的充分必要条件。

②如果处于环路中的每个资源类中资源实例的个数不全为1,则环路的存在是产生死锁 的必要条件而不是充分条件。

以图5-11中的资源分配图为例,假设此时进程P3申请一个r3类资源,由于此时r2已没有可用资源,于是在图中加人一条新的申请边< P3, r3>,如图5-11所示。

此时,资源分配图中有两个环路:

P1—>r1—>P2—>r2—>P3—>r3—>P1

P2 —>r2 —>P3 —>r3 —>P2

显然,进程P1,P2,P3都陷入了死锁,因为进程P3正在等待进程P1或P2释放r3类资源中的—个实例,但P2又在等待P3释放r2, P1又在等待P2释放r1。

在图5-12所示的资源分配图中也存在一个环路:

P1—>r1一>P3一>r2一>P1

但系统没有产生死锁,因为当P4释放了一个r2类资源后,可将它分给P3或者P2释放 一个r1类资源后将它分给P1,这两种情况下环路都消失了,因而不会发生死锁。

由此可见,资源分配图中有环路,则可能发生死锁,也可能没有死锁。

三、资源分配图化简方法

可以利用资源分配图化简方法,来检测系统是否为死锁状态。

所谓化简是指若一个进程的所有资源请求均能被满足,可以设想该进程得到其所需的全部资源,最终完成任务,运行完毕,并释放所占有的全部资源。在这种情况下,则称资源分配图可以被该进程化简。假如一个资源分配图可被其所有进程化简,那么称该图是可化简的,否则称该图是不可化简的。

化简方法如下:

(1)在资源分配图中,找出一个既非等待又非孤立的进程结点Pi,由于Pi可获得它所需要的全部资源,且运行完后释放它所占有的全部资源,故可在资源分配图中消去Pi所有的申请边和分配边,使之成为既无申请边又无分配边的孤立结点。

(2)将Pi所释放的资源分配给申请它们的进程,即在资源分配图中将这些进程对资源的申请边改为分配边。

(3)重复1)、2)两1步骤,直到找不到符合条件的进程结点。

经过化简后,若能消去资源分配图中的所有边,使所有进程都成为孤立结点,则该图是可完全化简的;否则为不可化简的。

对于较复杂的资源分配图,可能有多个既非等待、又非孤立的进程结点,不同的简化过程是否会得到不同的化简图呢?可以证明,所有的化简顺序将导致相同的不可简化图。同样可以证 明,系统处于死锁状态的充分条件是,当且仅当该系统的资源分配图是不可完全简化的。

以图5-11和图5-12为例,说明资源分配图的化简过程以及得出的结论。在图5-11中, 找不到任何一个既非等待、又非孤立的进程结点,所以该资源分配图是不可化简的,根据上述介绍,该系统发生了死锁。在图5-12中,首先找到既非等待、又非孤立的P4结点,消去其分配边,得到一个可用的资源r2,由于P3有一条对r2的申请边,可将该资源分配给P2, 即将P2的申请边改为分配边。在得到的新的资源分配图中,可以找到既非等待、又非孤立的进程结点P3,继续将相应的分配边消去,并将P1对r1的申请边改为分配边;……最终资 源分配图中的所有进程结点都变成孤立结点,资源分配图是可化简的,所以可以得出结论, 该系统没有发生死锁。在图5-11中,可以先挑出进程结点P2,结论是一致的。

评论 1 您还未登录,请先 登录 后发表或查看评论
相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值