Vous êtes sur la page 1sur 4

Examen

Semestre : 2
Session : PRINCIPALE
Module : Système d’exploitation avancé (SEA1) Documents autorisés : NON
Enseignant(s) : UP Système Nombre de pages : 2
Classe(s) : 4EME ANNEE Date : 30/05/2022 Heure 14h30 Durée : 01h30

Exercice 1 (7 Points)
A l'aide des primitives « pipe » et « fork », écrire un programme P qui crée deux Fils
« F1 » et « F2 », tous les processus (Père et fils) doivent afficher les PID de tous les processus avant
de se terminer proprement.

#include <stdio.h> F2 = fork();


#include <unistd.h> if (F2 < 0) {
#include <stdio.h> perror("fork error");
#include <sys/wait.h> return 1;
int main () { } else if (F2 == 0){
pid_t P, F1, F2 ; // F2
P = getpid(); F2 = getpid();
int pdesc[2]; close(pdesc[0]);
if (pipe(pdesc) != 0) { if (write(pdesc[1],&F2,sizeof(pid_t)) ==
perror("pipe error"); sizeof(pid_t)) {
return 1; printf("Je suis : %d P= %d F1= %d
} F2= %d ", getpid(),P,F1,F2);
F1 = fork(); } else {
if (F1 < 0) { perror("erreur write");
perror("fork error"); return 1;
return 1; }
} else if (F1 == 0){ close(pdesc[1]);
F1 = getpid(); return 0;
// F1 }
close(pdesc[1]); close(pdesc[0]);
if (read(pdesc[0],&F2,sizeof(pid_t)) == close(pdesc[1]);
sizeof(pid_t)) { printf("Je suis : %d P= %d F1= %d
printf ("Je suis : %d P= %d F1= %d F2= %d ", getpid(),P,F1,F2);
F2= %d ", getpid(),P,F1,F2); wait(0);
} wait(0);
else return 0;
{ }
perror("erreur read");
return 1 ;
}
close(pdesc[0]);
return 0;
}

1/2
Exercice 2 (6 points)
Soit l'algorithme suivant :

int main() {
int i=0 ;
pid_t pid1, pid2 ;
printf("La valeur du Compteur = %d \n",i) ;
pid1 = fork() ;
wait(NULL);
if (pid1 == -1) {
printf("Erreur") ;
return(1) ;
}
if (pid1 == 0) {
i++ ;
printf("La valeur du Compteur = %d\n",i) ;
pid2 = fork() ;
if (pid2 == -1) {
printf(" Erreur ") ;
return(1) ;
}
if (pid2 == 0) {
i++ ;
printf("La valeur du Compteur = %d\n",i) ;
}
}else {
i-- ;
printf("La valeur du Compteur = %d\n",i) ;
wait(NULL);
}
}
1- Indiquer le nombre de processus créés par ce programme. (1 point)

Ce programme va générer 3 processus :

– Le premier processus père (qu'on appellera P1) est généré au lancement de l'application.

– Le deuxième (P2) sera créé à l'appel du premier fork().

2/2
– Le processus P2 va appeler le deuxième fork(), ce qui va générer le processus P3.

2- Donner l’arborescence des processus. (1 point)


3- Mentionner, pour chaque processus, l'affichage effectué. (2 points)

• P1 va afficher :

1- Compteur = 0

4- Compteur -1

• P2 va afficher :

2- Compteur 1

• P3 va afficher :

3- Compteur 2

4- Donner la définition d’un processus Zombie. (1 point)


5- Proposer une modification du code afin d’éviter les éventuels processus Zombies ?
(1point)

Exercice 3 (7 Points)
On suppose que l’exécution d’un processus se compose de deux temps processeur entre
lesquels s’intercale une demande d’E/S. On suppose de plus que les processus n’attendent pas pour
leur E/S (par exemple, ils utilisent tous un périphérique différent).
Les processus usuellement utilisés par le système après son chargement sont :

Processus Arrivé Temps CPU#1 Temps E/S Temps CPU#2


A 0 9 2 3
B 4 6 5 3
C 6 4 4 7
D 8 2 6 8
E 10 5 3 3
F 12 4 1 2

1. Donnez l’assignation pour l’ordonnancement des ces processus pour une stratégie Round
Robin avec un quantum du temps de 4 ms et calculer le temps moyen de séjour (temps de
rotation).
2. Donnez l’assignation pour l’ordonnancement de ces processus pour une stratégie Round
Robin virtuel avec quantum du temps de 4 ms. (Voir la description)

3/2
Un Round Robin Virtuel utilise deux
files « prêt ». Lorsqu’un processus qui
n’a pas consommé la totalité de son
quantum de temps est interrompu pour
faire une E/S, il est placé dans la file «
prêt » auxiliaire. Lors d’un choix de
sélection, les processus de la file « prêt
» auxiliaire sont prioritaires sur ceux
de la file « prêt » principale. Un
processus qui a été sélectionné à partir
de la file « prêt » auxiliaire ne
s’exécute que pendant un temps égal
au temps d’un quantum moins le
temps consommé du quantum
précédant l’E/S. Si le quantum
précédent est totalement consommé, le
processus est placé dans la file « prêt »
principale.

4/2

Vous aimerez peut-être aussi