代码如下:(环境VS2019)

#include<stdio.h>
#define Pcount 5
#define Scount 3
//可用资源,最大资源,已分配资源,仍需资源设置为全局变量
int Available[Scount];
int Max[Pcount][Scount];
int Allocation[Pcount][Scount];
int Need[Pcount][Scount];void InitData();
void CountMax();
void PrintMssge();
int CheckSafe();
void ApplyResulate(int P, int Request[Scount]);
int Apply(int P, int Request[Scount]);
void Add(int* a, int b[Scount]);
void Minus(int* a, int b[Scount]);
int Equals(int a[Scount], int b[Scount]);
int CheckFinish(int Finish[]);int main()
{printf("作者信息\n");//初始化数据InitData();//打印出数据PrintMssge();//检查系统的安全性CheckSafe();//第一次申请资源int apply1[Scount] = { 1,0,2 };ApplyResulate(1,apply1);//第二次申请资源int apply2[Scount] = { 3,3,0 };ApplyResulate(4, apply2);//第三次申请资源int apply3[Scount] = { 0,2,0 };ApplyResulate(0, apply3);return 0;
}void InitData()
{Allocation[0][0] = 0;Allocation[0][1] = 1;Allocation[0][2] = 0;Allocation[1][0] = 2;Allocation[1][1] = 0;Allocation[1][2] = 0;Allocation[2][0] = 3;Allocation[2][1] = 0;Allocation[2][2] = 2;Allocation[3][0] = 2;Allocation[3][1] = 1;Allocation[3][2] = 1;Allocation[4][0] = 0;Allocation[4][1] = 0;Allocation[4][2] = 2;Need[0][0] = 7;Need[0][1] = 4;Need[0][2] = 3;Need[1][0] = 1;Need[1][1] = 2;Need[1][2] = 2;Need[2][0] = 6;Need[2][1] = 0;Need[2][2] = 0;Need[3][0] = 0;Need[3][1] = 1;Need[3][2] = 1;Need[4][0] = 4;Need[4][1] = 3;Need[4][2] = 1;Available[0] = 3;Available[1] = 3;Available[2] = 2;//计算MAXCountMax();
}
void CountMax()
{//计算MAX资源,Max=Allocation+Needfor(int i=0;i<Pcount;i++)for (int j = 0;j < Scount;j++){Max[i][j] = Allocation[i][j] + Need[i][j];}
}
void PrintMssge()
{//打印出当前资源分配情况printf("    Max      Allocation     Need\n");for (int i = 0;i < Pcount;i++){printf("P%d ", i);for (int j = 0;j < Scount;j++){printf(" %d ",  Max[i][j]);}for (int j = 0;j < Scount;j++){printf(" %d ",  Allocation[i][j]);}for (int j = 0;j < Scount;j++){printf(" %d ", Need[i][j]);}if (i == 0){printf("\t");for (int j = 0;j < Scount;j++){printf("%d", Available[j]);}}printf("\n");}
}
int CheckSafe()
{printf("安全性检查\n");//初始化Finish 未检查的全为0int Finish[Pcount] = { 0 };int Work[Scount] = { 0 };//使Work=AvailableAdd(Work, Available);for (int i = 0;i < Pcount;i++){//从第一个进程开始检查//先检查Finish标志if (Finish[i])continue;//检查Need是否小于Workif (!Equals(Need[i], Work))continue;//若符合分配条件,则成功分配,完成任务,Work+AllocationAdd(Work, Allocation[i]);//改变Finish标志Finish[i]=1;printf("p%d进程 Work=%d %d %d Finish=true\n", i, Work[0], Work[1], Work[2]);//完成之后从头检查,i归零i = -1;}//检查所有Finish标志,输出结果if (CheckFinish(Finish)){printf("安全状态检查完毕,Finish全为True,系统为安全状态\n");return 1;}else{printf("安全状态检查完毕,Finish存在False,系统处在不安全状态\n");return 0;}
}
void ApplyResulate(int P,int Request[Scount])
{//资源申请输出结果printf("\n模拟P%d申请资源 %d %d %d \n",P, Request[0], Request[1], Request[2]);int state = Apply(P, Request);if (state){printf("资源分配成功!\n");PrintMssge();}else{printf("分配资源失败,进程P%d需要等待\n", P);}
}int Apply(int P, int Request[Scount])
{//资源申请操作if (!Equals(Request, Need[P])){//判断申请的资源是否小于所需printf("进程P%d申请的资源大于需求,申请失败\n",P);return 0;}if (!Equals(Request, Available)){//判断申请的资源是否小于可用printf("进程P%d申请的资源大于可用资源,申请失败\n",P);return 0;}//进行分配资源Minus(Available, Request);Add(Allocation[P], Request);Minus(Need[P], Request);//分配后进行安全性检查int Safestate = CheckSafe();if (Safestate){//若安全则返回1return Safestate;}//若不安全则恢复分配之前的数值Add(Available, Request);Minus(Allocation[P], Request);Add(Need[P], Request);return Safestate;
}void Add(int* a, int b[Scount])
{for (int i = 0;i < Scount;i++){a[i] = a[i] + b[i];}
}void Minus(int* a, int b[Scount])
{for (int i = 0;i < Scount;i++){a[i] = a[i] - b[i];}
}int Equals(int a[Scount], int b[Scount])
{//比较资源 a<=b返回1 a>b返回0for (int i = 0;i < Scount;i++){if (a[i] > b[i])return 0;}return 1;
}int CheckFinish(int Finish[])
{for (int i = 0; i < Scount;i++){if (Finish[i] == 0){return 0;}}return 1;
}

