循环等待需要前三个条件满足,这四个条件同时满足死锁才会存在。
破坏上述四个条件中的一个就可以预防死锁
预防死锁:
避免死锁:
在资源的动态分配过程中,使用某种方法防止系统进入不安全状态,从而避免死锁的发生。----银行家算法
检测死锁然后解除死锁:
银行家即操作系统,贷款就是资源,客户就是进程
进程想要向操作系统申请资源,操作系统查看自己是否有足够的资源,若自己有足够的资源就分配给进程。
银行家算法中包含几个数据结构:
从上述变量可以知道,Need+Allocation=Max;
银行家算法执行过程:
当进程P申请资源时,假设P的请求向量为request
(1)如果request<=Need,就继续执行,否则认为出错,该进程继续等待
(2)如果request>Max,表示操作系统没有足够的资源分配,让该进程继续等待
(3)上述检查没问题就尝试给进程P分配资源,并修改各个数组中的数值
(4)系统执行安全性检查,若此次分配资源后系统处于安全状态,就正式分配资源给进程P。
银行家算法的核心是安全性检测子算法,这个子算法实际上就是个寻找安全序列的过程,如果能够找到一个安全的给进程分配资源的序列,就认为是安全的。