欢迎来到天天文库
浏览记录
ID:59253687
大小:304.50 KB
页数:23页
时间:2020-09-08
《OS银行家算法实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《操作系统原理》实验报告银行家算法实验专业:计算机科学与技术学号:2姓名:杨瑜实验日期:2012-5-9一、实验目的通过实验用编程语言模拟银行家诉法来加强对银行家安全算法的理解和掌握。二、实验内容熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安全序列。三、算法中用到的数据结构1.可利用资源向量Available2.最大需求矩阵Max3.分配矩阵Allocation4.需求矩阵Need模拟实现银行家算法以避免死锁的出现.分两部分组成:第一部分:银行家算法(扫描)1.如果Request<=Need,则转向2;否则
2、,出错2.如果Request<=Available,则转向3,否则等待3.系统试探分配请求的资源给进程4.系统执行安全性算法第二部分:安全性算法1.设置两个向量(1).工作向量:Work=Available(表示系统可提供给进程继续运行所需要的各类资源数目)(2).Finish:表示系统是否有足够资源分配给进程(True:有;False:没有).初始化为False2.若Finish[i]=False&&Need<=Work,则执行3;否则执行4(I为资源类别)3.进程P获得第i类资源,则顺利执行直至完成!并释放资源:Work=Work+All
3、ocation;Finish[i]=true;转24. 若所有进程的Finish[i]=true,则表示系统安全;否则,不安全!四、算法流程图五、实现代码#include#defineP_NUM5#defineS_NUM3intMax[P_NUM][S_NUM],Allocation[P_NUM][S_NUM],Need[P_NUM][S_NUM];intAvailable[S_NUM],Request[S_NUM];intWork[S_NUM],Finish[P_NUM],CurrentProcessId=-1,Arran
4、ge[P_NUM],CurrentId=0;FILE*fpr,*fpw;inttimes=0;voidinit(){inti=0,j=0;for(i=0;i5、ilable[j]);}}voidallocation(){intj=0,reasonable=1;if(CurrentProcessId>-1&&CurrentProcessId6、rocessId][j]+Request[j];Available[j]=Available[j]-Request[j];printf("%d",Request[j]);if(Need[CurrentProcessId][j]<07、8、Available[j]<0)reasonable=0;}printf(")");if(reasonable==0){UnAllocation();printf("TheRequestisnotreasonable!Thebelowtableissamewiththetoptable!");}}}intU9、nAllocation(){intj=0;if(CurrentProcessId>-1&&CurrentProcessId10、feCheck(){intj=0,processNo=0,times=0;for(j=0;j
5、ilable[j]);}}voidallocation(){intj=0,reasonable=1;if(CurrentProcessId>-1&&CurrentProcessId6、rocessId][j]+Request[j];Available[j]=Available[j]-Request[j];printf("%d",Request[j]);if(Need[CurrentProcessId][j]<07、8、Available[j]<0)reasonable=0;}printf(")");if(reasonable==0){UnAllocation();printf("TheRequestisnotreasonable!Thebelowtableissamewiththetoptable!");}}}intU9、nAllocation(){intj=0;if(CurrentProcessId>-1&&CurrentProcessId10、feCheck(){intj=0,processNo=0,times=0;for(j=0;j
6、rocessId][j]+Request[j];Available[j]=Available[j]-Request[j];printf("%d",Request[j]);if(Need[CurrentProcessId][j]<0
7、
8、Available[j]<0)reasonable=0;}printf(")");if(reasonable==0){UnAllocation();printf("TheRequestisnotreasonable!Thebelowtableissamewiththetoptable!");}}}intU
9、nAllocation(){intj=0;if(CurrentProcessId>-1&&CurrentProcessId10、feCheck(){intj=0,processNo=0,times=0;for(j=0;j
10、feCheck(){intj=0,processNo=0,times=0;for(j=0;j
此文档下载收益归作者所有