操作系统概念第七章部分作业题答案

操作系统概念第七章部分作业题答案题目一:考虑下图所示的交通死锁的情况:(1)请说明这个实例中死锁的4个必要条件(2)请设计一条简单的规则来避免产生死锁解答:(1):死锁的四个必要条件是:①互斥:至少一个资源非共享,即一次只能有一个进程使用②占有并等待:一个进程至少占有一个资源,并等待另一个资源,而该资源被其他进程所占有③非抢占:资源非抢占,只有当前进程完成任务才能被释放④循环等待:有一组等待进城P0…P…

大家好,又见面了,我是你们的朋友全栈君。

题目一:

考虑下图所示的交通死锁的情况:
在这里插入图片描述
(1)请说明这个实例中死锁的 4 个必要条件
(2)请设计一条简单的规则来避免产生死锁
解答:
(1):
死锁的四个必要条件是:
①互斥:至少一个资源非共享,即一次只能有一个进程使用
②占有并等待:一个进程至少占有一个资源,并等待另一个资源,而该资源被其他进程所占有
③非抢占:资源非抢占,只有当前进程完成任务才能被释放
④循环等待:有一组等待进城P0…Pn,P0等待的资源被P1所占有…Pn所等待的资源被P0所占有
依次对应图中的:
①每个路口只能在一个时间点通过一辆车
②一辆车在一个时间点通过一个路口的时候,其他车不允许同时通过
③只有当一辆车完全通过一个路口的时候,下一辆车才能使用这个路口
④左上路口的车在等待左下路口的车通过;左下路口的车在等待右下路口的车通过;右下路口的车在等待右上路口的车通过;右上路口的车在等待左上路口的车通过
(2):
在四个路口均设立红绿信号灯,要求在前30秒仅允许横向车辆通过,后30秒仅允许纵向车辆通过,然后以此顺序进行轮转

题目二:

考虑如下系统:该系统包含 3 个进程,共享同一类型的资源 4 个,每一个进程最多需要 2 个该类型的资源,试说明为什么该系统不会发生死锁
解答:
不会. 4份资源, 3个进程, 每个进程只要2份资源, 那么无论怎样, 总有一个进程可以得到2份资源, 这样就不需要等待别的进程释放资源而能顺利地执行, 然后就会释放这2份资源, 接下来后面2个进程就更可以顺利执行了.
这类问题的计算方法是: a份资源, b个进程, 每个进程最多要c份资源.
我们能够处理的极限情况是,有一个进程被分配了c份资源,而其余的被分配了c-1份资源(类似于抽屉原理),这样总能有一个进程结束,释放资源。
如果不是上面这种情况,那么就有可能有一个进程被分配了c份资源,有一个被分配了c-2份资源,其余的被分配了c-1份资源,这时看起来不会发生死锁,但是不要忘了,资源的分配是随机的,所以,更多的情况会是所有的进程都被分配了c-1份资源,此时所有进程就陷入了某种顺序的循环等待,造成死锁。
由此我们可以得到公式a需要≥c+(b-1)*(c-1)=c+bc-c-b+1=b(c-1)+1
即最终的公式:

a≥b*(c-1)+1时,不会造成死锁

题目三:

现有单实例资源系统:进程 P1 占有资源 R2,请求资源 R1;进程 P2 占有资源 R1,请求资源 R3 R4 R5;进程 P3 占有资源 R4,请求资源 R5;进程 P4 占有资源 R5,请求资源 R2;进程 P5 占有资源 R3,请求资源 R1;
(1)请画出对应的资源分配图和资源等待图;
(2)请问该系统中存在死锁吗?并请给出解释。;
解答:
(1):
资源分配图
在这里插入图片描述
资源等待图
在这里插入图片描述
(2):
存在死锁,因为每个资源只有单个实例,所以只要资源分配图中存在环则会发生死锁,看图,可以发现,P1-R1-P2-R4-P3-R5-P4-R2-P1构成了一个大环,同时还有P2-R3-P5-R1-P2构成一个小环,所以可以得到,进程P1,P2,P3,P4构成了一个循环等待的死锁,同时P2与P5构成了一对死锁

题目四:

考虑系统的情况如下图所示,请依据银行家算法回答如下问题:
在这里插入图片描述
(1)请给出 Need 矩阵。
(2)该系统目前是否是安全的?
(3)如果 P1 请求资源 (0, 4, 2, 0),是否应该给该进程立即分配资源?
解答:
0 0 0 0
0 7 5 0
1 0 0 2
0 0 2 0
0 6 4 2
(1):
Need=Max-Allocation,即:
在这里插入图片描述

