③ 算法中用到的数据结构说明
1. 可利用资源向量 Available ,它是一个含有 m 个元素的数组,其中的每一个
元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用
资 源 数 目 。 其 数 值 随 该 类 资 源 的 分 配 和 回 收 而 动 态 地 改 变 。 如 果
Available[j]=k,标是系统中现有 Rj 类资源 k 个。
2. 最大需求矩阵 P,这是一个 n×m 的矩阵,它定义了系统中 n 个进程中的每
一个进程对 m 类资源的最大需求。如果 P(i,j)=k,表示进程 Pi 需要 Rj 类资
源的最大数目为 k。
3. 分配矩阵 Allocation,这是一个 n×m 的矩阵,它定义了系统中的每类资源
当前一分配到每一个进程的资源数。如果 Allocation(i,j)=k,表示进程 Pi 当
前已经分到 Rj 类资源的数目为 k。Allocation
i
表示进程 Pi 的分配向量,有矩阵
Allocation 的第 i 行构成。
4. 需求矩阵 Need,这是一个 n×m 的矩阵,用以表示每个进程还需要的各类资
源的数目。如果 Need(i,j)=k,表示进程 Pi 还需要 Rj 类资源 k 个,才能完成
其任务。Need
i
表示进程 i 的需求向量,由矩阵 Need 的第 i 行构成。
上述三个矩阵间存在关系:Need(i,j)=P(i,j)- Allocation(i,j);
5. Request
i
是进程 Pi 的请求向量。Request
i
(j)=k 表示进程 Pi 请求分配 Rj
类资源 k 个。当 Pi 发出资源请求后,系统按下述步骤进行检查:
①.如果 Request
i
≤Need,则转向步骤 2;否则出错。
② 如果 Request
i
≤R,则转向步骤 3;否则,表示系统中尚无足够的资源满足
Pi 的申请,Pi 必须等待。
③ 系统试探性地把资源分配给进程 Pi,并修改下面数据结构中的数值:
R = R - Request
i
Allocation
I
= Allocation
I
+ Request
i
Need
I
= Need
i
- Request
i
④ 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如
果安全才正式将资源分配给进程 Pi,以完成本次分配;否则,将试探分配作废,
恢复原来的资源分配状态,让进程 Pi 等待
6. 主要的常量变量
#dene W 10 //最大进程数W=10
#dene R 20 //最大资源总数R=20
int AVAILABLE[R]; //可利用资源向量
int MAX[W][R]; //最大需求矩阵
int ALLOCATION[W][R]; //分配矩阵
int NEED[W][R]; //需求矩阵
int Request[R]; //进程请求向量
void changdata(int k); //进程请求资源数据改变
int chksec(int s); //系统安全性的检测
7.主要模块(函数和数据)
void inputdata(); //数据输入