死锁

2018-08-29  本文已影响0人  RedHatMe

概念:

死锁并不是锁,而是进程对资源占用的一种表达方式。
最简单的解释是,
A进程 占了资源a ,B进程占了资源b,
A需要b资源才可以释放a
B需要a资源才可以释放b
这样 就循环等待了,互不释放。

死锁预防:

  1. 当某进程新的资源未满足时,释放已占有的资源,即资源占用的单一性,不准一个进程同时占两个资源。
  2. 资源编号分配。即系统给每类资源赋予一个编号,每一个进程按编号递增的顺序请求资源,释放则相反

死锁避免:

系统在进行资源分配之前预先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。其中最具有代表性的避免死锁算法是银行家算法。

死锁检测:

为每个进程和每个资源指定一个唯一的号码;然后建立资源分配表和进程等待表
之后单独运行检测算法。检测是否死锁。

死锁解决:

  1. 直接撤消死锁进程或撤消代价最小的进程,直至有足够的资源可用,死锁状态消除为止。
  2. 挂起占用资源的进程。
    即当发现死锁时,挂起一些进程,使得处于死锁之中的其它进程,可抢占被占用的资源从而继续执行。待以后条件满足后,再恢复被挂起的进程。常利用资源分配图、进程等待图来协助这种检测。

以上方式的优劣

  1. 最有效的是死锁避免和死锁检测配合使用。
  2. 死锁预防 其实就是不产生死锁,会产生很大性能损耗。
  3. 死锁检测 是完全不预防死锁,后续如果产生大量死锁,会有大批量杀进程或者挂进程的情况。
上一篇下一篇

猜你喜欢

热点阅读