First Come First Serve Scheduling Algorithm in C with Gantt Chart
First Come First Serve is a CPU scheduling algorithm. In this algorithm, Jobs are executed on First Come First Serve basis.That is, the job that comes first, executes first. Although this algorithm is easy to understand and easy to implement, it gives poor performance as Average Waiting Time is high.
Here is a C implementation of the FCFS algorithm. Arrival time of each process is assumed 0 in this program.
Here is a C implementation of the FCFS algorithm. Arrival time of each process is assumed 0 in this program.
#include <stdio.h> #include <stdlib.h> #define MAX 100 typedef struct { int pid; int burst_time; int waiting_time; int turnaround_time; } Process; void print_table(Process p[], int n); void print_gantt_chart(Process p[], int n); int main() { Process p[MAX]; int i, j, n; int sum_waiting_time = 0, sum_turnaround_time; printf("Enter total number of process: "); scanf("%d", &n); printf("Enter burst time for each process:\n"); for(i=0; i<n; i++) { p[i].pid = i+1; printf("P[%d] : ", i+1); scanf("%d", &p[i].burst_time); p[i].waiting_time = p[i].turnaround_time = 0; } // calculate waiting time and turnaround time p[0].turnaround_time = p[0].burst_time; for(i=1; i<n; i++) { p[i].waiting_time = p[i-1].waiting_time + p[i-1].burst_time; p[i].turnaround_time = p[i].waiting_time + p[i].burst_time; } // calculate sum of waiting time and sum of turnaround time for(i=0; i<n; i++) { sum_waiting_time += p[i].waiting_time; sum_turnaround_time += p[i].turnaround_time; } // print table puts(""); // Empty line print_table(p, n); puts(""); // Empty Line printf("Total Waiting Time : %-2d\n", sum_waiting_time); printf("Average Waiting Time : %-2.2lf\n", (double)sum_waiting_time / (double) n); printf("Total Turnaround Time : %-2d\n", sum_turnaround_time); printf("Average Turnaround Time : %-2.2lf\n", (double)sum_turnaround_time / (double) n); // print Gantt chart puts(""); // Empty line puts(" GANTT CHART "); puts(" *********** "); print_gantt_chart(p, n); return 0; } void print_table(Process p[], int n) { int i; puts("+-----+------------+--------------+-----------------+"); puts("| PID | Burst Time | Waiting Time | Turnaround Time |"); puts("+-----+------------+--------------+-----------------+"); for(i=0; i<n; i++) { printf("| %2d | %2d | %2d | %2d |\n" , p[i].pid, p[i].burst_time, p[i].waiting_time, p[i].turnaround_time ); puts("+-----+------------+--------------+-----------------+"); } } void print_gantt_chart(Process p[], int n) { int i, j; // print top bar printf(" "); for(i=0; i<n; i++) { for(j=0; j<p[i].burst_time; j++) printf("--"); printf(" "); } printf("\n|"); // printing process id in the middle for(i=0; i<n; i++) { for(j=0; j<p[i].burst_time - 1; j++) printf(" "); printf("P%d", p[i].pid); for(j=0; j<p[i].burst_time - 1; j++) printf(" "); printf("|"); } printf("\n "); // printing bottom bar for(i=0; i<n; i++) { for(j=0; j<p[i].burst_time; j++) printf("--"); printf(" "); } printf("\n"); // printing the time line printf("0"); for(i=0; i<n; i++) { for(j=0; j<p[i].burst_time; j++) printf(" "); if(p[i].turnaround_time > 9) printf("\b"); // backspace : remove 1 space printf("%d", p[i].turnaround_time); } printf("\n"); }
No comments:
Post a Comment