死锁相关知识小结

进程死锁的原因和条件

死锁的原因

  1. 竞争资源引起死锁

多个进程共同竞争不可抢占资源(如打印机、磁带机等)就可能引起死锁

  1. 进程推进顺序不当引起死锁

在多道程序系统中,并发执行的进程推进序列不可予测,有些推进顺序,进程可以顺利完成,这些推进顺序是合法的;而有的推进顺序会引起进程无限期地等待永远不会发生的条件而不能向前推进,造成了死锁

例如按照以下顺序推进的时候就会引起死锁

进程P和Q并发执行

process P         process Q
get A             get B
get B             get A
release A         release B
release B         release A

程序可以看成以下顺序执行

P:get A
Q:get B
P:get B
Q:get A

在执行P:get B时,因为Q在此之前已经占有了B资源,所以引发阻塞,同理,在执行Q:get A时,P在此之前已经占有了A资源,此时会产生一个死锁环路
死锁环路

继而因进程推进顺序不当引起死锁

哲学家吃面问题

有三个哲学家,每个哲学家左右都有且仅有一根筷子,每当任意一个哲学家想要吃面时都需要同时拿到两根筷子才能成功吃到面条
哲学家吃面

如果按照以下顺序推进:

A:          B:          C:
P(s1)       P(s2)       P(s3)
P(s3)       P(s1)       P(s2)
eating      eating      eating
V(s3)       V(s1)       V(s2)
V(s1)       V(s2)       V(s3)


A:P(s1)     B:P(s2)      C:P(s3)
A:P(s3)阻塞 B:P(s1)阻塞  C:P(s2)阻塞

形成死锁环路:
死锁环路

这也反映出了推进顺序不当引发的死锁问题

死锁的条件

  1. 互斥条件

一个资源只能被一个进程使用

  1. 不可抢占条件

一个资源只能被占有它的进程所释放,不能被别的进程抢占

  1. 请求和保持条件

进程已经保持了至少一个资源,但是又提出了新的资源要求,而目标资源已经被其他进程占有,此时请求进程阻塞,但是又对已经获得的资源保持不放

  1. 环路等待条件

每当每类资源只有一个时,在发生死锁时,必然存在一个进程–资源的环形链

处理死锁的基本方法

死锁的预防

静态方法:在进程执行前采取的措施,通过设置某些限制条件去破坏产生死锁的四个必要条件之一,防止产生死锁

  1. 破坏互斥条件

可以使用软硬件结合去改变资源本身的特性,例如,采用spooling技术可以将独享打印机改变为共享打印机

  1. 破坏不可抢占条件

抢占式调度法主要用于处理机和存贮器资源调度,它们的状态容易保存和恢复。但此法对外部设备和私存数据不宜使用。

  1. 破坏请求和保持条件

系统可采用资源静态予分配方式来破坏请求保持条件,系统要求所有进程一次性申请整个在运行过程中全部资源,从而摒弃了请求条件

这种预防死锁的方法优点是简单、安全,缺点是资源利用率很低,进程要延迟运行

  1. 破坏循环等待条件
  • 有序资源使用法

可以将不同资源按类型进行线性排序,并且赋予不同的序号,在进程申请资源的时候要求要严格按照序号从小到大进行申请,从而申请了较高序号资源的进程继续申请的资源必将是空闲的,从而摒弃了环路等待的条件,成功预防死锁

  • 资源按级分配法

该方法将资源递增排序成若干等级(L1,L2,L3,···),其中每级都包含几类资源,要求要求每个进程在获得了Lj级中资源之后 ,它才能申请更高级的LK(Lk > Lj)级中的资源;如果它还需申请比Lk级低的LI级(Li < Lk)资源,则必须先释放所有大于Li级的资源

安全状态和安全序列

安全状态是系统的一种状态,系统能够按照某种顺序(P1,P2,···,Pn)来为各个进程分配其所需资源,直至满足其最大需求,使得每个进程都能按顺序一个一个完成,那么这个序列(P1,P2,···,Pn)就称为安全序列,存在安全序列的状态称为安全状态,不存在安全序列的状态称为不安全状态,如

进程     最大需求    已分配      还需请求    可用
P1         10          5           5       3
P2         4           2           2
P3         9           2           7

可以找到一个安全序列(P2,P1,P3),系统按照这个序列分配资源,每个进程都可以完成,假设该任务需要的资源为打印机,则先给P2分配2台打印机满足P2的最大需求,使得P2能够先运行完毕并且释放所有打印机资源,此时可用打印机资源数变为5,可以满足P1的请求资源数,将打印机分配给P1并且运行完毕释放资源之后,可用打印机资源数变为10,满足P3的请求资源数,最终P3可以成功执行完毕。故(P2,P1,P3)为一个安全序列。

死锁的避免

动态方法:在进程执行过程中采取的措施,在进程申请资源时采取某种方法去防止系统进入不安全状态,从而避免发生死锁

该方法允许进程动态的申请资源系统在进行资源分配之前,先计算资源分配的安全性,如果此次分配不会导致系统从安全状态向不安全状态转换,则可以将资源分配给进程,否则不分配资源,进程必须阻塞等待,从而避免发生死锁,例如银行家算法避免死锁

银行家算法

简单来说就是在某一进程在申请资源时,根据该进程申请的资源数,寻找以该进程为开头的任意一组安全序列,如果能找到一组安全序列,则可以避免死锁,具体的实现思路和运行代码可以看一下我的另一篇博文:银行家算法

死锁的检测

预先不采用任何限制措施,允许系统发生死锁,再检测死锁,如果检测到死锁,就采用撤销进程等死锁解除方法使系统正常工作

  1. 资源分配图的简化
    系统处于某状态时可以用资源分配图来表示,可用资源分配图的简化来判断系统是否处于死锁状态

资源分配图的简化
在资源分配图中找到一个既不阻塞又非孤立的进程结点(如某进程既没有已经分配的资源也没有需要申请的资源,即既没有分配边,也没有申请边,则该结点称为孤立结点),让它获得所需资源运行完毕,并释放其所有资源,这相当于取消其分配边和申请边,使其成为孤立结点

经过上述简化步骤,如果所有的进程结点都可以简化成孤立结点则称该资源分配图是可简化的,反之,称该资源分配图是不可简化的

  1. 死锁定理

当在该状态下的资源分配图不可完全简化,则该状态称为死锁状态,该状态的充分条件称为死锁定理

  1. 死锁检测的数据和算法

类似于银行家算法

死锁的解除

  1. 强制性的从系统中撤销一个或者多个死锁的进程以断开循环等待链
    1. 撤销全部死锁进程
    2. 逐个撤销死锁进程直至死锁环路消除

    大部分按照先逐个撤销代价比较小的进程,影响一个进程的撤销代价的因素有:该进程的优先级,该进程运行至今的运行代价(包括CPU、使用资源的种类和时间等),外部代价等

  2. 死锁恢复的另一种方法是使用一个有效的挂起和解除机构来挂起一些死锁的进程,其实质就是从挂起的进程那里抢占资源以解除死锁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值