能运行的银行家算法

上传人:F****n 文档编号:99676663 上传时间:2019-09-20 格式:DOC 页数:5 大小:23.50KB
返回 下载 相关 举报
能运行的银行家算法_第1页
第1页 / 共5页
能运行的银行家算法_第2页
第2页 / 共5页
能运行的银行家算法_第3页
第3页 / 共5页
能运行的银行家算法_第4页
第4页 / 共5页
能运行的银行家算法_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《能运行的银行家算法》由会员分享,可在线阅读,更多相关《能运行的银行家算法(5页珍藏版)》请在金锄头文库上搜索。

1、#includestdio.h#define FALSE 0#define TRUE 1#define W 10#define R 20int M ; /*总进程数*/int N ; /*资源种类*/int ALL_RESOURCEW;/*各种资源的数目总和*/int MAXWR; /*M个进程对N类资源最大资源需求量*/int AVAILABLER; /*系统可用资源数*/int ALLOCATIONWR; /*M个进程已经得到N类资源的资源量*/int NEEDWR; /*M个进程还需要N类资源的资源量*/int REQUESTR; /*请求资源个数*/*函数名:output*功能:输出资

2、源分配情况*/void output()int i,j;printf(All Resource:n);for(j = 0 ; j N ;j+)printf(R%d:%dn, j , ALL_RESOURCEj);printf(Resource Available:n);for(j = 0 ; j N ; j+)printf(R%d:%dn, j , AVAILABLEj);printf(Process Resource Needed:n);printf(| PID |);for(j = 0 ; j N ; j+)printf( R%d |, j);printf(n);for(i = 0 ; i

3、 M ; i+)for(i = 0 ; i M ; i+)printf(|%-5d|, i);for(j = 0 ; j N ; j+)printf(%-4d|, NEEDij);printf(n);printf(Process Resource Allocated:n);printf(| PID |);for(j = 0 ; j N ; j+)printf( R%d |, j);printf(n);for(i = 0 ; i M ; i+) printf(|%-5d|, i);for(j = 0 ; j N ; j+)printf(%-4d|, ALLOCATIONij); printf(n

4、);/*output*/*函数名 :modify*功能:改变可用资源和已经拿到资源和还需要的资源的值*参数:int k 修改编号为K的P的数据*/void modify(int k)int j;for(j = 0 ; j N ; j+)/*修改数据*/ AVAILABLEj = AVAILABLEj - REQUESTj;/*修改可用资源*/ ALLOCATIONkj = ALLOCATIONkj + REQUESTj;/*修改分配资源*/ NEEDkj = NEEDkj - REQUESTj;/*修改资源需求*/*函数名:undo*功能:还原可用资源和已经拿到资源和还需要的资源的值*参数:参

5、数:int k 修改编号为K的P的数据*/void undo(int k)int j;for(j = 0 ; j N ; j+)/*修改数据*/ AVAILABLEj = AVAILABLEj + REQUESTj; /*修改可用数据*/ ALLOCATIONkj = ALLOCATIONkj - REQUESTj; /*修改分配的资源*/ NEEDkj = NEEDkj + REQUESTj;/*修改资源需求*/ /*函数名:chkerr*功能:检查修改操作是否安全*/int chkerr(int s)int WORK , FINISHW;int i , j;for(i = 0 ; i M

6、; i+)/*清空FINISH*/FINISHi = FALSE;for(j = 0 ; j N ; j+)/*逐一检查*/WORK = AVAILABLEj;i = s;doif(FINISHi = FALSE & NEEDij = WORK)/*符合条件?*/WORK = WORK + ALLOCATIONij;FINISHi = TRUE;i = 0;elsei+;while(iM);for(i = 0 ; i M ; i+)/*只要一个不满足,不安全*/if(FINISHi = FALSE)printf(Error : UnSafe Allocation!n);return 1; pr

7、intf(OK : Allocation OKn);return 0;/*函数名:bank*功能 :银行家算法的实现*/void bank()int i , j;int flag = TRUE;printf(Use Ctrl+C break.n);while(TRUE)i = -1;while(i = M)printf(Input Process to Allocat PID=); scanf(%d, &i); if(i = M)printf(Error: Invalid Input!n);printf(Input Resource Needn); for (j = 0 ; j NEEDij)

8、/*请求的资源数大于请求资源*/printf(Error: Invalid Input!n);flag = FALSE;elseif(REQUESTjAVAILABLEj)/*若请求的资源数大于可用资源数*/printf(Error: Invalid Input!n);flag = FALSE;/*else*/ /*for*/ if(flag) modify(i); /*修改资源数*/if(chkerr(i)/*安全?*/undo(i); /*恢复资源数*/output();/*输出*/elseoutput(); /*输出*/ elseoutput();/*while*/*bank*/*主函数

9、*/int main()int i , j , p;printf(Input Process Numbers M=);/*进程数量*/scanf(%d, &M);printf(Input Resource Category N=);/*资源种类*/scanf(%d, &N);printf(Input Number of All Resource each Category:n);/*资源数目*/for(i = 0 ; i N ; i+)scanf(%d, &ALL_RESOURCEi);printf(Input Max Resource Process Need:n);/*最大资源需求*/fo

10、r (i = 0 ; i M ; i+)for (j = 0 ; j ALL_RESOURCEj)/*大于最大可用?*/printf(nError: Invalid Input!n); while (MAXij ALL_RESOURCEj); /*for*/printf(Input Resource Process Allocated:n);for (i = 0 ; i M ; i+)for (j = 0 ; j MAXij)/*大于最大需求?*/printf(nError: Invalid Input!n);while (ALLOCATIONij MAXij); /*for*/for(j =

11、 0 ; j N ; j+)p = ALL_RESOURCEj;for(i = 0 ; i M ; i+)p -= ALLOCATIONij;/*减去已经分配资源*/AVAILABLEj = p;if(AVAILABLEj0)AVAILABLEj = 0;/*清理数据*/*for*/ /*for*/for (i = 0 ; i M ; i+)for(j = 0 ; j N ; j+)NEEDij = MAXij - ALLOCATIONij;/*求还需要的资源*/output();bank();/*银行家算法*/return 0;/*main*/电视墙也就是电视背景装饰墙,是居室装饰特别是大户型居室的重点之一,在装修中占据相当重要的地位,电视墙通常是为了弥补客厅中电视机背景墙面的空旷,同时起到修饰客厅的作用。因为电视墙是家人目光注视最多的地方,长年累月地看也会让人厌烦,所以其装修就尤为讲究

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号