这个程序局限性很大,只是为了熟悉一下银行家算法而已,所以随便写写罗。。。
#include<stdio.h>
#define PROCESS_AMOUNT 5 //进程数量
#define RESOURCE_AMOUNT 3 //资源数量
//系统提供的各类资源的最大量
int Resoure_Max[3]={10,5,7};
//各个进程需要的最大资源数量
int Max[PROCESS_AMOUNT][RESOURCE_AMOUNT]={
{7,5,3},
{3,2,2},
{9,0,2},
{2,2,2},
{4,3,3},
};
//以分配给每个进程的资源数量
int Allocation[PROCESS_AMOUNT][RESOURCE_AMOUNT]={
{0,1,0},
{2,0,2},
{3,0,2},
{2,1,1},
{0,0,2},
};
//各个进程还需要的资源数量
int Need[PROCESS_AMOUNT][RESOURCE_AMOUNT];
//工作向量,表示系统可提供的资源数量
int Work[RESOURCE_AMOUNT];
//记录各个进程是否完成,0表示未完成,1表示完成
int Finish[PROCESS_AMOUNT]={0};
//记录各个进程执行完成的顺序
int Sort[PROCESS_AMOUNT];
//判断是否安全,即寻找安全序列
int is_safe();
//在Need矩阵中查找是否所需的各个资源数量都小于Work数组的资源数量,查找成功返回下标,不成功返回一个负数
int search_need();
void main()
{
int i,j;
Work[0]=Resoure_Max[0];
Work[1]=Resoure_Max[1];
Work[2]=Resoure_Max[2];
for(i=0;i<PROCESS_AMOUNT;i++)
for(j=0;j<RESOURCE_AMOUNT;j++){
Need[i][j]=Max[i][j]-Allocation[i][j];
if(j==0)
Work[j]-=Allocation[i][j];
else if(j==1)
Work[j]-=Allocation[i][j];
else if(j==2)
Work[j]-=Allocation[i][j];
}
if(is_safe()){
printf("找到这样的安全系列:\n");
for(i=0;i<PROCESS_AMOUNT;i++)
printf("%-3d",Sort[i]);
printf("\n");
}else
printf("此时刻不安全!!\n");
}
//判断是否安全,即寻找安全序列
int is_safe()
{
int i,index,j;
for(i=0;i<PROCESS_AMOUNT;i++){
index=search_need();
if(index<0)
return 0;
else{
for(j=0;j<RESOURCE_AMOUNT;j++)
Work[j]+=Allocation[index][j];
Finish[index]=1;
Sort[i]=index;
}
}
return 1;
}
//在Need矩阵中查找是否所需的各个资源数量都小于Work数组的资源数量,查找成功返回下标,不成功返回一个负数
int search_need()
{
int i,j;
for(i=0;i<PROCESS_AMOUNT;i++){
if(Finish[i]==1)
continue;
for(j=0;j<RESOURCE_AMOUNT;j++)
if(Need[i][j]>Work[j])
break;
if(j==RESOURCE_AMOUNT)
return i;
}
return -1;
}
分享到:
相关推荐
根据提供的文件信息,我们可以深入探讨银行家算法在C语言中的实现细节。银行家算法是一种用于避免死锁的算法,主要用于操作系统资源管理中。通过该算法,系统能够预先判断分配资源后是否仍然处于安全状态,从而避免...
【操作系统实验报告——C语言实现银行家算法】 银行家算法是一种用于避免操作系统死锁的经典策略,由艾兹格·迪杰斯特拉在1965年提出。在操作系统中,银行家算法通过模拟银行家对贷款的管理来合理地分配系统资源,...
以下是关于银行家算法的详细解释,以及如何用C和C++进行实现。 一、银行家算法的基本概念: 银行家算法通过模拟银行贷款的过程,为进程分配系统资源。系统预先知道所有进程的最大需求,并在满足安全性的前提下,...
### 使用C语言实现银行家算法 #### 实验背景与意义 银行家算法是操作系统领域内一种重要的避免死锁的方法。该算法通过事先预测系统分配资源后的状态是否安全来决定是否进行资源分配,从而达到避免系统进入不安全...
【银行家算法】是Dijkstra提出的一种用于避免操作系统中死锁的策略。...Java实现的银行家算法图形界面可以直观地展示资源分配过程,帮助用户理解死锁的预防策略,并提供了一个实验平台来模拟和分析系统资源分配的情况。
1. **编程语言**:使用C或C++语言来实现银行家算法。 2. **具体任务**:系统中有5个进程(P0至P4),以及3种类型的资源(分别标记为A、B、C)。在初始时刻(T0),这些资源的数量分别为A=10、B=5、C=7。首先,需要...
《C++实现简单的银行家算法》 在操作系统领域,银行家算法是一种经典的死锁预防策略,由艾兹格·迪杰斯特拉提出。这个算法模拟了银行贷款的过程,通过分配和管理资源,确保系统不会陷入无法恢复的死锁状态。在本文...
通过这个C语言实现,初学者不仅可以学习到银行家算法的原理,还可以提升对操作系统资源管理的理解,同时锻炼C语言编程能力。在实际操作中,应逐步分析代码,理解每一部分的作用,以便更好地掌握这个重要的操作系统...
本实验主要关注的就是银行家算法的实现,它在安徽大学的操作系统课程中作为实验项目进行,使用C语言编写,并在Visual Studio 2008环境下编译和调试通过。 银行家算法由E.F. Cohen在1965年提出,它的核心思想是预先...
在课程设计中,学生需要掌握银行家算法的原理和实现,并能够使用 C 语言编程实现银行家算法。 在课程设计的参考文献中,包括《计算机操作系统》、《操作系统》、《计算机操作系统教程》、《操作系统》等。 在课程...
### 银行家算法模拟C/C++ #### 实验背景 银行家算法是操作系统中用于避免死锁的重要机制之一。本实验旨在通过编程的方式,帮助学生深入理解银行家算法的具体实现过程及其背后的逻辑原理。 #### 实验目的 1. **...
在这个“银行家算法的设计与实现 操作系统课程设计”项目中,学生将深入理解银行家算法的原理,并通过编程实现这个算法。可能涉及的编程语言包括C、C++或者Python等。实现包括以下部分: 1. **数据结构**:设计数据...
本文档提供了银行家算法的C语言代码实现,旨在帮助开发者更好地理解和实现银行家算法。该代码可以作为银行家算法的参考实现,用于避免死锁的产生。 相关知识点: 1. 银行家算法:银行家算法是一种资源分配算法,...
银行家算法是操作系统中避免死锁的重要手段之一,通过上述分析,我们不仅了解了银行家算法的基本概念和流程,还深入了解了如何使用C/C++语言实现这一算法。这种实现方式不仅可以帮助开发者更好地理解算法本身,还...
### 银行家算法的C语言实现 #### 一、银行家算法简介 银行家算法是操作系统领域中一种用于避免死锁的经典算法。在多道程序环境下,多个进程可能会竞争共享资源,如果处理不当很容易发生死锁问题,即两个或多个进程...
编程实现银行家算法 (1) 掌握银行家算法原理 (2) 输入实例,判断是否存在安全序列
#define n 5 //进程个数 #define m 3 //资源种类 int Available[m],Alloc[n][m],Need[n][m]; main() { int request[m];...测试数据:m=3:种类型的资源(A,B,C,) 进程个数n=5 Available=(2,3,3);
下面我们将详细探讨银行家算法的原理、实现方式以及C语言和C++的编程实践。 ### 银行家算法原理 银行家算法模拟了银行的贷款过程,将系统中的资源比作银行的贷款,进程比作借款者。每个进程都有对资源的需求,而...
6. **实验实践**: 实验中,学生通过编写高级语言程序来模拟银行家算法,可以具体体验到资源申请、分配、释放的过程,以及如何进行安全性检查。这有助于理解死锁和避免死锁的策略,以及它们在实际操作中的应用。 ...