银行家算法

银行家算法

银行家算法中的数据结构

假设系统中有n个进程,m种资源:

  • 矩阵Max(n×m):最大需求矩阵,Max[i, j]=K表示进程Pi最多需要K个资源Rj;
  • 矩阵Allocation(n×m):表示对所有进程的资源分配情况;
  • 矩阵Need(n×m):表示各进程最多还需要多少各类资源;
    其中以上三种矩阵满足如下关系:
    Max - Allocation =Need
  • 矩阵Avilable(长度为m的一维矩阵):表示当前系统中还有多少可用资源。

银行家算法

此处Request的下角标i不知道怎么处理,用[i]代替
某进程Pi向系统申请资源,可用一个长度为m的一维数组Request[i]表示本次申请的各种资源量。
可用银行家算法预判本次分配是否会导致系统进入不安全状态:
(1)如果Requet[i][j]<=Need[i, i] (0<=j<=m)便转向(2),否则认为出错。(出错是因为所需要的资源已经超过它所宣布的最大值);
(2)如果Request[i][j]<=Available[j] (0<=j<=m),便转向(3),否则表示尚无足够资源,Pi必须等待。
(3)系统试探着把资源分配给进程Pi,并修改相应的数据(并非真的分配,修改数值只是为了做预判) :
Available = Available - Request[i];
Allocation[i, j] = Allocation[i, j] + Request[i][j];
Need[i, j]= Need[i, j]- Request[i][j] ;
(4)操作系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,正式完成分配,否则,恢复原来的资源分配状态,让进程等待。

银行家算法的例题

问题:此时系统是否处于安全状态?

进程 Max Allocation Need Available
P0 (7,5,3) (0,1,0) (7,4,3) (3,3,2)
P1 (3,2,2) (2,0,0) (1,2,2)
P2 (9,0,2) (3,0,2) (6,0,0)
P3 (2,2,2) (2,1,1) (0,1,1)
P4 (4,3,3) (0,0,2) (4,3,1)

解答:
(1)可用资源为(3,3,2),依次与P0-P4比较,在比较到P1时,发现可用资源满足P1的需要资源,将P1加入安全序列;
(2)P1归还资源后,可用资源为(5,3,2)从上到下依次比较,在比较到P3时,发现可用资源满足P3的需要资源,将P3加入安全序列;
(3)P3归还资源后,可用资源为(7,4,3),除去已经加入到安全序列的进程,其余进程从上到下依次比较,在比较到P0时,发现可用资源满足P0的需要资源,将P0加入安全序列;
(4)P0归还资源后,可用资源为(7,5,3),除去已经加入到安全序列的进程,其余进程从上到下依次比较,在比较到P2时,发现可用资源满足P2的需要资源,将P2加入安全序列;
(5)P2归还资源后,可用资源为(10,5,5),除去已经加入到安全序列的进程,其余进程从上到下依次比较,发现可用资源满足P4的需要资源,将P4加入安全序列.
到目前为止,安全序列已经整合出来:P1,P3,P0,P2,P4.

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