化简资源分配图判断是否发生死锁

目录

1.资源分配图的概念

2.判断是否发生死锁


1.资源分配图的概念

资源分配图表示进程和资源之间的请求关系,例如下图:

P代表进程,R代表资源,R方框中 有几个圆球就表示有几个这种资源,在图中,R1指向P1,表示R1已经分配了一个资源给P1了,R1指向P1的边叫做分配边(资源-->进程);P1指向R2,表示P1还需要一个R2才能执行,P1指向R2的边叫做请求边(进程-->资源)。

阻塞节点:某进程中所请求的资源已全部分配完毕,无法获取所需资源,则该进程被阻塞了无法继续执行,如上图P2。

非阻塞节点:某进程所请求的资源还有剩余,可以分配给该进程继续运行。如上图中P1,P3。 当一个进程资源图中所有进程都是阻塞节点时,即进入死锁状态

说明一下:

上面的图表示,系统分配一个 R1 资源给进程 p2,然后又分配一个 R1类资源给进程 p1,
最后进程 p1 收到一个 R1 类资源后又继续申请1个R1类资源,此时,还剩下一个 R1类资源可以分配给 P1,但还没分配给 P1。(注意:图中P1的申请是还没得到响应的,不要以为 R1 指向P1的那个箭头是响应 P1的申请,而分配了资源给 P1)。“右箭头”跟“左箭头”是没任何关系的。

也就是先分配,再看进程的请求是否能够被满足。如果某个进程的请求能被满足,那么这个进程就是非阻塞节点,不能被满足,就是阻塞节点。

2.判断是否发生死锁

判断下图是否存在死锁:

1.先看资源,r1分配了一个资源给p1,分配了一个资源给p2,还剩1个资源;r2分配了1个资源给p2,还剩1个资源。

2.再看p1进程,p1向r2申请了一个资源,r2刚好剩余一个资源,p1是非阻塞节点。

3.再看p2进程,p2向r1申请1个资源,r1刚好剩余一个资源,p2是非阻塞节点。

所以该图不存在死锁。

再看下面这个例子:

1.对于r1,分配了2个资源,剩余1个资源。对于r2,分配了1个资源,剩余2个资源。

2.先看p1,p1向r1申请了1个资源,r1刚好剩余1个资源,向r2申请1个资源,而r2剩余2个资源,绰绰有余。所以p1是非阻塞节点。p1进程完成后,释放资源。

3.此时r1剩余2个资源,r2剩余2个资源,p2可以申请到r1的1个资源,p2非阻塞。

当所有的点都处于“孤立状态”,那么这个进程不存在死锁。

若资源分配图如下图所示,也就是对于p2而言,只有分配边,没有请求边:

那么可以直接“孤立”这一进程:

总结:

1.先将分配给进程,再看进程的请求(顺序一定不能乱)。

2.对于较复杂的资源分配图,当一个进程是非阻塞节点时,可以想将它“孤立”起来。

3.进程请求资源才可能发生死锁,所以只有分配边没有请求边的进程节点可以直接“孤立”起来。

利用上面的总结,做一下题吧:

1.下面的进程资源图是()

1.R1无剩余资源,R2无剩余资源,R3剩余1个资源。

2.由于R1,R2都没有资源分配了,突破口就来自R3,先看连接R3的请求边:

P3向R3请求1个资源,R3刚好剩余1个资源,P3是非阻塞节点。P3“孤立”起来。

3.重新计算一下剩余资源,R1剩余1个资源,R2剩余1个资源,首先看P1,P1向R2申请了1个资源,可以被满足。“孤立”p1。

4.剩下的资源对P2而言绰绰有余了,所以P2也不会阻塞,所以这个资源分配图不存在死锁。

2.系统中有3个不同的临界资源R1,R2,R3,被4个进程p1,p2,p3,p4共享。各进程对资源的需求为:p1申请R1和R2;p2申请R2和R3,p3申请R1和R3,p4申请R2。若系统出现死锁,则处于死锁状态的进程数至少是()

A. 1         B. 2         C. 3         D. 4

答案:C

解答:

1.根据题目,画出的资源分配图如下:

