版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/7洛阳理工学院实验报告系别计算机系班级学号姓名课程名称计算机操作系统实验日期2012/11/21实验名称银行家算法成绩实验目的:了解进程产生死锁的原因,了解为什么要进行死锁的避免。掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。实验条件:微计一台、MicrosoftVisualStudio2008实验原理:n个并发进程共享m个系统资源的系统,进程可动态申请资源和释放资源。系统按各进程的申请动态的分配资源,先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检测算法进行安全性检测,如果系统分配资源,系统进入安全状态,则预分配就是正式分配,如果系统分配资源,系统进入不安全状态,则撤销预分配。实验内容:#include<stdio.h>#include<string.h>#include"common.h"voidInint(int*,int*);voidrequestPredistribution(int,int*,int);//请求预分配voidrollbackPredistribution(int,int*,int);boolsafe(int,int);boolIsValidate(int,int*,int,int);voiddisplayInfo(int,int);voidmain(){ intprocess,resource,total,processNum,resourceNum; charch; boolisSafe=false,valid=false; do{ Inint(&processNum,&resourceNum); printf("T0时刻安全性:"); if(safe(processNum,resourceNum)) { isSafe=true; printf("存在安全序列故系统是安全的!\n安全序列为:"); for(inti=0;i<processNum;++i) { printf("P%d",safeSequence[i]); } printf("\n"); } if(!isSafe) { printf("T0时刻系统是不安全的,后续请求也没意义!重新输入数据:\n"); } }while(!isSafe); printf("T0时刻的安全序列\n"); displayInfo(processNum,resourceNum); do { do { printf("输入用户的多元请求组(i,r0,r1……rn)i为进程r0-n为各类资源个数:\n"); scanf("%d",&process); for(inti=0;i<resourceNum;++i) { scanf("%d",&Request[i]); } valid=IsValidate(process,Request,processNum,resourceNum); if(!valid) { printf("请求进程不存在或请求资源大于最大需求\n"); } }while(!valid); requestPredistribution(process,Request,resourceNum); if(safe(processNum,resourceNum)) { printf("P%d进程资源申请成功!\n安全序列为:",process); for(inti=0;i<processNum;++i) { printf("P%d",safeSequence[i]); } printf("P%d申请资源时的安全性检查¨¦\n",processNum); displayInfo(processNum,resourceNum); } else { rollbackPredistribution(process,Request,resourceNum); printf("安全序列不存在系统不予分配!\n"); } printf("是否退出[Y/N]"); fflush(stdin); ch=getchar(); }while(ch!='Y'&&ch!='y'); getchar();}voidInint(int*processNum,int*resourceNum){ intnum,type; printf("输入进程数量和资源种类:"); scanf("%d%d",&num,&type); *processNum=num; *resourceNum=type; printf("输入各类资源可用量:"); for(intj=0;j<type;++j) { scanf("%d",&Available[j]); } for(inti=0;i<num;++i) { printf("输入进程P%d已分配及还需各类资源数量,i); for(intj=0;j<type;++j) { scanf("%d",&Allocation[i][j]); } for(intj=0;j<type;++j) { scanf("%d",&Need[i][j]); } }}boolIsValidate(intprocess,int*requestResource,intprocessNum,intresourceNum){ if(process>processNum) { returnfalse; } for(inti=0;i<resourceNum;++i) { if(requestResource[i]>Need[process][i]||requestResource[i]>Available[process]) returnfalse; } returntrue;}voidrequestPredistribution(intprocess,int*requestResorce,intresourceNum)//请求预分配{ for(inti=0;i<resourceNum;++i) { Available[i]=Available[i]-Request[i]; Allocation[process][i]=Allocation[process][i]+Request[i]; Need[process][i]=Need[process][i]-Request[i]; }}voidrollbackPredistribution(intprocess,int*requestResorce,intresourceNum){ for(inti=0;i<resourceNum;++i) { Available[i]=Available[i]+Request[i]; Allocation[process][i]=Allocation[process][i]-Request[i]; Need[process][i]=Need[process][i]+Request[i]; }}boolsafe(intprocessNum,intresourceNum){ intnum=0,count=0,item=0; memset(safeSequence,-1,sizeof(safeSequence)); for(inti=0;i<resourceNum;++i) { Work[i]=Available[i]; } for(inti=0;i<processNum;++i) { Finish[i]=false; } for(inti=0;i<processNum;++i) { for(intj=0;j<processNum;++j) { count=0; if(!Finish[j]) { for(intk=0;k<resourceNum;++k) { if(Need[j][k]<=Work[k]) { ++count; } } if(count==resourceNum) { for(intk=0;k<resourceNum;++k) { tempWork[j][k]=Work[k]; Work[k]=Work[k]+Allocation[j][k]; } Finish[j]=true; safeSequence[item++]=j; break; } } } } for(inti=0;i<processNum;++i) { if(!Finish[i]) { returnfalse; } } returntrue;}voiddisplayInfo(intprocessNum,intresourceNum){ printf("|资源情况\tWork\tNeed\tAllocation\tFinish\n进程|___________________________________________________________________\n"); for(inti=0;i<processNum;++i) { intprocess=safeSequence[i]; printf("P%d",process); printf("\t\t"); for(intj=0;j<resourceNum;++j) { printf("%d",tempWork[process][j]); } printf("\t"); for(intj=0;j<resourceNum;++j) { printf("%d",Need[process][j]); } printf("\t\t"); for(intj=0;j<resourceNum;++j) { printf("%d",Allocation[process][j]); } printf("\t"); printf(Finish[i]?"true":"false"); printf("\n"); }}//common.h#defineM10#defineN10#definex10#definey10intAvailable[M];//M为资源的类型intAllocation[N][M];intNeed[N][M];int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026春招:医疗器械笔试题及答案
- 2026年消防设施的远程监控与控制设计
- 贺新郎辛弃疾课件
- 2026春招:无人机组装测试真题及答案
- 贯标培训课件
- 货运公司安全培训简报课件
- 消化系统疾病诊断与治疗新方法
- 医疗大数据在公共卫生事件预警与应对中的应用
- 医院医疗设备购置规划总结
- 2026年渤海船舶职业学院高职单招职业适应性考试备考试题有答案解析
- 2026广东东莞市公安局招聘普通聘员162人笔试考试备考题库及答案解析
- 2025中国高净值人群品质养老报告-胡润百富-202512
- 2025四川绵阳市江油鸿飞投资(集团)有限公司招聘40人笔试考试备考题库及答案解析
- 北京市公安局辅警岗位招聘300人考试历年真题汇编带答案解析
- 2025中华护理学会团体标准-无创正压通气护理技术
- 2025年急性缺血性卒中及溶栓护理考试试题及答案
- 室内装修冬季施工供暖措施方案
- 2024年《广西壮族自治区建筑装饰装修工程消耗量定额》(上册)
- DBJT15-101-2022 建筑结构荷载规范
- 2025年部编版新教材语文七年级上册期末复习计划
- 矿产企业管理办法
评论
0/150
提交评论