进程死锁与银行家算法


前言

进程死锁是面试中经常被问到的关于操作系统、进程相关的问题,接下来我们做一个讲解~


一、进程死锁

(1)什么是死锁

死锁就是在并发情况下,两个进程同时访问一个资源,互相挂起的状态,没有外力,不会结束这个状态。

(2)举个死锁的例子

比如进程a对资源a加锁,进程b对资源b加锁,同时进程a需要访问资源b,进程b要访问资源a,这样就会互相等待释放锁,就死锁了。

(3)死锁的必要条件

1.互斥条件:一个资源只能被一个进程占用,只有这个进程使用完释放资源,其他进程才能使用;

2.请求等待条件:一个进程占有一个资源,还去请求另一个资源;

3.不可剥夺条件:系统不可剥夺进程占用的资源;

4.循环等待条件:存在循环的等待使用资源;

(4)解决死锁

1.预防死锁:

破坏死锁四个条件。

  • 互斥条件不可以避免;

  • 请求等待,规定进程只有申请完全部的资源,才可以运行(静态分配资源);

  • 不可剥夺,可以剥夺;

  • 循环等待,设置规范的顺序,按规则排序,顺序执行。

2.避免死锁:

  • 银行家算法。

3.检测死锁

  • 定期检测;

  • 当cpu利用率低的时候检测。

4.解决死锁

  • kill掉死锁进程。

(5)造成死锁的原因

1.资源不足

2.资源分配不好

3.进程访问资源顺序不好

(6)鸵鸟策略

如果系统中死锁发生次数很少,或者处理死锁(找到死锁、避免死锁)的开销比不处理死锁还大,那么可以考虑不处理死锁,像鸵鸟一样。

二、 银行家算法

银行家算法是解决死锁问题的好办法,模仿银行贷款。

具体的操作是维护一个状态,有安全状态和非安全状态,如果目前有一种资源分配策略(资源分配序列)使得不会发生死锁,就说明当前状态是安全状态,如果一个进程申请资源的时候,分析一下,分配给他资源之后,是不是还是在安全状态,如果是,就分配,不是,就阻塞,等到可以进入安全状态再给他资源。

几个核心思想:

1.当前系统所有资源够进程申请的最大资源的时候,可以考虑分配;

2.进程申请资源可以分批申请;

3.如果当前系统资源没有进程申请的资源多,就先阻塞,但是过阵子一定会给进程分配资源;

4.如果进程当前申请的资源,系统可以满足,但是后续申请的资源,满足不了,那么也会先阻塞。

总结

本文介绍了进程死锁和银行家算法。

本系列为基础知识分享,日更,有任何问题可以私聊或评论博主哦!
希望给各位找工作和工作中的小伙伴提供一点微博的帮助,如果觉得有帮助,欢迎点赞评论收藏关注~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值