OS - Que Program - implemente FCFS

 #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");

}




Post a Comment

0 Comments