死锁相关习题 10道 附详解
2022
设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量是17,B资源的数量是6,C资源的数量是19。在T0时刻系统的状态:
| 最大资源需求量 | 已分配资源量 | |
|---|---|---|
| A,B,C | A,B,C | |
| P1 | 4,0,11 | 4,0,5 |
| P2 | 5,3,6 | 4,0,2 |
| P3 | 4,2,5 | 2,1,4 |
| P4 | 5,5,9 | 2,1,2 |
| P5 | 4,2,4 | 3,1,3 |
- 当前系统是否处于安全状态,并解释原因
- 简述银行家算法的缺点是什么
A:17,B:6,C:19
计算已分配的资源总量
A:=4+4+2+2+3=15
B:=1+1+1=3
C:=5+2+4+2+3=16
计算可用资源(Available):
Available=总资源-已分配资源
A:17-15=2
B:6-3=3
C:19-16=3
计算尚需资源:Need
P1:0,0,6
P2:1,3,4
P3:2,1,1
P4:3,4,7
P5:1,1,1
安全性检测:检查是否能找到一个安全序列
初始可用资源,Work:2,3,3
P1:0,0,6<=2,3,3,NO
P2:1,3,4<=2,3,3,NO
P3:2,1,1<=2,3,3,YES
执行P3,释放资源:
Work=2,3,3+2,1,4=4,4,7
检查下一个进程:
P1:0,0,6<=4,4,7,YES
执行P1,释放资源:
Work=4,4,7+4,0,5=8,4,12
检查下一个进程:
P2:1,3,4<=8,4,12,YES
执行P2,释放资源:
Work=8,4,12+4,0,2=12,4,14
检查下一个进程:
P4:3,4,7<=12,4,14,YES
执行P4,释放资源:
Work=12,4,14+2,1,2=14,5,16
检查下一个进程:
P5:1,1,1<=14,5,16
执行P5,释放资源:
Work=14,5,16+3,1,3=17,6,19
安全序列:P3->P1->P2->P4->P5
2. 银行家算法在避免死锁问题上十分有效,但是需要在进程运行前就知道其所需资源的最大值,且进程数也需要提前确定。但是实际上,内存中进程数往往是动态变化的,而且它们所需要资源的数目也是动态变化的,因此有局限性
2020
- 某系统有3个并发进程都需要4个同类资源,不会发生死锁的资源数目最少是多少,请给出理由
- 某系统有11个同类资源,X个进程共享该资源,每个进程最多请求使用3个该资源,则系统不会产生死锁的最大X值是多少?请给出理由
当资源数为9时,存在3个进程都各自占用3个资源,这时每个进程都在等待别的进程释放资源,造成死锁。
当资源数目为10时,必然存在一个进程可以获得4个资源,然后顺利执行完毕,释放资源供其他进程使用,系统不会产生死锁
2.
系统不会产生死锁的最大X值是5
假设每个进程已经分配到两个资源,其中任一进程再获得一个资源便可顺利执行完毕,然后再将资源归还给系统供其他进程使用。因此,系统中只要满足2X+1=11这个条件便不会造成死锁,解得X=5,所以系统中最多可以有5个并发进程共享该资源不会产生死锁
2013
某计算机系统有8台磁带机,它们由4个进程竞争使用,每个进程需要3台磁带机。问该系统有没有死锁危险,并说明原因
有死锁风险,若此时这个进程各占用2台磁带机,此时4个进程都不满足,继续向系统发出请求,但此时已无可分配资源
满足死锁的请求和保持条件,不可抢占条件,循环等待条件。若推进顺序不当有产生死锁的危险
2012
简述死锁避免的思想?试用银行家算法判断下述两个状态是否安全。如果一个状态是安全的,说明所有进程是如何能够运行完毕的;如果一个状态是不安全的,说明为什么可能产生死锁。
状态A
| 进程名 | 已分配资源数 | 最大需求 |
|---|---|---|
| P1 | 2 | 6 |
| P2 | 4 | 7 |
| P3 | 2 | 6 |
| P4 | 1 | 2 |
| 当前可用进程数:1 |
状态B
| 进程名 | 已分配资源数 | 最大需求 |
|---|---|---|
| P1 | 4 | 8 |
| P2 | 3 | 9 |
| P3 | 5 | 8 |
| 当前可用进程数:3 |
死锁避免:属于事先预防死锁发生策略,在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。
状态A不安全:把当前可用的1个资源给P4进程,P4运行完,释放2个资源,不满足P1,P2,P3的最大需求量
状态B安全:把当前可用的3个资源给P3进程,P3运行完后释放8个资源,此时P2需要6个,P1需要四个,任选个进程满足,若先满足P1,P1运行完后释放4个资源,再分配给P2
安全序列:P3->P2->P1或P3->P1->P2
出现死锁的原因:
- 当前可用资源数不满足任意进程的需求
- 由于进程推进顺序不当,致使各进程抢夺资源造成循环等局面
2014
- 什么是死锁?处理死锁的基本方法有哪些?
死锁:指多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向外推进
基本方法:
-
预防死锁
-
避免死锁
-
死锁检测与解除
-
给出分配/回收一块的基本流程,假设系统中有同类资源9个,有3个进程竞争使用该类资源,每个进程最多需要4个,请问该系统是否会发生死锁,为什么?
会,若每个进程请求并拥有3个资源,当他们都要请求第四个资源时,发生死锁
填空题
- 解决死锁的方法可以有多种,其中死锁的预防是通过(破坏死锁的必要条件之一)来实现的,死锁的避免是通过(防止系统进入不安全状态)来实现的。
- 死锁的避免,就是通过保持系统处于(安全状态)来避免死锁,所以每当有进程提出资源分配请求时,系统应分析(各进程已占进程数)、(尚需资源数)和(系统中可以分配的剩余资源数),然后决定是否为当前的申请者分配资源。
- 死锁检测要解决两个问题,一是(判断系统)是否出现了死锁,二是当有死锁发生时怎样去(解除死锁)
- 为了避免死锁,可以采用(银行家)算法进行资源安全分配。
- 系统出现死锁,不仅与(设备)分配策略有关,而且与(进程)执行的相对速度有关。
- 当检测到系统发生死锁时,可采用(解除所有死锁进程)、(逐个撤销死锁进程)和(抢占死锁进程的资源供其他进程使用)来解除死锁。
死锁定义,死锁和不安全状态的关系
在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统理能力。然而,多个进程的并发执行也带来了新的问题一死锁。
所谓死锁,是指多个进程因竞争某一资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进
注意:
并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;
反之,只要系统处于安全状态,系统便可避免进入死锁状态。
1
设系统中有下述解决死锁的方法:
- 银行家算法
- 检测死锁,终止处于死锁状态的进程,释放该进程占有的资源。
- 资源预分配。
简述哪种办法允许最大的并发性,即哪种办法允许更多的进程无等待地向前推进。请按“并发性”从大到小对上述三种办法排序。
死锁在系统中不可能完全消灭,但我们要尽可能地减少死锁的发生。对死锁的处理有4种方法:忽略、检测与恢复、避免与预防,每种方法对死锁的处理从宽到严,同时系统并发性由大到小。这里银行家算法属于避免死锁,资源预分配属于预防死锁
死锁检测方法可以获得最大的并发性
并发性排序:死锁检测方法、银行家算法、资源预分配法
3
设有进程P1和进程P2并发执行,都需要使用资源R1和R2,使用资源的情况见下表。
| 进程P1 | 进程P2 |
|---|---|
| 申请资源R1 | 申请资源R2 |
| 申请资源R2 | 申请资源R1 |
| 释放资源R1 | 释放资源R2 |
试判断是否会发生死锁,并解释和说明产生死锁的原因与必要条件。
这段程序在不同的运行推进速度下,可能会产生死锁,
进程P1先申请R1,得到资源R1,然后进程P2申请资源R2,得到资源R2,进程P1又申请R2,因资源R2已分配,使得进程P1阻塞
进程P1和进程P2都因申请不到资源而形成死锁。若改变进程的运行顺序,则这两个进程就不会出现死锁现象
产生死锁的原因可归结为两点
- 竞争资源
- 进程推进顺序非法
产生死锁的必要条件: - 互斥条件
- 请求并保持条件
- 不剥夺条件
- 环路等待条件
4
系统有同类资源m个,供n个进程共享,若每个进程对资源的最大需求量为k,试问:
当m,n,k的值分别为下列情况时(见下表),是否会发生死锁?
| 序号 | m | n | k | 是否会死锁 | 说明 |
|---|---|---|---|---|---|
| 1 | 6 | 3 | 3 | ||
| 2 | 9 | 3 | 3 | ||
| 3 | 13 | 6 | 3 |
不发生死锁要求,必须保证至少有一个进程得到所需的全部资源并执行完毕,m>=n(k-1)+1时,一定不会发生死锁
| 序号 | m | n | k | 是否会死锁 | 说明 |
|---|---|---|---|---|---|
| 1 | 6 | 3 | 3 | 可能会 | 6<3(3-1)+1 |
| 2 | 9 | 3 | 3 | 不会 | 9>3(3-1)+1 |
| 3 | 13 | 6 | 3 | 不会 | 13=6(3-1)+1 |
相关文章:
死锁相关习题 10道 附详解
2022 设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量是17,B资源的数量是6,C资源的数量是19。在T0时刻系统的状态: 最大资源需求量已分配资源量A,B,CA,B,…...
VisionPro 机器视觉案例 之 彩色保险丝个数统计
第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计 文章目录 第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计1.案例要求2.实现思路2.1 方法一 颜色分离工具CogColorSegmenterTool将每一种颜色分离出来,得到对应的单独图像,使用斑点工具CogBlo…...
go-zero(七) RPC服务和ETCD
go-zero 实现 RPC 服务 在实际的开发中,我们是通过RPC来传递数据的,下面我将通过一个简单的示例,说明如何使用go-zero框架和 Protocol Buffers 定义 RPC 服务。 一、生成 RPC项目 在这个教程中,我们根据user.api文件࿰…...
Jenkins + gitee 自动触发项目拉取部署(Webhook配置)
目录 前言 Generic Webhook Trigger 插件 下载插件 编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建,本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目; Generic Webhook Trigger 插件 实现代码推送后,触…...
043 商品详情
文章目录 详情页数据表结构voSkuItemVo.javaSkuItemSaleAttrVo.javaAttrValueAndSkuIdVo.javaSpuAttrGroupVo.javaGroupAttrParamVo.java pom.xmlSkuSaleAttrValueDao.xmlSkuSaleAttrValueDao.javaAttrGroupDao.xmlAttrGroupServiceImpl.javaSkuInfoServiceImpl.javaSkuSaleAtt…...
【人工智能】Python与Scikit-learn的模型选择与调参:用GridSearchCV和RandomizedSearchCV提升模型性能
解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在机器学习建模过程中,模型的表现往往取决于参数的选择与优化。Scikit-learn提供了便捷的工具GridSearchCV和RandomizedSearchCV,帮助我们在参数空间中搜索最佳组合以提升模型表现。本文将从理论和实践两个角度…...
深入探讨 Puppeteer 如何使用 X 和 Y 坐标实现鼠标移动
背景介绍 现代爬虫技术中,模拟人类行为已成为绕过反爬虫系统的关键策略之一。无论是模拟用户点击、滚动,还是鼠标的轨迹移动,都可以为爬虫脚本带来更高的“伪装性”。在众多的自动化工具中,Puppeteer作为一个无头浏览器控制库&am…...
<OS 有关> ubuntu 24 不同版本介绍 安装 Vmware tools
原因 想用 apt-get download 存到本地 / NAS上,减少网络流浪。 看到 VMware 上的确实有 ubuntu,只是版本是16。 ubuntu 版本比较:LTS vs RR LTS: Long-Term Support 长周期支持, 一般每 2 年更新,会更可靠与更稳定…...
C#调用JAVA
参考教程:使用IKVMC转换Jar为dll动态库(含idea打包jar方法)-CSDN博客 已经实践过,好使。...
JavaEE-多线程基础知识
文章目录 前言与回顾创建一个多线程线程的创建以及运行机制简述step1: 继承Thread类step2: 实现Runable接口step3: 基于step1使用匿名内部类step4: 基于step2使用匿名内部类step5: 基于step4使用lambda表达式(推荐) Thread的常见方法关于jconsole监视线程的工具构造方法解析获取…...
Pulid:pure and lightning id customization via contrastive alignment
1.introduction 基于微调的方案,对每个id进行定制需要花费数十分钟。另一项研究则放弃了对每个id进行微调,而是选择在一个庞大的肖像数据集上预训练一个id适配器。这些方法通常利用编码器例如clip来提取id特征,提取的特征随后以特定方式例如嵌入到cross attention集成到基础…...
什么是GraphQL,有什么特点
什么是GraphQL? GraphQL 是一种用于 API(应用程序编程接口)的查询语言,由 Facebook 在 2012 年开发,并于 2015 年开源。它提供了一种更高效、强大的方式来获取和操作数据,与传统的 RESTful API 相比&#…...
Java项目-基于SpringBoot+vue的租房网站设计与实现
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
1.实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法,以及通过理论课学习与实验参考书的帮助,熟练掌握使用T-SQL语句和交互式方法对数据表进行插入数据、修改数据、删除数据等等的操作;作为后续实验的基础,根据实验要求重…...
【大数据学习 | Spark】RDD的概念与Spark任务的执行流程
1. RDD的设计背景 在实际应用中,存在许多迭代式计算,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。但是,目前的MapReduce框架都是把中间结果写入到HDFS中&…...
ruoyi框架完成分库分表,按月自动建表功能
前提 这个分库分表功能,按月自动建表,做的比较久了,还没上线,是在ruoyi框架内做的,踩了不少坑,但是已经实现了,就分享一下代码吧 参考 先分享一些参考文章 【若依系列】集成ShardingSphere S…...
Antd中的布局组件
文章目录 一、Layout二、Menu三、Grid栅格 布局组件涉及项目框架的搭建,往往被忽略和低关注,毕竟不是经常用到,但是在调整项目结构的时候往往又需要重新设计布局,所以有必要提前归纳分析; 一、Layout Layout导出Sider,…...
一文详解kafka知识点
目录 1、kafka定义 2、消息队列 2.1、产品选择 2.2、应用场景 2.3、消息队列的两种模式 3、kafka架构 4、kafka生产者 4.1、kafka生产者原理 4.2、kafka生产者异步发送 4.3、同步发送 4.4、分区 4.4.1、kafka分区好处 4.4.2、分区策略 4.4.3、自定义分区 4.5、生成吞…...
C语言基础学习:抽象数据类型(ADT)
基础概念 抽象数据类型(ADT)是一种数据类型,它定义了一组数据以及可以在这组数据上执行的操作,但隐藏了数据的具体存储方式和实现细节。在C语言中,抽象数据类型(ADT)是一种非常重要的概念&…...
提升性能测试效率与准确性:深入解析JMeter中的各类定时器
在软件性能测试领域,Apache JMeter是一款广泛使用的开源工具,它允许开发者模拟大量用户对应用程序进行并发访问,从而评估系统的性能和稳定性。在进行性能测试时,合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...
