- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验二 死锁的避免
实验二 死锁的避免
班级: 学号: 姓名:
1. 实验内容
模拟进程的资源分配算法
2.实验目的
为了了解系统的资源分配情况,假定系统的任何一种资源在任一时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。
编写模拟系统进行资源调度的程序,采用银行家算法,有效地避免死锁的产生。
模拟进程的资源分配算法,了解死锁的产生和避免的方法。
3.实验设计
3.1 数据结构设计
使用银行家算法过程中,当某个进程提出资源请求时,假定系统先分配给它,之后用系统安全性检查算法对系统进行安全性检查。若系统安全,则假定分配变成真的分配,若系统不安全,假定分配作废,让进程等待。
void judge()//利用银行家算法对申请资源对进行判定
{ char ch;
int i=0,j=0;
ch=y;
cout请输入需要资源的进程号(0-N-1):;
cini;//输入须申请的进程号
cout请输入进程 i 申请的资源:endl;
for(j=0;jM;j++)
{ coutname[j]:;
cinRequest[j];//需要申请的资源
}
for (j=0;jM;j++){
if(Request[j]Need[i][j]||Request[j]Avaliable[j])//判断申请是否大于需求和可分配的资源数目
{ cout进程 i申请的资源不符合要求;
cout 无法分配!endl;
ch=n;
break;
}
}
if(ch==y)
{ resource_allocation(i);//根据进程需求量变换资源
show();//根据进程需求量显示变换后的资源
safe();//根据进程需求量进行银行家算法判断
}
}
在进行系统安全性检查时,第一步,把各进程的剩余资源量与系统的剩余资源量进行比较,检查系统剩余资源量是否可供分配,若是,进行第二步,若不是,进行第三步。第二步,将资源分配给当前进程,此时,该进程已获得所需的所有资源量,标记该进程为TRUE,并将它占有资源归还系统,继续进行第一步的操作。第三步,检查是否所有资源都标记为TRUE,若是,则系统安全,否则,系统不安全。
int safe()//安全性算法
{ int i,j,k=0,m,apply,Finish[100];
int flag=0;
still[0]=Avaliable[0];
still[1]=Avaliable[1];
still[2]=Avaliable[2];
for(i=0;iN;i++){
apply=0;
for(j=0;jM;j++){
if(Finish[i]==FalseNeed[i][j]=still[j]){
apply++;
if(apply==M){
for(m=0;mM;m++)
still[m]=still[m]+Allocation[i][m];//变分配数
Finish[i]=True;
safequeue[k]=i;
i=-1;
k++;
flag++;
}
}
}
}
for(i=0;iN;i++){
if(Finish[i]==False){
cout安全序列不存在!endl;//不成功,系统不安全
return -1;
}
}
cout系统安全endl;//如果安全,输出成功
cout分配的序列:;
for(i=0;iN;i++){//输出运行进程数组
coutsafequeue[i];
if(iN-1)
cout-;
}
coutendl;
return 0;
}
3.2 求解方法
在安全状态下系统收到进程资源请求后,先把资源试探性地分配给它。现在,系统将剩余资源和其他进程还需要的资源数进行比较,找出剩余资源量能满足最大需求量的进程,从而保证进程运行完毕并把资源归还系统。这时,将该进程标记为TRUE,在安全序列中添加该进程,归还其占有的所有资源,反复执行以上步骤。最后,检查进程的标记,若都为TRUE,则系统安全,输出安全序列,若有进程标记为FALSE,则系统不安全。
程序结构如下:
4.实验结果
1.系统资源设置界面
2.进程数目、最大需求量、已分配资源数的设置界面
3.主菜单界面
4.输入1,进行资源的分
文档评论(0)