死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

可把系统中的资源分为两类:

  • 可剥夺性资源:资源分配给进程后可以被高优先级的进程剥夺。如CPU、主存。
  • 不可剥夺性资源:分配给进程后只能在进程用完后才释放的资源。如磁带机、打印机等。

一、死锁发生的必要条件

  • 互斥条件:即一个资源每次只能被一个进程使用。
  • 保持和等待条件:有一个进程获得了一些资源,但因正在请求其他资源而被阻塞。
  • 不剥夺条件:就是系统不是抢占式的,进程已获得的资源在未使用完之前,不能剥夺,只能在使用完后由自己释放。
  • 环路等待条件:若干个进程形成环型链,每个都占用对方要申请的下一个资源。

二、解决死锁的策略

  • 死锁预防
  • 死锁避免
  • 死锁检测
  • 死锁解除

1、死锁预防

(1)摒弃“保持和等待条件”条件
需要的资源一次性申请,需要多少资源一次性得到多少。防止出现持有一个等待另一个

(2)摒弃“不剥夺”条件
允许高优先级进程剥夺低优先级进程占有的资源

(3)摒弃“环路等待”条件
不然形成进程资源的环路,对资源进行编号,只能申请比已经拥有资源编号更大的资源

2、死锁避免

避免是指进程在每次申请资源时判断这些操作是否安全,典型避免死锁的算法是银行家算法。

3、死锁检测

判断系统是否处于死锁状态,如果是,则执行死锁解除策略。

4、死锁解除

就是剥夺,即将资源强行分配给别的进程。