【操作系统】王道考研 p28-31 死锁的概念、死锁的处理决策:预防、避免、检测和解除死锁

死锁的概念
死锁的处理决策:预防死锁
死锁的处理决策:避免死锁
死锁的处理决策:检测和解除

知识总览

在这里插入图片描述

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

什么是死锁

哲学家进餐问题的每个哲学家先拿起左边的筷子,且都无法拿到右边的筷子,这些进程都在因等待筷子资源而被阻塞,就死锁了。

即,每个人都占有一个资源,同时又在等待另一个人手里的资源,就发生了“死锁”。

并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是==“死锁”==。发生死锁后若无外力干涉,这些进程都将无法向前推进。

死锁VS饥饿VS死循环

死锁:进程都在等资源。(不调整就会一起饿死)
饥饿:一个进程等了很久。(可能之后等到了,也可能没等到)
死循环:如其名。是写程序的人的问题。

在这里插入图片描述

死锁产生的必要条件

四个条件:互斥条件、不剥夺条件、请求和保持条件、循环等待条件。

互斥条件让进程得以独占资源,不剥夺让进程不被剥夺资源,请求和保持让进程再请求等待别的资源并不放弃自己的资源,循环等待让进程占有的被一个资源都是另一个进程所需要的。
在这里插入图片描述

什么时候会发生死锁

在这里插入图片描述

死锁的处理策略

在这里插入图片描述

静态策略:预防死锁

破坏互斥条件

互斥条件:只有对必须互斥使用的资源的争抢才会导致死锁。
如果把只能互斥使用的资源改造成允许共享使用,就不会死锁,如SPOOLing技术

缺点:很多时候无法破坏互斥条件。有的资源无法改造,有时候是为了系统安全。

破坏不剥夺条件

不剥夺条件:进程所获得的资源在未使用前,不能由其他进程强行夺走,只能主动释放。

在这里插入图片描述

破坏请求和保持条件

在这里插入图片描述

破坏循环等待条件

在这里插入图片描述

动态策略:避免死锁

安全序列、不安全状态、死锁的联系

在这里插入图片描述

银行家算法(重要!)

核心思想:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态,如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。

一些实现:

可以这样理解:
已知n个进程还需要的资源数量Need和当前空闲的资源数量Available。
如果空闲的资源数量Available满足任意一个进程的Need,那就给它用,用完后就可以释放已经分配给该进程的资源Allocation。
一直这样操作下去,如果能把所有进程都运行完,就是安全的。
如果不能运行完, 且当前的Available无法满足任意的Need,那就死锁了。
在这里插入图片描述

死锁的检测和解除

检测

资源分配图:
P->R:申请资源,P告诉R“我想要资源。”
R->P:分配资源,R告诉P“给你资源。”
在这里插入图片描述
用上面的Available,Need,Allocation来说:
每一次Available可以满足Need,就释放Allocation,即删除对应R与P的所有连线。
到最后如果还有线说明走到这里走不动了,Available无法满足Need,死锁了。即,化简完后还有边的进程是死锁的进程。

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

解除

三种方法的通俗解释:
资源剥夺:不给死锁进程分配资源,这样Available会变大,说不定就可以满足所有Need,就不死锁了。
撤销进程:解决不了死锁,就解决死锁的进程。
进程回退:倒回去看看是哪里出现了问题。
在这里插入图片描述

总结

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

karshey

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

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

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

打赏作者

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

抵扣说明:

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

余额充值