银行家算法实验报告(C语言版)
银行家算法实验报告

银行家算法实验报告银行家算法是为了实现避免出现死锁的状态而采取的一种算法,本实验则是用C语言实现。
一、银行家算法数据结构1、可利用资源数量Avail。
这是一个含M个元素的数组,其中每一个元素代表一类可用的资源数目,定义为int型,Avail[m]。
2、最大需求矩阵Max。
这是一个nxm的二维矩阵,它定义了系统中n个进程的每一个进程对m类资源的最大需求,定义为int型,Max[n][m]。
3、分配矩阵Alloc。
这是一个nxm的二维矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。
定义为int型,Alloc[n][m]。
4、需求矩阵Need。
这也是一个nxm的二维矩阵,用以表示每一个进程尚需的各类资源数。
定义为int型,Need[n][m]。
5、请求资源数目Request。
这是一个含M个元素的数组,它表示进程请求的资源数目,定义为int型,Request[m]。
6、系统当前可用的资源矩阵Work,这是一个含M个元素的数组,表示系统还可以分配的资源数目,用于对安全算法的检测。
定义为int型,Work[m]。
7、记录安全序号的数组sequence,用于记录系统的安全信号,便于在后面输出。
定义为int型,sequence[n].二、银行家算法过程步骤如下:1、判断请求的资源是否超过他所宣布需要的最大值,即如果request[j]>need[i][j],则判断出错,否则继续执行。
2、判断请求的资源是否超过系统可分配的数目,即如果request[j]>Avail[j],则判断出错,否则继续执行。
3、系统试探着把资源分配给进程Pi。
并修改其中的数据Avail、Alloc、Need。
4、系统进行安全性算法的检查。
三、安全性算法其中有两个信号量,Work和Finish。
分别用于表示系统可提供给进程的继续运行所需的各类资源的数目,含m个int型的元素。
而Finish用于标识系统是否有足够的资源分配给进程,使之运行完成,默认为1(不能),从而只有在finish都为0时才能表示安全算法成功。
C语言实验报告范例

C语言实验报告范例
实验题目:C语言实现银行家算法
实验目的:掌握C语言实现银行家算法的基本思想,并能熟练应用矩阵处理实现银行
家算法的功能。
实验内容:
1. 利用C语言实现银行家算法的核心思想,利用矩阵处理实现其核心功能模块。
2. 银行家算法是一种负责实现“当前分配”的基于矩阵的编程模型。
该算法可以通
过利用安全状态来识别一次可行解,从而解决请求和分配资源的冲突问题。
3. 根据上述信息,我们设计了C语言实现银行家算法的基本框架,包括初始化步骤、可行性检查步骤、回滚步骤以及主步骤。
4. 在初始化步骤中,我们采用矩阵存储技术,将银行家算法中的各个参数保存起来,具体过程中采用数组存储。
5. 在可行性检查步骤中,我们判断当前系统状态是否处于安全状态,如果处于安全
状态,则继续完成下一步余额检查;否则,处理发生冲突时,回滚处理。
6. 在主步骤中,我们过程中判断若系统处于可行状态,则继续分配资源;否则,则
执行回滚操作,将系统恢复到上一状态。
实验结果和结论:
通过实验,我们学会了如何使用C语言来实现银行家算法,进而通过实现矩阵处理,
实现了该算法的核心功能模块。
此外,我们还学习了安全状态机制,进行系统可行性检查,和完成系统的分配工作,以达到有效地实现银行家算法的目的。
本次实验结论如下:
1. 通过C语言实现银行家算法中的核心功能模块,使系统的可行性检查得以有效实现;
2. 利用矩阵存储来实现系统的可行性检查,从而有效地节省时间和提高资源分配的
效率;
3. 通过回滚处理,有效地解决资源请求和分配冲突问题,使系统能够有效地实现安
全状态。
操作系统实验报告--银行家算法

