当前位置:文档之家› 银行家算法实验报告(C语言版)

银行家算法实验报告(C语言版)

continue;
}
}
for(i=0;i<n;i++){
available[i]=available[i]-request[number][i];
allocation[number][i]=allocation[number][i]+request[number][i];
need[number][i]=need[number][i]-request[number][i];
(1)设置两个向量:工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work= Available。工作向量Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finish[i]=false;当有足够的资源分配给进程时,再令Finish[i]=true。
}
printf("请输入分配矩阵:\n");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
scanf("%d",&allocation[i][j]);
}
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
need[i][j]=max[i][j]-allocation[i][j];
(4)如果所有的Finish[i]=true都满足,则表示系统处于安全状态,否则,处于不安全状态。
四、实验结果及分析
1.实验设计说明
按0由用户输入,按1由系统提供数据
2.实验代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define max_process 50 //最大进程数
int finish[max_process];
int m=5,n=3;
void init();
int safe();
void bank();
void init2();
void print();
void print2();
void main()
{
int i;
printf("请输入测试数据,按0由用户输入测试数据,按1由系统提供测试数据:\n");
printf(" Ture\n");
for(p=0;p<n;p++)
work[p]=work[p]+allocation[l[i]][p];
if(i==4) return true;
}
}
else {printf("系统不安全\n"); return false;}
}
void bank(){
int i,number;
(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:
Available[i,j]= Available[i,j]- Request [j];
Allocation[i][j]= Allocation[i][j]+ Request [j];
need[i][j]= need[i][j]- Request [j];
《操作系统》课程综合性实验报告
姓名:学号:2016年11月20日
实验题目
进程调度算法程序设计
一、实验目的
通过对安全性算法和银行家算法的模拟,进一步理解资源分配的基本概念,加深对资源申请,资源分配(银行家算法)以及系统是否能分配(安全性算法)资源的理解。
二、设备与环境
1.硬件设备:PC机一台
2.软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java等编程语言环境。
(4)试分配后,执行安全性检查,调用check()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程。否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
(5)用do{…}while循环语句实现输入字符y/n判断是否继续进行资源申请。
(二)安全性算法(safe()函数):
for(i=0;i<m;i++)
{ printf("p%d\t",i);
for(j=0;j<n;j++)
{
printf("%d\t",allocation[i][j]);
}
printf("\n");
}
printf("需求矩阵如下:\n");
for(i=0;i<m;i++)
{ printf("p%d\t",i);
for (i=0;i<n;i++) work[i]=available[i];
for(i=0;i<m;i++)
{
printf(" p%d |",l[i]);
for(p=0;p<n;p++)
printf("%3d ",work[p]);
printf("|");
for(p=0;p<n;p++)
{
printf("%3d ",need[l[i]][p]);
for(j=0;j<n;j++)
{
printf("%d\t",need[i][j]);
}
printf("\n");
}
printf("系统可提供资源如下:\n");
for(j=0;j<n;j++)
printf("%d\t",available[j]);
printf("\n");
}
int safe()
{
char answer;
while(1){
printf("\n请输入需申请资源的进程号(第一个进程号为0):\n");
scanf("%d",&number);
printf("请依次输入该进程所需申请的所有资源数目:\n");
for(i=0;i<n;i++)
scanf("%d",&request[number][i]);
scanf("%d",&n);
printf("请按顺序输入系统中可利用的每种资源量:\n");
for(i=0;i<n;i++)
scanf("%d",&available[i]);
printf("请输入最大需求矩阵:\n");
for (i=0;i<m;i++)
for (j=0;j<n;j++)
{
scanf("%d",&max[i][j]);
int i,j,k=0,l[m],p;
int work[n];
for (i=0;i<n;i++)
work[i]=available[i];
for (i=0;i<m;i++)
finish[i]=false;
for(i=0;i<m;i++)
{
if(finish[i]==true) continue;
else{
}
}
if(k==m)
{
printf("\n");
printf("**************************此时刻资源分配情况**************************\n");
printf("进程| Work | Need | Allo | W+Allo | Finish\n");
}
printf("|");
for(p=0;p<n;p++)
{
printf("%3d ",allocation[l[i]][p]);
}
printf("|");
for(p=0;p<n;p++)
{
printf("%3d ",allocation[l[i]][p]+work[p]);
}
printf("|");
for(i=0;i<n;i++) {
if(request[number][i]>need[number][i])
{
printf("申请的资源超过还需要的资源,请重新输入\n");
continue;
}
if(request[number][i]>available[i])
{
printf("申请的资源超过所能提供的资源,请重新输入\n");
scanf("%d",&i);
switch(i){
case 0: init();
break;
case 1: init2();
break;
}
print();
相关主题