用银行家算法实现资源分配.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用银行家算法实现资源分配

南 通 大 学 杏林学院 操作系统实验(用银行家算法实现资源分配) 班级:计121 小组成员:方筱雯 1213023008 周徐莲 1213023014 指导老师:丁卫平 一:实验目的 为了了解系统的资源分配情况,假定系统的任何一种资源在任一时刻只能被一个进程使用。任何资源已经占用的资源只能由自己释放,而不能由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。 编写模拟系统进行资源调度的程序,采用银行家算法,有效的避免死锁的产生。模拟进程的分配算法,了解死锁的产生和避免的办法。 二:实验要求 (1):为了观察死锁产生和避免的情况,要求设计3到4个并发进程,共享系统的10个同类不可抢占的资源。各进程是动态进行资源的申请和释放。 (2):用银行家算法设计一个资源分配程序,运行这个程序,观察系统运行情况,并对系统运行的每一步进行显示。 三:实验流程图 四:源程序 #includeiostream.h #includestring.h #includeiomanip.h #includestdlib.h #define MaxNumber 100 //定义进程控制块 struct Process_struct{ int Available[MaxNumber]; //可利用资源数组 int Max[MaxNumber][MaxNumber]; //最大需求矩陈 int Allocation[MaxNumber][MaxNumber]; //分配矩陈 int Need[MaxNumber][MaxNumber]; //需求矩陈 int Request[MaxNumber][MaxNumber]; //M个进程还需要N类资源的资源量 int Finish[MaxNumber]; int p[MaxNumber]; }Process; int M,N; //M个进程,N类资源 int i,j,k,l=0; int Work[MaxNumber]; //可利用资源 int Pinput(); int Safe(); int Peques(); //进程输入 int Pinput() { int i,j; cout输入进程的数目:\n; cinM; cout输入资源的种类:\n; cinN; cout输入每个进程最多所需的各类资源数,按照MxN矩阵输入\n; for(i=0;iM;i++) for(j=0;jN;j++) cinProcess.Max[i][j]; cout输入每个进程已经分配的各类资源数,按照MxN矩阵输入\n; for(i=0;iM;i++) { for(j=0;jN;j++) { cinProcess.Allocation[i][j]; Process.Need[i][j] = Process.Max[i][j] - Process.Allocation[i][j]; if(Process.Need[i][j] 0) { cout你输入的第i+1个进程所拥有的第j+1个资源错误,请重新输入:\n; j--; continue; } } } cout请输入各个资源现有的数目:\n; for(i=0;iN;i++) cinProcess.Available[i]; return 1; } //安全性算法 int Safe() { for(i=0;iN;i++) Work[i]=Process.Available[i]; for(i=0;iM;i++) Process.Finish[i]=0; for(i=0;iM;i++) { if(Process.Finish[i]==1) continue; else { for(j=0;jN;j++) { if(Process.Need[i][j]Work[j]) break; } if(j==N) { Process.Finish[i]=1; for(int k=0;kN;k++) Work[k]+=Process.Allocation[i][k]; Process.p[l++]=i; i=-1; }

文档评论(0)

aicencen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档