当前位置: 首页 > news >正文

死锁相关习题 10道 附详解

2022

设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量是17,B资源的数量是6,C资源的数量是19。在T0时刻系统的状态:

最大资源需求量已分配资源量
A,B,CA,B,C
P14,0,114,0,5
P25,3,64,0,2
P34,2,52,1,4
P45,5,92,1,2
P54,2,43,1,3
  1. 当前系统是否处于安全状态,并解释原因
  2. 简述银行家算法的缺点是什么

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
  1. 某系统有3个并发进程都需要4个同类资源,不会发生死锁的资源数目最少是多少,请给出理由
  2. 某系统有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

进程名已分配资源数最大需求
P126
P247
P326
P412
当前可用进程数:1

状态B

进程名已分配资源数最大需求
P148
P239
P358
当前可用进程数: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

出现死锁的原因:

  1. 当前可用资源数不满足任意进程的需求
  2. 由于进程推进顺序不当,致使各进程抢夺资源造成循环等局面
2014
  1. 什么是死锁?处理死锁的基本方法有哪些?

死锁:指多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向外推进
基本方法:

  1. 预防死锁

  2. 避免死锁

  3. 死锁检测与解除

  4. 给出分配/回收一块的基本流程,假设系统中有同类资源9个,有3个进程竞争使用该类资源,每个进程最多需要4个,请问该系统是否会发生死锁,为什么?


会,若每个进程请求并拥有3个资源,当他们都要请求第四个资源时,发生死锁

填空题
  1. 解决死锁的方法可以有多种,其中死锁的预防是通过(破坏死锁的必要条件之一)来实现的,死锁的避免是通过(防止系统进入不安全状态)来实现的。
  2. 死锁的避免,就是通过保持系统处于(安全状态)来避免死锁,所以每当有进程提出资源分配请求时,系统应分析(各进程已占进程数)、(尚需资源数)和(系统中可以分配的剩余资源数),然后决定是否为当前的申请者分配资源。
  3. 死锁检测要解决两个问题,一是(判断系统)是否出现了死锁,二是当有死锁发生时怎样去(解除死锁)
  4. 为了避免死锁,可以采用(银行家)算法进行资源安全分配。
  5. 系统出现死锁,不仅与(设备)分配策略有关,而且与(进程)执行的相对速度有关。
  6. 当检测到系统发生死锁时,可采用(解除所有死锁进程)、(逐个撤销死锁进程)和(抢占死锁进程的资源供其他进程使用)来解除死锁。
死锁定义,死锁和不安全状态的关系

在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统理能力。然而,多个进程的并发执行也带来了新的问题一死锁。
所谓死锁,是指多个进程因竞争某一资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进
注意:
并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;
反之,只要系统处于安全状态,系统便可避免进入死锁状态。

1

设系统中有下述解决死锁的方法:

  1. 银行家算法
  2. 检测死锁,终止处于死锁状态的进程,释放该进程占有的资源。
  3. 资源预分配。
    简述哪种办法允许最大的并发性,即哪种办法允许更多的进程无等待地向前推进。请按“并发性”从大到小对上述三种办法排序。

死锁在系统中不可能完全消灭,但我们要尽可能地减少死锁的发生。对死锁的处理有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都因申请不到资源而形成死锁。若改变进程的运行顺序,则这两个进程就不会出现死锁现象
产生死锁的原因可归结为两点

  1. 竞争资源
  2. 进程推进顺序非法
    产生死锁的必要条件:
  3. 互斥条件
  4. 请求并保持条件
  5. 不剥夺条件
  6. 环路等待条件
4

系统有同类资源m个,供n个进程共享,若每个进程对资源的最大需求量为k,试问:
当m,n,k的值分别为下列情况时(见下表),是否会发生死锁?

序号mnk是否会死锁说明
1633
2933
31363

不发生死锁要求,必须保证至少有一个进程得到所需的全部资源并执行完毕,m>=n(k-1)+1时,一定不会发生死锁

序号mnk是否会死锁说明
1633可能会6<3(3-1)+1
2933不会9>3(3-1)+1
31363不会13=6(3-1)+1

相关文章:

死锁相关习题 10道 附详解

2022 设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5)&#xff0c;A资源的数量是17&#xff0c;B资源的数量是6&#xff0c;C资源的数量是19。在T0时刻系统的状态&#xff1a; 最大资源需求量已分配资源量A&#xff0c;B&#xff0c;CA&#xff0c;B&#xff0c;…...

VisionPro 机器视觉案例 之 彩色保险丝个数统计

第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计 文章目录 第十四篇 机器视觉案例 之 彩色保险丝颜色识别个数统计1.案例要求2.实现思路2.1 方法一 颜色分离工具CogColorSegmenterTool将每一种颜色分离出来&#xff0c;得到对应的单独图像&#xff0c;使用斑点工具CogBlo…...

go-zero(七) RPC服务和ETCD

