毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

银行家算法C语言实现

更新时间:2008-7-14:  来源:毕业论文
银行家算法C语言实现

编程模拟实现生产者---消费者问题

一、实验目的与实验项目介

银行家算法是最有代表性的避免死锁的算法,由于该算法能用于银行系统现金贷款的发放而得名。其实现思想是:允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。

实验的目的

 1.加深对死锁概念的理解

2. 能够利用银行家算法,有效避免死锁的发生,或检测死锁的存在。
二、实验项目方案设计
  1.
定义银行家算法中的数据结构available[],allocation[][],need[][]

利用定义的全局变量来进行函数间值的传递

2.此实验通过3个函数实现,a:主函数(main)b:安全检测函数(check),c:输出函数(print.

3.主函数(main)的实现:输入已知条件,利用安全检测函数检测已知的进程分配情况是否为安全状况。如果为安全,则输入需请求资源的进程号和所需资源数,否则结束主函数。reqi为进程i的请求向量。进行银行家算法:(1):如果reqi[j]>need[i][j]则认为出错,输出请求的资源数超过它所需的最大数; 否则执行(2); (2):如果reqi[j]>available[i][j]则输出尚无足够的资源;否则执行(3)

(3):系统试探着把资源分配给进程i,并修改下面数据结构中的数值:available[j]:=available[j]-reqi[j];allocation[i][j]:=allocation[i][j]+reqi[j];

need[i][j]:=need[i][j]-reqi[j];并且保存修改前的数值。(4):系统执行安全性算法。如果不安全则还原(3)中保存的available[j]allocation[i][j], need[i][j]的值.最后输入是否要继续,如继续则转至前面的输入请求资源的进程号,否则退出。

4.安全检测函数(check): (1)设置两个向量workfinish : work:=available,表示系统可提供给进程继续运行所需的各类资源数目;finish表示系统是否有足够的资源分配给进程,使之完成。开始时先做finish[i]:=false;当有足够资源分配给进程时,再令finish[i]:=true(2)从进程集合中找到一个能满足下述条件的进程:

a:  finish[i]=false; b: need[i][j]<=work[j]; 若找到,执行(3),否则,执行(4)

(3):当进程i获得资源后,可顺利执行,直到完成,并释放出分配给它的资源,故应执行:

work[j]:=work[j]+allocation[i,j];

finish[i]:=true;

a[v++]=i;    记录安全序列)

go to step 2;

(4):如果所有进程的finish[i]=true都满足,则表示系统处于安全状态,输出安全序列;否则,系统处于不安全状态。

5.输出函数(print): 利用循环体输出各进程号,已分配的资源数数,仍需要的资源数,剩余的可用资源数。

三、实验实施步骤
   1.
TC上新建一个文件,并保存为bank1,在编辑界面中输入以下代码:

#define M 50

int allocation[M][M],need[M][M],available[M];   //定义全局变量

 int n, m, r;

main()

{void check();

 void print();

 int i, j, p=0,q=0;

 int req[M], allocation1[M][M],need1[M][M],available1[M];

 printf("Please input the sum of processes:");

 scanf("%d", &n);                           //输入进程总数

 printf("Please input the sum of kinds:");

 scanf("%d", &m);                          //输入资源种类总数

 printf("Please input the known condition:\n");

 printf(" Allocation\n");

 for(i=0;i<n; i++)

 for(j=0;j<m; j++)

  scanf("%d", &allocation[i][j]);              //输入已知的进程已分配资源数

printf( "Need\n");

 for (i=0;i<n; i++)

for(j=0;j<m; j++)   

  scanf("%d", &need[i][j]);                  //输入已知的进程还需要的资源数

printf("Available\n");

 for (i=0;i<m; i++)  

 scanf("%d", &available[i]);                //输入已知的可用资源数

 print();                                  //输出各已知条件

 check();                                 //检测已知的状态是否安全

 if (r==1)                             //如果已知的状态安全则执行以下代码

   {do {

        printf("\nplease input the NO. of process: ");

        scanf("%d", &i);                //输入请求资源的进程号

        printf("please input the resources of request, A B C:");

        for(j=0;j<m; j++)

        scanf("%d",&req[j]);            //输入该进程所需的资源数

        p=0;

        q=0;

       for(j=0;j<m; j++)

       if(req[j]>need[i][j]) p=1;         //判断请求是否超过它所宣布的最大资源数

       if(p)  printf("The resources of request have been beyond the max number needed!");

       else {

             for(j=0;j<m; j++)

             if(req[j]>available[j]) q=1;  //判断请求是否超过可用资源数

             if(q)  printf("There are not enough available resources!");

             else {for(j=0;j<m; j++)     //请求满足条件86

[1] [2] [3] [4] [5] 下一页

银行家算法C语言实现下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©lwfree.cn 六维论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。