C语言实现银行家算法

2017-01-01 18:07 阅读 546 次 评论 1 条

00:00/00:00

需求分析

1>输入的形式和输入值的范围;

从键盘输入进程数以及资源的种类数目,输入值的范围为数组的维数。

2>输出的形式;

在windows Debug下输出银行家算法的安全序列,或输出系统不安全的状态。

3>程序所能达到的功能;

通过输入的进程数,资源的种类,已知最大资源总量、已分配资源数目、最大需求资源数目的情况下,进行判断资源分配是否符合银行家算法,即判断系统是否处于安全状态,如果安全,将打印出对应的安全序列。同时,也可以在这一时刻Pi再申请资源,进行判断是否存在安全序列。其次,在安全状态下,可以进行进程的添加,添加进程后,输入对应的已分配资源数和最大需求资源数,进行安全检查,如果安全,打印出对应的安全序列。

概要设计

①算法中用到的数据结构

最大需求矩阵MaxNeed:这是一个rows×rows的矩阵,它定义了系统中p个进程中的每一个进程对r类资源的最大需求。如果MaxNeed(i,j) = k,表示进程Pi需要第j类资源的最大数目为k。

分配矩阵Allocation:这是一个rows×rows的矩阵,它定义了系统中的每类资源当前已分配到每一个进程的资源数。如果Allocation(i,j)= k,表示进程Pi当前已经分到j类资源的数目为k。

可利用资源向量Available:它是一个含有r个元素的一维数组,其中每个元素代表一类可利用资源的数目,其初始值是系统中所配置的该类全部可用资源的数目。其数值随该类资源的分配和回收而动态地改变。如果Available[j] = k,表示系统中有j类资源的数目为k。

需求矩阵Need:它是一个rows×rows的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=k,表示进程Pi还需要j类资源的数目为k。上述数据结构满足:Need(i,j)= MaxNeed(i,j)- Allocation(i,j)。

Request是进程Pi的请求向量:Requesti(j)= k 表示进程Pi请求分配的j类资源k个。当Pi发出资源请求后,系统将后按照系列步骤进行检查:

  • Requesti <= Needi
  • Requesti <= Availablei;

②主要模块

void MaxProcess();    //资源总数

void AllocationProcess();    //已分配资源矩阵

void AvailableProcess();    //剩余可用资源矩阵

void MaxNeedProcess();   //各进程需求的最大资源数

void NeedProcess();        //各进程还需要的资源数

void Request();     //某时刻重新申请资源

int SafeCheck();      //安全检查

int Compare();       //返回进程的返回值

void Insert();       //添加进程

void Exit();         //退出

③各模块之间的调用关系

MaxProcess()->AllocationProcess()->MaxNeedProcess()->NeedProcess()->AvailableProcess()->SafeCheck()->Compare()->Select();

算法流程图

测试

程序源代码

 

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:C语言实现银行家算法 | 术与道的分享
分类:操作系统 标签:, ,
1024do.com导航_术与道导航平台

发表评论


表情