银行家算法问题
1、银行家算法中的数据结构
(1)可利用资源向量Available : []Availabel j k = 式中:j 01j m ≤≤-
一个含有m 个(类)元素的数组,每个元素代表一类可利用的资源数目。
上式表示系统中现有的第j 类资源可用数目为k 个。
(2)最大需求矩阵Max : [,]Max i j k = 式中: i 01i n ≤≤-
j 01j m ≤≤-
n 个进程中的每一个进程对m 类资源的最大需求量,上式表示进程i 需求第j 类资源的最大数目为k 。
(3)分配矩阵Allocation : [,]Allocation i j k = 式中: i 01i n ≤≤- j 01j m ≤≤-
n 个进程中的每一个进程对m 类资源的分配量,上式表示进程i 已分配到第j 类资源的数目为k 。
(4)需求矩阵Need :[,]Need i j k = 式中: i 01i n ≤≤- j 01j m ≤≤-
n 个进程中的每一个进程对m 类资源的需求量,上式表示进程i 对第j 类资源的需求量为k 个。
(5)三个矩阵间的关系
[,][,][,]Need i j Max i j Allocation i j =-
2、银行家算法
设Re i quest 是进程i P 的请求向量,如果Re []i quest j k =,当i P 发出资源请求后,系统按下述步骤进行检查。
(1)如果Re [][,]i quest j Need i j ≤,便转向步骤(2),否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2)如果Re [][]i quest j Available j ≤便转向步骤(3),否则表示尚无足够资源,
i P 须等待。
(3)系统试探着把资源分配给进程i P ,并修改下面的数据结构中的值:
[][]Re []i Availabel j Availabel j quest j =- [,][,]R e [
i A l l o c a t i o n i j
A l l o c a t i o n i j q u e s t j
=+ [,][,]Re []i Need i j Need i j quest j =-
(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。
若安全,则分配给进程i P 资源,完成本次分配;若不安全,试探分配作废,恢复原来的资源分配状态,让进程i P 等待。
3、安全性算法 (1)设置两个向量:
工作向量Work ,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m 个元素,在执行安全算法开始时,Work Available =。
Finish ,它表示系统是否有足够的资源分配给进程,使之运行完成。
开始时先做
[]:Finish i false =;当有足够资源分配给进程时,再令[]:Finish i true =。
(2)从进程集合中找一个能满足下述条件的进程:
[
]:F i n i s h i f a l s e
= [,][]Need i j Work j ≤,若找到,执行步骤(3),否则,执行步骤(4)。
(3)当进程i P 获得资源后,可顺利执行直至完成,并释放出分配给它的资源,
执行如下操作:
[]:[][,];
[];
Work j Work j Allocation i j Finish i true =+=Go to step 2
(4)如果所有进程的[]:Finish i true =都满足,则表示系统处于安全状态;否则系统处于不安全状态。
例:五个进程{}01234,,,,P P P P P 和三类资源{},,A B C ,0T 时刻资源分配情况
(1)0T 时刻安全性,存在一个安全序列{}13420,,,,P P P P P
(2)P 1请求资源:1Re (1,0,2)quest ,系统各按银行家算法进行检查:
1)11Re [1,0,2][1,2,2]quest Need ≤
2)11Re [1,0,2][3,3,2]quest Available ≤
3)系统假定可为P 1分配资源,并修改11;Available Allocation Need 和向量 4)再利用安全性算法检查此时系统是否安全:找到一个安全序列
{}13402,,,,P P P P P ,因此,系统安全。
可以立即将P 1所申请的资源分给它。
(3414求向量4Re (3,3,0)quest ,系统按银行家算法进行检查,
1)44Re [3,3,0][4,3,1]quest Need ≤
2)4Re [3,3,0][2,3,0]quest Available ≤。
故,让P 4等待。
(4)0P 请求资源:在P 1提出请求,获得资源,但尚未释放资源时,P 0发出请
求向量0Re (0,2,0)quest ,系统按银行家算法进行检查,
1)00Re [0,2,0][7,4,3]quest Need ≤
2)01Re [0,2,0][2,3,0]quest Available ≤
3)系统暂时先假定可为0P 分配资源,并修改有关数据结构,如下图
4)进行安全性检查,可用资源[2,1,0]Available 已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。