死锁

死锁

在多道程序系统中,由于多个进程分别以各自独立的速度向前推进,因此带来了另外的一个问题——死锁。

p:打印机的信号量,且规定这个计算机中只有一个打印机,一个扫描仪。

s:扫描仪的信号量。P1、P2分别是两个进程;

P1:

main()

{

        P(p);

        开始输出;

        P(s);

        进行输入;

        V(s);

        继续输出;

        V(p);

}

P2:

main()

{

        P(s);

        进行输入;

        P(p);

        进行输出;

        V(p);

        继续扫描;

        V(s);

}

当两个进程各自以独立的速度向前推进时,当P1使用打印机时,P2正好在使用扫描仪,则两个进程就全部陷入死锁状态,在没有外力的作用下,两个进程都将一直处于堵塞状态。

死锁产生的原因和必要条件:

资源的不同性质是引起系统死锁的原因。如:对可剥夺资源的竞争不会引起进程死锁,而对其他类型资源的竞争则有可能引起死锁。

1、资源分类。

操作系统是一个资源管理程序,负责分配不同类型的资源给进程使用。可以把资源分为可剥夺资源和不可剥夺资源。可剥夺资源是指虽然占有资源的进程仍然需要使用该资源,但另一个进程可以强行把该资源从占有进程处剥夺过来给自己使用。不可剥夺资源是指除占有该资源的进程不再需要使用资源而主动释放资源外,其他进程不得在占有进程资源使用过程强行剥夺。一个资源是否使用可剥夺资源,完全取决于资源本身的性质。如果资源剥夺后不会产生任何不利影响,则该资源属于可剥夺资源,如果资源被剥夺后会引起有关工作的失效,则它就属于不可剥夺资源。例如:打印机属于不可剥夺资源,CPU是可剥夺资源,多个进程共享CPU不会产生任何影响。

如果按资源使用期限看,则可以将资源分为可再次使用的永久资源和消耗性的临时资源。一般来说,硬件资源都属于可再次使用的永久资源,在进程同步和通信中出现的消息、信号和数据也可以看作资源,他们属于消耗性的临时资源,因为类似这些消息,在接受消息的进程处理后,就将这些消息撤销了,不再存在了。对永久资源和临时资源的使用都有可能造成死锁。

2、死锁产生的原因

死锁产生的原因之一是竞争资源,当系统中由多个进程并发执行时,若系统中的资源不能满足多个进程的要求,这会引起资源的竞争,可能会引起死锁。上面就是一个因为资源的竞争而造成死锁的很好的例子。死锁产生的另一个原因是进程的推进顺序不当。竞争资源可能会造成死锁,但资源竞争并不等于死锁,只有在进程运行过程中请求和释放资源的顺序不当时才有可能会造成死锁。

死锁的四个必要条件。

(1)、互斥条件,进程要求对所分配的资源进行排他性控制,即在一段时间内某资源仅为一个进程所占有。

(2)、不剥夺条件。进程所获得的资源在未使用完毕之前,不能被其他进程强行占用,只能有获得该资源的进程自己释放该资源。

(3)、请求和保持条件。在等待分配新资源的同时,进程继续占有已分配到的资源。请求和保持条件又称为占有且等待条件、部分分配条件。

(4)、循环等待条件。存在一种进程的循环等待链,链中的每一个进程已获得的资源同时被链中的下一个进程申请。

只要有一个不成立,则系统不会出现死锁。

处理死锁的方法。

1.忽略死锁。2.预防死锁。通过设置某些限制条件,去破坏死锁的四个必要条件之中的一个或几个来预防死锁。

3.避免死锁。在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。

4.检测及解除死锁。通过系统的检测机构及时的检测出死锁,然后采取某种措施解除死锁。

死锁的预防。只要破坏死锁产生的四个条件即可。

1.互斥条件。为了破坏互斥条件,就要允许多个进程同时访问资源。但是这会受到资源本身的限制,有些资源不允许同时被多个进程访问,如打印机。

2.不剥夺条件。破坏不剥夺资源可以制定这样的策略:一个已获得乐某些资源的进程,若请求的资源不能访问,则它必须释放本身拥有的所有资源,以后需要资源时再次申请。这意味着,一个进程已获得的资源在运行时可以被剥夺,从而破坏了不剥夺条件。该策略实现起来有些复杂,释放已获得的资源可能会导致之前的工作失效,重复申请和释放资源会增加系统开销,降低系统吞吐量。此法一般用于状态易于保存和恢复的资源,如CPU的寄存器及内存资源,一般不能用于打印机类的资源。

