操作系统-银行家算法(五)

一、银行家算法

二、安全性算法

三、银行家算法之例

四、举例说明


一、银行家算法

设 Request_{i}是进程P_{i}的请求向量,如果Request_{i}[j]=K,表示进程P_{i}需要K个R_{j}类型的资源。当P_{i}发出资源请求后,系统按下述步骤进行检查:

(1)如果Request_{i}[j]≤Need[i,j],便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。

(2)如果Request_{i}[j]≤Available[j],便转向步骤(3);否则,表示尚无足够资源,P_{i}须等待。

(3)系统试探着把资源分配给进程P_{i},并修改下面数据结构中的数值:

Available[j] = Available[j] - Request_{i}[j];

Allocation[i,j] = Allocation[i,j] + Request_{i}[j];

Need[i,j] = Need[i,j] - Request_{i}[j];

(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程P_{i},以完成本次分配;否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程等待。

二、安全性算法

系统所执行的安全性算法可描述如下:

(1)设置两个向量:

①工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全性算法开始时,Work = Available;

②Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i] = false;当有足够资源分配给进程时,再令Finish[i] = true。

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

①Finish[i]  = false;

②Nee[i,j] ≤ Work[j];

若找到,执行步骤(3),否则,执行步骤(4)。

(3)当进程P_{i}获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:

Work[j] = Work[j] + Allocation[i,j];

Finish[i] = true;

go to step 2;

(4)如果所有进程的Finish[i] = true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。

三、银行家算法之例

假定系统中有五个进程{P_{0},P_{1},P_{2},P_{3},P_{4}}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T_{0}时刻的资源分配情况如图3-1所示。

图3-1   T_{0}时刻的资源分配表
 MaxAllocationNeedAvailable
A    B   CA    B   CA    B   CA    B   C
P_{0}7    5    30    1    07    4    3

3    2    2

(2   3   0)

 

 

 

 

 

 

 

P_{1}3    2    2

2    0    0

(3   0   2) 

1    2    2

(0   2   0) 

P_{2}9    0    23    0    26    0    0
P_{3}2    2    22    1    10    1    1
P_{4}4    3    30    0    24    3    1

(1)T_{0}时刻的安全性:利用安全性算法对T_{0}时刻的资源分配情况进行分析(如图3-2所示)可知,在T_{0}时刻存在着一个安全序列{P_{1},P_{3},P_{4},P_{2},P_{0}},故系统是安全的。

图3-2 T_{0}时刻的安全序列
 WorkNeedAllocationWork+AllocationFinish
A    B   CA    B   CA    B   CA    B   C
P_{1}3    3    21    2    22    0    05    3    2true
P_{3}5    3    20    1    12    1    17    4    3true
P_{4}7    4    34    3    10    0    27    4    5true
P_{2}7    4    56    0    03    0    210   4    7true
P_{0}10   4   77    4    30    1    010   5    7true

(2)P_{1}请求资源:P_{1}发出请求向量Request_{1}(1,0,2),系统按银行家算法进行检查:

Request_{1}(1,0,2)≤Need_{1}(1,2,2);

② Request_{1}(1,0,2)≤ Available(3,3,2);

③系统先假定可为P_{1}分配资源,并修改Available,Allocation_{1}Need_{1}向量,由此形成的资源变化情况如图3-1中的圆括号所示;

④再利用安全性算法检查此时系统是否安全,如图3-3所示。

图3-3 P1申请资源时的安全性检查
 WorkNeedAllocationWork+AllocationFinish
A    B   CA    B   CA    B   CA    B   C
P_{1}2    3    00    2    03    0    25    3    2true
P_{3}5    3    20    1    12    1    17    4    3true
P_{4}7    4    34    3    10    0    27    4    5true
P_{0}7    4    57    4    30    1    07    5    5true
P_{2}7    5    56    0    03    0    210   5    7true

由此进行的安全性检查得知,可以找到一个安全序列{P_{1},P_{3},P_{4},P_{0},P_{2}}。因此,系统是安全的,可以立即将P_{1}所申请的资源分配给它。

(3)P_{4}请求资源:P_{4}发出请求向量Request_{4}(3,3,0),系统按银行家算法进行检查:

Request_{4}(3,3,0)≤Need_{4}(4,3,1);

Request_{4}(3,3,0)≤Available(2,3,0),让P_{4}等待。

