能运行的银行家算法_第1页
能运行的银行家算法_第2页
能运行的银行家算法_第3页
能运行的银行家算法_第4页
能运行的银行家算法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include"stdio.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; /*请求资源个数*/*函数名:o

2、utput*功能:输出资源分配情况*/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&quo

3、t;);printf("| PID |");for(j = 0 ; j < N ; j+)printf(" R%d |", j);printf("n");for(i = 0 ; i < M ; i+)for(i = 0 ; i < M ; i+)printf("|%-5d|", i);for(j = 0 ; j < N ; j+)printf("%-4d|", NEEDij);printf("n");printf("Process Resou

4、rce 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");/*output*/*函数名 :modify*功能

5、:改变可用资源和已经拿到资源和还需要的资源的值*参数: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*功能:复原可用资源和已经拿到资源和还需要的资源的值*参数:参数:int k 修改编号为K的P的数据*/v

6、oid 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 ; i+)/*清空FIN

7、ISH*/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(i<M);for(i = 0 ; i < M ; i+)/*只要一个不满足,不平安*/if(FINISHi = FALSE)printf("Error : UnSafe Alloc

8、ation!n");return 1; printf("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 < 0 | i >= M)printf("Input Process to Allocat PID="); scanf("%d", &i)

9、; if(i < 0 | i >= M)printf("Error: Invalid Input!n");printf("Input Resource Needn"); for (j = 0 ; j < N ; j+) printf("R%d=", j);scanf("%d", &REQUESTj);if(REQUESTj > NEEDij)/*请求的资源数大于请求资源*/printf("Error: Invalid Input!n");flag = FALSE;

10、elseif(REQUESTj>AVAILABLEj)/*假设请求的资源数大于可用资源数*/printf("Error: Invalid Input!n");flag = FALSE;/*else*/ /*for*/ if(flag) modify(i); /*修改资源数*/if(chkerr(i)/*平安?*/undo(i); /*恢复资源数*/output();/*输出*/elseoutput(); /*输出*/ elseoutput();/*while*/*bank*/*主函数*/int main()int i , j , p;printf("Inpu

11、t 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(&

12、quot;Input Max Resource Process Need:n");/*最大资源需求*/for (i = 0 ; i < M ; i+)for (j = 0 ; j < N ; j+)doscanf("%d", &MAXij);if (MAXij > ALL_RESOURCEj)/*大于最大可用?*/printf("nError: Invalid Input!n"); while (MAXij > ALL_RESOURCEj); /*for*/printf("Input Resource

13、Process Allocated:n");for (i = 0 ; i < M ; i+)for (j = 0 ; j < N ; j+)doscanf("%d", &ALLOCATIONij);if (ALLOCATIONij > MAXij)/*大于最大需求?*/printf("nError: Invalid Input!n");while (ALLOCATIONij > MAXij); /*for*/for(j = 0 ; j < N ; j+)p = ALL_RESOURCEj;for(i = 0 ; i < M ; i+)p -= ALLOCATIONij;/*减去已经分配资源*/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论