没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验报告(银行家算法c语言描述)【优质】.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 143 浏览量
2022-05-30
11:24:49
上传
评论
收藏 252KB DOC 举报
温馨提示
试读
52页
操作系统实验报告(银行家算法c语言描述)【优质】.doc
资源推荐
资源详情
资源评论
洛阳理工学院实验报告
系别 计算机系 班级 学号 姓名
课程名称 计算机操作系统 实验日期
2012/11/2
1
实验名称 银行家算法 成绩
实验目的:
1. 了解进程产生死锁的原因,了解为什么要进行死锁的避免。
2. 掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。
实验条件:
微计一台、Microsoft Visual Studio 2008
实验原理:
n 个并发进程共享 m 个系统资源的系统,进程可动态申请资源和释放资源。系统
按各进程的申请动态的分配资源,先对用户提出的请求进行合法性检查,再进行预分
配,利用安全性检测算法进行安全性检测,如果系统分配资源,系统进入安全状态,
则预分配就是正式分配,如果系统分配资源,系统进入不安全状态,则撤销预分配。
实验内容:
#include<stdio.h>
#include<string.h>
#include"common.h"
void Inint(int *,int *);
void requestPredistribution(int,int *,int);//请求预分配
void rollbackPredistribution(int,int *,int);
bool safe(int,int);
bool IsValidate(int,int*,int,int);
void displayInfo(int,int);
void main()
{
int process,resource,total,processNum, resourceNum;
char ch;
bool isSafe=false,valid=false;
do{
Inint(&processNum, &resourceNum);
printf("T0时刻安全性:");
if(safe(processNum, resourceNum))
1 / 52
{
isSafe=true;
printf("存在安全序列故系统是安全的!\n安全序列为:");
for(int i=0;i<processNum;++i)
{
printf("P%d ",safeSequence[i]);
}
printf("\n");
}
if(!isSafe)
{
printf("T0时刻系统是不安全的,后续请求也没意义!重新输入数据:\n");
}
}while(!isSafe);
printf("T0时刻的安全序列\n");
displayInfo(processNum,resourceNum);
do
{
do
{
printf("输入用户的多元请求组(i,r0,r1……rn)i为进程r0-n为各类资源个
数:\n");
scanf("%d",&process);
for(int i=0;i<resourceNum;++i)
{
scanf("%d",&Request[i]);
}
valid=IsValidate(process,Request,processNum, resourceNum);
if(!valid)
{
printf("请求进程不存在或请求资源大于最大需求\n");
}
}while(!valid);
requestPredistribution(process,Request, resourceNum);
if(safe(processNum, resourceNum))
{
printf("P%d进程资源申请成功!\n安全序列为:",process);
for(int i=0;i<processNum;++i)
{
printf("P%d ",safeSequence[i]);
}
printf("P%d申请资源时的安全性检查¨¦\n",processNum);
displayInfo(processNum,resourceNum);
2 / 52
}
else
{
rollbackPredistribution(process,Request, resourceNum);
printf("安全序列不存在系统不予分配!\n");
}
printf("是否退出[Y/N]");
fflush(stdin);
ch=getchar();
}while(ch!='Y'&&ch!='y');
getchar();
}
void Inint(int *processNum,int *resourceNum)
{
int num,type;
printf("输入进程数量和资源种类:");
scanf("%d%d",&num,&type);
*processNum=num;
*resourceNum=type;
printf("输入各类资源可用量:");
for(int j=0;j<type;++j)
{
scanf("%d",&Available[j]);
}
for(int i=0;i<num;++i)
{
printf("输入进程P%d已分配及还需各类资源数量,i);
for(int j=0;j<type;++j)
{
scanf("%d",&Allocation[i][j]);
}
for(int j=0;j<type;++j)
{
scanf("%d",&Need[i][j]);
}
}
}
bool IsValidate(int process,int *requestResource,int processNum,int resourceNum)
{
if(process>processNum)
{
3 / 52
return false;
}
for(int i=0;i<resourceNum;++i)
{
if(requestResource[i]>Need[process][i]
||requestResource[i]>Available[process])
return false;
}
return true;
}
void requestPredistribution(int process,int *requestResorce,int resourceNum)
//请求预分配
{
for(int i=0;i<resourceNum;++i)
{
Available[i]= Available[i]-Request[i];
Allocation[process][i]= Allocation[process][i]+Request[i];
Need[process][i]=Need[process][i]-Request[i];
}
}
void rollbackPredistribution(int process,int *requestResorce,int resourceNum)
{
for(int i=0;i<resourceNum;++i)
{
Available[i]= Available[i]+Request[i];
Allocation[process][i]= Allocation[process][i]-Request[i];
Need[process][i]=Need[process][i]+Request[i];
}
}
bool safe(int processNum,int resourceNum)
{
int num=0,count=0,item=0;
memset(safeSequence,-1,sizeof(safeSequence));
for(int i=0;i<resourceNum;++i)
{
Work[i]=Available[i];
}
for(int i=0;i<processNum;++i)
{
Finish[i]=false;
}
4 / 52
for(int i=0;i<processNum;++i)
{
for(int j=0;j<processNum;++j)
{
count=0;
if(!Finish[j])
{
for(int k=0;k<resourceNum;++k)
{
if(Need[j][k]<=Work[k])
{
++count;
}
}
if(count==resourceNum)
{
for(int k=0;k<resourceNum;++k)
{
tempWork[j][k]=Work[k];
Work[k]=Work[k]+Allocation[j][k];
}
Finish[j]=true;
safeSequence[item++]=j;
break;
}
}
}
}
for(int i=0;i<processNum;++i)
{
if(!Finish[i])
{
return false;
}
}
return true;
}
void displayInfo(int processNum, int resourceNum)
{
printf(" |资源情况\tWork\tNeed\tAllocation\tFinish\n进程|______________________
_______
______________________________________\n");
5 / 52
剩余51页未读,继续阅读
资源评论
老帽爬新坡
- 粉丝: 82
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功