DEADLOCK
7.1. Kebutuhan
1
7.3.2. Algoritma Banker.
Algoritma Banker dikemukakan oleh Edsger W.Dijkstra dan
merupakan sebuah strategi untuk menghindari deadlock. Algoritma ini
mencegah terjadinya deadlock dengan memutuskan apakah menyetujui atau
menunda permintaan sumber daya oleh proses. Ketika sebuah proses
meminta sumber daya, maka permintaan tersebut harus diperiksa apakah
menyebabkan terjadinya deadlock atau tidak.
(a) (b)
Gambar 7.1 (a) Resource Alocation Graph Tanpa Deadlock (b)
Resource Alocation Graph Dengan Deadlock
1. Jumlah resource (sumber daya) dari setiap proses yang mungkin diminta
disebut dengan request
2. Jumlah resource (sumber daya) dari setiap proses yang dibutuhkan
disebut matriks max
2
3. Jumlah sisa resource yang masih dimiliki oleh sistem, disebut dengan
matriks available
4. Jumlah resource yang telah dialokasikan disebut dengan matriks
allocation
Resource hanya boleh/bisa diberikan untuk dipakai pada suatu proses jika:
7.4. Percobaan
Dengan Matriks
Allocation Max Available
3
R1 R2 R3 R1 R2 R3 R1 R2 R3
P1 0 1 0 7 5 3 3 3 2
P2 2 0 0 3 2 2
P3 3 0 2 9 0 2
P4 2 1 1 2 2 2
P5 0 0 2 4 3 3
[Isi ss hasil input]
main.c
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 void print(int x[][10],int n,int m){
5 int i,j;
6 for(i=0;i<n;i++){
7 printf("\n");
8 for(j=0;j<m;j++){
9 printf("%d\t",x[i][j]);
10 }
11 }
12 }
13
14 //Resource Request algorithm
15 void res_request(int A[10][10],int N[10][10],int AV[10][10],int
16 pid,int m)
17 {
18 int reqmat[1][10];
19 int i;
20 printf("\n Enter additional request :- \n");
21 for(i=0;i<m;i++){
22 printf(" Request for resource %d : ",i+1);
23 scanf("%d",&reqmat[0][i]);
24 }
25
26 for(i=0;i<m;i++)
27 if(reqmat[0][i] > N[pid][i]){
28 printf("\n Error encountered.\n");
27 exit(0);
28 }
29
30 for(i=0;i<m;i++)
31
4
32 if(reqmat[0][i] > AV[0][i]){
33 printf("\n Resources unavailable.\n");
34 exit(0);
35 }
36
37 for(i=0;i<m;i++){
38 AV[0][i]-=reqmat[0][i];
39 A[pid][i]+=reqmat[0][i];
40 N[pid][i]-=reqmat[0][i];
41 }
42 }
43
44 //Safety algorithm
45 int safety(int A[][10],int N[][10],int AV[1][10],int n,int m,int a[]){
46
47 int i,j,k,x=0;
48 int F[10],W[1][10];
49 int pflag=0,flag=0;
50 for(i=0;i<n;i++)
51 F[i]=0;
52 for(i=0;i<m;i++)
53 W[0][i]=AV[0][i];
54
55 for(k=0;k<n;k++){
56 for(i=0;i<n;i++){
57 if(F[i] == 0){
58 flag=0;
59 for(j=0;j<m;j++){
60 if(N[i][j] > W[0][j])
61 flag=1;
62 }
63 if(flag == 0 && F[i] == 0){
64 for(j=0;j<m;j++)
65 W[0][j]+=A[i][j];
66 F[i]=1;
67 pflag++;
68 a[x++]=i;
69 }
70 }
71 }
72 if(pflag == n)
73 return 1;
74 }
75 return 0;
76 }
77
78 //Banker's Algorithm
5
79 void accept(int A[][10],int N[][10],int M[10][10],int W[1][10],int
80 *n,int *m){
81 int i,j;
82 printf("\n Enter total no. of processes : ");
83 scanf("%d",n);
84 printf("\n Enter total no. of resources : ");
84 scanf("%d",m);
86 for(i=0;i<*n;i++){
87 printf("\n Process %d\n",i+1);
88 for(j=0;j<*m;j++){
89 printf(" Allocation for resource %d : ",j+1);
90 scanf("%d",&A[i][j]);
91 printf(" Maximum for resource %d : ",j+1);
92 scanf("%d",&M[i][j]);
93 }
94 }
95 printf("\n Available resources : \n");
96 for(i=0;i<*m;i++){
97 printf(" Resource %d : ",i+1);
98 scanf("%d",&W[0][i]);
99 }
100
101 for(i=0;i<*n;i++)
102 for(j=0;j<*m;j++)
103 N[i][j]=M[i][j]-A[i][j];
104
105 printf("\n Allocation Matrix");
106 print(A,*n,*m);
107 printf("\n Maximum Requirement Matrix");
108 print(M,*n,*m);
109 printf("\n Need Matrix");
110 print(N,*n,*m);
111
112 }
113
114 int banker(int A[][10],int N[][10],int W[1][10],int n,int m){
115 int j,i,a[10];
116 j=safety(A,N,W,n,m,a);
117 if(j != 0 ){
118 printf("\n\n");
119 for(i=0;i<n;i++)
120 printf(" P%d ",a[i]);
121 printf("\n A safety sequence has been detected.\n");
122 return 1;
123 }else{
124 printf("\n Deadlock has occured.\n");
125 return 0;
6
126 }
127 }
128
129 int main(){
130 int ret;
131 int A[10][10];
132 int M[10][10];
133 int N[10][10];
134 int W[1][10];
135 int n,m,pid,ch;
136 printf("\n DEADLOCK AVOIDANCE USING BANKER'S ALGORITHM\n");
137 accept(A,N,M,W,&n,&m);
138 ret=banker(A,N,W,n,m);
139 if(ret !=0 ){
140 printf("\n Do you want make an additional request ?
141 (1=Yes|0=No)");
142 scanf("%d",&ch);
143 if(ch == 1){
144 printf("\n Enter process no. : ");
145 scanf("%d",&pid);
146 res_request(A,N,W,pid-1,m);
147 ret=banker(A,N,W,n,m);
148 if(ret == 0 )
149 exit(0);
150 }
}else
exit(0);
return 0;
}
7.5. TUGAS
7
3. Apakah permintaan penambahan resource diizinkan apabila P5
melakukan permintaan tambahan alokasi sebanyak R1=0 , R2=2 dan
R3=0?
[Isi penjelasan/pendapatmu]
[Isi penjelasan]