死锁(银行家算法)


成因:

(1)资源竞争:

竞争不可剥夺的资源。

(2)进程推进顺序非法:

  1. 请求释放资源的顺序错误,P1,P2分别占有R1,R2,然后分别请求对方占有但未释放的资源。
  2. 信号量使用不当导致死锁,进程A等待B,进程B等待A

(3)死锁产生的必要条件:

1.互斥条件:资源只在特定时间由一个进程占有。

  1. 不剥夺条件:资源的主动释放
  2. 请求和保持条件:持有资源并提出了新的请求。就算阻塞也不释放。
  3. 循环等待条件:

处理方法:

  1. 预防死锁(一刀切): 破坏四个当中的一个条件(条件严格实现简单,但是容易造成效率降低)

限制用户申请资源的顺序

  1. 避免死锁(预防和检测的折中): 用某种方法防止系统进入不安全状态。(程序实现比较复杂)

请求进程运行所需资源总量信息

  1. 死锁的检测及解除(事后擦屁股): 强制释放资源,造成损失。

在分配阶段不采取任何措施,但提供


image.png

死锁避免:

1.系统安全状态:

系统按某种进程顺序推进,分配剩余资源,可以保证此次分配不会导致系统进入不安全状态。


image.png

按照P2,P1,P3可以避免死锁。

2. 银行家算法(预防死锁):

1)可利用资源向量Available

是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目。如果Available[j]=K,则表示系统中现有Rj类资源K个。

2)最大需求矩阵Max

这是一个n×m的矩阵,它定义了系统中n个进程中的每一个进程对m类资源的最大需求。如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。

3)分配矩阵Allocation

这也是一个n×m的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。

4)需求矩阵Need。

这也是一个n×m的矩阵,用以表示每一个进程尚需的各类资源数。如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。
Need[i,j]=Max[i,j]-Allocation[i,j]

安全性算法:

举例:


image.png
image.png

用Available矩阵去一个个带入Need矩阵,看哪个可以满足Available(3,3,2)>Need(0,1,1)(这个就随缘了),不断更新Need还有Available矩阵,直至Need全零。


死锁解除:

  1. 资源剥夺法: 挂起某些死锁进程,并抢占它的资源。但应防止被挂起进程长时间得不到资源。
  2. 撤销进程法: 强制撤销一部分甚至杀死全部进程。
  3. 进程回退法:让一个进程回退到足以回避死锁的地步。进程回退时自愿释放资源而不是被剥夺。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 死锁的概念 死锁的定义 在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然...
    CodeKing2017阅读 1,494评论 0 4
  • 1、竞态条件: 定义:竞态条件指的是一种特殊的情况,在这种情况下各个执行单元以一种没有逻辑的顺序执行动作,从而导致...
    Hughman阅读 1,336评论 0 7
  • 一.死锁的概念以及产生死锁的原因 1.死锁的定义 在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率...
    Chasel_H阅读 1,142评论 0 4
  • 产生死锁的四个必要条件: (1) 互斥条件:一个资源每次只能被一个进程使用。 (2) 请求与保持条件:一个进程因请...
    像敏锐的狗阅读 1,027评论 0 0
  • 你说你七月底会来深圳,说那时我也应该拿到驾照,你想在我这里住些日子。电话那头的我真的蛮高兴的,我们从大学相...
    feng126阅读 233评论 7 0