Bankers Algorithm using C Language OS problem
Bankers Algorithm for deadlock detection and avoidance.
Bankers Algorithm code
1 |
# include <br/> # include <br/> # include <br/> # define maxn 10 <br/> typedef struct banker <br/> { <br/> int available[maxn] ; <br/> int claim[maxn][maxn] ; <br/> int allocation[maxn][maxn] ; <br/> int need[maxn][maxn] ; <br/> int request[maxn]; <br/> }banker ; <br/> void display(int,int,int resource[maxn],banker); <br/> void bankersalgo(int nm,int resource [maxn],int rs); <br/> int safe(int rs,int nm,int resource [maxn],banker) ; <br/> void main() <br/> { <br/> int ch=0,nm=0,i,j,k,resource[maxn],request[maxn],rs ,flag=0; <br/> char temp1; <br/> struct banker bankers,b ; <br/> clrscr() ; <br/> do <br/> { <br/> printf("\t\t\t\t***MAIN MENU***\n") ; <br/> printf("\t\t\t\t1.ENTER MATRICES\n"); <br/> printf("\t\t\t\t2.DISPLAY MATRICES \n"); <br/> printf("\t\t\t\t3.BANKERS ALGORITM (SAFETY & ALLOCATION\n" ); <br/> printf("\t\t\t\t4.EXIT\n"); <br/> printf("\t\t\t\tENTER UR CHOICE!!\n"); <br/> scanf("%d",&ch); <br/> switch (ch) <br/> { <br/> case 1: <br/> clrscr(); <br/> printf("ENTER NO OF PROCESS!!\n") ; <br/> scanf("%d",&nm); <br/> printf("ENTER NO OF RESOURCE !!\n") ; <br/> scanf("%d",&rs); <br/> for(i=0;i<rs;i++) <br=""> { <br/> printf("ENTER RESOURCE MATRIX %d!!\n",i) ; <br/> scanf("%d",&resource[i]) ; <br/> } <br/> printf("ENTER CLAIM MATRIX!!\n") ; <br/> for(i=0;i<nm;i++) <br=""> { <br/> for(j=0;j<rs;j++) <br=""> { <br/> printf("\nENTER %d %d!!\n",i,j) ; <br/> scanf("%d",&bankers.claim[i][j]) ; <br/> if(bankers.claim[i][j]>resource[j]) <br/> { <br/> printf(" WRONG VALUES ENTERED") ; <br/> j--; <br/> } <br/> } <br/> } <br/> for(i=0;i<nm;i++) <br=""> { <br/> for(j=0;j<rs;j++) <br=""> { <br/> bankers.allocation[i][j]=0; <br/> bankers.available[j]=resource[j]; <br/> } <br/> } <br/> clrscr(); <br/> display(nm,rs,resource,bankers); <br/> printf("\nENTER ALLOCATION MATRIX!!\n") ; <br/> for(i=0;i<nm;i++) <br=""> { <br/> for(j=0;j<rs;j++) <br=""> { <br/> printf("\nENTER %d %d!!",i,j) ; <br/> scanf("%d",&bankers.allocation[i][j]) ; <br/> if((bankers.allocation[i][j]>bankers.claim[i][j]) && (bankers.allocation[i][j]>bankers.available[j])) <br/> { <br/> printf(" WRONG VALUES ENTERED") ; <br/> j--; <br/> } <br/> else { <br/> bankers.available[j]=bankers.available[j]-bankers.allocation[i][j]; <br/> bankers.need[i][j]=bankers.claim[i][j]-bankers.allocation[i][j]; <br/> } <br/> } <br/> display(nm,rs,resource,bankers); <br/> } <br/> break ; <br/> case 2: <br/> display(nm,rs,resource,bankers); <br/> break ; <br/> case 3: <br/> i=safe(rs,nm,resource,bankers) ; <br/> display(nm,rs,resource,bankers); <br/> do <br/> { <br/> if(i==1) <br/> { <br/> printf("\n Enter the request process no P"); <br/> scanf("%d",&j); <br/> printf("\n Enter process %d's request",j); <br/> for(k=0;k<rs;k++) <br=""> { <br/> scanf("%d",&request[k]); <br/> if((request[k]>bankers.need[j][k])&& (request[k]>bankers.available[k])) <br/> { <br/> printf("\n Not valid request"); <br/> k--; <br/> } <br/> } <br/> b=bankers; <br/> for(k=0;k<rs;k++) <br=""> { <br/> b.allocation[j][k]+=request[k]; <br/> b.need[j][k]-=request[k]; <br/> b.available[k]-=request[k]; <br/> } <br/> display(nm,rs,resource,b); <br/> printf("\n The new state's safety is checking"); <br/> i=safe(rs,nm,resource,b); <br/> if(i==1) <br/> { display(nm,rs,resource,b); <br/> bankers=b; <br/> printf(" This is a Current state "); <br/> } <br/> else <br/> { <br/> display(nm,rs,resource,bankers); <br/> printf(" This is a Current safe state "); <br/> } <br/> printf("\nDo u want to add more request on current system(0/1)"); <br/> scanf("%d",&flag); <br/> } <br/> else <br/> { <br/> printf("\n Current system is unsafe state"); <br/> exit(0); <br/> } <br/> }while(flag==1); <br/> break ; <br/> default : <br/> printf("ENTER RIGHT OPTION!!\n") ; <br/> } <br/> }while(ch!=4 ); <br/> } <br/> void display(int nm,int rs,int resource[maxn],banker bankers) <br/> { <br/> int i,j; <br/> clrscr(); <br/> printf("Total instances of resources are:-"); <br/> for(i=0;i<rs;i++) <br=""> printf("\t%d",resource[i]); <br/> printf("\nClaim \t Alloc \t Need"); <br/> for(i=0;i<nm;i++) <br=""> { <br/> printf("\n"); <br/> for(j=0;j<rs;j++) <br=""> printf(" %d",bankers.claim[i][j]); <br/> printf("\t"); <br/> for(j=0;j<rs;j++) <br=""> printf(" %d",bankers.allocation[i][j]); <br/> printf("\t"); <br/> for(j=0;j<rs;j++) <br=""> { <br/> bankers.need[i][j]=bankers.claim[i][j]-bankers.allocation[i][j]; <br/> printf(" %d",bankers.need[i][j]); <br/> } <br/> } <br/> printf("\nCurrent avialble is :"); <br/> for(i=0;i<rs;i++) <br=""> printf("%d ", bankers.available[i]); <br/> getch(); <br/> } <br/> int safe(int rs,int nm,int resource[maxn],banker bankers) <br/> { <br/> int array[maxn],possible=1,i=0,j=0,k=0 ,flag[10]; <br/> banker b=bankers; <br/> for(i=0;i<nm;i++) <br=""> { array[i]=0; <br/> flag[i]=0; <br/> } <br/> for(i=0;i<nm;i++) <br=""> { <br/> if(flag[i]==0) <br/> { <br/> for(j=0;j<rs;j++) <br=""> { <br/> if(b.need[i][j]<=b.available[j]) <br/> { <br/> possible=0 ; <br/> } <br/> else <br/> { <br/> possible=1; <br/> break; <br/> } <br/> } <br/> if(possible==1) <br/> { <br/> printf("\n%d PROCESS CAN NOT PROCESSED",i) ; <br/> } <br/> else <br/> { <br/> printf("\nPROCESS%d IS PROCESSING",i) ; <br/> for(j=0;j<rs;j++) <br=""> { <br/> b.available[j]+=b.allocation[i][j]; <br/> b.allocation[i][j]=0; <br/> b.claim[i][j]=0; <br/> } <br/> flag[i]=1; <br/> array[k++]=i; <br/> i=-1; <br/> display(nm,rs,resource,b); <br/> } <br/> } <br/> } <br/> for(i=0;i<4;i++) <br/> { <br/> if(flag[i]) <br/> k=1; <br/> else { <br/> k=0; <br/> break; <br/> } <br/> } <br/> if(k==1) <br/> { <br/> printf("\n System is in safe state with sequence"); <br/> } <br/> for(i=0;i<nm;i++) <br=""> printf(" %d",array[i]); <br/> getch(); <br/> return k; <br/> } |
Source projectgeek.com