操作系统实验报告(银行家算法c语言描述)

时间:2024.5.3

实验原理:

n个并发进程共享m个系统资源的系统,进程可动态申请资源和释放资源。系统按各进程的申请动态的分配资源,先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检测算法进行安全性检测,如果系统分配资源,系统进入安全状态,则预分配就是正式分配,如果系统分配资源,系统进入不安全状态,则撤销预分配。

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

int Available[10]; //可使用资源向量

int Max[10][10]; //最大需求矩阵

int Allocation[10][10]={0}; //分配矩阵

int Need[10][10]={0}; //需求矩阵

int Work[10]; //工作向量

int Finish[10]; //状态标志

int Request[10][10]; //进程申请资源向量

int Pause[10];

int List[10];

int i,j;

int n; //系统资源总数

int m; //总的进程数

int a; //当前申请的进程号

int l,e; //计数器

int b=0,c=0,f=0,g; //计数器

void mainenter()//主要的输入部分代码

{

printf("请输入系统总共有的资源数:");

scanf("%d",&n);

printf("请输入总共有多少个进程:");

scanf("%d",&m);

for(i=1;i<=n;i++)

{

printf("第%d类资源有的资源实例:",i);

scanf("%d",&Available[i]);

}

for(i=1;i<=m;i++)

{

for(j=1;j<=n;j++)

{

printf("进程P[%d]对第%d类资源的最大需求量:",i,j);

scanf("%d",&Max[i][j]);

1 / 4

Need[i][j]=Max[i][j];

}

}

}

void mainrequest() //进程提出新申请的代码部分

