Round Robin - CPU Scheduling


Program

#include <stdio.h> #define MAX_PROCESSES 10 void roundRobin(int n, int burstTime[], int timeQuantum) { int waitingTime[MAX_PROCESSES] = {0}; int turnaroundTime[MAX_PROCESSES] = {0}; int remainingTime[MAX_PROCESSES]; int i, time = 0, completed = 0; float totWaitingTime = 0, totTurnaroundTime = 0; // Initialize remaining time with burst time for (i = 0; i < n; i++) { remainingTime[i] = burstTime[i]; } // Process all processes until completion while (completed != n) { int allDone = 1; // Loop through all processes for (i = 0; i < n; i++) { if (remainingTime[i] > 0) { allDone = 0; // Some process is still pending if (remainingTime[i] > timeQuantum) { // Process for time quantum time += timeQuantum; remainingTime[i] -= timeQuantum; } else { // Process for remaining time and mark as completed time += remainingTime[i]; waitingTime[i] = time - burstTime[i]; remainingTime[i] = 0; completed++; } } } // If all processes are done, break if (allDone) { break; } } // Calculate turnaround time and averages for (i = 0; i < n; i++) { turnaroundTime[i] = burstTime[i] + waitingTime[i]; totWaitingTime += waitingTime[i]; totTurnaroundTime += turnaroundTime[i]; } // Print results printf("\nProcess\tBurst Time\tWaiting Time\tTurnaround Time\n"); for (i = 0; i < n; i++) { printf("%d\t%d\t\t%d\t\t%d\n", i + 1, burstTime[i], waitingTime[i], turnaroundTime[i]); } printf("\nTotal Waiting Time: %.2f\n", totWaitingTime); printf("Average Waiting Time: %.2f\n", totWaitingTime / n); printf("Total Turnaround Time: %.2f\n", totTurnaroundTime); printf("Average Turnaround Time: %.2f\n", totTurnaroundTime / n); } int main() { int n, i, timeQuantum; int burstTime[MAX_PROCESSES]; printf("Enter the number of processes (max %d): ", MAX_PROCESSES); scanf("%d", &n); if (n > MAX_PROCESSES || n <= 0) { printf("Invalid number of processes\n"); return 1; } printf("Enter burst time for each process:\n"); for (i = 0; i < n; i++) { printf("Process %d: ", i + 1); scanf("%d", &burstTime[i]); if (burstTime[i] <= 0) { printf("Burst time must be positive\n"); return 1; } } printf("Enter time quantum: "); scanf("%d", &timeQuantum); if (timeQuantum <= 0) { printf("Time quantum must be positive\n"); return 1; } printf("\nRound Robin Scheduling Algorithm\n"); roundRobin(n, burstTime, timeQuantum); return 0; }