0%

Dead lock

Dead locks.png

Dead locks

概念

死锁

  • 进程永远被阻塞称之为死锁

starvation

  • 进程没阻塞但是无限制被推后

资源

  • 可抢占资源
  • 不可抢占资源

必要条件

  • 互斥条件:一个资源每次只能被一个进程使用
  • 占有和等待条件:已经得到资源的进程可以请求新的资源
  • 不可抢占条件:被占有的资源只能由占有它的进程显示释放
  • 环路等待条件:≥2个进程形成一个环,每个进程都在等待下一个进程的资源

处理方法

不避免死锁的发生,而是等发生了再解决

鸵鸟策略

  • 处理死锁的代价过于高昂

死锁检测

  • 一对一类型的死锁检测

    每个进程一个资源

    • 检测有向图中环的存在
  • 一对多类型的死锁检测

    每个进程多个资源

    • 模拟一下,先执行能执行的,执行完后释放资源。如此往复,最后剩下的都是死锁进程。

死锁恢复

  • 抢占
  • 回滚
  • kill进程

死锁预防

时间

  • 程序运行之前

方法

  • 破坏互斥条件

    • 只读性文件可以不用互斥
  • 破坏占有和等待条件

    • 比如让进程在一开始就请求所有所需资源
  • 破坏不可抢占条件

  • 破坏环路等待条件

    • 将所有资源编号,进程只能请求比已经持有资源编号更大的资源,这样一来不可能形成环

死锁避免

安全状态

  • 概念

    • 存在一种调度次序可以使所有进程都能完成

      安全状态也有可能死锁,但一定可以避免死锁

不安全状态

  • 无法保证所有进程都能完成

银行家算法

  • 算法

    • 判断对请求的满足是否会进入不安全状态,如果是,就拒绝请求;否则予以分配。
  • 单个资源单个资源的银行家算法.png

  • 多个资源多个资源的银行家算法.png