go-zero 实现 RPC 服务 在实际的开发中&#xff0c;我们是通过RPC来传递数据的&#xff0c;下面我将通过一个简单的示例&#xff0c;说明如何使用go-zero框架和 Protocol Buffers 定义 RPC 服务。 一、生成 RPC项目 在这个教程中&#xff0c;我们根据user.api文件&#xff0…...

Jenkins + gitee 自动触发项目拉取部署(Webhook配置)

目录 前言 Generic Webhook Trigger 插件 下载插件 ​编辑 配置WebHook 生成tocken 总结 前言 前文简单介绍了Jenkins环境搭建&#xff0c;本文主要来介绍一下如何使用 WebHook 触发自动拉取构建项目&#xff1b; Generic Webhook Trigger 插件 实现代码推送后&#xff0c;触…...

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 坐标实现鼠标移动

背景介绍 现代爬虫技术中&#xff0c;模拟人类行为已成为绕过反爬虫系统的关键策略之一。无论是模拟用户点击、滚动&#xff0c;还是鼠标的轨迹移动&#xff0c;都可以为爬虫脚本带来更高的“伪装性”。在众多的自动化工具中&#xff0c;Puppeteer作为一个无头浏览器控制库&am…...

<OS 有关> ubuntu 24 不同版本介绍 安装 Vmware tools

原因 想用 apt-get download 存到本地 / NAS上&#xff0c;减少网络流浪。 看到 VMware 上的确实有 ubuntu&#xff0c;只是版本是16。 ubuntu 版本比较&#xff1a;LTS vs RR LTS: Long-Term Support 长周期支持&#xff0c; 一般每 2 年更新&#xff0c;会更可靠与更稳定…...

C#调用JAVA

参考教程&#xff1a;使用IKVMC转换Jar为dll动态库(含idea打包jar方法)-CSDN博客 已经实践过&#xff0c;好使。...

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&#xff1f; GraphQL 是一种用于 API&#xff08;应用程序编程接口&#xff09;的查询语言&#xff0c;由 Facebook 在 2012 年开发&#xff0c;并于 2015 年开源。它提供了一种更高效、强大的方式来获取和操作数据&#xff0c;与传统的 RESTful API 相比&#…...

Java项目-基于SpringBoot+vue的租房网站设计与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…...

【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作

1.实验目的 熟悉了解掌握SQL Server软件的基本操作与使用方法&#xff0c;以及通过理论课学习与实验参考书的帮助&#xff0c;熟练掌握使用T-SQL语句和交互式方法对数据表进行插入数据、修改数据、删除数据等等的操作&#xff1b;作为后续实验的基础&#xff0c;根据实验要求重…...

【大数据学习 | Spark】RDD的概念与Spark任务的执行流程

1. RDD的设计背景 在实际应用中&#xff0c;存在许多迭代式计算&#xff0c;这些应用场景的共同之处是&#xff0c;不同计算阶段之间会重用中间结果&#xff0c;即一个阶段的输出结果会作为下一个阶段的输入。但是&#xff0c;目前的MapReduce框架都是把中间结果写入到HDFS中&…...

ruoyi框架完成分库分表,按月自动建表功能

前提 这个分库分表功能&#xff0c;按月自动建表&#xff0c;做的比较久了&#xff0c;还没上线&#xff0c;是在ruoyi框架内做的&#xff0c;踩了不少坑&#xff0c;但是已经实现了&#xff0c;就分享一下代码吧 参考 先分享一些参考文章 【若依系列】集成ShardingSphere S…...

Antd中的布局组件

文章目录 一、Layout二、Menu三、Grid栅格 布局组件涉及项目框架的搭建&#xff0c;往往被忽略和低关注&#xff0c;毕竟不是经常用到&#xff0c;但是在调整项目结构的时候往往又需要重新设计布局&#xff0c;所以有必要提前归纳分析&#xff1b; 一、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)

基础概念 抽象数据类型&#xff08;ADT&#xff09;是一种数据类型&#xff0c;它定义了一组数据以及可以在这组数据上执行的操作&#xff0c;但隐藏了数据的具体存储方式和实现细节。在C语言中&#xff0c;抽象数据类型&#xff08;ADT&#xff09;是一种非常重要的概念&…...

提升性能测试效率与准确性:深入解析JMeter中的各类定时器

在软件性能测试领域&#xff0c;Apache JMeter是一款广泛使用的开源工具&#xff0c;它允许开发者模拟大量用户对应用程序进行并发访问&#xff0c;从而评估系统的性能和稳定性。在进行性能测试时&#xff0c;合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘

美国西海岸的夏天&#xff0c;再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至&#xff0c;这不仅是开发者的盛宴&#xff0c;更是全球数亿苹果用户翘首以盼的科技春晚。今年&#xff0c;苹果依旧为我们带来了全家桶式的系统更新&#xff0c;包括 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&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践

01技术背景与业务挑战 某短视频点播企业深耕国内用户市场&#xff0c;但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大&#xff0c;传统架构已较难满足当前企业发展的需求&#xff0c;企业面临着三重挑战&#xff1a; ① 业务&#xff1a;国内用户访问海外服…...