代码有问题,见谅!
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define randomize() srand((unsigned)time(NULL)) //定义一个宏
#define uint unsigned int
#define uchar unsigned char
#define RES 3 //系统资源数
#define MAX_P 5 //进程数
//PCB结构体定义部分
typedef struct PCB
{
/* 进程标识符 */
uint id;
/* 每一个进程需求M类资源的最大数目 */
uint max[RES];
/* 已分配的资源数 */
uint allocation[RES];
/* 当前进程还需要的资源个数 */
uint need[RES];
/* 当前进程请求资源 */
uint request[RES];
/* 标志进程是否可执行完成 */
uint finish;
};
/* 系统中R资源的个数 */
uint available[RES];
uint work[RES];
uchar finish[RES],flag;
struct PCB process[MAX_P];
void init(void);
bool check(void);
void out();
void main(void) ///////////主函数/////////////
{
int i,j;
init();
printf("===============banker===============\n");
out();
while(!flag)
{
randomize(); //随机函数
for(i=0;i<MAX_P;i++)
{
process[i].finish = 0;
for(j=0;j<RES;j++)
{
process[i].request[j] = rand()%5;//i进程申请j资源随机个
if(process[i].request[j] < process[i].need[j])
if(process[i].request[j] < available[j])
{
work[j] = available[j];
//finish = 0;
if(check()) //安全性检查
{
available[j] = available[j] - process[i].request[j];
process[i].allocation[j] = process[i].allocation[j] + process[i].request[j];
process[i].need[j] = process[i].need[j] - process[i].request[j];
printf("distribute....\n");
out();
flag = 1;
}
else
printf("wait...\n");
}
else
printf("wait...\n");
else
printf(".....error...\n");
}
}
for(i=0;i<MAX_P;i++)
for(j=0;j<RES;j++)
{
}
}
}
void out(void)
{
//printf("##############资源情况###################\n");
printf("\n进程\tMax\tAllocation\tNeed\tAvailable\tFinish\n");
printf("----------------------------------------------------------------|\n");
int i;
for(i=0;i<MAX_P;i++)
{
printf("%d\t%d,%d,%d\t%d,%d,%d\t\t%d,%d,%d\t%d,%d,%d\t\t%d |\n",process[i].id,process[i].max[0],process[i].max[1],process[i].max[2],process[i].allocation[0],process[i].allocation[1],process[i].allocation[2],process[i].need[0],process[i].need[1],process[i].need[2],available[0],available[1],available[2],process[i].finish);
if(i==4)
printf("----------------------------------------------------------------|\n");
}
}
/* 安全性检查 */
bool check(void)
{
int i,j;
for(i=0;i<MAX_P;i++)
for(j=0;j<RES;j++)
{
if(!process[i].finish && process[i].need[j]<=work[j])
{
work[j] += process[i].allocation[j];
process[i].finish = 1;
printf("...not safe....\n");
}
else
printf("...not safe....\n");
}
out();
return true;
}
/** 初始化 **/
void init(void)
{
int i = 0;
int j = 0;
flag = 0;
randomize();
//随机产生各资源的个数
for(i=0;i<RES;i++)
available[i] = rand()%5+6;
//初始化各进程
for(i=0;i<MAX_P;i++)
{
//初始化进程ID
process[i].id = i+1;
//各进程对资源的最大需求,随机产生:0~10
//已分配0个资源
//请求资源0个
//尚需 max - allocation
for(j=0;j<RES;j++)
{
process[i].max[j] = rand()%10;
process[i].allocation[j] = 0;
process[i].request[j] = 0;
process[i].need[j] = process[i].max[j]-process[i].allocation[j];
}
}
}
分享到:
相关推荐
根据给定的信息,本文将详细解释“C语言模拟银行家算法”的实现原理及代码细节。 ### 一、银行家算法简介 银行家算法是一种避免死锁的算法,它通过检查系统的资源分配情况来确保系统不会进入不安全状态,从而防止...
《C++实现的模拟银行家算法详解》 操作系统中的资源管理是至关重要的,尤其是在多任务环境中,为了确保系统的稳定性与安全性,避免发生死锁,银行家算法被广泛应用于内存分配策略。这个“C++写的模拟银行家算法...
银行家算法是一种避免死锁的资源分配算法,通过模拟银行家管理资金的方式,来管理操作系统中的资源。 银行家算法原理 银行家算法的原理是基于银行家管理资金的方式,操作系统管理的资源相当于银行家管理的资金,...
在操作系统中,银行家算法通过模拟银行家对贷款的管理来合理地分配系统资源,确保系统的安全性。在本实验中,我们将使用C语言来实现这一算法。 银行家算法的基本思想是预防策略,它确保系统能够满足所有进程的资源...
在压缩包中的“银行家算法”文件,很可能包含了这些矩阵和向量的实现,通过文本编辑器可以直接修改数据进行模拟实验。这有助于我们直观地看到不同资源分配策略对系统安全性和效率的影响。 通过C语言实现银行家算法...
### 操作系统银行家算法C语言实现 #### 知识点概述 银行家算法是操作系统中用于避免死锁的一种资源分配策略。它通过预测并预防死锁的发生来保证系统的安全运行。本文档介绍了一个使用C语言实现的银行家算法程序,...
使用C语言实现银行家算法,其中包括安全性算法和资源分配算法
通过这个C语言实现,初学者不仅可以学习到银行家算法的原理,还可以提升对操作系统资源管理的理解,同时锻炼C语言编程能力。在实际操作中,应逐步分析代码,理解每一部分的作用,以便更好地掌握这个重要的操作系统...
接着,模拟P1进程请求额外资源的情况(Request1(1,0,2)),并通过银行家算法来判断这一请求是否可以被安全地满足,并输出相应的分析结果及安全序列(如果存在的话)。 #### 实验原理 银行家算法是一种用于预防死锁...
通过以上分析可以看出,该C语言实现主要关注于如何通过随机生成资源和需求矩阵来模拟银行家算法的过程,并通过一系列函数来进行资源的分配和管理。虽然代码中存在一些可以改进的地方,如可以进一步优化随机生成机制...
在这个C语言实现的项目中,我们将深入理解银行家算法的原理,并通过实际代码来探讨其在操作系统中的应用。 银行家算法主要包括四个主要部分:初始化、请求、分配和检查。首先,我们需要初始化系统资源和每个进程的...
2. **资源分配模拟:**通过程序模拟资源的分配过程,确保资源分配符合银行家算法的要求。 #### 设计思路详解 银行家算法的核心在于通过一系列判断条件来确定是否可以安全地分配资源给请求资源的进程。具体步骤如下...
在turboc for windows可以运行的银行家算法,有初始化,分配函数,及安全子算法构成的。
### C语言银行家算法解析 #### 一、概述 银行家算法是一种用于避免死锁的资源分配算法,常被应用于操作系统的设计中。该算法通过模拟银行家如何安全地分配资源来确保系统的稳定运行。在本篇文章中,我们将深入探讨...
代码简洁,思路清晰, 用C语言编写的一个经典的,代码简洁的银行家算法模拟程序
C语言实现银行家算法时,通常会用数据结构(如二维数组)来表示进程的资源需求、分配和状态,以及系统的资源分配情况。通过编写函数来模拟请求、安全性检查和资源分配的过程。C语言的控制流程语句(如if、for、while...
在上述C语言代码中,作者caihongzhu实现了一个简单的银行家算法模拟程序。该程序主要用于模拟多个进程对资源的请求和分配过程,以确保系统的安全性。以下是代码中的关键部分及其解释: 1. `outputSSC` 函数:此函数...