死锁的概念和预防死锁

死锁的概念

死锁发生在资源分配阶段,两个以上的进程需要资源,资源在其他进程手中且不会释放资源,造成的互相等待称为死锁。

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

概念

死锁:两个以上的进程,是在请求、分配资源的时候,造成的双方资源都没有得到满足,且不愿意释放资源。

饥饿:至少单进程。长时间没有得到响应。

死循环:单进程,发生在运行态,一直重复执行一个程序

发生死锁的条件:

互斥条件:共享资源每次只能由一个人访问。

不剥夺条件:其他进程无法去取下你持有的资源。

请求与保持条件:核心是保持,即不主动释放持有资源。然后不断请求其他资源。

循环等待链:理解是上个人都希望下一个人的资源,最后一个又希望第一个的资源,形成了一个圈。

什么时候发生死锁?

由浅层到深层(弄清楚主体,发生在那个的前提下)

1、对不可剥夺资源的竞争

2、进程非法推进:两个进程交叉推进造成互相申请对方资源。

3、代码问题,申请、释放资源的顺序有时决定是否死锁

解决死锁的策略

  • 预防死锁(静态)(事前)。破坏死锁产生的四个必要条件种的一个或几个。
  • 避免死锁(动态)(事中)。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
  • 死锁的检测和解除(事后)。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。

预防死锁(静态)(事前)

破坏互斥条件:

破坏不剥夺条件:

方案一:主动释放资源

方案二:让操作系统去恒定然后强行剥夺资源

破环请求等待条件:

一次拿完全部想要的资源,缺点:资源利用率低,

核心:程序由小到大的去申请资源,不可由大到小去申请资源

事中(避免死锁):银行家算法

不安全序列>死锁,不安全序列不一定死锁,死锁一定是因为不安全序列

安全序列:一定不死锁。

算法:

算法核心:前提:资源是一次性归还的,每次被申请资源,都会进行一次全局性的计算,推测最后资源能不能全部收回,不能则不安全,能则安全(放心分配)

事后(检查和接触死锁):

检查死锁:从进程结点出发,去满足进程结点的要求(进程指向资源)。满足后将资源归还(消除资源指向进程的线)若每个进程结点都无法满足说明死锁了。

死锁的解除就是剥夺资源,核心点在于剥夺的决策,即剥夺哪一类进程的资源。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值