2.P4不影响系统最终状态,只要给它分配资源,完成后就会释放资源。所以,不管给不给P4分配资源,最终三类资源都是在P1,P2,P3之间进行分配。简化资源分配图:

第一种情况:形成循环

由于题目中没有给出各类资源的具体个数,P2申请1个R2资源和1个R3资源,这里我们假设R3给到了P2一个资源,同理,R2给P1一个资源,R1给了P3一个资源,这样就形成了循环,发生死锁。三个进程都无法进行,因为只要有一个进程申请的资源得到满足,完事后就会释放相邻的资源。循环状态就被破坏了,没有循环,一定不会发生死锁。

补充:死锁的必要条件

1.互斥        2.不可剥夺        3.请求和保存        4.循环

第二种情况:没有形成循环

若没有形成循环,可以完全化简成孤立状态的,即不会发生死锁。

所以若资源分配图死锁,那么至少P1,P2,P3进程处于死锁。若没有事先给P4分配进程,那么处于死锁状态的进程为P1,P2,P3,P4。

3.假定某计算机系统有R1设备3台,R2设备4台,它们被P1、P2、P3和P4这4个进程互斥共享,且已知这4个进程均以下面所示的顺序使用现有设备:

一>申请R1一>申请R2一>申请R1一>释放R1一>释放R2一>释放R1

请问系统运行过程中是否可能产生死锁?如果有可能的话,请举出一种情况,并画出表示该死锁状态的资源分配图。

首先p1,p2,p3,p4都申请r1资源,但是r1只有3个资源:

所以这里假设只有p1,p2,p3被分配到了资源:

由于p4没有被分配到r1资源,所以接下来的步骤也不能完成。接下来p1,p2,p3继续申请r2资源,由于r2有4个资源,所以p1,p2,p3也能被分配到r2资源:

接下来p1,p2,p3会继续申请r1资源,由于r1已经没有资源可以分配了,进而发生死锁。

4.系统中有5个资源(R1~R5),现有进程p1依次申请R1, R5,R3;p2依次申请 R3,R4,R2;p3依次申请 R2,R5。
当 3个进程并发执行时有可能发生死锁吗?为什么?

依照题目画出的资源分配图,如下所示:

由于是并发执行,R1先给p1资源,R3给p2资源,R2给p3资源:

接下来,若R5再给p1分配资源,就会导致循环,必定发生死锁。

若是在这之前,R5先分配资源给p3,p3进程完成后,释放资源,就不会发生死锁:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/13865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ RPC ORM 高速解析

支持所有常用编程语 https://capnproto.org/GitHub - capnproto/capnproto: Capn Proto serialization/RPC system - core tools and C library https://capnproto.org/capnproto-c-win32-1.0.2.zip 常用命令: capnp help capnp compile -oc myschema.capn…

Excel中sum的跨表求和

#实际工作中,一个xlsx文件中会包含多个Excel表格,一般会有“总-分”的关系,如何把分表里的数字汇总到总表里呢? 一般有上图所示的两种表达方式。 可以使用通配符 *:代表任意个数、任意字符; ?&…

quartz定时任务

Quartz 数据结构 quartz采用完全二叉树:除了最后一层每一层节点都是满的,而且最后一层靠左排列。 二叉树节点个数规则:每层从左开始,第一层只有一个,就是2的0次幂,第二层两个就是2的1次幂,第三…

DOS学习-目录与文件应用操作经典案例-attrib

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 一.前言 DOS系统中的attrib命令是一个用于显示或更改文件&#…

设计模式——职责链(责任链)模式

目录 职责链模式 小俱求实习 结构图 实例 职责链模式优点 职责链模式缺点 使用场景 1.springmvc流程 ​2.mybatis的执行流程 3.spring的过滤器和拦截器 职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成…

github设置项目分类

https://www.php.cn/faq/541957.html https://docs.github.com/zh/repositories/working-with-files/managing-files/creating-new-files

什么是回表,如何解决回表问题

下面表中:主键id是聚簇索引,name是辅助索引。 执行这样一条SQL: select name from A where name"s;name字段是有索引,所以MYSQL在通过name进行査询的时候,是需要扫描两颗Btree树的。 第一遍:先通过二级索引定位主键值1。第二遍:根据主键…

