#include <stdio.h>
#define MAX_PROCESSES 100
typedef struct {
int id; // Process ID
int arrival; // Arrival time
int burst; // Burst time
int remaining; // Remaining time
int finish; // Finish time
int waiting; // Waiting time
int turnaround; // Turnaround time
} Process;
int main() {
int n;
Process processes[MAX_PROCESSES];
printf("Enter number of processes: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) {
processes[i].id = i + 1;
printf("Enter arrival time and burst time for process %d: ", i + 1);
scanf("%d %d", &processes[i].arrival, &processes[i].burst);
}
int currentTime = 0, completed = 0, shortest = 0;
int minRemaining = 10000;
int finishTime;
int found = 0;
// Initialize remaining times
for (int i = 0; i < n; i++) {
processes[i].remaining = processes[i].burst;
}
while (completed != n) {
// Find process with minimum remaining time at current time
for (int i = 0; i < n; i++) {
if (processes[i].arrival <= currentTime && processes[i].remaining < minRemaining && processes[i].remaining > 0) {
minRemaining = processes[i].remaining;
shortest = i;
found = 1;
}
}
if (!found) {
currentTime++;
continue;
}
// Decrement remaining time
processes[shortest].remaining--;
// Update minimum remaining time
minRemaining = processes[shortest].remaining;
if (minRemaining == 0) {
minRemaining = 10000;
}
// If a process gets completely executed
if (processes[shortest].remaining == 0) {
completed++;
found = 0;
finishTime = currentTime + 1;
processes[shortest].finish = finishTime;
processes[shortest].waiting = finishTime - processes[shortest].burst - processes[shortest].arrival;
if (processes[shortest].waiting < 0) {
processes[shortest].waiting = 0;
}
processes[shortest].turnaround = processes[shortest].waiting + processes[shortest].burst;
}
currentTime++;
}
float totalWaiting = 0, totalTurnaround = 0;
printf("\nPID\tArrival\tBurst\tFinish\tWaiting\tTurnaround\n");
for (int i = 0; i < n; i++) {
totalWaiting += processes[i].waiting;
totalTurnaround += processes[i].turnaround;
printf("%d\t%d\t%d\t%d\t%d\t%d\n",
processes[i].id,
processes[i].arrival,
processes[i].burst,
processes[i].finish,
processes[i].waiting,
processes[i].turnaround);
}
printf("\nAverage Waiting Time: %.2f\n", totalWaiting / n);
printf("Average Turnaround Time: %.2f\n", totalTurnaround / n);
return 0;
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter