第十五章 死锁与并发错误检测
死锁的概念
多个进程各自占用部分资源,形成循环等待的现象。
死锁的必要条件:
- 互斥:任何时刻只能有一个进程使用该资源;
- 持有并等待:进程占用着一个资源,并且还需要等待另外的资源;
- 非抢占:资源只能由进程使用后自愿释放;
- 出现了循环等待;
死锁处理方法
对死锁的处理采用”纵深防御”的思路——死锁预防、死锁避免、死锁检测与恢复;死锁通常由应用程序处理,操作系统层面不考虑死锁。
死锁预防
限制并发进程对资源的请求,使操作系统在任何时刻不满足死锁的必要条件;但资源的利用效率低。
死锁避免
安全进程序列:对一列进程$\{\rm{P_1}, \cdots , \rm{P_n}\}$,$\rm{P_i}$未来需要的资源量(声明所需资源的最大量减去已占用的资源量)<=当前可用资源量+所有$\rm{P_j(j<i)}$的资源量对所有的$\rm{i}$均成立,则这个进程序列称为安全进程序列。
系统处于安全状态,即对所有占用资源的进程,存在一个安全进程序列。
于是当进程请求资源时,操作系统判断分配资源之后是否还处于安全状态,如果是,则分配进程申请的资源。
死锁检测
检测操作系统是否出现死锁,根据占用资源的进程是否存在一个安全进程序列,如果不存在,操作系统就会出现死锁。