NishimaQ

BankerAlgorithm

May 1st, 2019
523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.42 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.util.Scanner;
  3.  
  4. public class BankersAlgorithm {
  5.     //np = no. of processes \ nr = no. of resources
  6.     private int need[][], allocate[][], max[][];
  7.     private int avail[][], safeSequence[], np, nr;
  8.  
  9.     private void input() {
  10.         Scanner sc = new Scanner(System.in);
  11.         System.out.print("Enter no. of processes: ");
  12.         np = sc.nextInt(); //no. of processes
  13.         System.out.print("Enter no. of resources: ");
  14.         nr = sc.nextInt(); //no. of resources
  15.  
  16.         need = new int[np][nr]; //initializing arrays
  17.         max = new int[np][nr];
  18.         allocate = new int[np][nr];
  19.         avail = new int[1][nr];
  20.         safeSequence = new int[np];
  21.  
  22.         System.out.println("Enter allocation matrix: ");
  23.         for (int i = 0; i < np; i++)
  24.             for (int j = 0; j < nr; j++)
  25.                 allocate[i][j] = sc.nextInt(); //allocation matrix
  26.  
  27.         System.out.println("Enter max. matrix: ");
  28.         for (int i = 0; i < np; i++)
  29.             for (int j = 0; j < nr; j++)
  30.                 max[i][j] = sc.nextInt(); //max matrix
  31.  
  32.         System.out.println("Enter available matrix: ");
  33.         for (int j = 0; j < nr; j++)
  34.             avail[0][j] = sc.nextInt(); //available matrix
  35.  
  36.         sc.close();
  37.     }
  38.  
  39.     //calculate the need matrix
  40.     private int[][] calc_need() {
  41.         for (int i = 0; i < np; i++) {
  42.             for (int j = 0; j < nr; j++) { //calculating need matrix
  43.                 need[i][j] = max[i][j] - allocate[i][j];
  44.             }
  45.         }
  46.         return need;
  47.     }
  48.  
  49.     public void isSafe() {
  50.         input(); //collecting data from the user
  51.         calc_need(); //mathmagics here :DD
  52.        
  53.         //visited array to find the already allocated process
  54.         boolean visited[] = new boolean[np];
  55.         for (int i = 0; i < np; i++) {
  56.             visited[i] = false;
  57.         }
  58.  
  59.         //work array to store the copy of available resources
  60.         int work[] = new int[nr];
  61.         for (int i = 0; i < nr; i++) {
  62.             work[i] = avail[0][i];
  63.         }
  64.  
  65.         int count = 0;
  66.  
  67.         while (count < np) {
  68.             boolean flag = false;
  69.             for (int i = 0; i < np; i++) {
  70.                 if (visited[i] == false) {
  71.                     int j;
  72.                     for (j = 0; j < nr; j++) {
  73.                         if (need[i][j] > work[j])
  74.                             break;
  75.                     }
  76.                     if (j == nr) {
  77.                         safeSequence[count++] = i;
  78.                         visited[i] = true;
  79.                         flag = true;
  80.  
  81.                         for (j = 0; j < nr; j++) {
  82.                             work[j] = work[j] + allocate[i][j];
  83.                         }
  84.                     }
  85.                 }
  86.             }
  87.             if (flag == false) {
  88.                 break;
  89.             }
  90.         }
  91.         if (count < np) {
  92.             System.out.println("The System is UnSafe!");
  93.         } else {
  94.             //System.out.println("The given System is Safe");
  95.             System.out.println("Following is the SAFE Sequence");
  96.             for (int i = 0; i < np; i++) {
  97.                 System.out.print("P" + safeSequence[i]);
  98.                 if (i != np - 1)
  99.                     System.out.print(" -> ");
  100.             }
  101.         }
  102.     }
  103.  
  104.     public static void main(String[] args) throws IOException {
  105.         new BankersAlgorithm().isSafe();
  106.     }
  107. }
Add Comment
Please, Sign In to add comment