1.1死锁定义

多个进程因为竞争资源而造成一种僵局,没有外力的作用下,这些进程无法向前推进

这种僵局可以解释为:每个进程继续执行所需的资源都被另一个进程占用

这里举一个简单的例子:

假设现在有进程P1,P2,资源R1,R2

进程P1的执行情况为:

P(R1)
输入输出操作
p(R2)
临界区
v(R2)
v(R1)

进程P2的执行情况为:

P(R2)
输入输出操作
p(R1)
临界区
v(R1)
v(R2)

先执行进程P1或者先执行进程P2都不会产生问题

如果同时递交了进程P1和P2呢?---此处的"同时"是指进程P1立刻递交给P2,不是广义上的同时递交

分配资源出现问题,R1的资源分配给P1,R2的资源分配给P2,当P1提出对R2资源的申请请求时,R2资源已经被P2占据,发生死锁

1.2产生死锁的原因:

1.2.1根本原因:资源不足

1.2.2其他原因:

a.竞争非剥夺性资源(一旦占有CPU直至完成或者阻塞)

b.进程间推进顺序(eg.p操作)非法

1.3产生死锁的必要条件:

1互斥

2请求和保持

eg.P1占有R1申请R2----也就是请求申请资源的同时,占有其他资源,请求的资源被其他进程占有

3不剥夺条件

4环路等待

4处理死锁:

预防 :

破坏除互斥条件外其他几个条件之一

  • 破坏请求,保持条件---又名:静态资源分配法

所有资源一次分配,一次回收

缺点:资源浪费,cpu的利用率低,降低进程的并发性,进程延迟执行

  • 破坏不剥夺条件

新资源得不到满足,就释放已经占有的资源

缺点:放弃资源需要现场保护,重新申请资源需要现场恢复,cpu的利用率低,进程被无限延迟

  • 破坏环路等待

进程按照一定的顺序申请资源

缺点:资源编号难以确定,先申请后用的资源,但是没有使用资源,cpu的利用率低

2避免 :一进程请求资源---->试分配(检查安全性)----若不安全:回退到前一时刻状态

                           ----若安全:继续执行

2RAG图的化简方法:

2.1RAG图的有关知识点:

方框表示缓冲池,方框中点的个数表示缓冲池中的资源个数

用圆圈圈起来的表示进程

2.2RAG图的化简

请求边(Need),占有边(Allocation)

如果某进程满足请求边得到满足或者没有请求边,可以删除该进程关联的所有边

举例:

系统有5种资源,在T0时刻P0,P1,P2,P3,P4这五个进程对资源的占用情况和需求情况见下列矩阵,考虑如下资源分配状态,资源总数SUM=(2,1,2,1,1)

化简资源分配图,并判断是否产生死锁:

为了避免死锁,引入银行家算法。

思想:

一请求资源Request,试分配,检查T0时刻的安全性

若安全,试分配->真分配资源给各个进程

若不安全,从T1时刻回退到T0时刻

银行家算法

1什么是安全状态

安全状态是指系统能够按照某种进程顺序来为每个进程分配其所需的资源,直至满足每个进程对资源的最大需求,使得每个进程都可以顺利的完成

2了解一些代名词

Need:表示当前进程的尚需资源

Available:表示当前可用资源

Allocation:表示当前进程已分配资源

Max:表示最大需求

其中最大需求Max=已分配资源Allocation+尚需资源Need

引入两个变量:work来记录Available的值,work现=work初+Allocation

Finish来表示进程的完成状态,Finish=true表示进程完成,Finish=false表示进程未完成

2如何判断T0时刻进程是否安全

判断T0时刻安全序列,使得每个进程的Need<=Availible,状态为未完成即Finish=false,将work初更新为Avaliable

如果满足这三个条件,将该进程的检测完成状态更新为true,work更新为work+avaliable

举例:假定有五个进程{P0,P1,P2,P3,P4}三种类型资源{A,B,C}每种资源的数量为10,5,7(最大资源数目MAX),各进程的最大需求,T0时刻资源分配情况如下所示

解:

work=Available(3,3,2)

finishi=false(i=0,1,2,3,4)

1找p1:

finish1=false

Need1(1,2,2)<=Available(3,2,2)

Available(5,3,2)=work(3,3,2)+Allocation(2,0,0)

finish1=true

2找p3

finsh3=flase

Need3(0,1,1)<=Available(5,3,2)

Available(7,4,3)=work(5,3,2)+Allocation(2,1,1)

finish3=true

3找p4

finsh4=flase

Need4(4,3,1)<=Available(7,4,3)

Available(7,4,5)=work(7,4,3)+Allocation(0,0,2)

finish4=true

4找p0

finsh0=flase

Need0(7,4,3)<=Available(7,4,5)

Available(7,5,5)=work(7,4,5)+Allocation(0,1,0)

finish0=true

5找p2

finsh2=flase

Need2(6,0,0)<=Available(7,5,5)

Available(10,5,7)=work(7,5,5)+Allocation(3,0,2)

finish2=true

结论:因为finishi=true(i=0,1,2,3,4)

所以安全

安全序列为{p1,p3,p4,p0,p2}

某进程提出请求资源Request

1先判断Request<=Need是否成立,若成立,执行2。不成立那么数据出错,不可分配资源给该进程

2判断Request<=Available是否成立,若成立,试分配资源Request给该进程。不成立则阻塞,不可分配资源给该进程

3试分配

Allocation=Allocation+Request

Need=Need-Request

Available=Available-Request

其他进程的资源分配状况不变

[操作系统]死锁/RAG图/银行家算法相关推荐

  1. 操作系统之死锁的避免-银行家算法详解

    1.银行家算法中的数据结构   (1) 可利用资源向量Available.这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随 ...

  2. 操作系统常问面试问题 3 —— 死锁(deadlock)(产生的条件、死锁避免(银行家算法)、死锁检测)

    死锁(产生的条件.死锁避免(银行家算法).死锁检测) 死锁(deadlock) 1.定义 2.产生的条件 3.死锁避免 3.1.银行家算法 3.1.1.实现过程 4.死锁检测 5.死锁恢复 6.鸵鸟算 ...

  3. 死锁预防之银行家算法

    死锁预防之银行家算法 死锁 死锁的定义 死锁的产生 死锁的描述 死锁避免算法 银行家算法 设计思想 分析 使用数据结构的描述 使用到的函数 主函数执行的流程 银行家算法的逻辑 完整的程序代码 运行结果 ...

  4. python银行家算法_Linux 死锁概念与银行家算法python 实现

    一 . 死锁的概念 接上篇 http://shaobaobaoer.cn/archives/680/linux-process-manager-note 在之前的哲学家吃饭的问题中,当每个哲学家都想进 ...

  5. 计算机操作系统:实验2 【银行家算法】

    计算机操作系统:实验2 [银行家算法] 文章目录 计算机操作系统:实验2 [银行家算法] 一.前言 二.实验目的 三.实验环境 四.实验内容 五.实验说明 六.实验步骤 1. 认真理解好课本中银行家算 ...

  6. 操作系统--死锁避免(银行家算法)

    可利用资源向量Available.这是一个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变.如果A ...

  7. 避免死锁方法之银行家算法

    文章目录 死锁 银行家算法原理 银行家算法具体介绍 要介绍银行家算法应该先简单说一下死锁: 死锁 死锁概念:在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源时,就会造成 ...

  8. 操作系统课程设计---实验六 银行家算法的模拟与实现

    实验六 银行家算法的模拟与实现 完整课程设计源码及其报告查看:陈陈的操作系统课程设计 1.实验目的 (1) 进一步理解进程的并发执行. (2) 加强对进程死锁的理解,理解安全状态与不安全状态的概念. ...

  9. 系统架构设计师考试知识点整理-4:死锁问题、银行家算法、管程与线程

    死锁问题 1.死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源所造成的循环等待的现象. 2.死锁产生的根本原因在于系统提供的资源少于并发进程所要求的该类资源数. 3.死锁 ...

最新文章

  1. 一次mysql瘫痪解救
  2. 温故而知新,6位顶级CV科学家聚首:计算机视觉中的深度学习方法vs传统方法...
  3. nagios出现乱码
  4. solaris 源代码
  5. 40个Java Collections面试问答
  6. Angular实现悬浮球组件
  7. [论文阅读] BCNet: Bidirectional collaboration network for edge-guided salient object detection
  8. SMB协议端口号,Windows文件共享协议
  9. Java中ArrayList和LinkedList以及queue的模仿
  10. 怎么在长方体上挖孔_被雷军狂喷的挖孔屏到底好不好?分析你必须知道的优缺点!...
  11. w ndows7旗舰版网卡驱动,Win7网卡驱动64位离线安装包 免费版
  12. 好用家庭收支管理 1.0.20130204绿色免费版
  13. 宁夏移民文化的四个特点
  14. 常用的企业邮箱有哪些?什么邮箱好用
  15. 加载网页时弹出div
  16. 计算机在线考试word,大学计算机考试word试题及答案.docx
  17. [CLR团队公告]CLR基础研究团队:精品系列推广活动启动
  18. SAP产品合规管理(Product Compliance)之危险品管理(Dangerous Goods Management)功能讲解
  19. 青少年沉迷游戏得鱼教育老师告诉家长如何处理
  20. wordpress 邮件_停止在WordPress中使用一次性电子邮件地址

热门文章

  1. 医学知识---之T1,T2,flair,stir
  2. Win10同一路由器下共享打印机
  3. Android仿余额宝实现七天年化收益率图表
  4. 基于新版本Gradle上传jitpack开源项目
  5. php 获取当前IP地址
  6. 小乌龟(TortoiseGit)配置git的ssh连接到gitlab
  7. HBase(1):简介
  8. 初中数学抽象教学的案例_初中数学教学案例
  9. vs code远程编辑文件
  10. Mac——快速锁定屏幕