• 操作系统


    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
  • 相关阅读:
    无线网络中,使用MDK3把指定的用户或者热点踢到掉线
    TCP/IP, UDP, ICMP, ARP协议族简介--纯图慎点
    大数据 Hibernate
    Activiti task claim concurrent
    C++ Java throw goto
    杀死Linux中的defunct进程(僵尸进程)的方法指南
    JQuery selector form input
    帆软 联合 创始人 数据可视化 中国 发展 FineReport FineBI
    Eclipse创建Maven父子项目
    Tomcat Response encode
  • 原文地址:https://www.cnblogs.com/zhizhan/p/4822002.html
Copyright © 2020-2023  润新知