死锁的处理

  • 死锁
    多个进程由于互相等待对方持有的资源而造成的谁都无法执行的情况就是死锁
  • 死锁的产生原因
    资源的互斥使用,一旦占有别人无法使用
    进程占有了一些资源,又不释放,再去申请其他资源
    总结:几个进程各自占有的资源和互相申请的资源形成了环路等待

死锁的4个必要条件

(1) 互斥条件:一个资源每次只能被一个进程使用。

(2) 请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

(3) 不可抢占条件:进程已获得的资源,在末使用完之前,不能强行剥夺,只能在进程使用完时由自己释放。

(4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

死锁处理

死锁的处理_第1张图片

1. 死锁预防

死锁的处理_第2张图片
死锁的处理_第3张图片

2. 死锁避免

每次都判断此次请求是否会引起死锁
在这里插入图片描述

  • 怎么找出安全序列呢?
    银行家算法
    死锁的处理_第4张图片
    复杂度Tn=O(mn^2) m是资源数,n是进程数,可以看出,这样代价非常大,因为每次申请都得执行很长时间

调用银行家算法预测是否会发生死锁:
下图,p0申请(0,2,0),假设分配给它,发现分配之后其他进程一个都无法执行了,说明会产生死锁,就不能分配给它,拒绝此次申请
死锁的处理_第5张图片
在这里插入图片描述

3. 死锁检测+恢复

死锁的处理_第6张图片
但是进程的回滚又很难,比如下面的
在这里插入图片描述

一旦检测出死锁,就应立即釆取相应的措施,以解除死锁。死锁解除的主要两种方法:

  1. 抢占资源。从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。

  2. 终止(或撤销)进程。终止(或撤销)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。

4. 死锁忽略

死锁的处理_第7张图片

你可能感兴趣的:(操作系统)