进程死锁总结

死锁的定义:

死锁是指多个进程在运行过程中由于争夺资源而造成的一种僵局,若无外力作用,它们都将无法推进下去。此时系统处于一种死锁状态,这些互相等待的进程称之为死锁进程。

注意:通过系统资源分配图可以更精确地描述死锁。

死锁产生的原因:

(1)竞争资源。

比如:进程P1持有资源R1,它需要资源R2才能完成运行从而释放资源R1;进程P2持有资源R2,它需要资源R1才能完成运行从而释放资源R2;此时,系统就进入了一种僵局,死锁发生。

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

系统资源分配图:

由进程集合P、资源集合R和边集合E组成。

P_i -> R_j:表示申请边。进程P_i申请了资源R_j。申请边由进程(圆圈表示)指向资源(矩形框表示)。

R_j -> P_i:表示分配变。资源R_j分配给了进程P_i。分配边由资源(矩形框内的一个点,其表示一个资源)指向进程(圆圈表示)。

可以证明:

如果系统资源分配图中没有环,则一定不存在死锁。

如果系统资源分配图中有环,则可能存在死锁。(具体要看每个类型的资源有多少个,若每个类型的资源只有一个则一定存在死锁)

(1)无死锁

图片[1] - 进程死锁总结 - 三酷猫

P3执行完释放R3;P2得到R3执行完释放R1;P1得到R1执行完释放资源。

(2)有死锁

图片[2] - 进程死锁总结 - 三酷猫

P3需要得到R2才会执行从而释放R3;P2需要得到R3才会执行从而释放R2,R1;P1需要得到R1才会执行。

P3,P2,P1就这样相互僵持谁也不能执行。

(3)无死锁

图片[3] - 进程死锁总结 - 三酷猫

P4会执行完释放R2,P3得到R2会执行完释放R1,P1得到R1会执行完释放资源。P2直接执行完释放资源。

死锁的四个必要条件:

(1)互斥:至少有一个资源一次只能供一个进程使用,其他进程想使用必须等到其被释放为止。

(2)占有并等待:一个进程占有至少一个资源并得到另一个资源,这另一个资源又被其他等待进程所占有。

(3)不可抢占:进程持有的资源只能被进程自己释放。

(4)循环等待:有一组等待进程 {P0,P1,…,Pn},P0 等待的资源为 P1 占有,P1 等待的资源为 P2 占有,……,Pn-1 等待的资源为 Pn 占

        有,Pn 等待的资源为 P0 占有。形成一个等待环。

注意:所有四个条件必须同时成立才会出现死锁。循环等待条件意味着占有并等待条件,这样四个条件并不完全独立。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享