文章目录
  1. 死锁的概念
  2. 死锁处理方法
    1. 死锁预防
    2. 死锁避免
    3. 死锁检测

死锁的概念

多个进程各自占用部分资源,形成循环等待的现象。

死锁的必要条件:

  • 互斥:任何时刻只能有一个进程使用该资源;
  • 持有并等待:进程占用着一个资源,并且还需要等待另外的资源;
  • 非抢占:资源只能由进程使用后自愿释放;
  • 出现了循环等待;

死锁处理方法

对死锁的处理采用”纵深防御”的思路——死锁预防、死锁避免、死锁检测与恢复;死锁通常由应用程序处理,操作系统层面不考虑死锁。

死锁预防

限制并发进程对资源的请求,使操作系统在任何时刻不满足死锁的必要条件;但资源的利用效率低。

死锁避免

安全进程序列:对一列进程$\{\rm{P_1}, \cdots , \rm{P_n}\}$,$\rm{P_i}$未来需要的资源量(声明所需资源的最大量减去已占用的资源量)<=当前可用资源量+所有$\rm{P_j(j<i)}$的资源量对所有的$\rm{i}$均成立,则这个进程序列称为安全进程序列。

系统处于安全状态,即对所有占用资源的进程,存在一个安全进程序列。

于是当进程请求资源时,操作系统判断分配资源之后是否还处于安全状态,如果是,则分配进程申请的资源。

死锁检测

检测操作系统是否出现死锁,根据占用资源的进程是否存在一个安全进程序列,如果不存在,操作系统就会出现死锁。