死锁

死锁 #

1、死锁怎么产生的? #

两个或者多个进程相互等待对方资源,导致死锁。比如:

  • 系统资源不足
  • 资源分配不合理
  • 进程运行推进顺序不合理

2、必要条件 ?—> 预防方法? #

一般来说,发生死锁有四个必要条件:

  • 互斥:资源要么已经分配给了一个进程,要么就是可用的。– A唯一拥有B
  • 占有和等待:已经得到了某个资源的进程可以再请求新的资源。– 开始前就把所有需要的资源都申请好
  • 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显式地释放。
  • 环路等待:有两个或多个进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。 – 给资源统一编号

3、处理方法 #

  • 鸵鸟策略:因为代价太高了,所以如果影响不大或概率低
  • 死锁预防:运行之前破坏4个条件
  • 死锁检测与死锁恢复:有向图是否存在环、抢占、回滚、杀死进程
  • 死锁避免:运行时
    • 安全状态:就算所有进程突然请求对资源的最大需求,也存在
    • 单个资源的银行家算法:如果满足请求,状态是否安全,拒绝进入不安全状态
    • 多个资源的银行家算法:拒绝进入不安全状态
      • 检测一个状态是否安全:
        • 还需要分配的矩阵是否存在一行小于等于向量A?没有的话就是不安全的
        • 找到一行,就标记终止,并计入已分配资源
        • 知道所有进程都被标记终止,则状态安全。