AfiFaridatulHaqFaqih 205150607111008 PTIA Laporan PraktikumSO (BAB6)
AfiFaridatulHaqFaqih 205150607111008 PTIA Laporan PraktikumSO (BAB6)
SISTEM OPERASI
SEMESTER GENAP 2020/2021
2. Lakukan percobaan terhadap tiap kode program pada masing-masing sub bab
berikut.
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 }
2
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);
29 }
30
31 for(i=0;i<m;i++)
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];
3
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
79 void accept(int A[][10],int N[][10],int M[10][10],int W[1][10],int *n,int *m){
80 int i,j;
81 printf("\n Enter total no. of processes : ");
82 scanf("%d",n);
83 printf("\n Enter total no. of resources : ");
84 scanf("%d",m);
85 for(i=0;i<*n;i++){
86 printf("\n Process %d\n",i+1);
87 for(j=0;j<*m;j++){
88 printf(" Allocation for resource %d : ",j+1);
89 scanf("%d",&A[i][j]);
90 printf(" Maximum for resource %d : ",j+1);
91 scanf("%d",&M[i][j]);
92 }
93 }
94 printf("\n Available resources : \n");
95 for(i=0;i<*m;i++){
4
96 printf(" Resource %d : ",i+1);
97 scanf("%d",&W[0][i]);
98 }
99
100 for(i=0;i<*n;i++)
101 for(j=0;j<*m;j++)
102 N[i][j]=M[i][j]-A[i][j];
103
104 printf("\n Allocation Matrix");
105 print(A,*n,*m);
106 printf("\n Maximum Requirement Matrix");
107 print(M,*n,*m);
108 printf("\n Need Matrix");
109 print(N,*n,*m);
110
111 }
112
113 int banker(int A[][10],int N[][10],int W[1][10],int n,int m){
114 int j,i,a[10];
115 j=safety(A,N,W,n,m,a);
116 if(j != 0 ){
117 printf("\n\n");
118 for(i=0;i<n;i++)
119 printf(" P%d ",a[i]);
120 printf("\n A safety sequence has been detected.\n");
121 return 1;
122 }else{
123 printf("\n Deadlock has occured.\n");
124 return 0;
125 }
126 }
127
128 int main(){
129 int ret;
130 int A[10][10];
131 int M[10][10];
132 int N[10][10];
133 int W[1][10];
134 int n,m,pid,ch;
135 printf("\n DEADLOCK AVOIDANCE USING BANKER'S ALGORITHM\n");
136 accept(A,N,M,W,&n,&m);
137 ret=banker(A,N,W,n,m);
5
138 if(ret !=0 ){
139 printf("\n Do you want make an additional request ? (1=Yes|0=No)");
140 scanf("%d",&ch);
141 if(ch == 1){
142 printf("\n Enter process no. : ");
143 scanf("%d",&pid);
144 res_request(A,N,W,pid-1,m);
145 ret=banker(A,N,W,n,m);
146 if(ret == 0 )
147 exit(0);
148 }
149 }else
150 exit(0);
151 return 0;
152 }
153
6.5.Pembahasan
Setelah anda berhasil melakukan kompilasi program lakukan percobaan dengan langkah-
langkah berikut :
1. Masukkan variabel berikut :
a. Jumlah proses = 5
b. Jumlah resource = 3
Dengan Matriks
Allocation Max Available
R1 R2 R3 R1 R2 R3 R1 R2 R3
P0 0 1 0 7 5 3 3 3 2
P1 2 0 0 3 2 2
P2 3 0 2 9 0 2
P3 2 1 1 2 2 2
P4 0 0 2 4 3 3
6
2. Amati hasilnya dan tuliskan outputnya !
7
5. Apakah permintaan penambahan resource dari kondisi pada no 1 diijinkan apabila
P4 melakukan permintaan tambahan alokasi sebanyak R1=0 , R2=2 dan R3=0
Jawab: P4 diijinkan untuk melakukan permintaan tambahan alokasi dan terjadi
proses masuk ke safety sequence.
6. Amati hasilnya dan tuliskan outputnya untuk kondisi pada point 5.
7. Pada bagian program terdapat Resource Request Algorithm (baris 14 sampai 40)
dan Safety Algorithm (baris 42- 72). Jelaskan konsep algortimanya dan
penggunaannya !
Jawab:
- Resource Request Algortihm digunakan untuk menyetujui atau menunda
peminjaman dari suatu resources. Konsep dari penggunaannya adalah pertama
akan dilakukan proses pengecekan ada atau tidaknya proses yang meminta
penambahan resource. Jika ada, maka akan berlanjut pada tahapan “input
resource” dan jika tidak ada proses, maka akan berakhir dan menampilkan
“Error Encountered”. Dan apabila resource tersedia, maka penambahan akan
berhasil dan jika tidak maka program akan menampilkan output “Resource
Unavailable”.
- Safety Algotihm digunakan untuk memeriksa keadaan sistem setelah proses
peminjaman resource apakah dalam kondisi safe atau unsafe. Konsep dari
algoritma ini adalah melakukan set nilai finish sama dengan false kepada semua
proses dan dilakukan pengecekan terhadap proses yang memiliki nilai matrix
need lebih kecil dari matrix available, kemudian proses tersebut akan
menambahkan nilai pada matrix allocationnya ke matrix available dan
dimasukkan ke antrian proses dan di set nilai finishnya sama dengan true, maka
sistem dalam kondisi safe dan jika tidak maka sistem dalam kondisi unsafe.
8
● Pada no 1 tidak terjadi deadlock dan RAG pada resource masih terpenuhi.
● Pada no 5 tidak terjadi deadlock dan RAG pada resource yang diminta pada
setiap proses dapat terpenuhi walaupun ada permintaan penambahan
resource pada P4 atau proses ke 5.
9
6.6. Kesimpulan
Deadlock adalah suatu kondisi yang terjadi jika terdapat dua proses atau lebih yang
saling menunggu proses yang lain untuk melepaskan resource yang sedang dipakai.
Strategi yang dapat dipakai untuk menghindari deadlock yaitu algoritma banker. Algoritma
banker memiliki dua algoritma yaitu Resource Request Algorithm dan Safety Algorithm.
Resource Request Algorithm berfungsi untuk menentukan apakah disetujui atau
menunda peminjaman dari suatu resources. Kemudian, akan terjadi pengecekan permintaan
penambahan resource atau tidak. Algorithm ini dieksekusi oleh bankir pada setiap
permintaan resource.
Safety Algorithm berfungsi untuk memeriksa sistem setelah peminjaman apakah
pada kondisi safe atau unsafe. Apabila berada dalam kondisi safe, maka dana yang tersisa
dapat melakukan pinjaman oleh semua customer yang aktif dan semua proses akan
berakhir dengan aman dan tidak terjadi deadlock. Namun, apabila dalam kondisi unsafe,
maka akan terjadi kemungkinan deadlock dan permohonan kredit tertunda hingga
permohonan tidak menyebabkan unsafe state.
10