这个程序局限性很大,只是为了熟悉一下银行家算法而已,所以随便写写罗。。。
#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语言便可以看懂程序。
用win32实现的简单的银行家算法预防死锁,从txt读入数据
编程实现银行家算法 (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);
银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。 设计目的 1)了解多道程序系统中,多个进程并发执行的资源分配。 2)掌握死锁的产生的原因、产生死锁的必要条件和...
银行家算法C语言实现-课程设计.doc
银行家算法C语言代码.doc
这是一个关于算法的问题, 银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源...为实现银行家算法,系统必须设置若干数据结构。
银行家算法源程序(包含C语言+C++两种代码)
实验安排:自选编程语言完成“银行家算法”,记录程序运行结果,完成实验报告。 实验要求:1)设计五个进程{P0,P1,P2,P3,P4}共享三类资源{A,B,C}的系统,{A,B,C}的资源总数量分别为10,5,7。(详见参见课本...
含本人实验报告,有具体流程图,实验课上写的,有更好的想法可以提出,大家一起学习,赚点积分不容易
这是操作系统课程设计中银行家算法的java代码实现,不会的可以下载参考
用C++实现的算法 int main() { int i, j, num; int total[n][m]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}}; int have[n][m]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; int want[n][m]={{7,4,3},{1,2,2},{6,...
本实验目的是通过使用银行家算法实现系统资源的...3)独立使用C或VC++编程语言编写银行家算法模拟程序; 4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)
摘 要: 银行家算法能够根据计算机 系统的需要, 判断计算机新申请的进程是否安全, 进而避免死锁问题的发生。该文运用 c 语言实现该算法, 同时针对算法中存在的安全隐患进行改进.
用java实现的带有界面的银行家算法 能找出所有的安全系列
因为考虑到银行家算法主要是对数组的运算,所以选择了C++而没有选择JAVA
用C语言或C++编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。程序能模拟多个进程共享多种资源的情况。进程可动态地申请资源,系统按各进程的申请动态地分配资源。要求程序具有显示各进程的某一时刻的...
C语言实现银行家算法.doc.doc