操作系统上机报告银行家算法并解决死锁问题

操作系统上机报告银行家算法并解决死锁问题|上机实验实习报告|计算机上机实习报告

  操作系统上机报告

一,上机实验内容:银行家算法

二,银行家算法描述如下:令RRi是进程Pi的资源请求量,如果RRi[j]=k,则进程Pi希望请求分配的j类资源k个,当进程Pi向系统提交一个资源请求向量RRi时,系统调用银行家算法。

三,熟练掌握银行家算法,并解决死锁问题。

流程图请联系站长QQ3249114

四,源程序

# include<stdio.h>

void main()

{ int max_need[5][3]={{3,2,2},{7,5,3},{9,0,2},{2,2,2},{4,3,3}};

int allocation[5][3]={{2,0,0},{0,1,0},{3,0,2},{2,1,1},{0,0,2}};

int i,j,k,l=0,count=0,m=0;

int still_need[5][3]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};

int result[5]={-1,-1,-1,-1,-1};

int current_available[3]={3,3,2};

int tempCount=0;

printf("银行家总共拥有的各类资源的总数: \n A B C\n  10  5  7\n");

printf("银行家目前剩下的各类资源的总数: \n A B C\n   3  3  2\n");

printf("各进程对各类资源的最大需求量:   \n A B C\n");

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

{ printf("P%d: ",i);

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

  { printf("%d",max_need[i][j]=max_need[i][j]-allocation[i][j]);

  }

  printf("\n");

}

printf("各进程已分配到的各类资源:\n A B C\n");

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

{ printf("P%d: ",i);

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

          printf("%d",still_need[i][j]);

  printf("\n");

}

 

while(tempCount<=count&&count<5)

{ tempCount++;

  for(k=0;k<5;k++)

         if(result[k]==-1)

         { m=0;

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

              if(still_need[k][j]<=current_available[j]&&still_need[k][j]>=0)

              { current_available[j]=current_available[j]+allocation[k][j];

              m++;

              if(m==3)

              { result[k]=1;

                m=0;

                printf("P%d->",k);

                count++;

              }

              }

              else break;

         }

}

if(count==5)

{ printf("\n 系统安全!上行所示为其中一个进程安全序列 \n");

}

else

printf("\n 找不到一个安全序列,系统不安全!\n");

}

五,运行结果

 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有