Skip to content

死锁

死锁预防(prevention)

死锁的必要条件

  1. 互斥
  2. 不可剥夺: 别的进程不能强行夺走资源
  3. 请求并保持: 可以一边夺走
  4. 循环等待

循环等待不一定死锁: 同类资源数可以>1 如果同类资源数=1且循环等待,则一定死锁

Warning

\(n\)个进程 \(m\) 个 资源, 每个进程最多请求\(k\)个资源。则一定不发生死锁的条件是 \(m>n(k-1)\)

因为假设每个进程都获取了k-1个, 都在等第k个, 造成死锁。如果此时多1个资源,那必然会有某个进程拿到全部资源,运行完毕后释放资源,解除死锁

破坏死锁的条件

  1. 破坏互斥: 很难
  2. 破坏不可剥夺: 请求新的资源且得不到的时候, 释放所有已占有的资源
  3. 破坏请求并保持: 在开始执行前申请并获得所有资源。或者,只允许进程在没有资源时才能申请资源。
  4. 破坏循环等待: 对所有资源类型进行排序,要求每个进程按照递增顺序申请资源。

死锁避免(avoidance)

在运行时判断是否可能死锁

系统安全状态

安全序列

  • 如果系统处于安全状态,一定不会发生死锁。
  • 如果死锁一定处于不安全状态。不安全状态 可能 发生死锁

银行家算法

死锁检测

死锁解除

Comments