银行家算法c语言代码运行界面,银行家算法C语言模拟程序[通俗易懂]

银行家算法c语言代码运行界面,银行家算法C语言模拟程序[通俗易懂]银行家算法C语言模拟程序这个最简单的模拟程序,为了完成操作系统作业而做的。大家放心,绝对可以运行,呵呵!有什么不完善的地方请提出!(在计数器的运用上比较乱,希望大家看的明白)作者:luo卢丹)源程序:#include#include#includeintAvailable[10];//可使用资源向量intMax[10][10];//最大需求矩阵i…

大家好,又见面了,我是你们的朋友全栈君。

银行家算法C语言模拟程序

这个最简单的模拟程序,为了完成操作系统作业而做的。大家放心,绝对可以运行,呵呵!

有什么不完善的地方请提出!(在计数器的运用上比较乱,希望大家看的明白)

作者:luo卢丹)

源程序:

#include#include#include

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]);

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];

}

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]);

}

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”);

}

void 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”);

}

以下是程序运行截图:

以此输入每个进程对各类资源的需求量;

df97bdc5ebd05de19ca412d6ce500066.png

所有进程输入完成后系统的当前状态

f3befd76e01d55220f9ae0eff5f8c316.png

进程P[2]再次提出申请,系统为安全状态;

fc34d0422d0085425e5a7342d6b95ce5.png

对进程P[2]分配后的系统状态;

9e793308abe4aa8821bc2e27de35e6e1.png

进程P[1]再次提出资源申请,分配后系统为不安全状态,则不提供资源分配;

d86809ce191f18302f3314e21451d8df.png

由于P[1]分配后系统状态不安全,则退回到前一状态;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163221.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据挖掘十大算法详解

    数据挖掘十大算法详解转自:https://wizardforcel.gitbooks.io/dm-algo-top10/content/index.html

    2022年5月29日
    30
  • 十三、外观模式—— 简化接口 #和设计模式一起旅行#

    我不想成为上帝或英雄,只想成为一棵树,为岁月而生长,不伤害任何人。 ——米沃什故事背景在英国体验了康桥的魅力,我挥一挥衣袖,不带走一片云彩,但是 英国的天空没有留下我的痕迹,但我曾去过。哈哈!从英国到法国,在浪漫的巴黎,我和设计模式MM感受到这个城市别样的风景,很是吸引人,我们决定在这里待一段时间在走。于是去政府部门办理一些手续,本来以为会花费很多时间的,因为之前办…

    2022年2月27日
    43
  • 大数据分析及工具应用总结「建议收藏」

    大数据分析及工具应用总结「建议收藏」概述数据分析即从数据、信息到知识的过程,数据分析需要数学理论、行业经验以及计算机工具三者结合数据分析工具:各种厂商开发了数据分析的工具、模块,将分析模型封装,使不了解技术的人也能够快捷的实现数学建模,快速响应分析需求传统分析:在数据量较少时,传统的数据分析已能够发现数据中包含的知识,包括结构分析、杜邦分析等模型,方法成熟,应用广泛。数据挖掘:就是充分利用了统计学和人工智能技术的应用程序,并把这些高深复杂的技术封装起来,使人们不用自己掌握这些技术也能完成同样的功能,并且…

    2022年5月3日
    56
  • 微信video 视频

    <videowidth=”320″height=”240″controls><sourcesrc=”movie.mp4″type=”video/mp4″></video>这是很正常的video写法,我们查看微信是什么样式  这样种video控件样式并不是我们想要的。所有我们需要自己来写视频封面的样式。…

    2022年4月4日
    56
  • Mysql 8.0解压版下载安装及配置教程

    Mysql 8.0解压版下载安装及配置教程首先声明,这里是Mysql8.0.27版本、64位操作系统解压版mysql的下载及安装配置及修改初始密码。如果是其他版本的mysql安装,可以自行查找其他方法,记住搜索的时候最好加上是什么版本的,因为不同版本的mysql安装的时候有些命令是不同的,例如,mysql5.7的就搜索mysql5.7安装。话不多说,接下来就是我的mysql8.0.27版本的教程了。1.下载打开下载地址:https://dev.mysql.com/downloads/mysql/,找到箭头中的文件https:/

    2022年5月8日
    49
  • Win10搭建ftp(含设置用户名和密码)测试成功!!!

    Win10搭建ftp(含设置用户名和密码)测试成功!!!Win10搭建ftp(含设置用户名和密码)测试成功1、打开ftp服务方法:win+R输入control打开控制面板点击程序与功能→启动或关闭Windows功能,选择一下选项,打开ftp服务2、打开ISS管理器方法:win+R输入inetmgr打开iss管理器1)、网站—>添加FTP站点…—>站点信息2)、输入IP和端口号,IP就是自己电脑的ip,端口号最好改一下,21…

    2022年7月15日
    18

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号