3.请求和等待条件。破坏此条件可以采用静态分配法。静态分配法要求进程在其运行之前就一次申请它需要的全部资源,在它的资源未满足前,不能把它投入运行。一旦投入运行后,这些资源就一直归它所有,也不再提出其他资源要求,这样就可以保证系统不会发生死锁。不足:降低了资源利用率。

4.循环等待条件。为了破坏循环等待条件,可以采用有序资源分配法。实现思想:将系统中的所有资源都按类型赋予一个编号(如打印机为1,磁带机为2,等等),要求每一个进程均(严格)按照标号递增的次序来申请资源,同类资源一起申请完。即当一个进程申请编号为i的资源时,以后的进程只能申请到i后的资源。不足:限制了新设备的增加。

死锁的避免。

预防死锁中的策略对资源的使用施加了较强的限制条件,虽然实现起来比较简单,但是都严重破坏了系统的性能。在死锁的避免方法中,不对进程申请资源添加限制条件,而是检查进程的资源申请是否会导致系统进入不安全状态,只要能使系统始终处于安全状态,便可以避免死锁的产生。

1.安全状态与不安全状态。

在避免死锁的方法中,允许进程动态的申请资源,系统在进行资源分配之前,要对系统的安全性进行计算。若此次分配不会导致系统进入不安全状态,便分配资源给进程,否则等待。

如果在某一时刻,系统能按照某种顺序如<P1,P2,P3,P4,···,Pn>来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利运行完成,则称此时的系统状态为安全状态,称<P1,P2,P3,P4,···,Pn>是安全序列。若某一时刻,系统中不存在一个这样的序列,则称此时的系统状态为不安全状态。虽然并非所有不安全状态都是死锁状态,但当系统进入不安全状态后可能会使系统进入死锁状态;反之,若系统处于安全状态,则可以避免进入死锁状态。系统可以从安全状态转变为不安全状态。

2.银行家算法。

死锁的检测和解除。死锁避免和死锁预防都是在系统为进程分配资源时施加限制条件或进行检测,若系统为进程分配资源时不采取任何措施,则应该提供死锁检测和死锁解除机制。

1.资源分配图。检测死锁的基本思想是在OS中保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以判断是否存在死锁。为此。将进程和资源间的申请和分配关系描述成一个有向图——资源分配图。

资源分配图又称为进程—资源图,该图由一组节点N和一组边E组成,具有下列形式的定义和限制:

(1)N被分为两个互斥的子集,一个是进程点子集P={p1,p2,p3,···,pn},另一个是资源结点子集R={r1,r2,...,rm},N = P并R。

(2)凡属于E中的一条边e属于E,都连接着P中的一个结点pi和R中的一个结点rj,e = {pi,rj}是资源请求边,由进程结点指向资源结点,它表示进程pi请求一个单位的rj资源。e = {rj,pi}是资源分配边,由资源结点指向进程结点,它表示把一个单位的rj分配给pi。

通常用圆圈代表一个进程,用方框代表一类资源,由于一类资源可能有多个,用方框中的一个小圆圈代表一类资源中的一个资源。

2.死锁定理。可以用资源分配图简化的方法来检测系统状态S是否为死锁状态。

(1)、在资源分配图中,找出一个既不堵塞又非孤立的进程结点pi(即从进程集合中找到一个有边与它相连,且申请数量小于系统中已有空闲资源数量的进程)。因进程pi获得了它所需要的全部资源,它能继续运行直至完成,然后释放它所占有的所有资源。这相当于消去pi的所有请求边和所有分配边,使之成为孤立的结点。

(2)、进程pi释放资源后,可以唤醒因等待这些资源而堵塞的进程,原来堵塞的进程可能变为非堵塞进程。再根据(1)的步骤对图继续进行化简,直到找不出一个既不堵塞又非孤立的进程结点为止。若能消去图中所有的边,使所有的进程结点全部变为孤立结点,则称图是完全简化的,否则为不可完全简化的。

所有的简化顺序会得到相同的不可简化图。S为死锁的条件是:S状态的资源分配图为不可完全简化的,该定理称为死锁定理。

3.死锁检测算法。

死锁检测算法的思想是是否存在一组可以实现的系统状态,能使所有的进程都得到他们所申请的资源而运行结束。

4.死锁解除算法。

(1)、资源剥夺法,当发现死锁后,从其他进程那里剥夺足够数量的资源给死锁进程以解除死锁状态。

(2)、撤销进程法,最简单的方法是撤销全部死锁进程,使系统恢复到正常状态,但是代价太大。另一方法是按照某种顺序逐个撤销死锁进程,直到有足够的资源供其他未被撤销的进程使用,解除死锁状态为止。
































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值