coffeebeforecode

OS Lab Assignment 2 FCFS

Sep 17th, 2021
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.64 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4.  
  5. typedef struct job{
  6.     int id;
  7.     int at;
  8.     int bt;
  9.     int st;
  10.     int ct;
  11.     int wt;
  12.     int tat;
  13. } job;
  14.  
  15. void sortJobs(job jobs[], int n){
  16.     int i, j;
  17.     job t;
  18.     for(i = 0; i < n-1; i++){
  19.         for(j = i+1; j < n; j++){
  20.             if (jobs[i].at > jobs[j].at){
  21.                 t = jobs[i];
  22.                 jobs[i] = jobs[j];
  23.                 jobs[j] = t;
  24.             }
  25.         }
  26.     }
  27. }
  28.  
  29. void sortJobsID(job jobs[], int n){
  30.     int i, j;
  31.     job t;
  32.     for(i = 0; i < n-1; i++){
  33.         for(j = i+1; j < n; j++){
  34.             if (jobs[i].id > jobs[j].id){
  35.                 t = jobs[i];
  36.                 jobs[i] = jobs[j];
  37.                 jobs[j] = t;
  38.             }
  39.         }
  40.     }
  41. }
  42.  
  43. int solve(){
  44.     int k;
  45.     printf("\n\tFCFS Scheduling Algorithm\n");
  46.     printf("\n1. Same Arrival time (0)");
  47.     printf("\n2. Different Arrival Times\n>>");
  48.     scanf("%d", &k);
  49.     if (!(k == 1) && !(k == 2)){
  50.         printf("\nINVALID");
  51.         exit(0);
  52.     }
  53.     int n;
  54.     printf("Enter number of processes: ");
  55.     scanf("%d", &n);
  56.     job *jobs;
  57.     jobs = (job*)malloc(sizeof(job)*n);
  58.     int i;
  59.     for(i=0; i < n; i++){
  60.         jobs[i].id = i;
  61.         if (k != 1){
  62.             printf("Enter Arrival Time of Process %d: ", i);
  63.             scanf("%d", &jobs[i].at);
  64.         }
  65.         else{
  66.             jobs[i].at = 0;
  67.         }
  68.         printf("Enter Burst Time of Process %d: ", i);
  69.         scanf("%d", &jobs[i].bt);
  70.     }
  71.     sortJobs(jobs, n);
  72.    
  73.     jobs[0].st = jobs[0].at;
  74.     jobs[0].ct = jobs[0].at + jobs[0].bt;
  75.     jobs[0].wt = 0;
  76.     jobs[0].tat = jobs[0].bt;
  77.  
  78.     for (i = 1; i < n; i++){
  79.         jobs[i].st = (jobs[i].at > jobs[i-1].ct) ? jobs[i].at : jobs[i-1].ct;
  80.        
  81.         //printf("\nAT[%d] CT[%d] | %d %d\n", i, i-1, jobs[i].at, jobs[i-1].ct);
  82.         //printf("jobs[%d].st = %d\n", i, jobs[i].st);
  83.         jobs[i].ct = jobs[i].st + jobs[i].bt;
  84.         jobs[i].tat = jobs[i].ct - jobs[i].at;
  85.         jobs[i].wt = jobs[i].tat - jobs[i].bt;
  86.        
  87.     }
  88.  
  89.     sortJobsID(jobs, n);
  90.  
  91.     printf("\nID\tAT\tBT\tST\tCT\tWT\tTAT");
  92.     for (i = 0; i < n; i++){
  93.  
  94.         printf("\n%d\t%d\t%d\t%d\t%d\t%d\t%d", jobs[i].id, jobs[i].at, jobs[i].bt, jobs[i].st, jobs[i].ct, jobs[i].wt, jobs[i].tat);
  95.     }
  96.  
  97.     float avgWT = 0;
  98.     float avgTAT = 0;
  99.  
  100.     for(i = 0; i < n; i++){
  101.         avgWT += jobs[i].wt;
  102.         avgTAT += jobs[i].tat;
  103.     }
  104.     avgWT /= n;
  105.     avgTAT /= n;
  106.     printf("\nAverage Waiting Time = %f\nAverage Turnaround Time = %f", avgWT, avgTAT);
  107. }
  108.  
  109. int main(){
  110.     solve();
  111.     return 0;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment