操作系统课程设计——银行家算法的流程图、源代码、设计报告

源代码在线查看: 操作系统课程设计-银行家算法源代码(三,c++语言版).txt

软件大小: 70 K
上传用户: littlefish
关键词: 操作系统 报告 算法
下载地址: 免注册下载 普通下载 VIP

相关代码

				操作系统课程设计-银行家算法源代码(三,c++语言版)
				
				#include
				#include
				#include
				typedef struct Max1
				{
				     int m_a;
				     int m_b;
				     int m_c;
				}Max;
				typedef struct Allocation1
				{
				     int a_a;
				     int a_b;
				     int a_c;
				}Allocation;
				typedef struct Need1
				{
				     int n_a;
				     int n_b;
				     int n_c;
				}Need;
				struct Available1
				{
				     int av_a;
				     int av_b;
				     int av_c;
				} q;
				struct pr
				{
				     char name;
				     Max max;
				     Allocation allocation;
				     Need need;
				     int finishflag;
				}p[5];
				char na[5];
				//*****************************
				
				void init()//读入
				{
				     printf("各进程的NEED:\n");
				     FILE *fp;
				     fp=fopen("1.txt","r+");
				     for(int i=0;i				     {
				
				           fscanf(fp,"%c,%d,%d,%d,%d,%d,%d\n",&p.name,&p.max.m_a,&p.max.m_b,&p.max.m_c,&p.allocation.a_a,&p.allocation.a_b,&p.allocation.a_c  );
				           p.need.n_a=p.max.m_a-p.allocation.a_a;
				           p.need.n_b=p.max.m_b-p.allocation.a_b;
				           p.need.n_c=p.max.m_c-p.allocation.a_c;
				           
				           printf("%c:%d,%d,%d\n",p.name,p.need.n_a,p.need.n_b,p.need.n_c);
				
				           
				     }
				     fclose(fp);
				}
				
				//*****************************
				int fenpei()//分配
				{
				     printf("Available:\n");
				     printf("%d,%d,%d\n",q.av_a,q.av_b,q.av_c);
				     int finishcnt=0,k=0,count=0;
				     for(int j=0;j				           p[j].finishflag=0;
				
				     while(finishcnt				     {
				           for(int i=0;i				           {
				                 if(p.finishflag==0&&q.av_a>=p.need.n_a&&q.av_b>=p.need.n_b&&q.av_c>=p.need.n_c)
				                 {
				                       q.av_a+=p.allocation.a_a;
				                       q.av_b+=p.allocation.a_b;
				                       q.av_c+=p.allocation.a_c;
				                       p.finishflag=1;
				                       finishcnt++;
				                       na[k++]=p.name;
				                       
				                       break;
				                 }
				                 
				           }
				           count++;//禁止循环过多
				           if(count>5)return 0;
				     }
				return 1;
				
				}
				
				//*****************************
				
				int shq()
				{
				     int m,i,j,k;
				     printf("请输入进程号和请求资源!如:0   2 0 2\n");
				     scanf("%d%d%d%d",&m,&i,&j,&k);
				     if(i				     {
				           if(i				           {
				                 p[m].allocation.a_a+=i;
				                 p[m].allocation.a_b+=j;
				                 p[m].allocation.a_c+=k;
				                 
				                 p[m].need.n_a=p[m].max.m_a-p[m].allocation.a_a;
				                 p[m].need.n_b=p[m].max.m_b-p[m].allocation.a_b;
				                 p[m].need.n_c=p[m].max.m_c-p[m].allocation.a_c;
				     
				                 printf("各进程的NEED:\n");
				                 for(int w=0;w				                 printf("%c:%d,%d,%d\n",p[w].name,p[w].need.n_a,p[w].need.n_b,p[w].need.n_c);
				                 return 1;
				           }
				           else
				                 printf("Request>Available\n让%c等待......\n",p[m].name);
				     }
				     else printf("Request>Need\n让%c等待......\n",p[m].name);
				     return 0;
				
				}
				
				
				//*****************************
				//追查ZhuiCha.com网络技术 版权归原作者所有
				//ZhuiCha.com追查网提示:
				//本代码为网络转载
				//不保证完全编译通过
				//实际上 放置代码的目的主要参考里面的数据结构以及大体流程,代码还是自己写出来得好。
				//http://www.zhuicha.com
				//IP地址查询 手机号码归属 邮编区号 身份证验证查询 火车时刻表
				//成语词典 运程测算 周公解梦 在线学习手册 专业查询网 
				void main()
				{
				     int flag;
				     char c;
				     cout				     for(int i=0;i				           cout				     cout				     cout				     printf("\t           ");
				     for( i=0;i				           printf("*");
				     printf("\n\n\n\n\n");
				     getch();
				     printf("\t    请确认已经在\"1.txt\"中正确输入各进程的有关信息\n");
				     getch();
				     init();
				     q.av_a=10;
				     q.av_b=5;
				     q.av_c=7;
				     
				     while(flag)
				     {
				           for(i=0;i				           {
				                 q.av_a-= p.allocation.a_a;
				                 q.av_b-= p.allocation.a_b;
				                 q.av_c-= p.allocation.a_c;
				           }
				           if(fenpei())
				           {
				                 printf("\n这样配置资源是安全的!\001_\001\n");
				                 printf("其安全序列是:  ");
				                 for(int k=0;k				                       printf("-->%c",na[k]);
				                 printf("\n");
				                 printf("有进程发出Request请求向量吗???(Enter y or Y)\n");
				                 c=getch();
				                 if(c=='y'||c=='Y')
				                 {
				                       if(shq())continue;
				                       else break;
				                 }else flag=0;
				                 
				           }
				           else {flag=0;printf("不安全\n");}
				           
				
				     }
				}
				 
							

相关资源