死锁 #
1、死锁怎么产生的? #
两个或者多个进程相互等待对方资源,导致死锁。比如:
- 系统资源不足
- 资源分配不合理
- 进程运行推进顺序不合理
2、必要条件 ?—> 预防方法? #
一般来说,发生死锁有四个必要条件:
- 互斥:资源要么已经分配给了一个进程,要么就是可用的。– A唯一拥有B
- 占有和等待:已经得到了某个资源的进程可以再请求新的资源。– 开始前就把所有需要的资源都申请好
- 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
- 环路等待:有两个或多个进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。 – 给资源统一编号
3、处理方法 #
- 鸵鸟策略:因为代价太高了,所以如果影响不大或概率低
- 死锁预防:运行之前破坏4个条件
- 死锁检测与死锁恢复:有向图是否存在环、抢占、回滚、杀死进程
- 死锁避免:运行时
- 安全状态:就算所有进程突然请求对资源的最大需求,也存在
- 单个资源的银行家算法:如果满足请求,状态是否安全,拒绝进入不安全状态
- 多个资源的银行家算法:拒绝进入不安全状态
- 检测一个状态是否安全:
- 还需要分配的矩阵是否存在一行小于等于向量A?没有的话就是不安全的
- 找到一行,就标记终止,并计入已分配资源
- 知道所有进程都被标记终止,则状态安全。
- 检测一个状态是否安全: