Process Scheduling
Process Scheduling
Process Scheduling
CODE:
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
typedef struct{
char id;
int burst_time,arrival_time,priority;
}process;
}
printf("\nAverage Waiting Time:%.2f\n",tot_waiting_time/n);
printf("Average Turnaround Time:%.2f\n",tot_turnaround_time/n);
}
int main(){
int n,quantum;
printf("Enter the number of processes:");
scanf("%d",&n);
process *processes = (process *)malloc(n * sizeof(process));
int *waiting_time_FCFS = (int *)malloc(n * sizeof(int));
int *turnaround_time_FCFS = (int *)malloc(n * sizeof(int));
int *waiting_time_SJF= (int *)malloc(n * sizeof(int));
int *turnaround_time_SJF = (int *)malloc(n * sizeof(int));
int *waiting_time_RR = (int *)malloc(n * sizeof(int));
int *turnaround_time_RR = (int *)malloc(n * sizeof(int));
int *waiting_time_PS = (int *)malloc(n * sizeof(int));
int *turnaround_time_PS = (int *)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
printf("Enter Process ID for process %d: ", i + 1);
scanf(" %c", &processes[i].id);
printf("Enter Arrival Time for process %c: ", processes[i].id);
scanf("%d", &processes[i].arrival_time);
printf("Enter Burst Time for process %c: ", processes[i].id);
scanf("%d", &processes[i].burst_time);
printf("Enter Priority for process %c: ", processes[i].id);
scanf("%d", &processes[i].priority);
}
printf("\nFCFS Scheduling:\n");
FCFS(processes, n, waiting_time_FCFS, turnaround_time_FCFS);
display(processes, n, waiting_time_FCFS, turnaround_time_FCFS);
printf("\nSJF Scheduling:\n");
SJF(processes, n, waiting_time_SJF, turnaround_time_SJF);
display(processes, n, waiting_time_SJF, turnaround_time_SJF);
printf("\nEnter Quantum Time for Round Robin: ");
scanf("%d", &quantum);
printf("\nRound Robin Scheduling with Quantum Time %d:\n", quantum);
RR(processes, n, waiting_time_RR, turnaround_time_RR, quantum);
display(processes, n, waiting_time_RR, turnaround_time_RR);
printf("\nPriority Scheduling:\n");
PS(processes, n, waiting_time_PS, turnaround_time_PS);
display(processes, n, waiting_time_PS, turnaround_time_PS);
float avg_waiting_time_FCFS = 0, avg_waiting_time_SJF = 0,
avg_waiting_time_rr = 0, avg_waiting_time_ps = 0;
for (int i = 0; i < n; i++) {
avg_waiting_time_FCFS += waiting_time_FCFS[i];
avg_waiting_time_SJF += waiting_time_SJF[i];
avg_waiting_time_rr += waiting_time_RR[i];
avg_waiting_time_ps += waiting_time_PS[i];
}
avg_waiting_time_FCFS /= n;
avg_waiting_time_SJF /= n;
avg_waiting_time_rr /= n;
avg_waiting_time_ps /= n;
printf("\nAverage Waiting Time for FCFS: %.2f\n", avg_waiting_time_FCFS);
printf("Average Waiting Time for SJF: %.2f\n", avg_waiting_time_SJF);
printf("Average Waiting Time for Round Robin: %.2f\n",
avg_waiting_time_rr);
printf("Average Waiting Time for Priority Scheduling: %.2f\n",
avg_waiting_time_ps);
printf("\nBest Scheduling Algorithm: ");
if (avg_waiting_time_FCFS <= avg_waiting_time_SJF && avg_waiting_time_FCFS
<= avg_waiting_time_rr && avg_waiting_time_FCFS <= avg_waiting_time_ps) {
printf("FCFS\n");
} else if (avg_waiting_time_SJF <= avg_waiting_time_FCFS &&
avg_waiting_time_SJF <= avg_waiting_time_rr && avg_waiting_time_SJF <=
avg_waiting_time_ps) {
printf("SJF\n");
} else if (avg_waiting_time_rr <= avg_waiting_time_FCFS &&
avg_waiting_time_rr <= avg_waiting_time_SJF && avg_waiting_time_rr <=
avg_waiting_time_ps) {
printf("Round Robin\n");
} else {
printf("Priority Scheduling\n");
}
free(processes);
free(waiting_time_FCFS);
free(turnaround_time_FCFS);
free(waiting_time_SJF);
free(turnaround_time_SJF);
free(waiting_time_RR);
free(turnaround_time_RR);
free(waiting_time_PS);
free(turnaround_time_PS);
return 0;
OUTPUT: