1、原理解释
安全状态:如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。安全状态一定是没有死锁发生。
不安全状态:不存在一个安全序列。不安全状态不一定导致死锁。
安全序列:一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。
银行家算法中的主要思想:在任何时刻保证至少有一个进程能得到所需的全部资源而执行到结束。
银行家算法通过动态地检测系统中资源分配情况和进程对资源的需求情况来决定如何分配资源,并能在确保系统处于安全状态时才把资源分配给申请者,从而避免系统发生死锁。
2、对变量名的解释
- Available:是一个长度为m的向量,他表示每类资源可用的数量,Available[j]=k表示rj类资源可用的数量是k
- Max:是一个nXm矩阵,表示每个进程对资源的最大需求,Max[i,j]=k表示进程 p i p_i pi至多可申请k个 r j r_j rj类资源单位。
- Allocation:是一个n*m的矩阵,表示当前分给每个进程的资源数目。Allocation[i,j]=k表示进程 p i p_i pi当前分到k个 r j r_j rj类资源
- Need:是一个nXm矩阵,表示每个进程还缺少多少个资源数目.Need[i,j]=k,表示进程 p i p_i pi还需要k个 r j r_j rj类资源才能完成任务。显然:Need[i,j]=Max[i,j]-Allocation[i,j]
- Work和Finish分别表示长度为m和n的向量,最初,置Work:=Available,Finish[i]:=false,i=1,2,3,…
3、程序实现
#include<iostream>
using namespace std;
#define resourceNum 3 //系统有多少类资源
#define processNum 5 //进程数
#define needResourceProcess 3 //需要申请资源的进程个数
//当前每类资源可用数目
int available[resourceNum] = {
3,3,2 };
//每个进程对每类资源的最大需求量
int Max[processNum][resourceNum] = {
{
7,5,3},{
3,2,2