操作系统实验报告二一:实验标题:实现死锁避免算法:银行家算法。
二:实验环境:操作系统:windows7编译器:Visual Studio 2010三:设计方案:1.实验目的通过程序模拟银行家算法,理解如何应用银行家算法避免死锁。
2.实验手段直接在C源程序定义整形进程数量、资源种类;用2维数组表示最大需求、已分配的资源。
从文件获取相关数量。
3.验证方式检验当前资源是否有安全序列,是的话输出安全序列。
四:实验代码:#include<stdio.h>#include<stdlib.h>#define P_num 5#define R_num 3int Allocation[P_num][R_num],Avaliable[R_num],Max[P_num][R_num]; int Need[P_num][R_num];int compare(int *a,int *b,int n){ int i;for(i = 0;i < n;i ++)if(a[i] < b[i])return 0;return 1;}void add(int *a,int *b,int n){ int i;for(i = 0;i < n;i++)a[i] += b[i];}void substract(int *a,int *b,int n){ int i;for(i = 0;i < n;i++)a[i] -= b[i];}void assign(int *a,int *b,int n){ int i;for(i = 0;i < n;i ++)a[i] = b[i];}void input(){FILE *fp;int i,j;if((fp = fopen("banker.txt","r")) == 0){ printf("cannot open the file");exit(0);}for(i = 0;i < P_num; ++i)for(j = 0;j < R_num; ++j){fscanf(fp,"%d",&Allocation[i][j]);}for(i = 0;i < P_num; ++i)for(j = 0;j < R_num; ++j){fscanf(fp,"%d",&Max[i][j]);}for(j = 0;j < R_num; ++j){fscanf(fp,"%d",&Avaliable[j]);}fclose(fp);for(i = 0;i < P_num; ++i)for(j = 0;j < R_num; ++j){Need[i][j] = Max[i][j] - Allocation[i][j];}}int issafe(int *sp){int i;int count = 0;int n = 0;int work[R_num],finish[P_num];assign(work,Avaliable,R_num);for(i = 0;i < P_num;i ++)finish[i] = 0;n = P_num;while(n --){for(i = 0;i < P_num;i ++)if((finish[i] == 0) && compare(work,Need[i],R_num)){ add(work,Allocation[i],R_num);finish[i] = 1;sp[count] = i;count ++;}if(count >= P_num)return 1;}return 0;}int request(int pid,int *r,int n){int i;int sp[P_num];if(compare(Need[pid],r,n) == 1 && compare(Avaliable,r,n) == 1){ substract(Avaliable,r,n);add(Allocation[pid],r,n);substract(Need[pid],r,n);if(issafe(sp)){printf("Security Path:\n\t");for(i = 0;i < P_num;i ++)printf("p[%d] ",sp[i]);printf("\n");return 1;}else{add(Avaliable,r,n);substract(Allocation[pid],r,n);add(Need[pid],r,n);printf("no Security Parh on this request\n");return 0;}}else{printf("no Security Parh on this request\n");return 0;}}void main(){int id,i;int r[R_num],sp[P_num];input();if(issafe(sp)){printf("Security Path:\n\t");for(i = 0;i < P_num;i ++)printf("p[%d] ",sp[i]);printf("\n");}elseprintf("failed\n");printf("input the new request's id:");scanf("%d",&id);printf("input the new request:");for(i = 0;i < R_num;++ i)scanf("%d",&r[i]);request(id,r,R_num);}banker.txt文件内容:0 1 02 0 03 0 22 1 10 0 27 5 33 2 29 0 22 2 24 3 33 3 2所得结果:Security Path:P[1] p[3] p[4] p[0] p[2] Intput the new request's id:0Input the new request:0 2 0Security Path:p[3] p[1] p[2] p[0] p[4] 问题和想法:。
(完整word版)银行家算法实验报告(C语言版)

