操作系统:死锁

一、死锁的产生

1、产生死锁的原因

(1)资源竞争

(2)进程间推进顺序非法

2、产生死锁的必要条件

(1)互斥条件

        指进程对所分配的资源进行排他性使用,即在某一段时间内某资源只能被一个进程占有。如果此时还有其他进程请求该资源,则只能等待,直到占用该资源的进程使用完毕将其释放。

(2)请求和保持条件

        进程已经保持至少一个资源,此时又申请另一个资源,但是该资源被其他进程占有,该进程只能阻塞,但又对已经占有的资源保持不放。

(3)不剥夺条件

        进程已经占有的资源,在未使用完毕之前,不能被剥夺,只能在其被使用完毕之后自由释放。

(4)环路等待条件

        在发生死锁时,必然存在一个 “进程-资源环形链” {P0,P1,P2,P3,……,Pn},即进程 P0 正在等待 P1 占有的资源,P1 正在等待 P2 占用的资源,P2 正在等待 P3 占用的资源,……,Pn 正在等待 P0 占有的资源。

 

例1:

                P1               P2

KEEP: A                  B

REQU:B                  A

 

例2:

                P1               P2                 P3

KEEP: A                  B                   C

REQU:B                  C                   A

 

例3:

                 P1               P2

REQU: S2               S1

RELS:  S1               S2

 

例4

                 P1               P2                 P3

REQU: S3               S1                 S2

RELS:  S1               S2                 S3

 

二、处理死锁的办法

1、预防死锁

       只要打破四个必要条件之一就能有效预防死锁的发生,需要事先施加限制。

(1)打破互斥条件

        改独占资源为虚拟资源,大部分资源已无法改造。

(2)打破保持和请求条件

        使用资源预先分配策略,进程在运行前,申请全部资源,如果资源全部申请到就运行,否则继续等待,不占用资源,这样就不会保持且请求。

(3)打破不可剥夺条件

        使用资源主动释放策略,当进程占有一独占资源又申请另一独占资源时,如果申请无法满足,则释放占有的资源。

(4)打破循环等待条件

        使用资源有序分配策略,对所有资源进行编号,进程按编号递增顺序申请资源。

2、避免死锁

        使用某种措施,避免系统进入不安全区,最常用的方法是使用银行家算法,预判下一个状态是否存在一个进程安全序列。

3、检测死锁

        采取某种死锁检测机构,能够在死锁发生之后,快速检测到产生死锁的进程和资源。当系统检测到死锁以后,采取相应的策略,解除死锁。

        可完全简化 —— 在资源分配图中,如果能够通过不断消去 可运行的非阻塞非孤立进程节点的请求边和分配边,使所有进程节点成为孤立节点,则称改图是可完全简化的。

        死锁定理 —— 当且仅当S状态的资源分配图是不可完全简化的。

        根据死锁定理,可以采用与银行家算法类似的方法,检测死锁。

4、解除死锁

        当发现有进程死锁时,应立即把它们从死锁状态中解脱出来,常采用的方法有

(1)剥夺资源

        从其他进程剥夺足够的资源给发生死锁的进程,解除死锁状态。

(2)撤销进程

        撤销发生死锁的进程。直接全部撤销,或者逐个撤销,直到有足够的资源可用,使死锁状态解除为止。

 

 

参考链接

https://blog.csdn.net/flyqwang/article/details/6418288

https://baike.baidu.com/item/%E6%AD%BB%E9%94%81/2196938#1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值