今天晚上上操作系统实验,刚刚才把实验报告补完。。。。。。。
#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#define PRONUM 5
typedef struct {//数据结构是参考网上的写的,保存abc三种资源的数量,以下的矩阵都可以用这个结构体的数组来表示
int a;
int b;
int c;
}sor;
int a;
int b;
int c;
}sor;
sor max[PRONUM]={
{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//初始化最大需求矩阵
sor ali[PRONUM]={ {0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//初始化已分配矩阵
sor need[PRONUM]={ {7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};//初始化还需要的资源矩阵
sor source={3,3,2};//初始化系统所能提供的资源矩阵
sor ali[PRONUM]={ {0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};//初始化已分配矩阵
sor need[PRONUM]={ {7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};//初始化还需要的资源矩阵
sor source={3,3,2};//初始化系统所能提供的资源矩阵
int safeorder[PRONUM];//记录下安全序列
void tryali(int pro,sor *s){//尝试给进程分配资源
source.a -= s->a;//修改系统可以提供的资源数目,减去刚刚分配给进程的
source.b -= s->b;
source.c -= s->c;
source.b -= s->b;
source.c -= s->c;
ali[pro].a += s->a;//修改已经分配的资源矩阵,加上刚刚分配给进程的资源
ali[pro].b += s->b;
ali[pro].c += s->c;
ali[pro].b += s->b;
ali[pro].c += s->c;
need[pro].a -= s->a;//修改need矩阵,减去刚刚分配给进程的资源
need[pro].b -= s->b;
need[pro].c -= s->c;
}
need[pro].b -= s->b;
need[pro].c -= s->c;
}
void rollback(int pro,sor *s){//将系统资源分配恢复到初始状态
source.a += s->a;//修改系统可提供的资源数目,重新加上刚刚已经分配给进程的资源
source.b += s->b;
source.c += s->c;
source.b += s->b;
source.c += s->c;
ali[pro].a -= s->a;//修改已分配资源矩阵,减去刚刚分配给进程的资源
ali[pro].b -= s->b;
ali[pro].c -= s->c;
ali[pro].b -= s->b;
ali[pro].c -= s->c;
need[pro].a += s->a;//修改need矩阵,重新加回刚刚分配给进程的资源
need[pro].b += s->b;
need[pro].c += s->c;
}
need[pro].b += s->b;
need[pro].c += s->c;
}
int safecheck(){//安全性检查
sor work=source;//因为是尝试性地分配,故不能直接修改source,而是用work来代替
int finish[PRONUM]={0,0,0,0,0};//进程在未完成之前finish的值都为0
int i=0
int finish[PRONUM]={0,0,0,0,0};//进程在未完成之前finish的值都为0
int i=0

这篇博客介绍了如何使用C语言实现银行家算法,通过具体的测试数据展示了算法的运行过程,包括资源分配成功、申请资源超出需求以及发生死锁的情况。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