(2):
我们可以测试一下,能不能计算出一个安全序列。从P0开始,
对P0,可以给,然后收回,此时Available={1,5,3,2}
对P1,给不起,跳过
对P2,可以给,然后收回,此时Available={2,8,8,6}
对P3,可以给,然后收回,此时Available={2,14,11,8}
对P4,可以给,然后收回,此时Available={2,14,12,12}
对P1,可以给,然后收回,此时Available={3,14,12,12}
最终,我们可以得到一个安全序列{P0,P2,P3,P4,P1}
证明当前系统是安全的
(3):
如果P1请求资源(0,4,2,0),那么此时的allocation矩阵和need矩阵是这样的:
在这里插入图片描述

来看看这个时候怎么进行分配:
对P0,可以给,然后收回,此时Available={2,1,1,2}
对P1,给不起,跳过
对P2,可以给,然后收回,此时Available={3,4,6,6}
对P3,可以给,然后收回,此时Available={3,10,9,8}
对P4,给不起,跳过
对P1,可以给,然后收回,此时Available={3,14,11,8}
对P4,可以给,然后收回,此时Avialable={3,14,12,12}
最终,我们可以得到一个安全序列{P0,P2,P3,P1,P4}
尽管可以有一个安全序列,系统是安全的,但不能立即给进程P1分配资源

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159068.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月14日 下午2:00
下一篇 2022年7月14日 下午2:00


相关推荐

  • 关于协方差矩阵的理解

    关于协方差矩阵的理解在 主成分分析 中 我们用到了协方差矩阵 但当时并没有对其进行深入的讨论 为此 本文将针对协方差矩阵做一个详细的介绍 其中包括协方差矩阵的定义 数学意义以及计算公式的推导

    2026年3月16日
    1
  • js判断数组中是否存在某个元素(四种方法)[通俗易懂]

    js判断数组中是否存在某个元素(四种方法)[通俗易懂]法一:利用indexOf不存在返回-1,存在返回第一次出现的索引//js检查数组中是否包含某个元素//法一indexOfvararr=[100,20,50,58,6,69,36,45,78,66,45]if(arr.indexOf(66)==-1){console.log(“不存在”)}else{console.log(“存在,索引是:”,arr.indexOf(6.

    2022年10月19日
    10
  • 基于arduino的lcd1602显示_LCD1602接口类型

    基于arduino的lcd1602显示_LCD1602接口类型Arduino小实验LCD1602A_I2C液晶显示魔法传送门Arduino小实验LCD1602A_I2C液晶显示准备元件LCD1602A原理图接线部分Arduino代码常见bug汇总及解决方法准备元件准备元件:1.Arduino主板(UNO)//Arduino主板(Mega)崭新出厂2.LCD1602A液晶显示屏3.LCD1602A的驱动—PCF8574驱动板LCD1602A原理图接线部分ArduinoMega:ArduinoUNO实物图Arduino代码常见bug汇总

    2026年2月16日
    4
  • git 删除文件后如何恢复[通俗易懂]

    git 删除文件后如何恢复[通俗易懂]有时候不小心在git中rm了文件。怎么恢复呢?别急,咱们一步步来。首先gitstatus一把,看看此时工作区的状态[xxx@xxxstatic_files]$gitstatus#Onbranchmasternothingtocommit(workingdirectoryclean)可见此时没有任何修改的内容。再看看具体有什么xxx@xxxstatic_files]$

    2022年8月22日
    13
  • Stimulsoft 仪表板.JS 2022.2.1

    Stimulsoft 仪表板.JS 2022.2.1Stimulsoft仪表板.JS2022.2.1  二维码视觉设计-使用组件编辑器中的属性定义各种图形元素的颜色和形状。  仪表板的新交互式按钮组件-允许您使用脚本平台语言或Blockly执行脚本。它包括几个可视化设置,这些设置取决于按钮的状态。  仪表板的新卡片组件-此分析组件允许您将数据分组、处理和显示为仪表板中的卡片。它支持所有类型的图形表示,包括集群列、色标、指标、气泡和迷你图。它能够显示文本、数值和图像。  仪表板的新图形堆叠图表类型-此图表用于显示值在整体指标中的

    2022年7月26日
    7
  • Uniapp进行APP打包——iOS 系统[通俗易懂]

    1、创建唯一标识符(1)首先,申请苹果开发者账号。没有苹果开发者账号是无法进行ios打包上线的。(2)进入https://developer.apple.com这个网址,点击“account”并输入苹果开发者账号进入用户界面。(3)点击证书文件(4)进入到这界面以后,点击“APPIDs”,并新建一个APPid(5)设置name和BundleID注意,这个BundleID的格式不要写错在后面多处都会用到。(6)配置相应服务,并点击con

    2022年4月8日
    1.2K

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号