进程死锁:两个或两个以上的进程在执行过程中,因为争夺资源而造成的一种相互等待的现象,若无外力作用,他们都将无法推进下去,此时系统产生死锁
产生死锁的原因
(1)竞争资源(系统资源不足)。当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足进程的需要时,会引起诸进程的竞争而产生死锁。
(2)进程间推进顺序非法。进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生进程死锁。
(3)资源分配不当。
产生进程死锁的4个必要条件:
1.互斥条件:每个资源一次只能被一个进程使用;
2. 请求与保持条件:一个进程因请求而阻塞时,对已获得的资源保持不放;
3.不剥夺条件:进程已获得资源,在未使用完之前,不能强行剥夺;
4.循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
ps:只要发生死锁,以上条件必然成立。
只要上述条件之一不满足,则不会发生死锁。
死锁的避免:确定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待的情况下占用资源,在系统运行过程中,对进程发出的每一个系统能够满足的自愿申请进行动态检查,并且根据检查结果决定是否分配资源,若分配后系统可能发生死锁,则不予分配,否则予以分配。因此,对于资源的分配要给与合理的规划。
根据死锁产生的4个必要条件,只要使其一不成立,死锁就不会出现。为此,可采取如下三种预防策略:
1.采用资源静态分配策略,破坏“部分分配”条件;
2.允许进程剥夺使用其他进程占有的资源,从而破坏“不可剥夺”条件;
3.采用资源有序分配法,破坏“环路”条件。
排除方法
1、撤消陷于死锁的全部进程;
2、逐个撤消陷于死锁的进程,直到死锁不存在;
3、从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。
4、从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态