Practical 1: Write a program to simulate CPU Scheduling Algorithms: FCFS, SJF
(Preemptive), Priority (Non-Preemptive) and Round Robin (Preemptive).
ROUND ROBIN:
#include<stdio.h>
int main() {
   int i, j, n, bu[10], wa[10], tat[10], t, ct[10], max;
   float awt = 0, att = 0, temp = 0;
   printf("Onkar lonsane Roll No = 28");
  printf("\nEnter the number of processes: ");
  scanf("%d", &n);
  // Input burst times for each process
  for(i = 0; i < n; i++) {
      printf("Enter Burst Time for Process %d: ", i + 1);
      scanf("%d", &bu[i]);
      ct[i] = bu[i]; // Copy burst time to ct array for later calculations
  }
  printf("Enter the size of time slice: ");
  scanf("%d", &t);
  max = bu[0];
  for(i = 1; i < n; i++) {
     if(max < bu[i])
        max = bu[i];
  }
  // Round Robin Scheduling logic
  for(j = 0; j < (max / t) + 1; j++) {
     for(i = 0; i < n; i++) {
        if(bu[i] != 0) {
           if(bu[i] <= t) {
              tat[i] = temp + bu[i];
              temp = temp + bu[i];
              bu[i] = 0;
           } else {
              bu[i] = bu[i] - t;
              temp = temp + t;
           }
        }
     }
  }
  // Calculate waiting time and turnaround time for each process
  for(i = 0; i < n; i++) {
     wa[i] = tat[i] - ct[i];
     att += tat[i];
        awt += wa[i];
    }
    // Print Average Turnaround Time and Average Waiting Time
    printf("\nAverage Turnaround Time: %.2f", att / n);
    printf("\nAverage Waiting Time: %.2f\n", awt / n);
    // Display process details
    printf("\nPROCESS\t BURST TIME \t WAITING TIME\t TURNAROUND TIME\n");
    for(i = 0; i < n; i++) {
       printf("%d\t %d\t\t %d\t\t %d\n", i + 1, ct[i], wa[i], tat[i]);
    }
    return 0;
}
Output:
/tmp/cLPP1KUzvE.o
Onkar lonsane Roll No = 28
Enter the number of processes: 2
Enter Burst Time for Process 1: 4
Enter Burst Time for Process 2: 6
Enter the size of time slice: 2
Average Turnaround Time: 8.00
Average Waiting Time: 3.00
PROCESS          BURST TIME WAITING TIME       TURNAROUND TIME
  1                   4           2                 6
  2                   6           4                 10
=== Code Execution Successful ===