专业课程设计模板_第1页
专业课程设计模板_第2页
专业课程设计模板_第3页
专业课程设计模板_第4页
专业课程设计模板_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

课程设计(大作业)汇报课程名称:操作系统设计题目:银行家算法模拟院系:信息技术学院班级:级计科1班设计者:李智锟学号:11010112指导老师:段玻设计时间:-12(23——27号)昆明学院昆明学院课程设计(大作业)任务书姓名:李智锟 院(系):信息技术学院专业:计算机科学和技术 学号:11010112任务起止日期:.12.23——.12.27课程设计题目:银行家算法课程设计要求及任务描述:1。查资料了解题目,弄明白要做些什么。2.。绘制系统步骤图,交予老师检验。3.。查资料准备写程序。4.。编写程序并调试运行。5。.修改程序中出现错误和警告。6.。进行答辩。7。归纳总结,整理资料。8.。写试验大汇报。9.提交汇报。工作计划及安排:.12.23:熟悉题目,看任务要求。.12.24:画步骤图,并对步骤图不足地方进行修改。.12.25到26号:写程序并运行程序。.12.27:递交大作业汇报。指导老师签字年月日

课程设计(大作业)成绩学号:11010112 姓名:李智锟 指导老师:段玻课程设计题目:李智锟完成情况总结:在这次试验里边我碰到了很多问题,分别有1.对数据结构中各个矩阵分不太清楚。处理措施:经过看老师给PPT处理。2.程序问题:在baidu和同学帮助下处理。3.程序运行碰到问题:在同学和老师帮助下完成.指导老师评语:成绩:填表时间:.12.27 指导老师署名:课程设计(大作业)汇报题目分析1、始化这组进程最大资源请求和一次申请资源序列。把各进程已占用和需求资源情况统计在进程控制块中。假定进程控制块内容包含:进程名,状态,目前申请量,资源需求总量,已占资源量,能实施完标志。其中,进程状态有:就绪,等候和完成。当系统不能满足进程资源请求时,进程出于等候状态。资源需求总量表示进程运行过程中对资源总需求量。已占资源量表示进程现在已经得到但还为归还资源量。所以,进程在以后还需要剩下资源量等于资源需要总量减去已占资源量。陷入每个进程资源需求总量不应超出系统拥有资源总量。2、银行家算法分配资源标准是:当某个进程提出资源请求时,假定先分配资源给它,然后查找各进程剩下请求,检验系统剩下资源量是否因为进程分配而造成系统死锁。若能,则让进程等候,不然,让进程假分配变为真分配。A)查找各进程剩下请求,检验系统剩下资源量是否能满足其中一进程,假如能,则转B)。B)将资源分配给所选进程,这么,该进程已取得资源最大请求,最终能运行完成。标识这个进程为终止进程,并将其占有全部资源归还给系统。反复第A)步和B)步,直到全部进程全部标识为终止进程,或知道一个死锁发生。若全部进程全部标识为终止进程,则系统初始状态是安全,不然为不安全。若安全,则正式将资源分配给它,不然,假定分配作废,让其等候。程序设计数据结构设计假设有m个进程,则有以下数据结构:#definew50//宏定义#definer50//宏定义intm;//总进程数intall[w];//多种资源数目总和intmax[w][r];//m个进程最大资源需求量intavailable[r];//系统可用资源数intallocation[w][r];//m个进程已经得到资源资源量intneed[w][r];//m个进程还需要资源资源量intrequest[r];//请求资源个数函数设计设Request[n],是进程请求向量,假如Request[n]=m,则表示该进程需要m个资源。当该进程发出资源请求后,系统按下述步骤进行检验:

(1)假如Request[n]《=Need[i,n],便转向步骤(2);不然认为犯错,因为它所需要资源数已经超出它所宣告最大值。

(2)假如Request[n]>Available,则进程i进入等候资源状态,返回。

(3)假设进程i申请已获同意,于是修改下面数据结构中数值:

