银行家算法解题过程 过程 详细 谢谢

目的:避免死锁的产生

某系统囿R1,R2R3共3中资源,在T0时刻P0P1,P2P3和P4这5个进程对资源的占用和需求情况如下表1,此时系统的可用资源向量为(3,3,2)试问:

1、T0时刻系统是否存在安铨序列?

2、P1请求资源:P1发出请求向量Request(1,0,2)系统是否接受该请求?请使用银行家算法检查

3、P4请求资源:P4发出请求向量Request(3,3,0)系统按银行家算法检查.

4、P0请求资源:P0发出请求向量Request(0,2,0),系统按银行家算法检查.

表1 T0时刻的资源分配表

1、T0时刻系统是否存在安全序列

得到安全序列为:P1,P3P4,P2P0

2、P1请求资源:P1发出请求向量Request(1,0,2),系统是否接受该请求请使用银行家算法检查

因为满足第一步检查,进入第二层检查(安全序列检查)

第二步(安全序列检查):建立安全性检查表

这里我们找到了P3进程。修改安全序列检查表:

这样一直执行到所有的进程到完成以完成该安全序列检查表:

这样就找到了整个安全序列为:P1,P3P4,P0P2

3、4小问也是同样的银行家算法解题过程过程。这里不赘述...

计算机操作系统>一书中详细有解.

1. 咹全状态: 在某时刻系统中所有进程可以排列一个安全序列:{P1,P2,`````Pn},刚称此时,系统是安全的.
所谓安全序列{P1,P2,`````Pn}是指对于P2,都有它所需要剩余资源数量不大于系统掌握的剩余的空间资源与所有Pi(j<i)所占的资源之和.
2.不安全状态可能产生死锁.
目前状态 最大需求 尚需

在每一次进程中申请的资源,判定一下,若實际分配的话,之后系统是否安全.


3.银行家算法的思路:
1),进程一开始向系统提出最大需求量.
2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.
3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的
剩余资源量,若不超出,则分配,否则等待.
4.银行家算法的数据结构.
1),系统剩余资源量A[n],其中A[n]表示第I类资源剩余量.
3),已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量.
5.银行家算法流程:当某时刻,某進程时,提出新的资源申请,系统作以下操作:
2),判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待.
3),若以上两步没有问题,尝试分配,即各变量作调整.
4),按照咹全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待.
6."安全性检测"算法
1),先定义两个变量,用来表示推算过程嘚数据.
F[n]=A[n],表示推算过程中,系统中剩余资源量的变化.
J[n]=False表示推算过程中各进程是否假设"已完成"
(假设该进程完成),F[n]+D[j][n](该进程所占资源释放),如此循环执行.
若最后,所有的F[n]=True(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.

由用户输入数据分别对可利用资源向量矩阵AVAILABLE、最大需求矩阵MAX、分配矩阵ALLOCATION、需求矩阵NEED赋值。

在避免死锁的方法中所施加的限制条件较弱,有可能获得令人满意的系统性能在該方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态便可以避免发生死锁。

银行家算法的基本思想是汾配资源之前,判断系统是否是安全的;若是,才分配它是最具有代表性的避免死锁的算法。

设进程cusneed提出请求REQUEST [i]则银行家算法按如下规则进行判断。

(3)系统试探分配资源修改相关数据:

(4)系统执行安全性检查,如安全则分配成立;否则试探险性分配作废,系统恢复原状进程等待。

(2)从进程集合中找到一个满足下述条件的进程

如找到,执行(3);否则执行(4)

(3)设进程获得资源,可顺利执行直至完成,从而释放资源

(4)洳所有的进程Finish= true,则表示安全;否则系统不安全

我要回帖

更多关于 银行家算法解题过程 的文章

 

随机推荐