{

printf("请输入申请资源的进程:");

scanf("%d",&a);

for(i=1;i<=n;i++)

{

printf("请输入进程P[%d]对%d类资源的申请量:",a,i);

scanf("%d",&Request[a][i]);

if(Request[a][i]>Need[a][i])

printf("\n出错!进程申请的资源数多于它自己申报的最大量\n");

if(Request[a][i]>Available[i])

printf("\nP[%d]必须等待\n",a);

//以下是试探性分配

Available[i]=Available[i]-Request[a][i];

Allocation[a][i]=Allocation[a][i]+Request[a][i];

Need[a][i]=Need[a][i]-Request[a][i];

Work[i]=Available[i];

}

for(i=1;i<=m;i++)

{

Pause[i]=Available[i];//Pause[i]只是一个暂时寄存的中间变量,为防止在下面 //安全性检查时修改到Available[i]而代替的一维数组 Finish[i]=false;

}

for(g=1;g<=m;g++)

{

for(i=1;i<=m;i++)

{

b=0; //计数器初始化

for(j=1;j<=n;j++)

{

if(Need[i][j]<=Pause[j])

{

b=b+1;

}

if(Finish[i]==false&&b==n)

{

for(l=1;l<=n;l++)

{

Pause[l]=Pause[l]+Allocation[i][l];

2 / 4

}

Finish[i]=true;

printf("$$ %d ",i);//依次输出进程安全序列之一中每个元素 }

}

}

}

printf("\n");

for(i=1;i<=m;i++)

{

if(Finish[i]==true) f=f+1;//统计Finish[i]==true的个数

}

if (f==m)

{

printf("safe static");

f=0;//将计数器f重新初始化,为下一次提出新的进程申请做准备 }

else

{

printf(" unsafe static ");//以下代码为当系统被判定为不安全状态时 //返回提出申请前的状态

for(i=1;i<=n;i++)

{

Available[i]=Available[i]+Request[a][i];

Allocation[a][i]=Allocation[a][i]-Request[a][i];

Need[a][i]=Need[a][i]+Request[a][i];

}

}

}

void mainprint()

{

printf("当前的系统状态\n");

printf(" 目前占有量 最大需求量 尚需要量 \n进程"); for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

{

printf(" %d类",j);

}

for(i=1;i<=m;i++)

{

printf("\nP[%d]",i);

for(j=1;j<=n;j++)

{

printf(" %d ",Allocation[i][j]);

3 / 4

}

for(j=1;j<=n;j++)

{

printf(" %d ",Max[i][j]);

}

for(j=1;j<=n;j++)

{

printf(" %d ",Need[i][j]);

}

}

printf("\n\n系统剩余资源量: ");

for(i=1;i<=n;i++)

{

printf(" %d ",Available[i]);

}

printf("\n");

}

main()

{ int k,h=1;

while(h)

{ system("cls");

{

printf("\n\n ★ 欢迎使用本程序 ★\n");

printf("\n\n 1:输入系统的资源数、申请进程数、每个类资源的实例数"); printf("\n 2:…………………………………… 输入进程的资源申请"); printf("\n 3:…………………………………………… 输出系统状态"); printf("\n 4:………………………………………………… 退出程序"); printf("\n\n please choose ");

scanf("%d",&k);

}

switch(k)

{

case 1:mainenter(); break;

case 2:mainrequest(); break;

case 3:mainprint(); break;

case 4:h=0; break;

}

printf("\n");

system("pause");

}

system("cls");

printf("\n\n 谢谢使用 \n");

printf("\n\n See you next time!!!\n\n\n");

}

4 / 4


第二篇:操作系统实验报告(银行家算法c语言描述)


洛阳理工学院实验报告

更多相关推荐:
计算机操作系统银行家算法实验报告

计算机操作系统实验报告一实验名称银行家算法二实验目的银行家算法是避免死锁的一种重要方法通过编写一个简单的银行家算法程序加深了解有关资源申请避免死锁等概念并体会和了解死锁和避免死锁的具体实施方法三问题分析与设计1...

操作系统实验报告--C语言实现银行家算法

实验报告附录3程序源代码:#include<stdio.h>#include<stdlib.h>#include<conio.h>#definem50intno1;//进程数intno2;//资源数intr;i…

银行家算法+实验报告

淮海工学院计算机工程学院实验报告书课程名操作系统原理题目银行家算法班级学号511021012姓名操作系统原理实验报告1一实验目的银行家算法是操作系统中避免死锁的典型算法本实验可以加深对银行家算法的步骤和相关数据...

操作系统 银行家算法实验报告

计算机操作系统课程设计题目银行家算法分析学院计算机与软件学院专业网络工程班级20xx级1班学号20xx1346001姓名方锡指导教师岳键起止时间20xx52020xx63一实验报告设计背景11产生死锁的原因我们...

银行家算法实验报告--谢璐

操作系统试验姓名谢路班级软件0912学号题目银行家算法报告20xx年12月13日星期一实验银行家算法一实验目的银行家算法是一种最有代表性的避免死锁的算法在避免死锁方法中允许进程动态地申请资源但系统在进行资源分配...

操作系统银行家算法实验报告

银行家算法开发语言及实现平台或实验环境CMicrosoftVisualStudio60实验目的1进一步理解利用银行家算法避免死锁的问题2在了解和掌握银行家算法的基础上编制银行家算法通用程序将调试结果显示在计算机...

银行家算法实验报告

银行家算法银行家算法姓名学号报告日期操作系统实验三1银行家算法一实验目的通过实验加深对多实例资源分配系统中死锁避免方法银行家算法的理解掌握Windows环境下银行家算法的实现方法同时巩固利用WindowsAPI...

操作系统实验四银行家算法

操作系统实验实验四银行家算法学号1215108019姓名李克帆班级12电子2班华侨大学电子工程系实验目的1理解银行家算法2掌握进程安全性检查的方法与资源分配的方法实验内容与基本要求编制模拟银行家算法的程序并以下...

操作系统课程设计_银行家算法

操作系统银行家算法CopyRightNigHtMaRe20xx年12月30日操作系统银行家算法课程设计报告姓名赵又廷学号012646234班级05计科12班专业计算机科学与技术操作系统银行家算法CopyRigh...

民大-银行家算法-操作系统实验报告

银行家算法实验报告一实验题目为了了解系统的资源分配情况假定系统的任何一种资源在任一种资源在任意时刻只能被一个进程使用任何进程已经占用的资源只能由进程自己释放而不能任由其他进程抢占当进程申请的资源不能满足时必须等...

银行家算法(操作系统)

操作系统实验报告题目银行家算法姓名朱锦涛学号E31314037一实验目的用代码实现银行家算法了解通过银行家算法避免死锁的思想通过代码的具体实现加深对算法的核心的理解二实验原理我们可以把操作系统看作是银行家操作系...

操作系统课程设计——银行家算法的模拟实现

C语言实现银行家算法程序设计实验报告实验报告C语言实现银行家算法程序设计实验报告C语言实现银行家算法程序设计实验报告C语言实现银行家算法程序设计实验报告C语言实现银行家算法程序设计实验报告C语言实现银行家算法程...

操作系统银行家算法实验报告(30篇)