免费发布web APP的四个途径(Python和R)

免费发布数据分析类🌐web APP的几个途径📱 数据分析类web APP目前用来部署生信工具,统计工具和预测模型等,便利快捷,深受大家喜爱。而一个免费的APP部署途径,对于开发和测试APP都是必要的。根据笔者的经验…

word-形状绘制、smartart、visio

一、人员架构图绘制 小技巧: 1、ctrlshift水平复制 2、点击图形,右键设置为默认形状 3、插入-形状-右键-锁定绘图模式,按esc退出状态 4、插入-形状-新建绘图画布,代替组合问题 画布中存在锚点,便于直线连接 二、s…

深度学习之基于YOLOV5的口罩检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着全球公共卫生事件的频发,口罩成为了人们日常生活中不可或缺的一部分。在公共场所&am…

10、SpringBoot 源码分析 - 自动配置深度分析三

SpringBoot 源码分析 - 自动配置深度分析三 refresh和自动配置大致流程AutoConfigurationImportSelector的getAutoConfigurationEntry获取自动配置实体(重点)AutoConfigurationImportSelector的getCandidateConfigurations获取EnableAutoConfiguration类型的名字集合AutoConfig…

Android中JVM内存回收机制

文章目录 分代收集算法:新生代(Young Generation)老年代(Old Generation) 垃圾回收器:JVM常见三大回收算法:Mark-Sweep(标记清除)优点:缺点: 复制算法优点:缺点: Mark-Co…

ubuntu下交叉编译安卓FFmpeg 和 官方指导链接

将之前的编译方法在此记录 Linux系统:Ubuntu 18.04.6 LTS 交叉编译工具链:gcc-aarch64-linux-gnu gaarch64-linux-gnu ffmpeg版本:5.1.3 1.下载源码 ffmpeg官网:https://ffmpeg.org/download.html#releases 下载完成后&#x…

Edge浏览器“此页存在问题”解决思路

Edge浏览器显示“此页存在问题”解决思路 大家平时使用Edge浏览器时,是否和我一样会突然出现“此页存在问题”的情况? 经过百度查询后我找了一种情况和解决办法,能够大大减少这类问题的出现。出现“此页存在问题”可能是因为之前使用过软件…

Linux基础命令[27]-gpasswd

文章目录 1. gpasswd 命令说明2. gpasswd 命令语法3. gpasswd 命令示例3.1 不加参数3.2 -a(将用户加入组)3.3 -d(从组中删除用户)3.4 -r(删除组密码)3.5 -M(多个用户一起加入组)3.6 …

React中 将UI 视为树

当 React 应用程序逐渐成形时,许多组件会出现嵌套。那么 React 是如何跟踪应用程序组件结构的? React 以及许多其他 UI 库,将 UI 建模为树。将应用程序视为树对于理解组件之间的关系以及调试性能和状态管理等未来将会遇到的一些概念非常有用。…

Python教程:使用Python和PyQt编写进制转换器工具

1.介绍 在现代计算中,进制转换是一项常见且重要的任务。为了简化这个过程,我们也可以利用Python和PyQt自己写一个直观且易于使用的进制转换器工具。这个工具将支持二进制、八进制、十进制和十六进制的相互转换,并提供良好的用户界面和交互体…

Java设计模式(23种设计模式 重点介绍一些常用的)

创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:…

MySQL---函数与约束

目录 一、函数 1. 字符串函数 2. 数值函数 3. 日期函数 4. 流程函数 5. 总结 二、约束 1. 概述 2. 约束演示 3. 外键约束 3.1 添加外键 3.2 删除外键 3.3 外键删除更新行为 4. 总结 一、函数 1. 字符串函数 命令如下所示: -- concat select concat("Hel…

苹果CMS:如何去掉首页帮助提示信息

首先我们安装好苹果CMS,未安装的可以参考苹果cms:介绍及安装 安装好之后我们需要进入模版设置,可能对于刚刚接触CMS框架的朋友是不清楚地址的: https://www.yourweb.com/admin_login.php/admin/mxpro/mxproset 其中【yourweb】…