操作系统专题——死锁

来源:互联网 发布:淘宝换货要申请吗 编辑:程序博客网 时间:2024/05/01 13:10

死锁概念:

                两个或以上进程因为争夺资源互相等待,若无外力,将无法继续推进——百度百科


死锁的产生条件:

        (1)互斥条件:资源不能共享,具有排他性,一段时间内资源仅由一个进程占用

        (2)请求与保持条件:当进程向申请其他资源时,资源被另一进程占用,导致请求阻塞,然而此进程却仍然持有原有资                                                          源而不释放。

        (3)不剥夺条件:在进程未使用完资源时,资源无法被系统强行回收。

        (4)环路等待条件:进程之间形成环路链,如{P0,P1,P2...PN},P0请求P1,P1请求P2,...PN-1请求PN,PN请求P1。


处理死锁的策略:

         (1)死锁预防:破坏上述死锁必要条件中的任意一个即可。

         (2)死锁避免:进程在资源申请之前,预判安全性。(可以使用算法,ex:银行家算法)

         (3)死锁检测:判断系统是否处于死锁,若是,则进行死锁解除。

         (4)死锁解除:强行回收部分进程资源,一般是撤销或挂起进程,回收资源再分配给其他阻塞状态进程。


附:银行家算法

         我们可以把操作系统类比银行家,系统资源类比银行资金,进程请求资源类比用户请求贷款。

        

         银行家原则:[注:Max_req:用户最大需求资金  ; Max_cur:银行家现有资金量]

                 (1)当Max_req <= Max_cur时,银行家可接纳用户;

                 (2)顾客可分期贷款,但Max_req <= Max_cur;

                 (3)当用户当期贷款数额大于银行现有资金时,银行推迟放贷,并保证用户在有限时间内得到贷款;

                 (4)当用户得到所有贷款后,必须在有限时间偿还贷款;

         当进程首次申请资源时,要测试该进程对资源的最大需求量如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。




0 0