必要条件
互斥条件:每个资源要么已经分配给了一个进程,要么就是可用的。
占有和等待条件:已经得到了某个资源的进程可以再请求新的资源
不可抢占条件:已经分配给一个进程的资源部能强制性地被抢占,它只能被占有它的进程显式地释放
环路等待条件:有两个或者两个以上的进程组成一条环路,该环路的每个进程都在等待下一个进程所占有的资源。
鸵鸟策略
死锁检测与死锁恢复
死锁预防
死锁避免
鸵鸟策略
直接不解决,我看不见,等于没有发生。当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。
死锁检测与死锁恢复
不试图阻止死锁,而是当检测到死锁发生时,采取措施进行恢复。
1、每种类型一个资源的死锁检测。
2、每种类型多个资源的死锁检测。
3、死锁恢复:利用抢占、回滚恢复或者通过杀死进程恢复
死锁预防
破坏4个条件中的其中一个
在程序运行时避免发生死锁
安全状态
定义:如果没有死锁发生,并且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每一个进程运行完毕,则称该状态是安全的。
安全状态的检测与死锁的检测类似,因为安全状态必须要求不能发生死锁。
单个资源的银行家算法
一位银行家,他向一群客户分别承诺了一定的贷款额度,算法要做的是判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。
多个资源的银行家算法
检查一个状态是否安全的算法如下:
1、查找右边的矩阵是否存在一行小于等于向量A。如果不存在这样的行,那么系统将会发生死锁,状态是不安全的。
2、假若找到这样一行,将该进程标记为终止,并将其已分配资源加到A中。
3、重复以上两步,直到所有进程都标记为终止,则状态时安全的。
如果一个状态不是安全的,需要拒绝进入这个状态。