【软考】死锁

一、基本概念
  • 1.死锁是指两个以上的进程互相都要使用对方已占有的资源,导致资源无法继续运行下去的现象。
  • 2.例如:吃饭需要使用2根筷子,张三有一根筷子,李四也有一根筷子,张三对李四说让李四的筷子给张三,张三吃完后再给李四,李四也是这么说的,然后双方一直僵持,导致都没吃上饭
二、死锁的条件
  • 1.死锁的四个必要条件为:互斥条件,保持和等待条件,不可剥夺条件,环路等待条件,四个条件缺一不可,同时满足才能形成死锁
  • 2.互斥条件:一个资源每次只能被一个进程使用,如果资源是共享的,所有进程都可以使用,就不会产生死锁的现象。一根筷子要么被张三使用,要么被李四使用
  • 3.保持和等待条件:一个进程因请求其它资源被阻塞时,也不释放已获得的资源。保持自己持有的资源,等待他人释放资源。张三持有一根筷子,等待李四给筷子;李四持有一根筷子,等待张三给筷子
  • 4.不剥夺条件:有些系统资源是不可剥夺的,当进程已获得不可剥夺的资源,系统不能强行收回,只能等进程完成时自己释放。张三还差一根筷子,不能强行抢李四的筷子,必须得等李四主动给才行
  • 5.环路等待条件:若干个进程形成资源申请环路,每个都占用对方要申请下一个资源。张三要李四的筷子,李四要张三的筷子,形成环状;若王五也有一根筷子给了张三,则破坏了环状,可以破除死
三、解决死锁
3.1 预防死锁
  • 1.破坏导致死锁的4个必要条件之一就可以预防死锁,属于事前检查
  • 2.预先静态分配法:用户申请资源时,申请所需的全部资源,破坏保持和等待条件,不需要等待其它进程释放的资源。一次性给张三2根筷子,吃完后释放掉2根筷子,然后一次性给李四2根筷子
  • 3.资源有序分配法:将资源分层排序,保证不形成环路,得到上一层资源后,才能够申请下一层资源。给筷子加上编号,1号筷子和2号筷子,首先给张三分配1号筷子,李四等待,然后给张三分配2号筷子,张三吃完后,释放1号筷子,分配1号筷子给李四,张三释放2号筷子,分配2号筷子给李四
3.2 避免死锁
  • 1.避免是指进程在每次申请资源时判断这些操作是否安全,属于事前检查
  • 2.银行家算法:对进程发出的资源请求进行检测,如果发现分配资源后系统进入不安全状态,则不予分配,否则分配。安全但会增加系统的开销
3.3 检测死锁
  • 1.使用死锁检测方法,此方法对资源的分配不加限制,允许死锁产生。但系统定时运行一个死锁检测程序,如果检测到死锁则去解除
3.4 解除死锁
  • 1.资源剥夺法:从一些进程那强行剥夺足够数量的资源分配给死锁进程
  • 2.撤销进程法:根据某种策略逐个地撤销死锁进程,直到解除死锁为止
四、进程管理
  • 1.进程管理是操作系统的核心,设计不当会出现死锁问题。
  • 2.如果进程在等待一件不可能发生的事,进程就死锁了
  • 3.如果多个进程产生死锁,就会造成系统死锁
  • 4.系统不可能发生死锁的最小资源数:(w-1)*m+1<=n
  • 5.每个进程都需要w个资源,一共m个进程,在极端情况下,每个进程都分配到了w-1个资源,所以都无法完成任务,则会死锁,再给其中任意一个进程分配1个资源,那么该进程拿到了w个资源,则可以完成任务,释放掉资源后,其它进程也可以依次拿到w个资源完成任务
五、最小资源数计算
5.1 例题1
  • 1.系统有5个进程:A、B、C、D、E。这5个进程都需要4个系统资源。如果系统至少有多少个资源,则不可能发生死锁。

  • 2.一定死锁的情况:某个进程分配了3个资源,其它进程均没有分配到资源。极端情况下,所有资源都给一个进程,对于A,需要4块钱才能办事,给A零到三块钱,都不会办事的。因此资源小于4时,一定会发生死锁。

  • 3.可能正常执行的情况:极端情况下,4个资源都分配给同一个进程,即

  • 4.可能死锁的情况,极端情况下,15个资源平均分配给5个进程,即每个进程分配到3个资源,即

  • 5.因此资源数在4到15个时,可能死锁,可能正常执行

  • 6.当资源数大于15时,必定不会死锁,即

  • 7.假设第16号资源给到进程B,进程B得到资源后,运行完,释放了4个资源,再将释放资源分配其它任意进程,其它进程均可完成任务,释放所持有的资源

  • 8.因此资源数大于15时,必定不会死锁

5.2 例题2
  • 1.某计算机系统中互斥资源R的可用数为8,系统中有3个进程P1、P2和P3竞争R,且每个进程都需要i个R,该系统可能会发生死锁的最小i值为(D)
    A. 1 B. 2 C. 3 D. 4
  • 2.假设每个进程需要1个资源,3个进程一共需要3个资源就够用,远远小于8,根本不可能出现死锁
  • 3.假设每个进程需要2个资源,3个进程一共需要6个资源就够用,也小于8,所以根本不可能出现死锁
  • 4.假设每个进程需要3个资源,按最可能发生死锁的极端情况分配为3 3 2,但拥有3个资源的进程执行完后会释放资源,因此也不会死锁
  • 5.假设每个进程需要4个资源,按最可能发生死锁的极端情况分配为3 3 2,此时每个进程都没有分配到足够多的资源使之运行下去,因此会产生死锁。这里是可能,如果分配的是4 3 1,进程运行完释放资源后还是能继续使下个进程得到资源运行完后再释放,依次类推,便不会死锁
  • 6.套用公式:系统不可能发生死锁的最小资源数(w-1)*m+1<=n,代入公式得到:(i-1) * 3 + 1 <= 8,得到 i <= 7/3 + 1, 当i=1 2 3时,系统不可能发生死锁,所以最小i值为4
  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王佑辉

老板,赏点吧

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

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

打赏作者

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

抵扣说明:

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

余额充值