设:
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]
例:
假定系统有五个进程(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]