Advertisement
Aqib12

Process Scheduling

Aug 15th, 2020
1,152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.82 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class PreviousTasksAll {
  4.     private static final int QUANTUM_TIME = 4;
  5.  
  6.     public static void main(String[] args) {
  7.         Scanner scanner = new Scanner(System.in);
  8. //        int numberOfProcesses = scanner.nextInt();
  9.  
  10.         //hardcodedPart
  11.         int numberOfProcesses = 5;
  12.         int[] pID = {1, 2, 3, 4, 5};
  13.         int[] bt = {10, 1, 2, 7, 5};
  14.         int[] priority = {3, 1, 3, 4, 2};
  15.         int[] at = {3, 0, 1, 4, 5};
  16.         //
  17.         ProcessArr[] myProcesses = new ProcessArr[numberOfProcesses];
  18.  
  19.         for (int i = 0; i < numberOfProcesses; ++i) {
  20.             myProcesses[i] = new ProcessArr(pID[i], at[i], bt[i], priority[i]);
  21.         }
  22.  
  23.         ProcessArr[] myProcesses1 = new ProcessArr[numberOfProcesses];
  24.  
  25.         for (int i = 0; i < numberOfProcesses; ++i) {
  26.             myProcesses1[i] = new ProcessArr(pID[i], at[i], bt[i], priority[i]);
  27.         }
  28.  
  29.         ProcessArr[] myProcesses2 = new ProcessArr[numberOfProcesses];
  30.  
  31.         for (int i = 0; i < numberOfProcesses; ++i) {
  32.             myProcesses2[i] = new ProcessArr(pID[i], at[i], bt[i], priority[i]);
  33.         }
  34.  
  35.         ProcessArr[] myProcesses3 = new ProcessArr[numberOfProcesses];
  36.  
  37.         for (int i = 0; i < numberOfProcesses; ++i) {
  38.             myProcesses3[i] = new ProcessArr(pID[i], at[i], bt[i], priority[i]);
  39.         }
  40.  
  41.         ProcessArr[] myProcesses4 = new ProcessArr[numberOfProcesses];
  42.  
  43.         for (int i = 0; i < numberOfProcesses; ++i) {
  44.             myProcesses4[i] = new ProcessArr(pID[i], at[i], bt[i], priority[i]);
  45.         }
  46.  
  47.  
  48.         roundRobin(myProcesses);
  49.         preemptiveSJF(myProcesses1);
  50.         non_preemptiveSJF(myProcesses2);
  51.         preemptivePRIORITY(myProcesses3);
  52.         non_preemptivePRIORITY(myProcesses4);
  53.     }
  54.  
  55.     private static void non_preemptivePRIORITY(ProcessArr[] myProcesses) {
  56.         Arrays.sort(myProcesses, Comparator.comparingInt(a -> a.arrivalTime));
  57.         List<ProcessArr> queues = new ArrayList<>();
  58.         int startTime = myProcesses[0].arrivalTime;
  59.         for (ProcessArr p : myProcesses) if (p.arrivalTime <= startTime) queues.add(p);
  60.         queues.sort(Comparator.comparingInt(a -> a.priority));
  61.  
  62.         List<Integer> sequence = new ArrayList<>();
  63.         while (!queues.isEmpty()) {
  64.  
  65.             ProcessArr p = queues.remove(0);
  66.             sequence.add(p.processID);
  67.  
  68.  
  69.             if (p.startTime == Integer.MAX_VALUE) {
  70.                 p.startTime = startTime;
  71.             }
  72.  
  73. //            startTime += p.burstTime;
  74.  
  75.             p.final_END_TIME = startTime + p.burstTime;
  76.             p.turnaroundTime = p.final_END_TIME - p.arrivalTime;
  77.             p.waitingTime = p.turnaroundTime - p.burstTime;
  78.             p.responseTime = p.startTime - p.arrivalTime;
  79.  
  80.             startTime += p.burstTime;
  81.  
  82.             p.checked = true;
  83.  
  84.             for (ProcessArr process : myProcesses)
  85.                 if (!process.checked && process.arrivalTime <= startTime) {
  86.                     queues.add(process);
  87.                     process.checked = true;
  88.                 }
  89.             queues.sort(Comparator.comparingInt(a -> a.priority));
  90.         }
  91.  
  92.         int TOTAL_WAITING_TIME = 0;
  93.         double AVERAGE_WAITING_TIME;
  94.  
  95.         int TOTAL_RESPONSE_TIME = 0;
  96.         double AVERAGE_RESPONSE_TIME;
  97.  
  98.         for (ProcessArr p : myProcesses) {
  99.             TOTAL_WAITING_TIME += p.waitingTime;
  100.             TOTAL_RESPONSE_TIME += p.responseTime;
  101.         }
  102.         AVERAGE_WAITING_TIME = TOTAL_WAITING_TIME / (double) myProcesses.length;
  103.         AVERAGE_RESPONSE_TIME = TOTAL_RESPONSE_TIME / (double) myProcesses.length;
  104.  
  105. //        Printing the whole part
  106.         System.out.println("Non-PreemptivePRIORITY Scheduling : --------------------------- ");
  107.         System.out.print("P" + sequence.remove(0));
  108.         for (Integer in : sequence) {
  109.             System.out.print(" --> P" + in);
  110.         }
  111.         System.out.println();
  112.  
  113.         System.out.println("ProcessName StartTime EndTime WaitingTime ResponseTime TurnAroundTime");
  114.         for (ProcessArr p : myProcesses) {
  115.             System.out.println("P" + p.processID + "           " + p.startTime + "          " + p.final_END_TIME + "         " + p.waitingTime + "        " + p.responseTime + "             " + p.turnaroundTime);
  116.         }
  117.         System.out.println("Average Waiting Time  : " + AVERAGE_WAITING_TIME);
  118.         System.out.println("Average Response Time : " + AVERAGE_RESPONSE_TIME);
  119.         System.out.println("\n\n\n\n");
  120.     }
  121.  
  122.     private static void non_preemptiveSJF(ProcessArr[] myProcesses) {
  123.         Arrays.sort(myProcesses, Comparator.comparingInt(a -> a.arrivalTime));
  124.         ArrayList<ProcessArr> queues = new ArrayList<>();
  125.         int startTime = myProcesses[0].arrivalTime;
  126.         for (ProcessArr p : myProcesses) if (p.arrivalTime <= startTime) queues.add(p);
  127.         queues.sort((a, b) -> Integer.compare(a.arrivalTime, b.arrivalTime));
  128.  
  129.         List<Integer> sequence = new ArrayList<>();
  130.  
  131.         while (!queues.isEmpty()) {
  132.  
  133.             ProcessArr p = queues.remove(0);
  134.             sequence.add(p.processID);
  135.  
  136.             if (p.startTime == Integer.MAX_VALUE) {
  137.                 p.startTime = startTime;
  138.             }
  139.  
  140.             p.final_END_TIME = startTime + p.burstTime;
  141.             p.turnaroundTime = p.final_END_TIME - p.arrivalTime;
  142.             p.waitingTime = p.turnaroundTime - p.burstTime;
  143.             p.responseTime = p.startTime - p.arrivalTime;
  144.  
  145.             startTime += p.burstTime;
  146.  
  147.             p.checked = true;
  148.  
  149.             for (ProcessArr process : myProcesses)
  150.                 if (!process.checked && process.arrivalTime <= startTime) {
  151.                     queues.add(process);
  152.                     process.checked = true;
  153.                 }
  154.             queues.sort(Comparator.comparingInt(a -> a.burstTime));
  155.         }
  156.  
  157.         int TOTAL_WAITING_TIME = 0;
  158.         double AVERAGE_WAITING_TIME;
  159.  
  160.         int TOTAL_RESPONSE_TIME = 0;
  161.         double AVERAGE_RESPONSE_TIME;
  162.  
  163.         for (ProcessArr p : myProcesses) {
  164.             TOTAL_WAITING_TIME += p.waitingTime;
  165.             TOTAL_RESPONSE_TIME += p.responseTime;
  166.         }
  167.         AVERAGE_WAITING_TIME = TOTAL_WAITING_TIME / (double) myProcesses.length;
  168.         AVERAGE_RESPONSE_TIME = TOTAL_RESPONSE_TIME / (double) myProcesses.length;
  169.  
  170. //        Printing the whole part
  171.         System.out.println("Non-PreemptiveSJF Scheduling : --------------------------- ");
  172.         System.out.print("P" + sequence.remove(0));
  173.         for (Integer in : sequence) {
  174.             System.out.print(" --> P" + in);
  175.         }
  176.         System.out.println();
  177.  
  178.         System.out.println("ProcessName StartTime EndTime WaitingTime ResponseTime TurnAroundTime");
  179.         for (ProcessArr p : myProcesses) {
  180.             System.out.println("P" + p.processID + "           " + p.startTime + "          " + p.final_END_TIME + "         " + p.waitingTime + "        " + p.responseTime + "             " + p.turnaroundTime);
  181.         }
  182.         System.out.println("Average Waiting Time  : " + AVERAGE_WAITING_TIME);
  183.         System.out.println("Average Response Time : " + AVERAGE_RESPONSE_TIME);
  184.         System.out.println("\n\n\n\n");
  185.     }
  186.  
  187.     private static void preemptivePRIORITY(ProcessArr[] myProcesses) {
  188.         Arrays.sort(myProcesses, Comparator.comparingInt(a -> a.arrivalTime));
  189.         ArrayList<ProcessArr> queues = new ArrayList<>();
  190.         int startTime = myProcesses[0].arrivalTime;
  191.         for (ProcessArr p : myProcesses) if (p.arrivalTime <= startTime) queues.add(p);
  192.         queues.sort((a, b) -> Integer.compare(a.arrivalTime, b.arrivalTime));
  193.  
  194.         List<Integer> sequence = new ArrayList<>();
  195.         while (!queues.isEmpty()) {
  196.  
  197.             ProcessArr p = queues.get(0);
  198.             sequence.add(p.processID);
  199.  
  200.  
  201.             if (p.startTime == Integer.MAX_VALUE) {
  202.                 p.startTime = startTime;
  203.             }
  204.  
  205.             startTime++;
  206.             p.present_BURST_SIZE--;
  207.  
  208.             if (p.present_BURST_SIZE == 0) {
  209.                 p.final_END_TIME = startTime + p.present_BURST_SIZE;
  210.                 p.turnaroundTime = p.final_END_TIME - p.arrivalTime;
  211.                 p.waitingTime = p.turnaroundTime - p.burstTime;
  212.                 p.responseTime = p.startTime - p.arrivalTime;
  213.  
  214.                 queues.remove(0);
  215.             }
  216.  
  217.             p.checked = true;
  218.  
  219.             for (ProcessArr process : myProcesses)
  220.                 if (!process.checked && process.arrivalTime <= startTime) {
  221.                     queues.add(process);
  222.                     process.checked = true;
  223.                 }
  224.             queues.sort(Comparator.comparingInt(a -> a.priority));
  225.         }
  226.  
  227.         int TOTAL_WAITING_TIME = 0;
  228.         double AVERAGE_WAITING_TIME;
  229.  
  230.         int TOTAL_RESPONSE_TIME = 0;
  231.         double AVERAGE_RESPONSE_TIME;
  232.  
  233.         for (ProcessArr p : myProcesses) {
  234.             TOTAL_WAITING_TIME += p.waitingTime;
  235.             TOTAL_RESPONSE_TIME += p.responseTime;
  236.         }
  237.         AVERAGE_WAITING_TIME = TOTAL_WAITING_TIME / (double) myProcesses.length;
  238.         AVERAGE_RESPONSE_TIME = TOTAL_RESPONSE_TIME / (double) myProcesses.length;
  239.  
  240. //        Printing the whole part
  241.         System.out.println("PreemptivePRIORITY Scheduling : --------------------------- ");
  242.         System.out.print("P" + sequence.remove(0));
  243.         for (Integer in : sequence) {
  244.             System.out.print(" --> P" + in);
  245.         }
  246.         System.out.println();
  247.  
  248.         System.out.println("ProcessName StartTime EndTime WaitingTime ResponseTime TurnAroundTime");
  249.         for (ProcessArr p : myProcesses) {
  250.             System.out.println("P" + p.processID + "           " + p.startTime + "          " + p.final_END_TIME + "         " + p.waitingTime + "        " + p.responseTime + "             " + p.turnaroundTime);
  251.         }
  252.         System.out.println("Average Waiting Time  : " + AVERAGE_WAITING_TIME);
  253.         System.out.println("Average Response Time : " + AVERAGE_RESPONSE_TIME);
  254.         System.out.println("\n\n\n\n");
  255.     }
  256.  
  257.     private static void preemptiveSJF(ProcessArr[] myProcesses) {
  258.         Arrays.sort(myProcesses, Comparator.comparingInt(a -> a.arrivalTime));
  259.         ArrayList<ProcessArr> queues = new ArrayList<>();
  260.         int startTime = myProcesses[0].arrivalTime;
  261.         for (ProcessArr p : myProcesses) if (p.arrivalTime <= startTime) queues.add(p);
  262.         queues.sort((a, b) -> Integer.compare(a.arrivalTime, b.arrivalTime));
  263.  
  264.         List<Integer> sequence = new ArrayList<>();
  265.         while (!queues.isEmpty()) {
  266.  
  267.             ProcessArr p = queues.get(0);
  268.             sequence.add(p.processID);
  269.  
  270.  
  271.             if (p.startTime == Integer.MAX_VALUE) {
  272.                 p.startTime = startTime;
  273.             }
  274.  
  275.             startTime++;
  276.             p.present_BURST_SIZE--;
  277.  
  278.             if (p.present_BURST_SIZE == 0) {
  279.                 p.final_END_TIME = startTime + p.present_BURST_SIZE;
  280.                 p.turnaroundTime = p.final_END_TIME - p.arrivalTime;
  281.                 p.waitingTime = p.turnaroundTime - p.burstTime;
  282.                 p.responseTime = p.startTime - p.arrivalTime;
  283.  
  284.                 queues.remove(0);
  285.             }
  286.  
  287.             p.checked = true;
  288.  
  289.             for (ProcessArr process : myProcesses)
  290.                 if (!process.checked && process.arrivalTime <= startTime) {
  291.                     queues.add(process);
  292.                     process.checked = true;
  293.                 }
  294.             queues.sort(Comparator.comparingInt(a -> a.burstTime));
  295.         }
  296.  
  297.         int TOTAL_WAITING_TIME = 0;
  298.         double AVERAGE_WAITING_TIME;
  299.  
  300.         int TOTAL_RESPONSE_TIME = 0;
  301.         double AVERAGE_RESPONSE_TIME;
  302.  
  303.         for (ProcessArr p : myProcesses) {
  304.             TOTAL_WAITING_TIME += p.waitingTime;
  305.             TOTAL_RESPONSE_TIME += p.responseTime;
  306.         }
  307.         AVERAGE_WAITING_TIME = TOTAL_WAITING_TIME / (double) myProcesses.length;
  308.         AVERAGE_RESPONSE_TIME = TOTAL_RESPONSE_TIME / (double) myProcesses.length;
  309.  
  310. //        Printing the whole part
  311.         System.out.println("PreemptiveSJF Scheduling : --------------------------- ");
  312.         System.out.print("P" + sequence.remove(0));
  313.         for (Integer in : sequence) {
  314.             System.out.print(" --> P" + in);
  315.         }
  316.         System.out.println();
  317.  
  318.         System.out.println("ProcessName StartTime EndTime WaitingTime ResponseTime TurnAroundTime");
  319.         for (ProcessArr p : myProcesses) {
  320.             System.out.println("P" + p.processID + "           " + p.startTime + "          " + p.final_END_TIME + "         " + p.waitingTime + "        " + p.responseTime + "             " + p.turnaroundTime);
  321.         }
  322.         System.out.println("Average Waiting Time  : " + AVERAGE_WAITING_TIME);
  323.         System.out.println("Average Response Time : " + AVERAGE_RESPONSE_TIME);
  324.         System.out.println("\n\n\n\n");
  325.     }
  326.  
  327.     private static void roundRobin(ProcessArr[] myProcesses) {
  328.         Arrays.sort(myProcesses, Comparator.comparingInt(a -> a.arrivalTime));
  329.         ArrayList<ProcessArr> queues = new ArrayList<>();
  330.         int startTime = myProcesses[0].arrivalTime;
  331.         for (ProcessArr p : myProcesses) if (p.arrivalTime <= startTime) queues.add(p);
  332.         queues.sort(Comparator.comparingInt(a -> a.arrivalTime));
  333.  
  334.         List<Integer> sequence = new ArrayList<>();
  335.  
  336.         while (!queues.isEmpty()) {
  337.  
  338.             ProcessArr p = queues.get(0);
  339.             sequence.add(p.processID);
  340.  
  341.             boolean willBeAdded = false;
  342.  
  343.             if (p.startTime == Integer.MAX_VALUE) {
  344.                 p.startTime = startTime;
  345.             }
  346.  
  347.             if (p.present_BURST_SIZE <= QUANTUM_TIME) {
  348.                 p.final_END_TIME = startTime + p.present_BURST_SIZE;
  349.                 p.turnaroundTime = p.final_END_TIME - p.arrivalTime;
  350.                 p.waitingTime = p.turnaroundTime - p.burstTime;
  351.                 p.responseTime = p.startTime - p.arrivalTime;
  352.  
  353.                 startTime += p.present_BURST_SIZE;
  354.                 p.present_BURST_SIZE = 0;
  355.  
  356.                 p.checked = true;
  357.                 queues.remove(0);
  358.             } else {
  359.                 startTime += QUANTUM_TIME;
  360.                 p.checked = true;
  361.                 p.present_BURST_SIZE -= QUANTUM_TIME;
  362.                 willBeAdded = true;
  363.             }
  364.  
  365.             ArrayList<ProcessArr> list = new ArrayList<>();
  366.             for (ProcessArr process : myProcesses)
  367.                 if (!process.checked && process.arrivalTime <= startTime) {
  368.                     list.add(process);
  369.                     process.checked = true;
  370.                 }
  371. //            list.sort(Comparator.comparingInt(a -> a.arrivalTime));
  372.  
  373.             queues.addAll(list);
  374.             if (willBeAdded) queues.add(queues.remove(0));
  375.         }
  376.  
  377.         int TOTAL_WAITING_TIME = 0;
  378.         double AVERAGE_WAITING_TIME;
  379.  
  380.         int TOTAL_RESPONSE_TIME = 0;
  381.         double AVERAGE_RESPONSE_TIME;
  382.  
  383.         for (ProcessArr p : myProcesses) {
  384.             TOTAL_WAITING_TIME += p.waitingTime;
  385.             TOTAL_RESPONSE_TIME += p.responseTime;
  386.         }
  387.         AVERAGE_WAITING_TIME = TOTAL_WAITING_TIME / (double) myProcesses.length;
  388.         AVERAGE_RESPONSE_TIME = TOTAL_RESPONSE_TIME / (double) myProcesses.length;
  389.  
  390. //        Printing the whole part
  391.         System.out.println("Round Robin (quantum=4) Scheduling : --------------------------- ");
  392.         System.out.print("P" + sequence.remove(0));
  393.         for (Integer in : sequence) {
  394.             System.out.print(" --> P" + in);
  395.         }
  396.         System.out.println();
  397.  
  398.         System.out.println("ProcessName StartTime EndTime WaitingTime ResponseTime TurnAroundTime");
  399.         for (ProcessArr p : myProcesses) {
  400.             System.out.println("P" + p.processID + "           " + p.startTime + "          " + p.final_END_TIME + "         " + p.waitingTime + "        " + p.responseTime + "             " + p.turnaroundTime);
  401.         }
  402.         System.out.println("Average Waiting Time  : " + AVERAGE_WAITING_TIME);
  403.         System.out.println("Average Response Time : " + AVERAGE_RESPONSE_TIME);
  404.         System.out.println("\n\n\n\n");
  405.  
  406.     }
  407.  
  408.     private static class ProcessArr {
  409.         public int startTime;
  410.         public int present_BURST_SIZE;
  411.         public int final_END_TIME;
  412.         public int turnaroundTime;
  413.         public int waitingTime;
  414.         public int responseTime;
  415.         public boolean checked;
  416.         int processID;
  417.         int arrivalTime;
  418.         int burstTime;
  419.         int priority;
  420.  
  421.         public ProcessArr(int processID, int arrivalTime, int burstTime, int priority) {
  422.             this.processID = processID;
  423.             this.arrivalTime = arrivalTime;
  424.             this.burstTime = burstTime;
  425.             this.priority = priority;
  426.             this.startTime = Integer.MAX_VALUE;
  427.             this.final_END_TIME = Integer.MAX_VALUE;
  428.             this.present_BURST_SIZE = burstTime;
  429.             this.checked = false;
  430.         }
  431.     }
  432. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement