定义
进程间由于竞争资源而相互制约以致无法继续运行的现象被称为死锁
必要条件
- 互斥:资源不能被共享,一个资源每次只能被一个进程使用
- 占有等待:一个进程因请求资源而阻塞时,对已获得的资源保持不放
- 非剥夺(非抢占):已经分配给进程的资源不能被抢占,只能被占有它的进程主动释放
- 循环等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源
死锁预防
在程序运行之前预防发生死锁
破坏互斥条件
允许系统资源都能共享使用,但是可能导致资源无法保持正确性,例如临界资源等。
破坏占有等待条件
方法1:进程申请到了它所需要的所有资源后才开始运行,在运行过程中进程只需要释放资源
方法2:进程在提出申请资源谦,必须释放已占有的一切资源
破坏非剥夺条件
方法一:如果占有某些资源的一个进程进行进一步资源请求被拒绝,则该进程必须释放它最初占有的资源,如果有必要,可再次请求这些资源和另外的资源。
方法二:如果一个进程请求当前被另一个进程占有的一个资源,则操作系统可以抢占另一个进程,要求它释放资源。只有在任意两个进程的优先级都不相同的条件下,方法二才能预防死锁。破坏循环等待
给资源编号,进程只能按序号请求资源
死锁避免
在程序运行时避免发生死锁
安全状态
如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的
银行家算法
一个小城镇的银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配
死锁检测
找到一个进程P,P进程的请求边均能立即满足,若找到这样的P则与P相连的边全部删去,重复寻找,若没有则简化结束。
若资源分配图不能完全化简,则系统中有死锁
死锁定理:如果资源分配图中没有环路,则系统没有死锁;如果资源分配图中出现了环路,则系统可能有死锁
死锁恢复
- 抢占恢复
- 杀死进程恢复
- 进程回滚恢复