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

news2024/11/15 8:42:10

目录

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.coloradmin.cn/o/1685305.html

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

相关文章

【加密与解密(第四版)】第十五章笔记

第十五章 专用加密软件 15.1 认识壳 15.2 压缩壳 UPX、ASPack、PECompact 15.3 加密壳 ASProtect(压缩、加密、反跟踪代码、CRC校验、花指令)、Armadillo(穿山甲)、EXECryptor、Themida 15.4 虚拟机保护软件 虚拟机引擎(编译器解释器虚拟CPU环境指令系统&#xff…

后端数据库开发JDBC编程Mybatis之用基于XML文件的方式映射SQL语句实操

之前的SQL语句是基于注解 以后开发中一般是一个接口对应一个映射文件 书写映射文件 基本结构 框架 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.or…

嵩山是颍水的嵩山

颍水对于嵩山具有特别重要的意义&#xff0c;嵩山的水流大多数汇入了颍河&#xff0c;颍河流域约占登封市总面积88%&#xff0c;从这个角度讲&#xff0c;嵩山就是颍水的嵩山。 再看环嵩山地区&#xff0c;即“嵩山文化圈”&#xff0c;学者们按黄、淮、济分为三个水系区。黄河…

解决IE11通过主机名访问和IP地址访问,CSS渲染效果不一致问题

软件环境 spingboot:版本2.6.13 浏览器&#xff1a;IE11 问题描述 html用css渲染&#xff0c;浏览器输入IP地址访问&#xff0c;和输入主机名访问&#xff0c;效果不一样&#xff0c;如下图&#xff1a; IP地址访问才是我想要的效果&#xff0c;主机访问菜单半透明向下箭头…

如何让大模型更聪明?

如何让大模型更聪明&#xff1f; *随着人工智能技术的飞速发展&#xff0c;大模型在多个领域展现出了前所未有的能力&#xff0c;但它们仍然面临着理解力、泛化能力和适应性等方面的挑战。那么&#xff0c;如何让大模型变得更聪明呢&#xff1f; 方向一&#xff1a;算法创新 …

Web3空投流程分享:如何操作及注意事项

空投&#xff08;Airdrop&#xff09;指通过向特定用户群体免费分发代币&#xff0c;项目方希望能够吸引更多的用户和关注。对于许多刚刚接触加密货币和区块链的新手来说&#xff0c;都会疑惑空投的流程究竟是什么样的呢&#xff1f;又该如何参与其中&#xff1f;本文将为您详细…

AI智能体|使用扣子Coze基于IDE创建自定义插件

大家好&#xff0c;我是无界生长。 在使用Coze的过程中&#xff0c;有些个性化场景无法通过插件商店已有的插件满足&#xff0c;这个时候就需要通过自定义插件的方式来实现业务需求。下面将通过一个实际案例来简单介绍下如何使用Coze基于IDE创建自定义插件&#xff0c;完成在Co…

SpringCloud微服务02-微服务拆分-注册中心-OpenFeign-网关路由-网关登录校验-配置管理

一、认识微服务 1.单体架构 当高并发功能和重要功能都在同一个Tomcat服务器&#xff0c;当高并发的时候&#xff0c;重要的功能接口就会受到影响。 2.微服务 跨服务就需要一些技术栈 3.SpringCloud 二、微服务拆分 1.熟悉黑马商场 2.服务拆分原则 什么时候用微服务&#xf…

HTML+CSS+JS 扩散登录表单动画

效果演示 Code <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,us…

Grafana HTML Panel展示post获取后数据

<!DOCTYPE html> <html> <head><title>API 数据表格展示</title><script src"https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body><table id"data-table" border"1&qu…

每日一题《leetcode--143.重排链表》

https://leetcode.cn/problems/reorder-list/ 这道题我们可以用两种方法 第一种&#xff1a;用数组存储该链表&#xff0c;然后通过访问数组下标的方式来改变该链表的排列方式。 void reorderList(struct ListNode* head) {第一种方法&#xff1a;用线性表存储该链表if(head …

【ARMv8/v9 异常模型入门及渐进 10 -- WFI 与 WFE 使用详细介绍 1】

请阅读【ARMv8/v9 ARM64 System Exception】 文章目录 WFI 与 WFE等待事件&#xff08;WFE&#xff09;发送事件&#xff08;SEV&#xff09;本地发送事件&#xff08;SEVL&#xff09;WFE 唤醒事件 WFE 使用场景举例与代码实现wfe睡眠函数sev 事件唤醒函数全局监视器和自旋锁 …

项目从 Mysql切换 PostgreSQL 改造及踩坑记录

项目从 Mysql切换 PostgreSQL 改造及踩坑记录 切换流程 项目引入postgresql驱动包 由于我们要连接新的数据库&#xff0c;理所当然的要引入该数据库的驱动包&#xff0c;这与mysql驱动包类似 <dependency><groupId>org.postgresql</groupId><artifactI…

美容美发行业收银系统源码、美业SaaS系统源码

美业SaaS系统 连锁多门店美业收银系统源码 多门店管理 / 会员管理 / 预约管理 / 排班管理 / 商品管理 / 促销活动 PC管理后台、手机APP、iPad APP、微信小程序

leetcode-设计LRU缓存结构-112

题目要求 思路 双链表哈希表 代码实现 struct Node{int key, val;Node* next;Node* pre;Node(int _key, int _val): key(_key), val(_val), next(nullptr), pre(nullptr){} };class Solution { public: unordered_map<int, Node*> hash; Node* head; Node* tail; int …

【520】《架构演进之路》选题通过

选题通过 碰巧是520这一天&#xff0c;清华社编辑今天下午回复书籍&#xff08;架构演进之路&#xff09;选题通过&#xff0c;一个有纪念意义的日子。 架演共创者联盟成立 目前参与者有8位成员&#xff0c;涉及前后端、大数据、app、数字孪生&#xff0c;可比一个真实项目团队…

k8s笔记 | Prometheus安装

kube-prometheus 基于github安装 选择对应的版本 这里选择 https://github.com/prometheus-operator/kube-prometheus/tree/release-0.11 下载修改为国内镜像源 image: quay.io 改为 quay.mirrors.ustc.edu.cn image: k8s.gcr.io 改为 lank8s.cn 创建 prometheus-ingres…

C++开源库glog使用封装--自定义日志输出格式,设置日志保留时间

glog下载和编译 glog开源地址 https://github.com/google/glog glog静态库编译 cd /home/wangz/3rdParty/hldglog/glogmkdir out mkdir build && cd buildcmake .. -DCMAKE_INSTALL_PREFIX../out -DCMAKE_BUILD_TYPERelease -DBUILD_SHARED_LIBSOFF本文选择的glo…

如何利用Ubuntu服务器运行深度学习项目?

一、整体思路 先配置好服务器端的软件环境&#xff08;工程源码&#xff0c;miniconda&#xff0c;cuda&#xff0c;显卡驱动等&#xff09;&#xff0c;然后用自己电脑的pycharm远程连接服务器运行代码。一句话总结&#xff1a;借用服务器资源运行代码&#xff0c;本地pycharm…