操作系统(5) 死锁的概念 死锁产生的必要条件 死锁的处理策略 预防死锁 避免死锁 死锁的检测和解除 银行家算法

死锁

一、死锁的概念

1. 死锁、饥饿、死循环的区别

(1) 死锁:各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进
(2) 饥饿:长期得不到想要的资源,某进程无法向前推进
(3) 死循环:某进程执行过程中一直跳不出某个循环
在这里插入图片描述

2. 死锁产生的必要条件

产生死锁必须同时满足以下四个条件,若有一个不满足,死锁就不会发生

(1) 互斥条件:对互斥使用的资源的争夺才会导致死锁
(2) 不剥夺条件:进程获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
(3) 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又 被其他进程占有,此时请求进程被阻塞,但又对自己已有的资源保持不放
(4) 循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被 下一个进程所请求

注意:发生死锁时一定有循环等待,但是发生循环等待时未必死锁

3. 死锁的处理策略

(1) 预防死锁:破坏死锁产生的四个必要条件中的一个或几个
(2) 避免死锁:用某种方法防止系统进入不安全状态,从而避免死锁
(3) 死锁的检测和解除:允许死锁的发生,操作系统检测出死锁后,会采取措施解除死锁

  1. 知识回顾

在这里插入图片描述

二、死锁的处理策略 — 预防死锁

在这里插入图片描述

三、死锁的处理策略 — 避免死锁

1. 安全序列的介绍

所谓安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成,只要能找 出一个安全序列,系统就是安全状态 (安全序列可能有多个)

如果分配了资源以后,系统中找不出任何一个安全序列,系统就进入了不安全状态,这就意味 着之后可能所有进程都无法顺利的执行下去

注意:

(1) 如果系统处于安全状态,就一定不会发生死锁
(2) 如果系统进入不安全状态,就可能发生死锁
(3) 处于不安全状态未必会发生死锁,但发生死锁时一定处于不安全状态

2. 银行家算法

思想:在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,由此决定是否答应 资源分配请求

在这里插入图片描述
在这里插入图片描述

注:如果银行家算法是安全性算法,说明此时系统处于安全状态,不会发生死锁

四、死锁的处理策略 — 死锁的检测与解除

1. 死锁的检测

为了能对系统是否发生了死锁进行检测,必须:

(1) 用资源分配图保存资源的请求和分配信息
(2) 提供一种算法,利用上述信息检测系统是否进入死锁状态

在这里插入图片描述

P2进程请求1个资源,但R1的3个资源都已经分配出去,无法执行;P1进程请求1个资 源,R2剩余1个资源,P1执行;P1执行完毕之后,释放自身的所有资源,P1的三条边全 部消除;R1剩余的资源可满足P2进程;P2进程执行,P2的三条边全部消除

注意:

(1) 如果按照上述过程可以消除所有的边,表示此图可完全简化,不会发生死锁
(2) 如果不能消除所有的边,说明发生了死锁
(3) 最终还连着边的那些进程就是死锁进程

2. 死锁的解除

一旦检测出死锁的发生,就应该立即解除死锁,解除死锁的方法有:

(1) 资源剥夺法

挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程;但是应防止被 挂起的进程长时间得不到资源而饥饿

(2) 撤销进程法

强制撤销部分甚至全部死锁进程,并剥夺这些进程的资源

(3) 进程回退法

让死锁进程回退到足以避免死锁的地步 (这就要求系统记录历史信息、设置还原点)

3. 知识回顾

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49343190/article/details/111773270