开发工具:
文件大小: 883kb
下载次数: 0
上传时间: 2009-01-18
详细说明: 操作系统课的实验(银行家算法)#include "malloc.h" #include "stdio.h" #include "stdlib.h" #define alloclen sizeof(struct allocation) #define maxlen sizeof(struct max) #define avalen sizeof(struct available) #define needlen sizeof(struct need) #define finilen sizeof(struct finish) #define pathlen sizeof(struct path) struct allocation { int value; struct allocation *next; }; struct max { int value; struct max *next; }; struct available /*可用资源数*/ { int value; struct availabl e *next; }; struct need /*需求资源数*/ { int value; struct need *next; }; struct path { int value; struct path *next; }; struct finish { int stat; struct finish *next; }; int main() { int row,colum,status=0,i,j,t,temp,processtest; struct allocation *allochead,*alloc1,*alloc2,*alloctemp; struct max *maxhead,*maxium1,*maxium2,*maxtemp; struct available *avahead,*available1,*available2,*workhead,*work1,*work2,*worktemp,*worktemp1; struct need *needhead,*need1,*need2,*needtemp; struct finish *finihead,*finish1,*finish2,*finishtemp; struct path *pathhead,*path1,*path2; printf("\n请输入系统资源的种类数:"); scanf("%d",&colum); printf("请输入现时内存中的进程数:"); scanf("%d",&row); printf("请输入已分配资源矩阵:\n"); for(i=0;inext=alloc2->next=NULL; scanf("%d",&allochead->value); status++; } else { alloc2=(struct allocation *)malloc(alloclen); scanf("%d,%d",&alloc2->value); if(status==1) { allochead->next=alloc2; status++; } alloc1->next=alloc2; alloc1=alloc2; } } } alloc2->next=NULL; status=0; printf("请输入最大需求矩阵:\n"); for(i=0;inext=maxium2->next=NULL; scanf("%d",&maxium1->value); status++; } else { maxium2=(struct max *)malloc(maxlen); scanf("%d,%d",&maxium2->value); if(status==1) { maxhead->next=maxium2; status++; } maxium1->next=maxium2; maxium1=maxium2; } } } maxium2->next=NULL; status=0; printf("请输入现时系统剩余的资源矩阵:\n"); for (j=0;jnext=available2->next=NULL; work1->next=work2->next=NULL; scanf("%d",&available1->value); work1->value=available1->value; status++; } else { available2=(struct available*)malloc(avalen); work2=(struct available*)malloc(avalen); scanf("%d,%d",&available2->value); work2->value=available2->value; if(status==1) { avahead->next=available2; workhead->next=work2; status++; } available1->next=available2; available1=available2; work1->next=work2; work1=work2; } } available2->next=NULL; work2->next=NULL; status=0; alloctemp=allochead; maxtemp=maxhead; for(i=0;inext=need2->next=NULL; need1->value=maxtemp->value-alloctemp->value; status++; } else { need2=(struct need *)malloc(needlen); need2->value=(maxtemp->value)-(alloctemp->value); if(status==1) { needhead->next=need2; status++; } need1->next=need2; need1=need2; } maxtemp=maxtemp->next; alloctemp=alloctemp->next; } need2->next=NULL; status=0; for(i=0;inext=finish2->next=NULL; finish1->stat=0; status++; } else { finish2=(struct finish*)malloc(finilen); finish2->stat=0; if(status==1) { finihead->next=finish2; status++; } finish1->next=finish2; finish1=finish2; } } finish2->next=NULL; /*Initialization compleated*/ status=0; processtest=0; for(temp=0;tempstat==0) { for(j=0;jnext,worktemp=worktemp->next) if(needtemp->value<=worktemp->value) processtest++; if(processtest==colum) { for(j=0;jvalue+=alloctemp->value; worktemp1=worktemp1->next; alloctemp=alloctemp->next; } if(status==0) { pathhead=path1=path2=(struct path*)malloc(pathlen); path1->next=path2->next=NULL; path1->value=i; status++; } else { path2=(struct path*)malloc(pathlen); path2->value=i; if(status==1) { pathhead->next=path2; status++; } path1->next=path2; path1=path2; } finishtemp->stat=1; } else { for(t=0;tnext; finishtemp->stat=0; } } else for(t=0;tnext; alloctemp=alloctemp->next; } processtest=0; worktemp=workhead; finishtemp=finishtemp->next; } } path2->next=NULL; finishtemp=finihead; for(temp=0;tempstat==0) { printf("\n系统处于非安全状态!\n"); exit(0); } finishtemp=finishtemp->next; } printf("\n系统处于安全状态.\n"); printf("\n安全序列为: \n"); do { printf("p%d ",pathhead->value); } while(pathhead=pathhead->next); printf("\n"); return 0; } #include "string.h" #include #include #define M 5 #define N 3 #define FALSE 0 #define TRUE 1 /*M个进程对N类资源最大资源需求量*/ int MAX[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; /*系统可用资源数*/ int AVAILABLE[N]={10,5,7}; /*M个进程对N类资源最大资源需求量*/ int ALLOCATION[M][N]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; /*M个进程已经得到N类资源的资源量 */ int NEED[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; /*M个进程还需要N类资源的资源量*/ int Request[N]={0,0,0}; void main() { int i=0,j=0; char flag='Y'; void showdata(); void changdata(int); void rstordata(int); int chkerr(int); showdata(); while(flag=='Y'||flag=='y') { i=-1; while(i<0||i>=M) { printf("请输入需申请资源的进程号(从0到"); printf("%d",M-1); printf(",否则重输入!):"); scanf("%d",&i); if(i<0||i>=M)printf("输入的进程号不存在,重新输入!\n"); } printf("请输入进程"); printf("%d",i); printf("申请的资源数\n"); for (j=0;jNEED[i][j]) { printf("进程"); printf("%d",i); printf("申请的资源数大于进程"); printf("%d",i); printf("还需要"); printf("%d",j); printf("类资源的资源量!申请不合理,出错!请重新选择!\n"); /*printf("申请不合理,出错!请重新选择!\n");*/ flag='N'; break; } else { if(Request[j]>AVAILABLE[j]) { printf("进程"); printf("%d",i); printf("申请的资源数大于系统可用"); printf("%d",j); printf("类资源的资源量!申请不合理,出错!请重新选择!\n"); /*printf("申请不合理,出错!请重新选择!\n");*/ flag='N'; break; } } } if(flag=='Y'||flag=='y') { changdata(i); if(chkerr(i)) { rstordata(i); showdata(); } else showdata(); } else showdata(); printf("\n"); printf("是否继续银行家算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示: "); scanf("%c",&flag); } } void showdata() { int i,j; printf("系统可用的资源数为:\n"); printf(" "); for (j=0;j"); } printf("\n"); return 0; } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.