int need[max_process][max_resource];//需求矩阵
int request[max_process][max_resource];//进程需要资源数
(4)试分配后,执行安全性检查,调用check()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程。否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
(5)用do{…}while循环语句实现输入字符y/n判断是否继续进行资源申请。
(二)安全性算法(safe()函数):
int finish[max_process];
int m=5,n=3;
void init();int safeຫໍສະໝຸດ );void bank();
void init2();
void print();
void print2();
void main()
{
int i;
printf("请输入测试数据,按0由用户输入测试数据,按1由系统提供测试数据:\n");
scanf("%d",&n);
printf("请按顺序输入系统中可利用的每种资源量:\n");
for(i=0;i<n;i++)
scanf("%d",&available[i]);
printf("请输入最大需求矩阵:\n");
for (i=0;i<m;i++)
银行家算法实验报告

计算机操作系统实验报告一、实验名称:银行家算法二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
三、问题分析与设计:1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。
若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。
若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。
2、银行家算法步骤:(1)如果Requesti<or =Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。
(2)如果Request<or=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。
(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:Available=Available-Request[i];Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。
3、安全性算法步骤:(1)设置两个向量①工作向量Work。
它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;②布尔向量Finish。
它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。
(2)从进程集合中找到一个能满足下述条件的进程:①Finish[i]=false②Need<or=Work如找到,执行步骤(3);否则,执行步骤(4)。
(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Finish[i]=true;转向步骤(2)。
银行家算法实验报告

银行家算法实验报告实验目的:了解和掌握银行家算法,进一步熟悉进程和如何避免死锁。
实验内容:1、主要程序结构(a)resource allocation algorithm如果要求的资源量+占有的资源总的资源需求量可以carry out allocation(b) test for safety algorithm注:《--- 》中的内容为未具体写明但说明其功能的程序段bool safe(struct state new ){bool possible = true,found=false;process rest[n];//正在执行的进程号int p=n;// 正在执行的进程数量int currentavail[m];//可用资源的一个副本《---为rest和currentavail赋值---》while(possible==true&&p>0){int g=0;《---寻找可以执行完成的进程---》if(found==true){int c=0;《---假设可以执行完的进程以完成,及currentavail[*]=currentavail[*]+new.alloc[g][*];---》rest[g] = -1;--p;found =false;}else{possible=false;}}return possible;}2、实验步骤1)设计结构体#ifndef STATE_H_#define m 3#define n 5struct state{int resource[m];int available[m];int claim[n][m];int alloc[n][m];} ;#define STATE_H_#endif /* STATE_H_ */2)设计实现程序的结构的具体程序Safe算法的具体代码bool safe(struct state new ){bool possible = true,found=false;process rest[n]; //正在执行的进程号int f=0,p=n;// 正在执行的进程数量do{rest[f]=f;++f;}while(f<n);int currentavail[m]; //可用资源的一个副本int i=0;do{currentavail[i]=new.available[i];++i;}while(i<m);while(possible==true&&p>0){int g=0;/*------------------寻找可以执行完成的进程------------------------------------------*/ while(g<n){int h = 0;/*while(h<m){if((new.claim[g][h]-new.alloc[g][h])<=currentavail[h]&&rest[g]!=(-1)){if(h==m-1){found=true;}}++h;}if(found==true)break;++g;}/*-------------------------------------------------------------------------------------*/ if(found==true){int c=0;while(c<m){currentavail[c]=currentavail[c]+new.alloc[g][c];c++;}rest[g] = -1;--p;found =false;}else{possible=false;}}return possible;}实验代码:/*============================================================================ Name : pre.cAuthor :Version :Copyright : Your copyright noticeDescription : Hello World in C, Ansi-style============================================================================ */#include <stdio.h>#include <stdlib.h>#include"state.h"#define bool int#define process int#define false 0#define true 1int main(void) {bool alloc(int,int[],struct state );struct state sta1={{10,5,7},{3,3,2},{{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}},{{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}};int request[m];int k=0;while(k>=0){puts("输入要改变资源的进程号");scanf("%d",&k);puts("输入要改变的资源");int i =0;while(i<m){scanf("%d",&request[i]);i++;}if(alloc(k,request,sta1)==true){i=0;puts("输出个进程占用的资源");while(i<n){int j=0;printf("%d ",i);while(j<m){if(i==k){sta1.alloc[k][j]=request[j]+sta1.alloc[k][j];sta1.available[j]=sta1.available[j]-request[j];}printf("%d ",sta1.alloc[i][j]);j++;}printf("\n");++i;}}puts("银行家算法");}return 0;}bool alloc(int l,int request[m],struct state nest){bool safe(struct state news);bool t = false;int i=0;while(i<m){if(nest.alloc[l][i]+request[i]>nest.claim[l][i]){puts("!!resource request error!!");return false;}else if(request[i]>nest.available[i]){puts("suspend process");return false;}else{if(i==m-1){int f=0;while(f<m){nest.alloc[l][f]=nest.alloc[l][f]+request[f];nest.available[f]=nest.available[f]-request[f];f++;}if(safe(nest)==true){t=true;}else{puts(" no safe suspend process");t=false;}}}i++;}return t;}bool safe(struct state new ){bool possible = true,found=false;process rest[n];int f=0,p=n;do{rest[f]=f;++f;}while(f<n);int currentavail[m];int i=0;do{currentavail[i]=new.available[i];++i;}while(i<m);while(possible==true&&p>0){int g=0;while(g<n){int h = 0;while(h<m&&(new.claim[g][h]-new.alloc[g][h])<=currentavail[h]&&rest[g]!=(-1)){if(h==m-1){found=true;}++h;}if(found==true)break;++g;}if(found==true){int c=0;while(c<m){currentavail[c]=currentavail[c]+new.alloc[g][c];c++;}rest[g] = -1;--p;found =false;}else{possible=false;}}return possible;}。
c语言银行家算法实验报告

c语言银行家算法实验报告C语言银行家算法实验报告引言:计算机科学领域中,操作系统的资源管理是一个十分重要的课题。
在多任务处理系统中,多个进程同时竞争有限的资源,如何合理地分配和调度资源,以保证系统的稳定性和效率,是一个关键问题。
银行家算法(Banker's Algorithm)是一种经典的资源分配算法,它通过分析系统的资源状态和进程的资源需求,来判断是否能够安全地分配资源,从而避免产生死锁。
一、实验目的本次实验旨在通过C语言编程实现银行家算法,加深对资源管理和死锁问题的理解,并通过实际案例验证银行家算法的有效性。
二、实验环境本次实验使用C语言进行编程,并在Linux操作系统下进行测试。
三、实验过程1. 设计数据结构在开始编写代码之前,我们需要先设计适合的数据结构来表示系统资源和进程的状态。
在银行家算法中,我们需要记录系统中的可用资源数量、各个进程的最大需求资源数量、已分配资源数量和需要资源数量等信息。
通过定义合适的数据结构,我们可以方便地进行资源的分配和回收。
2. 实现银行家算法根据银行家算法的原理,我们可以将其分为两个步骤:安全性检查和资源分配。
在安全性检查中,我们需要判断当前系统状态下是否存在安全序列,即是否能够满足所有进程的资源需求,避免死锁的发生。
在资源分配中,我们需要根据当前系统状态和进程的资源需求,动态地分配和回收资源。
3. 编写测试用例为了验证银行家算法的正确性和有效性,我们需要编写一些测试用例。
测试用例应该包括各种不同的进程资源需求和系统资源状态,以覆盖不同情况下的资源分配和回收。
4. 运行测试用例在编写完测试用例后,我们可以运行程序,观察输出结果。
通过比较实际输出与预期结果,我们可以判断银行家算法的正确性和有效性。
四、实验结果与分析通过运行多个测试用例,我们可以得出以下结论:1. 银行家算法能够有效地避免死锁的发生。
在安全性检查过程中,如果存在安全序列,那么系统可以继续分配资源,否则需要阻塞等待。
银行家算法 实验报告

淮海工学院计算机工程学院实验报告书课程名:《操作系统原理》题目:银行家算法班级:学号:姓名:一、实验目的银行家算法是操作系统中避免死锁的典型算法,本实验可以加深对银行家算法的步骤和相关数据结构用法的更好理解。
实验环境TurboC2.0/3.0或VC++6.0实验学时4学时,必做实验。
二、实验内容用C语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。
程序能模拟多个进程共享多种资源的情形。
进程可动态地申请资源,系统按各进程的申请动态地分配资源。
要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源数量以及为某进程分配资源后的有关资源数据的情况。
三、实验说明实验中进程的数量、资源的种类以及每种资源的总量Total[j]最好允许动态指定。
初始时每个进程运行过程中的最大资源需求量Max[i,j]和系统已分配给该进程的资源量Allocation[i,j]均为已知(这些数值可以在程序运行时动态输入),而算法中其他数据结构的值(包括Need[i,j]、Available[j])则需要由程序根据已知量的值计算产生。
四、实验步骤1、理解本实验中关于两种调度算法的说明。
2、根据调度算法的说明,画出相应的程序流程图。
3、按照程序流程图,用C语言编程并实现。
五、分析与思考1.要找出某一状态下所有可能的安全序列,程序该如何实现?答:要找出这个状态下的所有可能的安全序列,前提是要是使这个系统先处于安全状态,而系统的状态可通过以下来描述:进程剩余申请数=最大申请数-占有数;可分配资源数=总数-占有数之和;通过这个描述来算出系统是否安全,从而找出所有的安全序列。
2.银行家算法的局限性有哪些?答:银行家算法是一种最有代表性的避免死锁的算法。
银行家算法即把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("请输入分配矩阵:\n");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
scanf("%d",&allocation[i][j]);
}
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
need[i][j]=max[i][j]-allocation[i][j];
(1)设置两个向量: 工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work= Available。 工作向量Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]=false;当有足够的资源分配给进程时, 再令Finish[i]=true。
need[number][i]=need[number][i]+request[number][i];
}
}
printf("是否继续申请资源?请回答(Y,N):\n");
scanf("%c",&answer);//清楚回车符
scanf("%c",&answer);
if(answer=='Y' || answer=='y') continue;
(4)试分配后,执行安全性检查,调用check()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程。否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
(5)用do{…}while 循环语句实现输入字符y/n判断是否继续进行资源申请。
(二)安全性算法(safe()函数):
三、实验容
用C语言(或其它语言,如Java)实现对资源的资源申请与分配;
(一)银行家算法(bank()函数):
进程i发出请求资源申请,
(1)如果Request [j]<=need[i,j],转向步骤(2),否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。
(2)如果:Request i[j]<=available[i,j],转向步骤(3),否则表示尚无足够资源,进程i需等待。
if(need[i][j]<0)
printf("您输入的第%d个进程的%d个资源数据有错,请重新输入\n",i,j);
}
}
void init2()
{ int i,j;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
need[i][j]=max[i][j]-allocation[i][j];
continue;
}
}
for(i=0;i<n;i++){
available[i]=available[i]-request[number][i];
allocation[number][i]=allocation[number][i]+request[number][i];
need[number][i]=need[number][i]-request[number][i];
(2)在进程中查找符合以下条件的进程: 条件1:Finish[i]=false; 条件2:need[i][j]<=Work[j] 若找到,则执行步骤(3)否则,执行步骤(4)
(3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work[j]= Work[j]+ Allocation[i][j]; Finish[i]=true; goto step (2);
《操作系统》课程综合性实验报告
:学号:2016年11月20日
实验题目
进程调度算法程序设计
一、实验目的
通过对安全性算法和银行家算法的模拟,进一步理解资源分配的基本概念,加深对资源申请,资源分配(银行家算法)以及系统是否能分配(安全性算法)资源的理解。
二、设备与环境
1. 硬件设备:PC机一台
2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。
}
void print(){
int i,j;
printf("最大需求矩阵如下:\n");
for(i=0;i<m;i++)
{ printf("p%d\t",i);
for(j=0;j<n;j++)
{
printf("%d\t",max[i][j]);
}
printf("\n");
}
printf("分配矩阵如下:\n");
for(i=0;i<n;i++) {
if(request[number][i]>need[number][i])
{
printf("申请的资源超过还需要的资源,请重新输入\n");
continue;
}
if(request[number][i]>available[i])
{
printf("申请的资源超过所能提供的资源,请重新输入\n");
for (i=0;i<n;i++) work[i]=available[i];
for(i=0;i<m;i++)
{
printf(" p%d |",l[i]);
for(p=0;p<n;p++)
printf("%3d ",work[p]);
printf("|");
for(p=0;p<n;p++)
{
printf("%3d ",need[l[i]][p]);
int finish[max_process];
int m=5,n=3;
void init();
int safe();
void bank();
void init2();
void print();
void print2();
void main()
{
int i;
printf("请输入测试数据,按0由用户输入测试数据,按1由系统提供测试数据:\n");
(4)如果所有的Finish[i]=true都满足,则表示系统处于安全状态,否则,处于不安全状态。
四、实验结果及分析
1.实验设计说明
按0由用户输入,按1由系统提供数据
2.实验代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define max_process 50 //最大进程数
for(j=0;j<n;j++)
{
printf("%d\t",need[i][j]);
}
printf("\n");
}
printf("系统可提供资源如下:\n");
for(j=0;j<n;j++)
printf("%d\t",available[j]);
printf("\n");
}
int safe()
{
char answer;
while(1){
printf("\n请输入需申请资源的进程号(第一个进程号为0):\n");
scanf("%d",&number);
printf("请依次输入该进程所需申请的所有资源数目:\n");
for(i=0;i<n;i++)
scanf("%d",&request[number][i]);
(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:
Available[i,j]= Available[i,j]- Request [j];
Allocation[i][j]= Allocation[i][j]+ Request [j];
need[i][j]= need[i][j]- Request [j];
scanf("%d",&i);
switch(i){
case 0: init();
break;
case 1: init2();
break;
}
print();
safe();
bank();
}
void init()
{
int i,j;
printf("请输入进程数目:\n");
scanf("%d",&m);
printf("请输入资源种类数目:\n");
#define max_resource 100//最大资源数
#define false 0
#define true 1
int available[max_resource]={3,3,2};//可利用资源向量
int max[max_process][max_resource]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//最大需求矩阵