这死锁了,你有钥呀

看看“银行家算法”和“死锁检测算法”这两把钥匙,怎么开死锁。


A、
假设在系统中有四个进程和四种类型的资源,系统使用银行家算法来避免死锁。最大资源需求矩阵是

Claim=44136435121211171

其中 Claimij(1i41j4) 表示进程i对于资源j的醉倒需求。系统中每一种类型的资源总量由向量 [16,5,2,8] 给出。当前的资源分配情况由下面的矩阵给出。
Allocation=4113021101011020

其中, Allocationij 表示当前分配给进程i的资源j的数量。
a)说明这个状态是安全的。
b)说明进程0申请1个单位的资源2是否允许。

解:
a)先将模型建立起来
1.初始状态:
Claim=44136435121211171 Allocation=4113021101011020 Resource=[16,5,2,8]
由Allocation和Resource矩阵可知,可用资源量 Available[7,1,0,5]
各进程对资源的需求矩阵 ClaimAllocation=03123414020200151 ,对进程遍历发现P1的资源申请量在可用范围内,则P1先执行。

2.进程P1运行之后:
Claim=40136405120211071 Allocation=4013001100011020
则可用资源量 Available[8,3,1,5]
各进程对资源的需求矩阵 ClaimAllocation=00123404020200051 ,发现可用资源可分配给进程P3的资源申请,则P3执行。

3.进程P3运行之后:
Claim=40130405020201070 Allocation=4010001000001020
则可用资源量 Available[11,4,2,5]
各进程对资源的需求矩阵 ClaimAllocation=00120404020200050 ,可将可用资源分配给进程P0,执行P0。

4.进程P0运行之后:
Claim=00130005000200070 Allocation=4010001000001020
则可用资源量 Available[15,4,2,6]
各进程对资源的需求矩阵 ClaimAllocation=00120004000200050 ,剩余的进程P2也可运行。
综上该状态安全
b)
假设将资源2的分配一个单位给进程0:
1.初始态:
Claim=44136435121211171 Allocation=4113121101011020 Resource=[16,5,2,8]
由Allocation和Resource矩阵可知,可用资源量 Available[7,0,0,5]
其中总资源量和最大需求量不变,
各进程对资源的需求矩阵 ClaimAllocation=03123314020200151 ,运行P3进程

2.进程P3运行之后:
Claim=44130435021201170 Allocation=4110121001001020 Resource=[16,5,2,8]
由Allocation和Resource矩阵可知,可用资源量 Available[10,1,1,5]
各进程对资源的需求矩阵 ClaimAllocation=03120314020200150 ,可运行进程P1

3. 进程P1运行之后:
Claim=40130405020201070 Allocation=4010101000001020 Resource=[16,5,2,8]
由Allocation和Resource矩阵可知,可用资源量 Available[11,3,2,5]
各进程对资源的需求矩阵 ClaimAllocation=00120304020200050 ,运行进程P0

4.进程P0运行之后:
Claim=00130005000200070 Allocation=0010001000000020 Resource=[16,5,2,8]
由Allocation和Resource矩阵可知,可用资源量 Available[15,4,2,6]
各进程对资源的需求矩阵 ClaimAllocation=00120004000200050 ,剩余的进程P2也可运行至结束。
综上,所有进程能运行结束,可以将资源2的分配一个单位给进程0


B、
在银行家算法中,若出现系数资源分配。

进程AllocationNeed
P00, 0, 3, 20, 0, 1, 2
P11, 0, 0, 01, 7, 5, 0
P21, 3, 5, 42, 3, 5, 6
P30, 3, 3, 20, 6, 5, 2
P40, 0, 1, 40, 6, 5, 6

可用资源: Available[1,6,2,2]
问:
1)表格描述的死锁模型是什么?
2)该状态是否安全?
3)如果进程P2提出申请 request=[1,2,2,2]

解:
1)本题中,直接给出了需求量,而未给出最大需求量,同时也没有给出资源总量。
Allocation=01100003303053120424 Need=01200073661555520626 Claim=02300076964510864010410
Available[1,6,2,2] Resource[3,12,14,14]

2)以下使用Allocation、Need、Available三个矩阵进行解题
由初始态可知,可以运行进程P0。
P0运行之后, Available[1,6,5,4]
Allocation=01100003300053100424 Need=01200073660555500626 ,此时,可以运行进程P3。
P3运行之后, Available[1,9,8,6]
Allocation=01100003000050100404 Need=01200073060550500606 ,此时,可以运行进程P1。
P1运行之后, Available[2,9,8,6]
Allocation=00100003000050100404 Need=00200003060050500606 ,此时,可以运行进程P2。
P2运行之后, Available[3,12,13,10]
Allocation=00000000000000100004 Need=00000000060000500006 ,此时,可以运行进程P4至结束。
综上,所有程序可运行完成,该状态安全。
3)若将现有资源量分配给P2,则可用资源量变为 Available[0,4,0,0] Need=01100071661535520426
显然,可用资源并不能使得任意一个进程完成,因此,不能分配。


C、
把死锁检测算法应用于下面的数据,并给出结果。
Available=[2,1,0,0]

Request=212001010100

Allocation=020001102010

0)Allocation矩阵中未出现某行未0的情况,则不标记进程。
1)初始化 W=Available=[2,1,0,0]
2)在Request中寻找进程i的资源请求小于W,标记进程2, W+=[0,1,2,0] W=[2,2,2,0]
3)重新回到Request中寻找进程i的资源请求小于W,标记进程1, W+=[2,0,0,1] W=[4,2,2,1]
4)发现W可以满足最后一个进程的请求,标记进程0,进程都被标记,表明当前状态未发生死锁。


如果单看算法过程,可以发现两个算法并没有太大的差别;那么问题来了,这两个算法明明一样,为什么一定要分开说呢?
是呀,除了死锁模型中的矩阵不一样,还有哪里不同?没错,就是因为模型不一样。
银行家算法,需要最大资源请求量矩阵,这是用于处理进程开始到结束的整一个周期;
而死锁检测算法,并不需要最大资源请求量矩阵,取而代之的是请求量向量,这就可以处理一个进程周期里的某个资源请求。
从而,死锁检测可以减少对处理器的占用,但是缺少了银行家算法能提前判别死锁的能力。
因此,将算法运用到合适的场合,能帮助我们高效的解决问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值