Anda di halaman 1dari 8

BAB VII

DEADLOCK

7.1. Kebutuhan

Untuk dapat menjalankan modul ini, anda memerlukan sebuah


komputer dengan operasi Linux. Dalam praktikum ini tidak ada batasan untuk
distribusi sistem operasi linux apa yang ingin dipakai.

7.2. Tujuan Praktikum

1. Mahasiswa mampu memahami konsep deadlock.


2. Mahasiswa mampu mempraktekkan metode deadlock prevention
menggunakan algoritma banker.

7.3. Dasar Teori

Permasalahan deadlock terjadi karena sekumpulan proses-proses yang


di-blok dimana setiap proses membawa sebuah sumber daya dan menunggu
mendapatkan sumber daya yang dibawa oleh proses lain. Misalnya sistem
mempunyai 2 tape drive dan terdapat dua proses P1 dan P2 yang masing
masing membawa satu tape drive dan masing-masing memerlukan tape drive
yang dibawa proses lain sehingga terjadi keadaan saling menunggu resource
dan sistem di-blok. Contoh lain, misalnya terdapat semaphore A dan B yang
diinisialisasi 1 dan terdapat dua proses P0 dan P1 masing-masing membawa
semaphore A dan B. Kemudian P0 dan P1 meminta semaphore B dan A
dengan menjalankan operasi wait. Hal ini mengakibatkan proses di-blok dan
terjadi deadlock.

7.3.1. Graph Alocation Rosoruce


Graph Alocation Resource merupakan salah satu metode yang dipakai
untuk mengidentifikasi terjadi deadlock. Sebuah graph disusun untuk
menggambarkan hubungan hubungan antara setiap proses dan resource
yang tersedia.

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

Hal penting yang perlu diperhatikan dalam penggunaan algoritma banker


adalah tentang penyusunan matriks, terdapat beberapa matriks yang perlu
dikuasi berkaitan dengan algoritma banker :

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:

1. request ≤ max, jumlah permintaan (request) tidak lebih banyak dari


jumlah maksimum resource.
2. request ≤ available, jumlah request tidak boleh lebih banyak dari jumlah
resource yang tersedia. jika tidak proses harus menunggu hingga
resource yang diminta ada.

7.4. Percobaan

1. Login ke sistem GNU/Linux kemudian buka terminal.


2. Lakukan percobaan terhadap tiap kode program pada masing-
masing sub bab berikut.
3. Lakukan kompilasi kode program dengan menggunakan perintah
gcc -o <Nama_Output> <Nama_Source.c>
[Isi ss hasil kompilasi]

4. Jalankan hasil kompilasi menggunakan perintah ./<Nama_Output>


[Isi ss hasil eksekusi ketika program pertama kali dijalankan]

5. Capture / Snapshot output-nya dan simpan sebagai laporan.


[Isi ss hasil kompilasi]

6. Amati output tiap percobaan dan jawab pertanyaan pada masing-


masing percobaan.
7. Masukkan variable berikut :
a. Jumlah proses = 5
b. Jumlah resource = 3

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]

8. Amati hasilnya dan tuliskan outputnya !


[Isi ss hasil output beserta penjelasan output]

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

Setelah anda berhasil melakukan kompilasi program lakukan percobaan


dengan langkah-langkah berikut :

1. Apakah permintaan penambahan resource diizinkan apabila P5


melakukan permintaan tambahan alokasi sebanyak R1=3 , R2=3, dan
R3=0?
[Isi penjelasan/pendapatmu]

2. Amati hasilnya dan tuliskan outputnya untuk kondisi dari point 1.


[Isi ss hasil output program dengan input pada nomor 1]

7
3. Apakah permintaan penambahan resource diizinkan apabila P5
melakukan permintaan tambahan alokasi sebanyak R1=0 , R2=2 dan
R3=0?
[Isi penjelasan/pendapatmu]

4. Amati hasilnya dan tuliskan outputnya untuk kondisi pada point 3.


[Isi ss hasil output program dengan input nomor 3]

5. Pada bagian program terdapat Resource Request Alghorithm (baris 14


sampai 40) dan Safety Alghoritm (baris 42- 72). Jelaskan konsep
algortimanya dan penggunaannya !
[Isi penjelasan]

6. Dapatkah kondisi pada soal no 1 dan 3 di gambarkan dengan


menggunakan Resource Alocation Graph? Jelaskan !

[Isi penjelasan]

Anda mungkin juga menyukai