基于C语言的银行家算法

Posted Mr.zhou_Zxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于C语言的银行家算法相关的知识,希望对你有一定的参考价值。

实验题目:银行家算法

一、 实验目的
利用银行家算法避免死锁,银行家算法原本是为银行系统设计的,用来保证在发放现金贷款的时候,不会发生不能满足客户需要的情况,在OS中常用银行家算法来避免死锁。
二、 设备与环境

  1. 设备:PC机
  2. 环境:C语言编程环境
    三、 实验内容
    为实现银行家算法,每一个进程在进入系统的时候,他必须申明在运行的过程中,可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。
    四、 实验结果及分析
  3. 实验设计说明
    为了实现银行家算法,在系统中可以设置下面六个数据结构,分别用力啊描述系统中的
    (1) Allocation可以存放各个进程以及资源已有的资源数
    (2) Max各个进程和各类资源的总需求量
    (3) maxres用来存放系统为各类资源提供的最大限度
    (4) work表示各类资源已有的资源总量。Work[j] += Allocation[i][j];
    (5) need表示还需要的各类资源的数量。Need[i] = maxres[i] - Work[i];
    (6) running用来设置标志位
  4. 实验代码
    主函数:
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");
		}
    }	
 }
  1. 实验结果
    请输入进程数目: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语言的银行家算法的主要内容,如果未能解决你的问题,请参考以下文章

求一个没错误的银行家算法程序,c语言或C++的都行!!!!

急!银行家算法用C语言编写.全部程序.

银行家算法 C语言编程

C语言实现的操作系统银行家算法

求n个数的全排列,n不定。用c语言。用于银行家算法中求安全序列

关于银行家算法中部分代码不理解,请高手帮忙指点下谢谢!!!