1:死锁
引起死锁的原因:
- 竞争非抢占资源
- 竞争可消耗资源
- 进程推进顺序不当
死锁: 多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程将永远不会向前推进。
死锁产生的必要条件:
- 互斥条件—进程对所分配的资源进行排它性使用
- 请求和保持条件—请求新资源阻塞,保持已获得资源不放
- 不可抢占条件—进程获得的资源在使用完之前不可被抢占
- 循环等待条件—存在进程-资源环形链
如何处理死锁:
- 预防死锁:破坏请求保持,不可抢占,循环等待条件
- 避免死锁:资源分配过程中,防止系统进入不安全状态
- 检测死锁:设置检测机构,及时检测死锁的发生
- 解除死锁:将进程从死锁的状态下解脱出来
2:预防,检测,解除死锁
预防死锁:
- 破坏请求保持—资源调度时,若资源全部满足则调度,否则不调度
- 破坏不可抢占—进程申请资源而不得时,需要放弃已获取资源
检测死锁:
资源分配图: 化简完全为孤立点则无死锁
- 结点N(进程结点P,资源结点R)
- 边E(请求资源边P-R,分配资源边R-P)
解除死锁:
- 抢占资源:从被挂起的进程哪里抢占资源
- 终止进程:强制从系统中撤销一个或者多个死锁进程
3:避免死锁
系统安全状态:存在安全态和不安全态
安全状态:系统能按照某种进程顺序,来为每一个进程Pi分配所需资源。直到满足每个进程对资源的最大需求,使得每个进程可以顺利的完成。如果无法找到这样的安全序列,则代表系统处于不安全状态。
避免死锁:
在资源动态分配的过程中,防止系统进入不安全状态,系统进行资源分配前,应计算此次资源分配的安全性,若不安全则不分配,让该进程等待。若安全则会为进程分配资源。
安全性算法:
- 工作向量:Work[m]:系统可供进程继续运行所需的各类资源数 Work初值=Available
- Finish[n]:表示系统是否有足够的资源分配给进程,使之运行完毕。false-true
安全检测流程:
银行家算法避免死锁:
系统中有n个进程,m种资源。
- Available[m]:可利用资源向量----->Available[j]=k代表当前系统中有j类资源k个。初值为系统中该类资源总数。
- Max[n][m:最大需求矩阵
- Allocation[n][m:分配矩阵
- Need[n][m:需求矩阵----->Need=Max-Allocation