J'ai essayé de comprendre comment le concept du round robin et comment l'algorithme fonctionne. J'ai essayé d'exécuter ce code dans Ubuntu et je n'arrive pas à obtenir la réponse que je voulais.

Donc basé sur l'algorithme de planification Round Robin ; Disons qu'il y a 3 processus. Où Processeur 1 - Burst Time est 24, Processor 2 - Burst time est 3 et Processor 3 - Burst time est 3. et le Time Quantum est 3.

Sur la base de ces informations, le temps d'attente pour P1 est de 6, P2 est de 4 et P3 est de 7. Ainsi, le temps de rotation est P1 est de 30, P2 est de 7 et P3 est de 10.

Le temps d'exécution moyen est de 15,6667 et le temps d'attente moyen est de 5,667

Sur la base du code ci-dessous, si je l'exécute, il me retournera ; pour le temps d'attente - P1 est 6, P2 est 3 et P3 est 6, le temps d'exécution P1 est 30, P2 est 6, P3 est 9.

Et le temps d'exécution moyen est de 15 000 et le temps d'attente moyen est de 5 000

Je n'arrive pas à comprendre l'erreur. Quelqu'un peut-il m'aider avec ce problème et fournir une explication de l'erreur et de la solution?

#include<stdio.h>
#include<curses.h>
int main()
{
   int i,j,n,bu[10],wa[10],tat[10],t,ct[10],max;
   float awt=0,att=0,temp=0;
   clear();
   printf("Enter the no of processes -- ");
   scanf("%d",&n);
   for(i=0;i<n;i++)
   {
       printf("\nEnter Burst Time for process %d -- ", i+1);
       scanf("%d",&bu[i]);
       ct[i]=bu[i];
   }
   printf("\nEnter the size of time slice -- ");
   scanf("%d",&t);
   max=bu[0];
   for(i=1;i<n;i++)
       if(max<bu[i])
           max=bu[i];
   for(j=0;j<(max/t)+1;j++)
       for(i=0;i<n;i++)
           if(bu[i]!=0)
             if(bu[i]<=t)
             {
                tat[i]=temp+bu[i];
                temp=temp+bu[i];
                bu[i]=0;
             }
             else
             {
                bu[i]=bu[i]-t;
                temp=temp+t;
             }
   for(i=0;i<n;i++)
   {
      wa[i]=tat[i]-ct[i];
      att+=tat[i];
      awt+=wa[i];
   }
   printf("\n\tPROCESS\t BURST TIME \t WAITING TIME\tTURNAROUND TIME\n");
   for(i=0;i<n;i++)
   {
       printf("\t%d \t %d \t\t %d \t\t %d \n",i+1,ct[i],wa[i],tat[i]);
   }
   printf("\nThe Average Turnaround time is -- %f",att/n);
   printf("\nThe Average Waiting time is -- %f ",awt/n);
   getch();
}
-1
niizz 30 janv. 2020 à 17:58

1 réponse

Meilleure réponse

Le code renvoie la bonne réponse.

Tous les processus sont arrivés au temps 0.

P1 - 0-3 21 unités restantes

P2 - 3-6 0 unités restantes

P3 - 6-9 0 unités restantes

P1 - 9-30 0 unités restantes

P1 a attendu 6 unités, P2 a attendu 3 unités et P3 a attendu 6 unités.

Notez que le temps d'attente est la durée pendant laquelle un processus attend sans être exécuté après avoir été donné au planificateur. Le temps d'exécution est le temps total qu'un processus a pris pour terminer son exécution (temps d'attente + temps de rafale).

Temps d'attente moyen : (6+3+6) / 3 = 15

Délai d'exécution moyen = (30+6+9) / 3 = 15

0
Karthik Chennupati 30 janv. 2020 à 15:22