Implementation of banker’s algorithm
Here you will learn the program code of implementation of banker’s algorithm in operating system lab using c programming.
What is Banker’s Algorithm?
The Banker’s Algorithm is a deadlock avoidance algorithm used in operating systems to manage the allocation of multiple resources among multiple processes. It was developed by Edsger Dijkstra.
The Banker’s Algorithm manages resource allocation to processes in an OS. It tracks available resources, process maximum demands, current allocations, and remaining needs.
Example of Implementation of banker’s algorithm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | //c program to avoid Deadlock Using Bankers Algorithm //Implementation of banker's algorithm in os #include<stdio.h> main() { int allocated[15][15],max[15][15],need[15][15],avail[15],tres[15],work[15],flag[15]; int pno,rno,i,j,prc,count,t,total; count=0; printf("\n Enter number of process: "); scanf("%d",&pno); printf("\n Enter number of resources: "); scanf("%d",&rno); for(i=1;i<=pno;i++) { flag[i]=0; } printf("\n Enter total numbers of each resources: "); for(i=1;i<= rno;i++) scanf("%d",&tres[i]); printf("\n Enter Max resources for each process: "); for(i=1;i<= pno;i++) { printf("\n for process %d:",i); for(j=1;j<= rno;j++) scanf("%d",&max[i][j]); } printf("\n Enter allocated resources for each process: "); for(i=1;i<= pno;i++) { printf("\n for process %d:",i); for(j=1;j<= rno;j++) scanf("%d",&allocated[i][j]); } printf("\n available resources:\n"); for(j=1;j<= rno;j++) { avail[j]=0; total=0; for(i=1;i<= pno;i++) { total+=allocated[i][j]; } avail[j]=tres[j]-total; work[j]=avail[j]; printf(" %d \t",work[j]); } do { for(i=1;i<= pno;i++) { for(j=1;j<= rno;j++) { need[i][j]=max[i][j]-allocated[i][j]; } } printf("\n Allocated matrix Max need"); for(i=1;i<= pno;i++) { printf("\n"); for(j=1;j<= rno;j++) { printf("%4d",allocated[i][j]); } printf("|"); for(j=1;j<= rno;j++) { printf("%4d",max[i][j]); } printf("|"); for(j=1;j<= rno;j++) { printf("%4d",need[i][j]); } } prc=0; for(i=1;i<= pno;i++) { if(flag[i]==0) { prc=i; for(j=1;j<= rno;j++) { if(work[j]< need[i][j]) { prc=0; break; } } } if(prc!=0) break; } if(prc!=0) { printf("\n Process %d completed",i); count++; printf("\n Available matrix:"); for(j=1;j<= rno;j++) { work[j]+=allocated[prc][j]; allocated[prc][j]=0; max[prc][j]=0; flag[prc]=1; printf(" %d",work[j]); } } }while(count!=pno&&prc!=0); if(count==pno) printf("\nThe system is in a safe state!"); else printf("\nThe system is in an unsafe state!"); } |
Output
Enter number of process: 5
Enter number of resources: 3
Enter total numbers of each resources: 10 5 7
Enter Max resources for each process:
for process 1:7 5 3
for process 2:3 2 2
for process 3:9 0 2
for process 4:2 2 2
for process 5:4 3 3
Enter allocated resources for each process:
for process 1:0 1 0
for process 2:2 0 0
for process 3:3 0 2
for process 4:2 1 1
for process 5:0 0 2
available resources:
3 3 2
Allocated matrix Max need
0 1 0| 7 5 3| 7 4 3
2 0 0| 3 2 2| 1 2 2
3 0 2| 9 0 2| 6 0 0
2 1 1| 2 2 2| 0 1 1
0 0 2| 4 3 3| 4 3 1
Process 2 completed
Available matrix: 5 3 2
Allocated matrix Max need
0 1 0| 7 5 3| 7 4 3
0 0 0| 0 0 0| 0 0 0
3 0 2| 9 0 2| 6 0 0
2 1 1| 2 2 2| 0 1 1
0 0 2| 4 3 3| 4 3 1
Process 4 completed
Available matrix: 7 4 3
Allocated matrix Max need
0 1 0| 7 5 3| 7 4 3
0 0 0| 0 0 0| 0 0 0
3 0 2| 9 0 2| 6 0 0
0 0 0| 0 0 0| 0 0 0
0 0 2| 4 3 3| 4 3 1
Process 1 completed
Available matrix: 7 5 3
Allocated matrix Max need
0 0 0| 0 0 0| 0 0 0
0 0 0| 0 0 0| 0 0 0
3 0 2| 9 0 2| 6 0 0
0 0 0| 0 0 0| 0 0 0
0 0 2| 4 3 3| 4 3 1
Process 3 completed
Available matrix: 10 5 5
Allocated matrix Max need
0 0 0| 0 0 0| 0 0 0
0 0 0| 0 0 0| 0 0 0
0 0 0| 0 0 0| 0 0 0
0 0 0| 0 0 0| 0 0 0
0 0 2| 4 3 3| 4 3 1
Process 5 completed
Available matrix: 10 5 7
The system is in a safe state!