Édition pédagogique en français
Ordonnancement Round Robin en C
Simulez des tours de processeur avec un quantum et calculez les temps d’attente.

Round Robin accorde à chaque processus prêt au plus un quantum de temps. S’il ne termine pas, il retourne en fin de file avec sa durée restante. Le quantum doit être positif pour faire progresser la simulation.
À chaque tour, exécutez le minimum entre quantum et durée restante. Notez la fin de chaque processus. Le temps de séjour est la fin moins l’arrivée ; l’attente est le séjour moins le temps CPU, selon les hypothèses du modèle.
Vérifiez si l’exemple suppose toutes les arrivées à zéro. Sinon, gérez file des prêts et périodes inactives. Le modèle pédagogique peut omettre le coût réel des changements de contexte.
Code source
#include <stdio.h>
#include <stdbool.h>
struct Process {
int id;
int burst_time;
int remaining_time;
int waiting_time;
int turnaround_time;
};
void calculate_round_robin(struct Process p[], int n, int quantum) {
int current_time = 0;
bool done;
for (int i = 0; i < n; i++) {
p[i].remaining_time = p[i].burst_time;
}
do {
done = true;
for (int i = 0; i < n; i++) {
if (p[i].remaining_time > 0) {
done = false;
if (p[i].remaining_time > quantum) {
current_time += quantum;
p[i].remaining_time -= quantum;
} else {
current_time += p[i].remaining_time;
p[i].waiting_time = current_time - p[i].burst_time;
p[i].remaining_time = 0;
}
}
}
} while (!done);
for (int i = 0; i < n; i++) {
p[i].turnaround_time = p[i].burst_time + p[i].waiting_time;
}
}
int main(void) {
struct Process proc[] = {
{1, 10, 0, 0, 0},
{2, 5, 0, 0, 0},
{3, 8, 0, 0, 0}
};
int n = sizeof(proc) / sizeof(proc[0]);
int time_quantum = 2;
calculate_round_robin(proc, n, time_quantum);
printf("PID\tBurst\tWaiting\tTurnaround\n");
float total_wt = 0, total_tat = 0;
for (int i = 0; i < n; i++) {
total_wt += proc[i].waiting_time;
total_tat += proc[i].turnaround_time;
printf("P%d\t%d\t%d\t%d\n", proc[i].id, proc[i].burst_time, proc[i].waiting_time, proc[i].turnaround_time);
}
printf("\nAverage Waiting Time = %.2f\n", total_wt / n);
printf("Average Turnaround Time = %.2f\n", total_tat / n);
return 0;
}Ouvrir dans le compilateurRésultat attendu
PID Burst Waiting Turnaround P1 10 13 23 P2 5 10 15 P3 8 13 21 Average Waiting Time = 12.00 Average Turnaround Time = 19.67
Questions fréquentes
Pourquoi le code et certains résultats restent-ils en anglais ?
Les mots-clés C, les identifiants, les commentaires du programme et les sorties attendues restent ceux de la version originale pour conserver un code exécutable et des tests cohérents. Les explications et les consignes sont traduites.