银行家算法

                                        银行家算法    

   设: 

    a.    可利用资源向量Available,描述系统各种剩余可用资源的数目
    b.    最大需求矩阵Max,描述各个进程对各个资源的最大需要求
    c.    分配矩阵Allocation,描述各个资源已分配给个进程的资源数
    d.    需求矩阵Need, 描述各进程尚需的各类资源数
    e.    请求向量Request,描述进程Pi对各资源的请求数
    当进程Pi发出资源请求Request,要求:
    1.R[j]<=Need[i,j]
    2.R[j]<=Available[i,j]
    3.试分配Available[i]= Available[i] - R
        Allocation[i]= Allocation[i] + R
        Need[i]= Need[i]-R
    4.执行安全性算法检测分配后是否处于安全状态,安全则分配:
    a.工作向量work,描述系统各种剩余可用资源的数目,初值为Available
    b.向量finish,表示系统是否尚有足够的资源分配给进程,初值全为false
    1.找到finish[i]=false&&need[i]     2.找到后work[j]=work[j]+ Allocation[I,j],finish[i]=true返回1接着找

例:

假定系统有五个进程(P0,P1,P2,P3,P4)和三类资源(A,B,C),系统三类资源数为10、5、7

在T0时刻的资源分配情况如下

           Allocation       Need        Avaliable

            A   B   C       A   B   C      A   B   C

P0        0   1    0       7   4   3       3    3   2   

P1        2   0    0       1   2   2       3    3   2           

P2        3   0    2       6   0   0       3    3   2   

P3        2   1    1       0   1   1       3    3   2   

P4        0   0    2       4   3   1       3    3   2   

(1)现P0请求资源Request = (1,0,2)

1.Request (1,0,2)

2.Request (1,0,2)

试分配

Available[i]=Avaliable(3,3,2) - Request (1,0,2) = Avaliable(2,3,0)

Allocation[i]= Allocation(0,1,0) + Request (1,0,2) = Allocation(1,1,2)

Need[i]= Need(7,4,3)-Request (1,0,2) = Need(6,4,1)

执行安全性算法检测分配后是否处于安全状态

work = Avaliable(2,3,0) =work(2,3,0)

找need[i]

           Allocation       Need            work        finish

            A   B   C       A   B   C      A   B   C      false

P0        1   1    2       6   4   1       2    3   0      false  

P1        2   0    0       1   2   2       2    3   0      false           

P2        3   0    2       6   0   0       2    3   0      false  

P3        2   1    1       0   1   1       2    3   0      false    ①need[i]

P4        0   0    2       4   3   1       2    3   0      false

②找不到need[i]

(2)现P1请求资源Request = (1,0,2)

1.Request (1,0,2)

2.Request (1,0,2)

试分配

Available[i]=Avaliable(3,3,2) - Request (1,0,2) = Avaliable(2,3,0)

Allocation[i]= Allocation(0,1,0) + Request (1,0,2) = Allocation(1,1,2)

Need[i]= Need(7,4,3)-Request (1,0,2) = Need(6,4,1)

执行安全性算法检测分配后是否处于安全状态

work = Avaliable(2,3,0) =work(2,3,0)

找need[i]

           Allocation       Need            work        finish

            A   B   C       A   B   C      A   B   C      false     

P0        0   1    0       7   4   3       2    3   0      false    ③need[i]

P1        3   0    2       0   2   0       2    3   0      false    ①need[i]

P2        3   0    2       6   0   0       2    3   0      false    ④need[i]

P3        2   1    1       0   1   1       2    3   0      false    ②need[i]

P4        0   0    2       4   3   1       2    3   0      false    ④need[i]

②找不到need[i]

 

 

 

你可能感兴趣的:(计算机操作系统)