一. 死锁产生的条件
- 资源互斥。一类资源同一时间只能是给一个进程
- 请求与保持。 进程在获取其他资源被阻塞时,对已经获得的资源保持不放
- 不可剥夺。 进程获得的资源是不可被剥夺抢占的。(打印机等)
- 形成了环路等待。 进程与资源之间形成了环路等待。
二. 解决死锁的办法
2.1 预防死锁(破坏死锁产生的条件)
- 资源一次性分配
- 只要有一个资源得不到分配,那么不给这个进程分配资源
- 当某个进程得不到某个资源时,释放其拥有的资源
- 资源有序分配,给每一个资源编上号码。然后,按照顺序分配
2.2 避免死锁
银行家算法避免死锁
2.3 死锁检测
系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。
安全性算法:
(1) 设置两个工作向量Work=Available;Finish[i]=False
(2) 从进程集合中找到一个满足下述条件的进程,
Finish [i]=False;
Need[i,j]≤Work[j];
如找到,执行(3);否则,执行(4)
(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。
Work[j]=Work[j]+Allocation[i,j];
Finish[i]=True;
go to step 2;
(4) 如所有的进程Finish[i]=true,则表示安全;否则系统不安全。
2.4 死锁解除
一旦检测出死锁,就应立即釆取相应的措施,以解除死锁。死锁解除的主要两种方法:
-
抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。
-
终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。