Exercice 1: Ordonnancement Des Processus
Exercice 1: Ordonnancement Des Processus
Exercice 1: Ordonnancement Des Processus
A/ Supposons qu'un système d'exploitation gère cinq processus (A, B, C, D, et E) qui arrivent
à différents moments et doivent être exécutés sur un seul processeur. Chaque processus a une
durée d'exécution différente, et le système utilise l'ordonnancement préemptif en utilisant la
priorité comme critère.
A 0 6 3
B 2 4 2
C 4 8 1
D 5 2 3
E 6 3 2
À chaque instant, le système choisit le processus avec la priorité la plus élevée. En cas d'égalité
de priorité, le processus qui arrive en premier est choisi. Si un processus termine son exécution
ou est préempté, le processus avec la priorité la plus élevée est choisi.
1. Quel sera l'ordre d'exécution des processus ? Fournissez une séquence d'exécution avec
l'heure d'arrivée, la priorité, le temps d'exécution restant, et le processus en cours.
A D B E C
B E C
0 6 8 12 15 23
2. Quelle est la durée totale nécessaire pour exécuter les trois processus dans cet ordre ?
La durée totale nécessaire pour exécuter les trois processus= 23 ut
3. Donnez le temps moyen de séjour (temps moyen de rotation).
Temps de séjour = temps fin d’exécution – temps d’arrivée
Exercice 2 :
Écrire un programme P qui crée deux fils F1 et F2, tous les processus doivent afficher le PID
des trois processus avant de se terminer proprement.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
int pipe_fd[2];
pid_t pid_F1, pid_F2;
pid_t p_pid = getpid(); // PID du processus parent
if (pid_F1 < 0) {
fprintf(stderr, "Erreur lors de la création du processus fils F1\n");
return 1;
} else if (pid_F1 == 0) {
// Code du premier fils (F1)
close(pipe_fd[1]); // Fermer l'extrémité d'écriture du tube
if (pid_F2 < 0) {
fprintf(stderr, "Erreur lors de la création du processus fils
F2\n");
return 1;
} else if (pid_F2 == 0) {
// Code du deuxième fils (F2)
close(pipe_fd[0]); // Fermer l'extrémité d'écriture du tube
pid_t pidfils2 = getpid();
// Lire le PID de F1 depuis le tube
pid_t f1_pid;
write(pipe_fd[1], &pidfils2, sizeof(pid_t));;
close(pipe_fd[1]); // Fermer l'extrémité de lecture du tube
// Afficher les PIDs
printf("Je suis le fils F2 avec PID : %d, PID de mon père : %d,
PID du fils F1 : %d\n", getpid(), p_pid, pid_F1);
exit(0);
} else {
// Code du processus parent
// Attendre la fin des fils
wait(NULL);
wait(NULL);
return 0;
}
Exercice 3 :
P1 P2 P4 P2 P5 P1 P3
0 1 3 4 6 8 15 24
P1 P2 P3 P1 P4 P5 P2 P3 P1 P3 P1 P3
0 2 4 6 8 9 11 13 15 17 19 21 24
3. Comparez les résultats obtenus avec les algorithmes SRTF et Round Robin (RR) pour les
processus donnés. Discutez des avantages et des inconvénients de chaque algorithme en
termes de temps d'attente moyen, de temps d'exécution total et de réactivité vis-à-visdes
processus avec différents temps d'exécution.
SRTF offre un temps d'attente moyen plus faible car il priorise les processus
avec le temps d'exécution restant le plus court. Cela réduit le temps d'attente
des processus courts, en particulier pour P4 qui se termine immédiatement.
• SRTF avec priorité: Priorise fortement les processus courts, minimisant leur temps
d'attente.
• Round Robin: Peut entraîner une attente plus longue pour les processus courts en
raison du temps d'attente dans la file d'attente des prêts, surtout si le quantum est
grand.