欢迎来到天天文库
浏览记录
ID:15386301
大小:70.50 KB
页数:8页
时间:2018-08-03
《用银行家算法实现资源分配》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、xx大学操作系统实验(用银行家算法实现资源分配)一:实验目的为了了解系统的资源分配情况,假定系统的任何一种资源在任一时刻只能被一个进程使用。任何资源已经占用的资源只能由自己释放,而不能由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。编写模拟系统进行资源调度的程序,采用银行家算法,有效的避免死锁的产生。模拟进程的分配算法,了解死锁的产生和避免的办法。二:实验要求(1):为了观察死锁产生和避免的情况,要求设计3到4个并发进程,共享系统的10个同类
2、不可抢占的资源。各进程是动态进行资源的申请和释放。(2):用银行家算法设计一个资源分配程序,运行这个程序,观察系统运行情况,并对系统运行的每一步进行显示。三:实验流程图开始N进程申请资源输入进程数目输入资源种类输入每个进程最多所需的资源数已经分配输入的进程所拥有的资源正确,吗?NY各资源现有数目系统安全吗?系统安全,假分配变为真分配判断资源数量是否正确同意分配Y是否再次分配Y四:源程序#include#include#include#include3、h>#defineMaxNumber100//定义进程控制块structProcess_struct{intAvailable[MaxNumber];//可利用资源数组intMax[MaxNumber][MaxNumber];//最大需求矩陈intAllocation[MaxNumber][MaxNumber];//分配矩陈intNeed[MaxNumber][MaxNumber];//需求矩陈intRequest[MaxNumber][MaxNumber];//M个进程还需要N类资源的资源量intFinish[MaxNumbe4、r];intp[MaxNumber];}Process;intM,N;//M个进程,N类资源inti,j,k,l=0;intWork[MaxNumber];//可利用资源intPinput();intSafe();intPeques();//进程输入intPinput(){inti,j;cout<<"输入进程的数目:";cin>>M;cout<<"输入资源的种类:";cin>>N;cout<<"输入每个进程最多所需的各类资源数,按照"<5、0;j>Process.Max[i][j];cout<<"输入每个进程已经分配的各类资源数,按照"<>Process.Allocation[i][j];Process.Need[i][j]=Process.Max[i][j]-Process.Allocation[i][j];if(Process.Need[i][j]<0){cout<<"你输入的第"<6、1<<"个资源错误,请重新输入:";j--;continue;}}}cout<<"请输入各个资源现有的数目:";for(i=0;i>Process.Available[i];return1;}//安全性算法intSafe(){for(i=0;i7、(j=0;jWork[j])break;}if(j==N){Process.Finish[i]=1;for(intk=0;k8、ut<<"-->";}cout<<'';return1;return0;}}}//进程请求intPeques(){while(1){cout<<"输入要申请的资源的进程号:(第一个进程号为0,第二个进程号为1,以此类推)";cin>>k;cout<<"输
3、h>#defineMaxNumber100//定义进程控制块structProcess_struct{intAvailable[MaxNumber];//可利用资源数组intMax[MaxNumber][MaxNumber];//最大需求矩陈intAllocation[MaxNumber][MaxNumber];//分配矩陈intNeed[MaxNumber][MaxNumber];//需求矩陈intRequest[MaxNumber][MaxNumber];//M个进程还需要N类资源的资源量intFinish[MaxNumbe
4、r];intp[MaxNumber];}Process;intM,N;//M个进程,N类资源inti,j,k,l=0;intWork[MaxNumber];//可利用资源intPinput();intSafe();intPeques();//进程输入intPinput(){inti,j;cout<<"输入进程的数目:";cin>>M;cout<<"输入资源的种类:";cin>>N;cout<<"输入每个进程最多所需的各类资源数,按照"<5、0;j>Process.Max[i][j];cout<<"输入每个进程已经分配的各类资源数,按照"<>Process.Allocation[i][j];Process.Need[i][j]=Process.Max[i][j]-Process.Allocation[i][j];if(Process.Need[i][j]<0){cout<<"你输入的第"<6、1<<"个资源错误,请重新输入:";j--;continue;}}}cout<<"请输入各个资源现有的数目:";for(i=0;i>Process.Available[i];return1;}//安全性算法intSafe(){for(i=0;i7、(j=0;jWork[j])break;}if(j==N){Process.Finish[i]=1;for(intk=0;k8、ut<<"-->";}cout<<'';return1;return0;}}}//进程请求intPeques(){while(1){cout<<"输入要申请的资源的进程号:(第一个进程号为0,第二个进程号为1,以此类推)";cin>>k;cout<<"输
5、0;j>Process.Max[i][j];cout<<"输入每个进程已经分配的各类资源数,按照"<>Process.Allocation[i][j];Process.Need[i][j]=Process.Max[i][j]-Process.Allocation[i][j];if(Process.Need[i][j]<0){cout<<"你输入的第"<6、1<<"个资源错误,请重新输入:";j--;continue;}}}cout<<"请输入各个资源现有的数目:";for(i=0;i>Process.Available[i];return1;}//安全性算法intSafe(){for(i=0;i7、(j=0;jWork[j])break;}if(j==N){Process.Finish[i]=1;for(intk=0;k8、ut<<"-->";}cout<<'';return1;return0;}}}//进程请求intPeques(){while(1){cout<<"输入要申请的资源的进程号:(第一个进程号为0,第二个进程号为1,以此类推)";cin>>k;cout<<"输
6、1<<"个资源错误,请重新输入:";j--;continue;}}}cout<<"请输入各个资源现有的数目:";for(i=0;i>Process.Available[i];return1;}//安全性算法intSafe(){for(i=0;i7、(j=0;jWork[j])break;}if(j==N){Process.Finish[i]=1;for(intk=0;k8、ut<<"-->";}cout<<'';return1;return0;}}}//进程请求intPeques(){while(1){cout<<"输入要申请的资源的进程号:(第一个进程号为0,第二个进程号为1,以此类推)";cin>>k;cout<<"输
7、(j=0;jWork[j])break;}if(j==N){Process.Finish[i]=1;for(intk=0;k8、ut<<"-->";}cout<<'';return1;return0;}}}//进程请求intPeques(){while(1){cout<<"输入要申请的资源的进程号:(第一个进程号为0,第二个进程号为1,以此类推)";cin>>k;cout<<"输
8、ut<<"-->";}cout<<'';return1;return0;}}}//进程请求intPeques(){while(1){cout<<"输入要申请的资源的进程号:(第一个进程号为0,第二个进程号为1,以此类推)";cin>>k;cout<<"输
此文档下载收益归作者所有