Quantcast
Channel: Active questions tagged operating-system+scheduling - Stack Overflow
Viewing all articles
Browse latest Browse all 211

Priority CPU Scheduling Algorithm [closed]

$
0
0

I am a university student working on a Operating System Project and currently trying to implement a Priority CPU Scheduling Algorithm in Java but I am getting the wrong output.
I don't know why I am getting the wrong output but here is the code.

Please look at it and tell me what is wrong with it

package cpuscheduling;import java.util.*;class Process {    int id;    int arrivalTime;    int burstTime;    int priority;    int startTime;    int endTime;    public Process(int id, int arrivalTime, int burstTime, int priority) {        this.id = id;        this.arrivalTime = arrivalTime;        this.burstTime = burstTime;        this.priority = priority;    }}public class CPUScheduling {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        System.out.print("Enter the number of processes: ");        int n = scanner.nextInt();        Process[] processes = new Process[n];        System.out.println("Enter the arrival time, burst time, and priority for each process:");        for (int i = 0; i < n; i++) {            System.out.println("Process " + (i + 1) +":");            System.out.print("Arrival Time: ");            int arrivalTime = scanner.nextInt();            System.out.print("Burst Time: ");            int burstTime = scanner.nextInt();            System.out.print("Priority: ");            int priority = scanner.nextInt();            processes[i] = new Process(i + 1, arrivalTime, burstTime, priority);        }        Arrays.sort(processes, Comparator.comparingInt(p -> p.arrivalTime));        int currentTime = 0;        int totalWaitingTime = 0;        int totalTurnaroundTime = 0;        int contextSwitches = 0;        for (int i = 0; i < n; i++) {            Process currentProcess = processes[i];            if (currentTime < currentProcess.arrivalTime) {                contextSwitches++;                currentTime = currentProcess.arrivalTime;            }            currentProcess.startTime = currentTime;            currentTime += currentProcess.burstTime;            currentProcess.endTime = currentTime;            totalWaitingTime += (currentProcess.startTime - currentProcess.arrivalTime);            totalTurnaroundTime += (currentProcess.endTime - currentProcess.arrivalTime);        }        double averageWaitingTime = (double) totalWaitingTime / n;        double averageTurnaroundTime = (double) totalTurnaroundTime / n;        double throughput = (double) n / currentTime;        // Display the results        System.out.println("\nGantt Chart:");        displayGanttChart(processes);        System.out.println("\nWaiting Time:");        displayWaitingTimes(processes);        System.out.println("\nAverage Waiting Time: " + averageWaitingTime);        System.out.println("\nTurnaround Time:");        displayTurnaroundTimes(processes);        System.out.println("\nAverage Turnaround Time: " + averageTurnaroundTime);        System.out.println("\nThroughput: " + throughput);        System.out.println("\nNo. of Context Switching: " + contextSwitches);    }    public static void displayGanttChart(Process[] processes) {        System.out.print("-------------------------\n| ");        for (Process process : processes) {            System.out.print("P" + process.id +" | ");        }        System.out.println("\n-------------------------");    }    public static void displayWaitingTimes(Process[] processes) {        for (Process process : processes) {            System.out.println("P" + process.id +": " + (process.startTime - process.arrivalTime) +"ms");        }    }    public static void displayTurnaroundTimes(Process[] processes) {        for (Process process : processes) {            System.out.println("P" + process.id +": " + (process.endTime - process.arrivalTime) +"ms");        }    }}

And this is the output I am getting which is wrong

Enter the number of processes: 3Enter the arrival time, burst time, and priority for each process:Process 1:Arrival Time: 0Burst Time: 5Priority: 3Process 2:Arrival Time: 2Burst Time: 6Priority: 1Process 3:Arrival Time: 3Burst Time: 3Priority: 2Gantt Chart:-------------------------| P1 | P2 | P3 | -------------------------Waiting Time:P1: 0msP2: 3msP3: 8msAverage Waiting Time: 3.6666666666666665

And this is the output I am trying to get

Enter the number of processes: 3Enter the arrival time, burst time, and priority for each process:Process 1:Arrival Time: 0Burst Time: 5Priority: 3Process 2:Arrival Time: 2Burst Time: 6Priority: 1Process 3:Arrival Time: 3Burst Time: 3Priority: 2Gantt Chart:-------------------------| P1 | P2 | P2 | P3 | P1 | -------------------------Waiting Time:P1: 9msP2: 0msP3: 5msAverage Waiting Time: 4.666666666666667Turnaround Time:P1: 14msP2: 6msP3: 8msAverage Turnaround Time: 9.333333333333334Throughput: 0.21428571428571427No. of Context Switching: 3

I am stuck here for like 4 days and can't figure out a way to make it work.

I have tried asking ChatGPT about it and searched it on Google and YouTube.
I even tried to approach my class teacher but sadly she is not helping me out.


Viewing all articles
Browse latest Browse all 211

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>