操作系统:银行家算法模拟,C语言实现相关推荐

  1. 操作系统银行家算法模拟实现(C语言版)

    目录 一.实验目的 二.实验内容 三.实验要点说明 银行家算法实例 程序结构 四.实验代码 五.实验运行结果 一.实验目的 通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁.产生死锁的 ...

  2. 操作系统——银行家算法(c语言)

    一.银行家算法 1.资源请求reqresource()函数: 设 Requesti是进程Pi的请求向量,如果Requesti[j]=K,则表示进程Pi需要K个Ri类型的资源.当Pi发出资源请求后,系统 ...

  3. 计算机操作系统——银行家算法详解(C语言版)

    目录 一.实验目的 二.实验内容 三.实验要点说明 数据结构 银行家算法bank()函数 安全性算法safe()函数 银行家算法实例 程序结构 四.实验代码 五.结果展示 一.实验目的 通过编写一个模 ...

  4. 操作系统-银行家算法(Java实现)

    一.银行家算法思想 银行家算法是最著名的死锁避免算法,其思想是:将操作系统视为银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款.操作系统按照银行家制定 ...

  5. 操作系统——银行家算法(银行家和房地产开发商的爱恨情仇)

    操作系统--银行家算法 什么是银行家算法 银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避 ...

  6. 计算机操作系统——银行家算法

    1.实验目的: 银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法.本实验通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁.产生死锁的必要条件.安全状态等重要概念,并掌握 ...

  7. 计算机操作系统实验:银行家算法模拟

    目录 前言 实验目的 实验内容 实验原理 实验过程 代码如下 代码详解 算法过程 运行结果 总结 前言 本文是计算机操作系统实验的一部分,主要介绍了银行家算法的原理和实现.银行家算法是一种用于解决多个 ...

  8. 操作系统——银行家算法的模拟实现

    一.实验目的 (1)理解银行家算法. (2)掌握进程安全性检查的方法与资源分配的方法. 二.实验内容与基本要求 编制模拟银行家算法的程序,并给出一个例子验证所编写的程序的正确性. 要求例子中包含分配安 ...

  9. c语言银行家算法模拟程序,C语言实现 操作系统 银行家算法

    /**************************************************** 银行家算法 算法思想: 1. 在多个进程中,挑选资源需求最小的进程Pmin, 可能存在多类资 ...

  10. 操作系统作业之银行家算法(c语言实现)

    银行家算法分析: 银行家算法数据结构: 进程数 processNum 资源类数 resourceNum 系统剩余可利用资源Available,为一个含有m个元素的数组: 最大需求矩阵Max,为一个pr ...

最新文章

  1. K-means聚类K值的选择、Calinski-Harabasz准则
  2. python 试题归纳及答疑 更新中.....
  3. python+opencv获取最小外接矩形
  4. mysql数据库入门教程(14):函数
  5. HDU 4348 To the moon
  6. vue 存储对象 不要监听_Vue源码解析----响应式原理
  7. c++运动学正反解 ros_ROS系统MoveIt玩转双臂机器人系列(六)–D-H逆运动学求解程序(C++)...
  8. linux 外壳的概念,LINUX当中必须知道的概念和小技巧
  9. Atitit 知识管理 知识的存储与检索 目录 1. Mis4大信息系统 2 1.1. crm客户流 通讯录 2 1.2. 企业资源规划(ERP) 财务卡片系统 通讯录,canlenda实现 2
  10. mencoder 转换rmvb格式为avi格式
  11. 中科矿业深度解析:BZZ未来价格会怎么走?
  12. 基于支持向量机的图像分类系统(MATLAB GUI界面版)
  13. Flask邮件的配置和使用
  14. 博弈论分析题_博弈论复习题及答案
  15. 瓶中阳光——雪莉之美
  16. 微型计算机控制系统系统组成,微型计算机控制系统的组成
  17. 360极速浏览器X——这款全新的浏览器有亿点点好用
  18. 新手程序员如何快速成长?
  19. Tensorflow下用自己的数据集对Faster RCNN进行训练和测试(二)1
  20. 中值滤波原理及MATLAB算法实现

热门文章

  1. 为天天检App提供技术支持
  2. 如何建立零售行业的数据分析模型
  3. javaScript中创建数组的3种方式
  4. 【JavaScript】写程序编程基础入门
  5. 华为手机电量不耐用?记得调整这4个设置,多用几个小时都没问题
  6. 在线教育与知识付费系统,有何区别?
  7. BI 系统中为什么会有很多冗余的快照表?
  8. 大学试卷哪里找?直到挂科才知道
  9. Octave在Mac上的下载安装基本使用
  10. comodo泛域名证书与comodo多域名证书选择