操作系统之死锁

死锁的四个必要条件

1.资源有限

2.持有并等待

3.非抢占

4.循环等待


哲学家就餐问题

    哲学家们围坐在一个圆桌边上,每个人的左右两边均放着一根筷子,如果要吃饭,需要获得左右两边的筷子


   每个哲学家都拿起左边的筷子,会出现死锁

  应对办法:

1.不理睬,死锁发生的频率不太高,死锁防止的代价很高,不如直接重启,windows,Linux都没有采取死锁预防措施

2.先礼后兵:死锁检测与恢复

     检测死锁:

            死锁的原因是资源竞争,如果用一个图来表示资源的拥有和请求,看图中有没有循环

          将图转化为资源分配矩阵(已经拥有的资源的数量)和资源等待矩阵(还需要特定资源的数量)

         再维持两个矢量,系统资源总量矢量(系统中所有资源的总数是多少),当前可用资源矢量(系统现在还有多少可用的资源)

        通过矩阵和矢量,我们就可以通过简单的矩阵运算来判断系统是否发生了死锁,把可用资源与等待矩阵进行比较,如果每一个进程都有部分资源不够,就出现了死锁


  死锁恢复:

       1.抢占,把资源强行拿走

       2.将进程kill

       3.rollback     回到原来的状态,但是很困难,要定期记录

     死锁检测和恢复的可行性:行不通,原因如下  

                       1.用资源分配和等待矩阵判断死锁可靠吗,不,这种只能说死锁可能发生,但并不能说死锁就会发生,或许某个线程突然退出,

    从而不会发生死锁,还有一种,有的线程已经死锁,但是有的线程还能继续推进,从矩阵判断没有发生死锁,但是已经发生了死锁

                       2 .矩阵计算代价大

                       最致命的一点,检查死锁的进程自己发生了死锁,更无法检测死锁是否发生,所以,这种行不通,只能不让死锁发生!!!

3.先发制人,死锁动态避免

         在每次资源分配时,必须进行仔细计算,确保该资源请求批准后系统不会进入到死锁或潜在的死锁状态。潜在的死锁状态是指尚未发生的死锁,但是接下来的执行一定产生死锁,这种叫不安全状态。安全状态,可以找到一种分配方式,使所有进程都能获得需要的资源。

      缺点:计算量大,且不能准确预测将来最大的资源需求

4 斩草除根,死锁的静态防止,清楚死锁发生的土壤,4个必要条件

       1.资源独占: 资源共享

       2.占有并等待:进程必须一次请求所需要的所有资源   缺点,1 太过浪费,要一开始知道一个进程所需的全部资源很困难 

                                变通办法:需要才请求,如果请求的被拒绝,释放已经拥有的

       3.非抢占:  允许抢占

       4.循环等待:     给资源一个编号,必须按顺序去申请资源,就不会死锁了



银行家算法: 动态避免死锁


  解决哲学家的吃饭问题:

1、 动态避免,每次去判断一下

2.筷子共享 ,不行

3,可以抢筷子,不行,对哲学家不够尊重

4. 杜绝循环等待,对筷子编号,按这个顺序拿筷子

5.杜绝占有并等待,要么同时拿两根筷子,要么不拿

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值