7.1. Kebutuhan
(a) (b)
Resource hanya boleh/bisa diberikan untuk dipakai pada suatu proses jika:
7.4. Percobaan
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>
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
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++)
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
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++){
59 flag=1;
60 }
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
87 scanf("%d",&A[i][j]);
89 scanf("%d",&M[i][j]);
90 }
91 }
93 for(i=0;i<*m;i++){
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
103 print(A,*n,*m);
105 print(M,*n,*m);
107 print(N,*n,*m);
108
109 }
110
113 j=safety(A,N,W,n,m,a);
114 if(j != 0 ){
115 printf("\n\n");
116 for(i=0;i<n;i++)
119 return 1;
120 }else{
122 return 0;
123 }
124 }
125
134 accept(A,N,M,W,&n,&m);
135 ret=banker(A,N,W,n,m);
144 if(ret == 0 )
145 exit(0);
146 }
147 }else
148 exit(0);
149 return 0;
150 }