(4)P_{0}请求资源:P_{0}发出请求向量Request_{0}(0,2,0),系统按银行家算法进行检查:

Request_{0}(0,2,0)≤Need_{0}(7,4,3);

Request_{0}(0,2,0)≤Available(2,3,0);

③系统暂时先假定可为P_{0}分配资源,并修改有关数据,如图3-4所示。

 AllocationNeedAvailable
A    B   CA    B   CA     B     C
P_{0}0    3    07    2    32     1     0
P_{1}3    0    20    2    0 
P_{2}3    0    26    0    0 
P_{3}2    1    10    1    1 
P_{4}0    0    24    3    1 

(5)进行安全性检查:可用资源Available(2,1,0)已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。

四、举例说明

解:(1)

资源分配表
 MaxAllocationNeedAvailable
R1  R2  R3  R4R1  R2  R3  R4R1  R2  R3  R4R1  R2  R3  R4
P_{0}0     0    1     20     0    1     20     0    0     01     5    0     2
P_{1}1     7    5     01     0    0     00     7    5     0 
P_{2}2     3    5     61     3    5     41     0    0     2 
P_{3}0     6    5     20    6    3     20     0    2     0 
P_{4}0     6    5     60     0    1     40     6    4     2 

(2)

 WorkNeedAllocationWork+AllocationFinish
R1  R2  R3  R4R1  R2  R3  R4R1  R2  R3  R4R1  R2  R3  R4
P_{0}1     5    0     20     0    0     00     0    1     21     5    1     4true
P_{2}1     5    1     41     0    0     21     3    5     42     8    6     8true
P_{1}2     8    6     80     7    5     01     0    0     03     8    6     8true
P_{3}3     8    6     80     0    2     00    6    3     23    14    9   10true
P_{4}3    14    9   100     6    4     20     0    1     43    14   10   14true

利用安全性算法对此时刻的资源分配情况进行分析(如上图)可知,此时刻存在着一个安全序列{P_{0},P_{2},P_{1},P_{3},P_{4}},故此系统是安全的。

(3)P_{4}请求资源:P_{4}发出请求向量Request_{4}(0,2,0,2),系统按银行家算法进行检查:

Request_{4}(0,2,0,2)≤Need_{4}(0,6,4,2);

Request_{4}(0,2,0,2)≤Available(1,5,0,2);

③系统先假定可为P_{4}分配资源,并修改Available,Allocation_{4}Need_{4}向量;

④再利用安全性算法检查此时系统是否安全,如下图所示:

 WorkNeedAllocationWork+AllocationFinish
R1  R2  R3  R4R1  R2  R3  R4R1  R2  R3  R4R1  R2  R3  R4
P_{0}1     3    0     00     0    0     00     0    1     21     3    1     2true
P_{2}1     3    1     21     0    0     21     3    5     42     6    6     6true
P_{3}2     6    6     60     0    2     00    6    3     22    12    9     8true
P_{1}2    12    9     80     7    5     01     0    0     03    12    9     8true
P_{4}3    12    9     80     4    4     00     2    1     63    14   10   14true

由所进行的安全检查得知,可以找到一个安全序列{P_{0},P_{2},P_{3},P_{1},P_{4}}。因此,系统是安全的,可以立即将P_{4}所申请的资源分配给它。

解:(1)

①P1申请3个,满足;系统还剩7个。(10-3=7)

②P2申请2个,满足,系统还剩5个。(7-2=5)

③P3申请4个,若满足它的请求,可能使以后的任何进程都不能运行完,因此P3等待。

④P1申请2个,满足;系统还剩3个。(5-2=3)

⑤P2申请2个,不能满足,等待。

此时系统的分配情况如下:

P1分配5个后正在运行,P2分配2个后等待分配2个,P3等待分配4个,系统还剩3个。

(2)

①P1接着运行,P1申请3个可满足。P1运行完成后,释放资源,使系统的资源数量变为8个。(5+3=8)

②首先将P3唤醒,满足它的4个资源,系统还剩4个,可以唤醒P2,满足它的2个请求,系统还剩2个。(8-4-2=2)

③P3申请3个,不能满足,等待。

④P2申请2个,系统满足它,P2接着运行,P2完成,释放资源,使系统资源变为6个。(2+4=6)

⑤系统唤醒P3,满足它的资源请求,最终P3完成,释放资源,使资源数量恢复为10个。

因此,找到的进程完成序列为P1,P2,P3。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值