Guest User

Untitled

a guest
Nov 19th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. //Algoritma untuk menerima dan mencetak input pertama kali
  5. void accept(int A[][10],int N[][10],int M[10][10],int W[1][10],int *n,int *m){
  6. int i,j;
  7. printf("\n Enter total no. of processes : ");
  8. scanf("%d",n);
  9. printf("\n Enter total no. of resources : ");
  10. scanf("%d",m);
  11. for(i=0;i<*n;i++){
  12. printf("\n Process %d\n",i+1);
  13. for(j=0;j<*m;j++){
  14. printf(" Allocation for resource %d : ",j+1);
  15. scanf("%d",&A[i][j]);
  16. printf(" Maximum for resource %d : ",j+1);
  17. scanf("%d",&M[i][j]);
  18. }
  19. }
  20. printf("\n Available resources : \n");
  21. for(i=0;i<*m;i++){
  22. printf(" Resource %d : ",i+1);
  23. scanf("%d",&W[0][i]);
  24. }
  25.  
  26. for(i=0;i<*n;i++)
  27. for(j=0;j<*m;j++)
  28. N[i][j]=M[i][j]-A[i][j];
  29.  
  30. printf("\n Allocation Matrix");
  31. print(A,*n,*m);
  32. printf("\n Maximum Requirement Matrix");
  33. print(M,*n,*m);
  34. printf("\n Need Matrix");
  35. print(N,*n,*m);
  36.  
  37. }
  38.  
  39. //Fungsi untuk mencetak isi array
  40. void print(int x[][10],int n,int m){
  41. int i,j;
  42. for(i=0;i<n;i++){
  43. printf("\n");
  44. for(j=0;j<m;j++){
  45. printf("%d\t",x[i][j]);
  46. }
  47. }
  48. }
  49.  
  50. //Banker's Algorithm
  51. int banker(int A[][10],int N[][10],int W[1][10],int n,int m){
  52. int j,i,a[10];
  53. j=safety(A,N,W,n,m,a);
  54. if(j != 0 ){
  55. printf("\n\n");
  56. for(i=0;i<n;i++)
  57. printf(" P%d ",(a[i]+1));
  58. printf("\n A safety sequence has been detected.\n");
  59. return 1;
  60. }else{
  61. printf("\n Deadlock has occured.\n");
  62. return 0;
  63. }
  64. }
  65.  
  66. //Safety algorithm; AV = available matrix
  67. int safety(int A[][10],int N[][10],int AV[1][10],int n,int m,int a[]){
  68. int i,j,k,x=0;
  69. int F[10],W[1][10];
  70. int pflag=0,flag=0;
  71. for(i=0;i<n;i++)
  72. F[i]=0;
  73. for(i=0;i<m;i++)
  74. W[0][i]=AV[0][i];
  75.  
  76. for(k=0;k<n;k++){
  77. for(i=0;i<n;i++){
  78. if(F[i] == 0){
  79. flag=0;
  80. for(j=0;j<m;j++){
  81. if( N[i][j] > W[0][j] )
  82. flag=1;
  83. }
  84. if(flag == 0 && F[i] == 0){
  85. for(j=0;j<m;j++)
  86. W[0][j]+=A[i][j];
  87. F[i]=1;
  88. pflag++;
  89. a[x++]=i;
  90. }
  91. }
  92. }
  93. if(pflag == n)
  94. return 1;
  95. }
  96. return 0;
  97. }
  98.  
  99. //Resource Request algorithm
  100. void res_request(int A[10][10],int N[10][10],int AV[10][10],int pid,int m)
  101. {
  102. int reqmat[1][10];
  103. int i;
  104. printf("\n Enter additional request :- \n");
  105. for(i=0;i<m;i++){
  106. printf(" Request for resource %d : ",i+1);
  107. scanf("%d",&reqmat[0][i]);
  108. }
  109.  
  110. for(i=0;i<m;i++)
  111. if(reqmat[0][i] > N[pid][i]){
  112. printf("\n Error encountered.\n");
  113. exit(0);
  114. }
  115.  
  116. for(i=0;i<m;i++)
  117. if(reqmat[0][i] > AV[0][i]){
  118. printf("\n Resources unavailable.\n");
  119. exit(0);
  120. }
  121.  
  122. for(i=0;i<m;i++){
  123. AV[0][i]-=reqmat[0][i];
  124. A[pid][i]+=reqmat[0][i];
  125. N[pid][i]-=reqmat[0][i];
  126. }
  127. }
  128.  
  129. int main(){
  130. //variabel untuk uji hasil balik (error atau tidaknya) fungsi algoritma banker
  131. int ret;
  132. //allocation matrix
  133. int A[10][10];
  134. //max matrix
  135. int M[10][10];
  136. //need matrix
  137. int N[10][10];
  138. //work matrix; available matrix
  139. int W[1][10];
  140. //n: banyak proses
  141. //m: banyak resources
  142. int n,m,pid,ch;
  143.  
  144. printf("\n DEADLOCK AVOIDANCE USING BANKER'S ALGORITHM\n");
  145. accept(A,N,M,W,&n,&m);
  146. ret=banker(A,N,W,n,m);
  147.  
  148. if(ret !=0 ){
  149. printf("\n Do you want make an additional request ? (1=Yes|0=No)");
  150. scanf("%d",&ch);
  151. if(ch == 1){
  152. printf("\n Enter process no. : ");
  153. scanf("%d",&pid);
  154. res_request(A,N,W,pid-1,m);
  155. ret=banker(A,N,W,n,m);
  156. if(ret == 0 )
  157. exit(0);
  158. }
  159. }else
  160. exit(0);
  161. return 0;
  162. }
Add Comment
Please, Sign In to add comment