其他分享
首页 > 其他分享> > 计算及操作系统--死锁

计算及操作系统--死锁

作者:互联网

目录

什么是死锁
死锁形成的原因
死锁的必要条件
死锁的预防

什么是死锁

死锁指的是两个或两个以上的进程在执行过程中,因为争夺资源而造成一种互相等待的状态,如果不借助外力的话他们将无法推进下去。在多任务操作系统中,操作系统为了协调不同行程,能否获取系统资源时,为了让系统运作,必须要解决问题。

死锁形成的原因

  1. 系统资源不足。
  2. 进程运行推进的顺序不合适。
  3. 资源分配不等。

死锁的必要条件

死锁的预防

死锁只有在四个必要条件同事满足时出现。预防死锁就是至少破坏这四个条件其中之一,即破坏“互斥”,“不可抢占”,“循环等待”,“占有和等待”

处理方法

鸵鸟策略

把投埋进沙子里,假装没有发生问题。
因为解决死锁问题的代价很高,因为鸵鸟策略这种不采取任务措施的方案会获得更高的性能。
当发生死锁时不会对用户造成多大影响,或发生死锁的概率很低,可以采用鸵鸟策略。

死锁检测与死锁恢复

1.每种类型一个资源的死锁检测

在这里插入图片描述
此图片取自CyC2018的github
上图为资源分配图,其中方框表示资源,圆圈表示进程,资源指向进程表示该资源已经分配给该进程,进程指向资源表示进程请求获取该资源。
图a可以抽取出环,如图b,它满足了循环等待的条件,因此会发生死锁。
每种类型一个资源的死锁检测算法是通过检测有向图是否存在环来实现,从一个节点出发进行深度优先搜索,对访问过的节点进行标记,如果访问了已经标记的节点,就表示有向图存在环,也就是检测到死锁的发生。

2.每种类型多个资源的死锁检测

在这里插入图片描述
此图片取自CyC2018的github
上图中,有三个进程四个资源,每个数据代表的含义如下:

进程p1和p2所请求的资源都得不到满足,只有进程p3可以,让p3执行,之后释放p3拥有的资源,此时A=(2 2 2 0).p2可以执行,执行后释放p2拥有的资源,A=(4 2 2 1).p1也可以执行,所有进程都可以顺利执行,没有死锁。
算法总结如下:
每个进程最开始都不被标记,执行过程有可能被标记。当算法结束时,任何没有被标记的进程都是死锁进程。

死锁恢复

死锁预防

死锁的预防是保证系统不进入死锁状态的一种策略,它的基本思想是要求进程申请资源时遵循某种协议,从而打破产生死锁的四个条件中的一个或多个,保证系统不会进入死锁状态。

死锁避免

安全序列
银行家算法

是一个著名的避免死锁的算法
问题描述:一个银行家拥有一定数量的资金,有若干个客户要贷款,每个客户需要在一开始贷款之前申明自己所需贷款的总额,若该客户贷款总额不超过银行家的资金总数,银行家可以接受客户的要求。客户在减贷款之前可能会等待,但是银行家需要保证这种等待是有限的,可完成的。
银行家算法允许死锁必要条件的互斥,占有和等待,不可抢占的存在,这样它与预防死锁的几种方法相比较,限制条件少了,资源利用程度提高了。
银行家算法的缺点:

1.要求客户数保持不变,这在多道程序中难以做到。
2.这个算法保证所有客户在有限的时间内得到满足,但实时客户要求快速响应,所以要考虑这个因素。(分配的时间得不到保证)
3.由于要寻找一个安全序列,实际上增加了系统的开销。

标签:操作系统,占有,算法,死锁,计算,进程,资源,策略
来源: https://blog.csdn.net/qq_40760617/article/details/100034612