Anda di halaman 1dari 14

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER


UNIVERSITAS BRAWIJAYA

NAMA : CASSIA VERA DIPHIPERIDINE


NIM : 175150201111026
MATERI : BAB VII
TANGGAL : 08/11/2018
ASISTEN : ENDAH OCTAVIANA NASUTION
GUEDHO AUGNIFICO MAHARDIKA

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.

8.1.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.

8.1.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
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>

4. Jalankan hasil kompilasi menggunakan


perintah ./<Nama_Output>
5. Capture / Snapshot output-nya dan simpan sebagai laporan.

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
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
8. Amati hasilnya dan tuliskan outputnya !
Pada percobaan diatas output yang dihasilkan ialah tidak
adanya deadlock yang terjadi dengan menggunakan Resource
Request Alghorithm dan Safety Alghoritm yang terdapat pada
program. Dan output yang dikeluarkan juga dapat
menginputkan kembali permintaan untuk penambahan resource
atau sumber daya. Kegunaan algoritma Safety Alghoritm untuk
mencegah terjadinya deadlock pada saat sumber daya
diberikan pada proses yang diinputkan serta Resource Request
digunakan untuk menyetujui permintaan sumber daya yang
ada. Maka sebelum Safety Algoritm harus lah Resource
Request yang menyetujui terlebih dahulu baru proses tersebut
diberikan sumber daya atau resource.
main.c

1 #include<stdio.h>

2 #include<stdlib.h>

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


pid,int m)
16
{
17
int reqmat[1][10];
18
int i;
19
printf("\n Enter additional request :- \n");
20
for(i=0;i<m;i++){
21
printf(" Request for resource %d : ",i+1);
22
scanf("%d",&reqmat[0][i]);
23
}
24

25
for(i=0;i<m;i++)
26
if(reqmat[0][i] > N[pid][i]){
27
printf("\n Error encountered.\n");
28
exit(0);
27 }

28

29 for(i=0;i<m;i++)

30 if(reqmat[0][i] > AV[0][i]){

31 printf("\n Resources unavailable.\n");

32 exit(0);

33 }

34

35 for(i=0;i<m;i++){

36 AV[0][i]-=reqmat[0][i];

37 A[pid][i]+=reqmat[0][i];

38 N[pid][i]-=reqmat[0][i];

39 }

40 }

41

42 //Safety algorithm

43 int safety(int A[][10],int N[][10],int AV[1][10],int n,int m,int


a[]){
44

45
int i,j,k,x=0;
46
int F[10],W[1][10];
47
int pflag=0,flag=0;
48
for(i=0;i<n;i++)
49
F[i]=0;
50
for(i=0;i<m;i++)
51
W[0][i]=AV[0][i];
52

53
for(k=0;k<n;k++){
54
for(i=0;i<n;i++){
55
if(F[i] == 0){
56 flag=0;

57 for(j=0;j<m;j++){

58 if(N[i][j] > W[0][j])

59 flag=1;

60 }

61 if(flag == 0 && F[i] == 0){

62 for(j=0;j<m;j++)

63 W[0][j]+=A[i][j];

64 F[i]=1;

65 pflag++;

66 a[x++]=i;

67 }

68 }

69 }

70 if(pflag == n)

71 return 1;

72 }

73 return 0;

74 }

75

76 //Banker's Algorithm

77 void accept(int A[][10],int N[][10],int M[10][10],int


W[1][10],int *n,int *m){
78
int i,j;
79
printf("\n Enter total no. of processes : ");
80
scanf("%d",n);
81
printf("\n Enter total no. of resources : ");
82
scanf("%d",m);
83
for(i=0;i<*n;i++){
84
printf("\n Process %d\n",i+1);
84 for(j=0;j<*m;j++){

86 printf(" Allocation for resource %d : ",j+1);

87 scanf("%d",&A[i][j]);

88 printf(" Maximum for resource %d : ",j+1);

89 scanf("%d",&M[i][j]);

90 }

91 }

92 printf("\n Available resources : \n");

93 for(i=0;i<*m;i++){

94 printf(" Resource %d : ",i+1);

95 scanf("%d",&W[0][i]);

96 }

97

98 for(i=0;i<*n;i++)

99 for(j=0;j<*m;j++)

100 N[i][j]=M[i][j]-A[i][j];

101

102 printf("\n Allocation Matrix");

103 print(A,*n,*m);

104 printf("\n Maximum Requirement Matrix");

105 print(M,*n,*m);

106 printf("\n Need Matrix");

107 print(N,*n,*m);

108

109 }

110

111 int banker(int A[][10],int N[][10],int W[1][10],int n,int m){

112 int j,i,a[10];

113 j=safety(A,N,W,n,m,a);
114 if(j != 0 ){

115 printf("\n\n");

116 for(i=0;i<n;i++)

117 printf(" P%d ",a[i]);

118 printf("\n A safety sequence has been detected.\n");

119 return 1;

120 }else{

121 printf("\n Deadlock has occured.\n");

122 return 0;

123 }

124 }

125

126 int main(){

127 int ret;

128 int A[10][10];

129 int M[10][10];

130 int N[10][10];

131 int W[1][10];

132 int n,m,pid,ch;

133 printf("\n DEADLOCK AVOIDANCE USING BANKER'S ALGORITHM\n");

134 accept(A,N,M,W,&n,&m);

135 ret=banker(A,N,W,n,m);

136 if(ret !=0 ){

137 printf("\n Do you want make an additional request ?


(1=Yes|0=No)");
138
scanf("%d",&ch);
139
if(ch == 1){
140
printf("\n Enter process no. : ");
141
scanf("%d",&pid);
142
res_request(A,N,W,pid-1,m);
143 ret=banker(A,N,W,n,m);

144 if(ret == 0 )

145 exit(0);

146 }

147 }else

148 exit(0);

149 return 0;

150 }

Anda mungkin juga menyukai