csenotes12

preemptive, round-robin scheduling algorithm

Apr 9th, 2019
299
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<stdio.h>
  2. #define N 10  
  3. //pid is process id
  4. //pp is process priority
  5. //bt is process burst time
  6. //at is process arrival time
  7. typedef struct
  8. {
  9.       int pid, at,bt,pp;
  10.       int q, ready;
  11. }process_structure;
  12. int Queue(int t1)
  13. {
  14.       if(t1==0 || t1==1 || t1==2 || t1==3)
  15.       {
  16.             return 1;
  17.       }
  18.       else
  19.       {
  20.             return 2;
  21.       }
  22. }
  23. int main()
  24. {
  25.       int limit, count, temp_process, time, j, y;
  26.       process_structure temp;
  27.       printf("Enter Total Number of Processes:\t");
  28.       scanf("%d",&limit);  
  29.       process_structure process[limit];
  30.       for(count=0;count<limit;count++)
  31.       {
  32.             printf("\nProcess ID:\t");
  33.             scanf("%d", &process[count].pid);
  34.             printf("Arrival Time: ");
  35.             scanf("%d", &process[count].at);
  36.             printf("Burst Time: ");
  37.             scanf("%d", &process[count].bt);
  38.             printf("Process Priority: ");
  39.             scanf("%d", &process[count].pp);
  40.             temp_process = process[count].pp;
  41.             process[count].q = Queue(temp_process);
  42.             process[count].ready = 0;
  43.       }
  44.       time = process[0].bt;
  45.       for(y=0;y<limit;y++)
  46.       {
  47.             for(count=y;count<limit;count++)
  48.             {
  49.                   if(process[count].at < time)
  50.                   {
  51.                         process[count].ready = 1;
  52.                   }
  53.             }
  54.             for(count=y;count<limit-1;count++)
  55.             {
  56.                   for(j=count+1; j<limit; j++)
  57.                   {
  58.                         if(process[count].ready == 1 && process[j].ready == 1)
  59.                         {
  60.                               if(process[count].q == 2 && process[j].q == 1)
  61.                               {
  62.                                     temp = process[count];
  63.                                     process[count] = process[j];
  64.                                     process[j] = temp;
  65.                               }
  66.                         }
  67.                   }
  68.             }
  69.             for(count=y;count<limit-1;count++)
  70.             {
  71.                   for(j=count+1;j<limit;j++)
  72.                   {
  73.                         if(process[count].ready==1 && process[j].ready==1)
  74.                         {
  75.                               if(process[count].q==1 && process[j].q==1)
  76.                               {
  77.                                     if(process[count].bt > process[j].bt)
  78.                                     {
  79.                                           temp=process[count];
  80.                                           process[count]=process[j];
  81.                                           process[j]=temp;
  82.                                     }
  83.                                     else
  84.                                     {
  85.                                           break;
  86.                                     }
  87.                               }
  88.                         }
  89.                   }
  90.             }
  91.             printf("\nProcess[%d]:\tTime:\t%d To %d\n", process[y].pid, time, time + process[y].bt);
  92.             time = time + process[y].bt;
  93.             for(count=y; count<limit; count++)
  94.             {
  95.                   if(process[count].ready==1)
  96.                   {
  97.                         process[count].ready=0;
  98.                   }
  99.             }
  100.       }
  101.       return 0;
  102. }
RAW Paste Data