http://book.51cto.com/art/201306/399686.htm
例题解析(5)
【例3-3-42】设系统中仅有一类数量为M的独占型资源,系统中N个进程竞争该类资源,其中各进程对该类资源的最大需求量为W,当M、N、W分别取下列值时,试判断哪些情况会发生死锁,为什么?
(1)M 2,N=2,W=1
(2)M=3,N=2,W=2
(3)M=3,N=2,W=3
(4)M=5,N=3,W=2
(5)M=6,N=3,W=3
解:在资源分配系统中,死锁发生的原因是由于多个进程共享有限的独占型资源。当多个进程占有了部分资源又需要更多的资源时,就可能形成循环等待链而导致死锁。
假设系统中的某种资源的个数为M,共享该资源的进程数为N,每个进程对该资源的最大需求量为W。最极端的资源分配情况是:每个进程都已经占有了W-1个资源,同时都需要再分配一个资源,这时如果要保证不发生死锁,系统中必须至少还有一个可分配的资源,即M满足关系式:M≥N(W-1)+1。
因此保证系统不会发生死锁的最小M值为:M=N(W-1)+1。
(1)N(W-1)+1=2×0+1=1,而M=3,即M≥N(W-1)+1成立,故不会出现死锁。
(2)N(W-1)+1=2×1+1=3,而M=3,即M≥N(W-1)+1成立,故不会出现死锁。
(3)N(W-1)+1=2×2+1=5,而M=3,即M≥N(W-1)+1不成立,故可能出现死锁。出现死锁的情况是:两个进程一个占用2个资源,一个占用1个资源,同时都需要再分配资源。
(4)N(W-1)+1=3×1+1=4,而M=5,即M≥N(W-1)+1成立,故不会出现死锁。
(5)N(W-1)+1=3×2+1=7,而M=6,即M≥N(W-1)+1不成立,故可能出现死锁。出现死锁的情况是:3个进程都已经占有了2个资源,同时都需要再分配一个资源。
【例3-3-43】一台计算机有8台磁带机。它们由N个进程竞争使用,每个进程可能需要3台磁带机。请问N为多少时,系统没有死锁危险,并说明原因。
解:当N为1、2、3时,系统没有产生死锁的危险。因为,当系统中只有1个进程时,它最多需要3台磁带机,而系统有8台磁带机,其资源个数已足够系统内的1个进程使用,因此绝不可能发生死锁;当系统中有2个进程时,最多需要6台磁带机,而系统有8台磁带机,其资源个数也足够系统内的2个进程使用,因此也不可能发生死锁;当系统中有3个进程时,无论系统如何分配资源,3个进程中必有进程可以获得3台磁带机,该进程已获得了它所需要的全部资源并将顺利运行完毕,从而可将它占有的3个资源归还给系统,这就保证了其余进程能顺利运行完毕。当N>3时,若资源分配及释放顺序不当时,系统有可能出现死锁。
由此可知,当N为1、2、3时,该系统不会由于对这种资源的竞争而产生死锁。
【例3-3-44】回答以下问题:
(1)3个进程共享4个同类型资源,每个进程最大需要两个资源,请问该系统是否会因为竞争该资源而死锁?
(2)n个进程(编号为1~n)共享m个同类资源,若每个进程都需要用该类资源,且各进程最大需求量之和小于m+n,试证明这个系统不会因为竞争该资源而发生死锁。
Max(1)+…+Max(n)=Need(1)+…+Need(n)+Alloc(1)+…+Alloc(n)<m+n
(3)在(2)中,如果没有"每个进程都需要用该类资源"的限制,情况又会如何?
解:(1)该系统不会因为竞争该资源而死锁。因为必有一个进程获得两个资源,故能顺利完成,并释放给其他进程使用,使它们也顺利完成。
(2)根据题意有:Need(i)>0, <m+n
若系统进入死锁状态,则意味有一个以上进程因申请不到资源而无限阻塞,而m个资源已全部分配出去,即: =m。
因此, = - <m+n-m=n,即 <n。
这样,至少存在一个进程,其Need(i)≤0,这显然与题意不符,所以该系统不可能因竞争该类资源而进入死锁状态。
(3)此时系统可能发生死锁,如n=4,m=3时,若进程P1的Max为0,而其余3个进程P2、P3、P4的Max都为2,则仍然满足最大需求量之和(即6)小于m+n(即7)的要求,但当除P1以外的其余3个进程P2、P3、P4各得到一个资源时,这3个进程将进入死锁状态。
【例3-3-45】Dijkstra于1965年提出的银行家算法,其主要思想是什么?它能够用来解决实际中的死锁问题吗?为什么?
解:银行家算法是避免死锁的一种方法,其实现思想是:允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利的完成),便将资源分配给进程,否则不分配资源,让进程等待。
银行家算法具有较好的理论意义,但在实际系统中却难以实施。其原因是:难以预先获得进程申请的最大资源数;运行过程中进程的个数是不断变化的,所以银行家算法难以用来解决实际中的死锁问题。
【例3-3-46】一个系统具有150个存储单元,在T0时刻按表3.7所示分配给3个进程。
表3.7 3个进程分配情况
进程 | 最大需求存储单元 | 当前已分配单元数 |
P1
|
70 | 25 |
P2
|
60 | 40 |
P3
|
60 | 45 |