操作系统:银行家算法模拟,C语言实现
代码如下:(环境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语言实现相关推荐
- 操作系统银行家算法模拟实现(C语言版)
目录 一.实验目的 二.实验内容 三.实验要点说明 银行家算法实例 程序结构 四.实验代码 五.实验运行结果 一.实验目的 通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁.产生死锁的 ...
- 操作系统——银行家算法(c语言)
一.银行家算法 1.资源请求reqresource()函数: 设 Requesti是进程Pi的请求向量,如果Requesti[j]=K,则表示进程Pi需要K个Ri类型的资源.当Pi发出资源请求后,系统 ...
- 计算机操作系统——银行家算法详解(C语言版)
目录 一.实验目的 二.实验内容 三.实验要点说明 数据结构 银行家算法bank()函数 安全性算法safe()函数 银行家算法实例 程序结构 四.实验代码 五.结果展示 一.实验目的 通过编写一个模 ...
- 操作系统-银行家算法(Java实现)
一.银行家算法思想 银行家算法是最著名的死锁避免算法,其思想是:将操作系统视为银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款.操作系统按照银行家制定 ...
- 操作系统——银行家算法(银行家和房地产开发商的爱恨情仇)
操作系统--银行家算法 什么是银行家算法 银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避 ...
- 计算机操作系统——银行家算法
1.实验目的: 银行家算法是由Dijkstra设计的最具有代表性的避免死锁的算法.本实验通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁.产生死锁的必要条件.安全状态等重要概念,并掌握 ...
- 计算机操作系统实验:银行家算法模拟
目录 前言 实验目的 实验内容 实验原理 实验过程 代码如下 代码详解 算法过程 运行结果 总结 前言 本文是计算机操作系统实验的一部分,主要介绍了银行家算法的原理和实现.银行家算法是一种用于解决多个 ...
- 操作系统——银行家算法的模拟实现
一.实验目的 (1)理解银行家算法. (2)掌握进程安全性检查的方法与资源分配的方法. 二.实验内容与基本要求 编制模拟银行家算法的程序,并给出一个例子验证所编写的程序的正确性. 要求例子中包含分配安 ...
- c语言银行家算法模拟程序,C语言实现 操作系统 银行家算法
/**************************************************** 银行家算法 算法思想: 1. 在多个进程中,挑选资源需求最小的进程Pmin, 可能存在多类资 ...
- 操作系统作业之银行家算法(c语言实现)
银行家算法分析: 银行家算法数据结构: 进程数 processNum 资源类数 resourceNum 系统剩余可利用资源Available,为一个含有m个元素的数组: 最大需求矩阵Max,为一个pr ...
最新文章
- K-means聚类K值的选择、Calinski-Harabasz准则
- python 试题归纳及答疑 更新中.....
- python+opencv获取最小外接矩形
- mysql数据库入门教程(14):函数
- HDU 4348 To the moon
- vue 存储对象 不要监听_Vue源码解析----响应式原理
- c++运动学正反解 ros_ROS系统MoveIt玩转双臂机器人系列(六)–D-H逆运动学求解程序(C++)...
- linux 外壳的概念,LINUX当中必须知道的概念和小技巧
- Atitit 知识管理 知识的存储与检索 目录 1. Mis4大信息系统	2 1.1. crm客户流 通讯录	2 1.2. 企业资源规划(ERP) 财务卡片系统 通讯录,canlenda实现	2
- mencoder 转换rmvb格式为avi格式
- 中科矿业深度解析:BZZ未来价格会怎么走?
- 基于支持向量机的图像分类系统(MATLAB GUI界面版)
- Flask邮件的配置和使用
- 博弈论分析题_博弈论复习题及答案
- 瓶中阳光——雪莉之美
- 微型计算机控制系统系统组成,微型计算机控制系统的组成
- 360极速浏览器X——这款全新的浏览器有亿点点好用
- 新手程序员如何快速成长?
- Tensorflow下用自己的数据集对Faster RCNN进行训练和测试(二)1
- 中值滤波原理及MATLAB算法实现