基于C语言的银行家算法
Posted Mr.zhou_Zxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于C语言的银行家算法相关的知识,希望对你有一定的参考价值。
实验题目:银行家算法
一、 实验目的
利用银行家算法避免死锁,银行家算法原本是为银行系统设计的,用来保证在发放现金贷款的时候,不会发生不能满足客户需要的情况,在OS中常用银行家算法来避免死锁。
二、 设备与环境
- 设备:PC机
- 环境:C语言编程环境
三、 实验内容
为实现银行家算法,每一个进程在进入系统的时候,他必须申明在运行的过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。
四、 实验结果及分析 - 实验设计说明
为了实现银行家算法,在系统中可以设置下面六个数据结构,分别用力啊描述系统中的
(1) Allocation可以存放各个进程以及资源已有的资源数
(2) Max各个进程和各类资源的总需求量
(3) maxres用来存放系统为各类资源提供的最大限度
(4) work表示各类资源已有的资源总量。Work[j] += Allocation[i][j];
(5) need表示还需要的各类资源的数量。Need[i] = maxres[i] - Work[i];
(6) running用来设置标志位 - 实验代码
主函数:
void bank()
{
while (count != 0) //只有存在进程progress,count!=0就成立
{
safe = 0;//设置标志位
for (i = 0; i < progress; i++)
{
if (running[i]) //存在进程progress,running[i]=1,则if条件成立
{
mark = 1;//标志位
for (j = 0; j < variety; j++)
{
if (Max[i][j] - Allocation[i][j] > Need[j])
{//用于判断 需要的资源数是否大于可提供的资源
mark = 0;//满足情况,置0
break;
}
}
if (mark)
{
printf("\\n进程%d安全\\n", i);//进程从0开始,(i = 0; i < progress; i++)
running[i] = 0;
count--;//控制while(count != 0 ),当count减到0后,跳出while循环
safe = 1;
for (j = 0; j < variety; j++)
{
Need[j] += Allocation[i][j];//已有的资源+释放的资源
}
break;
}
}
}
if (!safe)//经过上述作用,safe值变为1,取反后if条件不成立
{//如果经过一系列判断后,进程都不满足安全状态
printf("\\n进程陷入了不安全状态\\n");
break;
}
else
{
printf("\\n进程是安全的");
printf("\\n各类资源的资源总量 :");
for (i = 0; i < variety; i++)
{
printf("\\t%d", Need[i]);//输出资源总量
}
printf("\\n");
}
}
}
- 实验结果
请输入进程数目:5
请输入资源种类数目: 3
请输入系统为各类资源提供的最大限度 :10 5 7
请输入各个进程和各类资源已有库存 :
0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
请输入各个进程和各类资源的总需求量 :
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3
系统为各类资源提供的最大限度 : 10 5 7
各个进程和各类资源已有库存 :
0 1 0
2 0 0
3 0 2
2 1 1
0 0 2
各个进程和各类资源的总需求量:
7 5 3
3 2 2
9 0 2
2 2 2
4 3 3
目前各类资源已有的资源总量 : 7 2 5
各类资源仍需的资源总量 : 3 3 2
进程1安全
进程是安全的
各类资源的资源总量 : 5 3 2
进程3安全
进程是安全的
各类资源的资源总量 : 7 4 3
进程0安全
进程是安全的
各类资源的资源总量 : 7 5 3
进程2安全
进程是安全的
各类资源的资源总量 : 10 5 5
进程4安全
进程是安全的
各类资源的资源总量 : 10 5 7
4. 实验结果分析
通过键盘输入进程的数目、资源种类数目、各类资源提供的最大限度、个进程和各类资源已有库存、个进程和各类资源的总需求量。然后通过bank()函数来计算各类资源仍需的资源总量,以及判断当前进程是否安全并输出当前各类资源的总量。
五、 实验心得
通过学习和设计银行家算法,了解银行家算法避免死锁的处理原理。死锁问题的出现容易导致进程进入不安全状态,银行家算法的使用,当进程请求一组资源的时候,系统必须确认是否具有足够的资源,以及给他分配资源后,自身进程是否 会陷入不安全状态。
以上是关于基于C语言的银行家算法的主要内容,如果未能解决你的问题,请参考以下文章