死锁概念
一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到该资源,这种现象称为进程死锁(Deadlock),这一组进程就称为死锁进程。
1、死锁产生的原因
PS:关于死锁的一些结论:
2、死锁的四个必要条件
3、处理死锁的方法
4、避免死锁——银行家算法
银行家算法步骤:
当进程Pi提出资源申请时,执行下列步骤:
(1)若Requesti[j]≤Need[i,j],转(2);转(3);否则进程等待
(3)假设系统分配了资源,则有:
Available [j] :=Available [j] -Requesti[j];
Allocation[i,j]:=Allocation[i,j]+Requesti[j];
Need[i,j]:=Need[i,j]-Requesti[j]
(4)执行安全性算法。
若系统新状态是安全的,则完成分配;
若系统新状态是不安全的,则恢复原状态,进程等待
安全性算法步骤:
(1) Work[j]:=Available[j];
Finish[i]:=false;如果不存在,则转(4)
(3) Work[j] :=Work[j]+Allocation[i,j];
Finish[i]:=true;
转(2)
(4) 若对所有i,Finish[i]=true,则系统处于安全状态,否则处于不安全状态
可得: Need[i,j]= Max[i,j]- Allocation[i,j]
例:
设系统有五个进程和三类资源,每类资源分别有10、5、7。在T0时刻资源分配情况如下:
T0时刻可以找到一个安全序列
P1发出请求Request(1,0,2),执行银行家算法
可以找到一个安全序列{P1,P3,P4,P0,P2},系统是安全的,可以将P1请求资源分配给它。
若是:P4发出请求Request(3,3,0), 执行银行家算法
Available=(2 3 0)
不能通过算法第2步( Requesti[j]≤Available[j] ),所以P4等待。
例:如下:若P0发出请求Request(0,2,0),执行银行家算法
Available{2,1,0}已不能满足任何进程需要,所以系统进入不安全状态,P0的请求不能分配。
练习题:有三类资源A(17)、B(5)、C(20)。有5个进程P1~P5。T0时刻系统状态如下:
问:
(1)、T0时刻是否为安全状态,给出安全系列。
(2)、T0时刻,P2: Request(0,3,4),能否分配,为什么?
(3)、在(2)的基础上P4:Request(2,0,1),能否分配,为什么?
(4)、 在(3)的基础上P1:Request(0,2,0),能否分配,为什么?
解:(1) T0时刻的出安全系列
先求出Need和Work
(2) P2: Request(0,3,4)
因(Available =2 3 3)< Request(0,3,4) 所以不能分配。
(3) P4:Request(2,0,1) Available =2 3 3
有安全序列P4 P5 P3 P2 P1 可以分配
(4) P1:Request(0,2,0)
0 1 2 已不能满足任何进程的需要,不能分配