Available=Available-RequestAllocation=Allocation+RequestNeed=Need-Request(4)系统实施安全性检验,如安全,则分配成立;不然恢复原来资源分配状态,系统恢复原状,进程等候。程序voidbank()//银行家算法{inti=0,j=0;charflag='Y';while(flag=='Y'||flag=='y') {i=-1;while(i<0||i>=m) {cout<<"请输入需申请资源进程号(从0到"<<m-1<<"):";cin>>i;if(i<0||i>=m)cout<<"该进程号不存在,请重新输入!"<<endl; }cout<<"请输入进程"<<i<<"申请资源数:";for(j=0;j<1;j++) {cout<<"";cin>>request[j];if(request[j]>need[i][j])//若请求资源数大于进程还需要i类资源资源量j {cout<<"进程"<<i<<"申请资源数大于进程"<<i<<"还需要资源资源量!";cout<<"申请不合理,请重新选择!"<<endl<<endl;flag='1';break; }else {if(request[j]>available[j])//若请求资源数大于可用资源数 {cout<<"进程"<<i<<"申请资源数大于系统可用资源资源量!";cout<<"申请不合理!请重新选择!"<<endl<<endl;flag='1';break; } } }if(flag=='Y'||flag=='y') {change(i);//调用change(i)函数,改变资源数if(chkerr(i))//若系统安全 {rstore(i);//调用rstore(i)函数,恢复资源数show();//输出资源分配情况 }else//若系统不安全show();//输出资源分配情况 }else//若flag=N||flag=nshow();cout<<endl;cout<<"是否继续(Y/N):";cin>>flag; }}步骤图4.代码#include<stdio.h>//本试验中使用到库函数#include<stdlib.h>#include<string.h>intmax[5][3];//开始定义银行家算法中需要用到数据intallocation[5][3];intneed[5][3];intavailable[3];intrequest[5][3];char*finish[5];intsafe[5];intn,i,m;intk=0;intj=0;intwork[3];intworks[5][3];voidline()//美化程序,使程序运行时愈加明朗美观{ printf("------------------------------------------------------------------\n");}voidstart()//表示银行家算法开始{ line(); printf("银行家算法开始\n"); printf("——Designedbylizhikun\n"); line();}voidend()//表示银行家算法结束{ line(); printf("银行家算法结束,谢谢使用\n"); line();}voidinput()//输入银行家算法起始各项数据{ for(n=0;n<5;n++) { printf("请输入进程P%d相关信息:\n",n); printf("Max:"); for(m=0;m<3;m++) scanf("%d",&max[n][m]); printf("Allocation:"); for(m=0;m<3;m++) scanf("%d",&allocation[n][m]); for(m=0;m<3;m++) need[n][m]=max[n][m]-allocation[n][m]; } printf("请输入系统可利用资源数Available:"); for(m=0;m<3;m++) scanf("%d",&available[m]);}voidoutput()//输出系统现有资源情况{ line(); printf("资源情况MaxAllocationNeedAvailable\n"); printf("进程ABCABCABCABC\n"); line(); for(n=0;n<5;n++) { printf("P%d%9d%3d%3d%5d%3d%3d%6d%3d%3d",n,max[n][0],max[n][1],max[n][2],allocation[n][0],allocation[n][1],allocation[n][2],need[n][0],need[n][1],need[n][2]); if(n==0) printf("%6d%3d%3d\n",available[0],available[1],available[2]); else printf("\n"); } line();}voidchange()//当Request[i,j]<=Available[j]时,系统把资源分配给进程P[i],Available[j]和Need[i,j]发生改变{ for(m=0;m<3;m++) { available[m]-=request[i][m]; allocation[i][m]+=request[i][m]; need[i][m]-=request[i][m]; }}voidoutputsafe()//输出安全序列资源分配表{ printf("该安全序列资源分配图以下:\n"); line(); printf("资源情况WorkNeedAllocationWork+AllocationFinish\n"); printf("进程ABCABCABCABC\n"); line(); for(n=0;n<5;n++) printf("P%d%9d%3d%3d%5d%3d%3d%5d%3d%3d%6d%3d%3d%12s\n",safe[n],works[safe[n]][0],works[safe[n]][1],works[safe[n]][2],need[safe[n]][0],need[safe[n]][1],need[safe[n]][2],allocation[safe[n]][0],allocation[safe[n]][1],allocation[safe[n]][2],works[safe[n]][0]+allocation[safe[n]][0],works[safe[n]][1]+allocation[safe[n]][1],works[safe[n]][2]+allocation[safe[n]][2],finish[n]); line();}intcheck()//安全性算法{ printf("开始实施安全性算法……\n"); for(m=0;m<3;m++)//数组work和finish初始化 work[m]=available[m]; for(n=0;n<5;n++) { finish[n]="false"; safe[n]=0; } k=0; for(m=0;m<5;m++) for(n=0;n<5;n++) if(strcmp(finish[n],"false")==0&&need[n][0]<=work[0]&&need[n][1]<=work[1]&&need[n][2]<=work[2])//查找能够分配资源但还未分配到资源进程 { safe[k]=n;//以数组safe[k]记下各个进程得到分配资源次序 works[safe[k]][0]=work[0]; works[safe[k]][1]=work[1]; works[safe[k]][2]=work[2]; work[0]+=allocation[n][0];//进程实施后释放出分配给它资源 work[1]+=allocation[n][1]; work[2]+=allocation[n][2]; finish[n]="ture";//finish[n]变为1以示该进程完成此次分 k++; } for(m=0;m<5;m++)//判定是否全部进程分配资源完成 { if(strcmp(finish[m],"false")==0) { printf("找不到安全序列,系统处于不安全状态。\n"); return0;//找不到安全序列,结束check函数,返回0 } else if(m==4)//此处m=4表示全部数组finish全部元素全部为ture { printf("找到安全序列P%d->P%d->P%d->P%d->P%d,系统是安全\n",safe[0],safe[1],safe[2],safe[3],safe[4]); j=1; outputsafe();//输出安全序列资源分配表 } } return1;}voidmain()//主程序开始{ start(); for(;j==0;)//确定输入数据正确性,若输入错误,重新输入 { input(); printf("以下为进程资源情况,请确定其是否正确:\n"); output(); printf("数据是否无误:\n正确:输入1\n错误:输入0\n请输入:"); scanf("%d",&j); } printf("数据确定无误,算法继续。\n"); if(check()==0)//若check函数返回值为0,表示输入初始数据找不到安全序列,无法进行下一步,程序结束 { end(); exit(0); } for(;j==1;)//当有多个进程请求资源时,循环开始 { printf("请输入请求资源进程i(0、1、2、3、4):");//输入发出请求向量进程及请求向量 scanf("%d",&i); printf("请输入进程P%d请求向量Request%d:",i,i); for(n=0;n<3;n++) scanf("%d",&request[i][n]); for(;request[i][0]>need[i][0]||request[i][1]>need[i][1]||request[i][2]>need[i][2];)//若请求向量大于需求资源,则认为是输入错误,要求重新输入 { printf("数据输入有误,请重试!\n请输入进程P%d请求向量Request%d:",i,i); for(n=0;n<3;n++) scanf("%d",&request[i][n]); } if(request[i][0]<=avail

温馨提示

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

评论

0/150

提交评论