当前位置: 首页 > 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;合理地设置请求之间的延迟时间对于模拟真实用户行为、避免服务器过载…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...