操作系统---进程与线程__死锁

 

目录

 2.4_1_死锁的概念

2.4_1_1什么是死锁

2.4_1_2死锁、饥饿、死循环的区别

2.4_1_3死锁产生的必要条件

2.4_1_4 什么时候会发生死锁

​2.4_1_5死锁的处理策略​编辑

2.4_2_预防死锁

2.4_2_1破坏互斥条件

2.4_2_2破坏不剥夺条件

2.4_2_3 破坏请求和保持条件

2.4_2_4 破坏循环等待条件

 2.4_3_避免死锁

2.4_3_1 什么是安全序列

2.4_3_2银行家算法

 2.4_4_死锁的检测和解除

2.4_4_1死锁的检测

2.4_4_2死锁的检测


 

2.4_1_死锁的概念

546b123dc7f748fe9568fa1e1cb70b6c.png

 2.4_1_1什么是死锁

 cdea5c6fa5af444e8753134811fac9ae.png

 0d48a01d692a4efca8050b4c12539c87.png

 2.4_1_2死锁、饥饿、死循环的区别

死锁:

各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象

饥饿:

由于长期得不到想要的资源,某进程无法向前推进的现象。比如:在短进程有先算法中,若有源源不断的短进程到来,则长进程将一直得不到处理机,从而发生长进程“饥饿”

死循环:

某进程执行过程中一直跳不出某个循环的现象 。有时是因为程序逻辑BUG导致的,有时是程序员故意设计的

ffb2dfc27c5e4b8d929b26c353522f92.png

 2.4_1_3死锁产生的必要条件

6b257803b8a043b3bab2dce4d5c17959.png

2.4_1_4 什么时候会发生死锁

7ca5bfb7c6ad4527822f904462fb91ff.png 
2.4_1_5死锁的处理策略f3f8e07121b74103ade2de79d36d3b18.png

 本节小结:

8f4606f092634a59a37cdaf09de3204b.png

 

2.4_2_预防死锁

1dbaafb1f1034ee6887b90de9668f380.png

 

2.4_2_1破坏互斥条件

 f53d9546a7cb4f66b627d2950b946b21.png

 2.4_2_2破坏不剥夺条件

56a87e4b8afc4f7a96cbebfab90d72da.png

2.4_2_3 破坏请求和保持条件

e72512a626d24f4c81d937ac9dee7d99.png

2.4_2_4 破坏循环等待条件

1104d746b792461bbd17a1d5ebcad9e0.png

本节小结:

 3f22ba622a184902a2b5074c261693fa.png

 2.4_3_避免死锁

523074b726c04eddb30e536b4828c507.png

2.4_3_1 什么是安全序列

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

如果分配了资源后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。

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

因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。

2.4_3_2银行家算法

a03c5411d1ed4f779666289fdac7fe94.png

fa4e42ed477049389804bd050b522059.png fc8251d417b948049852098e693d4580.png

 4155e4147cfa47ee8faea1d6d2e75216.png

 代码实现:

758fe494b610426d96fea526eb374f0c.png

本节小结:

 e27b7e65f11c40679989b97e48bda7e6.png

 2.4_4_死锁的检测和解除

 a50bb840b1c5488a997418029003ecec.png

 2.4_4_1死锁的检测

83050e514d19407dbf995628de7df7f6.png

84d7257013b24d3e83dacb1038fb4c14.png

 死锁的检测方法:

20101d1903a44d9f818e0b37dd593b30.png

2.4_4_2死锁的检测

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

补充:并不是系统中所有的进程都是死锁状态,用死锁检测算法化简资源分配图后,还连着边的那些进程就是死锁进程

解除死锁的主要方法有:

  1. 资源剥夺法。挂起(暂时放到外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但是应防止被挂起的进程长时间得不到资源而饥饿
  2. 撤销进程法(或称终止进程法)。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。这种方式的优点是实现简单,但所付出的代价可能会很大。因为有些进程可能已经运行了很长时间,已经接近结束了,一旦被终止可谓功亏一篑,以后还得从头再来。
  3. 进程回退法。让一个或多个死锁进程回退到足以避免死锁的地步。这就要求系统要记录进程的历史信息,设置还原点。

 那么如何决定“对谁动手”?

  1. 进程优先级
  2. 已执行多长时间
  3. 还要多久能完成
  4. 进程已经使用了多少资源
  5. 进程是交互式还是批处理式的

本节小结:

e5c2759711d6452a80a1430d6e35a44b.png

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

INGING666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值