Vous êtes sur la page 1sur 3

École Nationale des Sciences Appliquées – Safi Systèmes d'exploitation

Université Cadi Ayyad – Marrakech 3ème année génie informatique


Année universitaire : 2017/2018

Devoir Libre
Directives :
Les réponses doivent être écrites à la main par stylo bleu ou noir.
Les feuilles de réponses sont ensuite scannées et envoyées sous format PDF à l’adresse
« madiafi.med@gmail.com ».
Le dernier délai de remise du devoir est le 10 juin 2018.

Exercice n°1 :
On considère l'ensemble des processus suivants :
Processus Date d'arrivée Temps CPU Priorité
A 60 100 1
B 10 200 2
C 130 100 3
D 40 100 4

1. Tracer le diagramme de Gantt correspondant à l'ordonnancement de ces


processus, en se basant sur l'algorithme :
a) SRT
b) Tourniquet (Q=50 cycles d'horloge)
c) Ordonnancement par priorités tel que :
– La priorité la plus grande correspond à la plus grande valeur.
– lorsque deux processus se présentent avec la même priorité, l'ordonnanceur
sert le processus qui a attendu le plus longtemps dans la mémoire.
2. Calculer pour chaque diagramme, de la première question, le temps d'attente
moyen, TAM, et le temps de rotation moyen TRM.
3. On s'intéresse à l'ordonnancement par priorités dynamiques ajustées tous les 150
cycles d'horloge en utilisant la formule :
T + T Res
Priorité = Att
T CPU
telle que :
– T Att : temps d'attente ;
– T Res : temps CPU restant ;
– T CPU : temps CPU ;
– Lors des calculs, les valeurs sont arrondies au demi le plus proche ou au
demi supérieur en cas d’égalité.
a) Donner le diagramme de Gantt correspondant à cet ordonnancement.
b) Calculer le temps d’attente moyen ainsi que le temps de rotation moyen.

Exercice n°2 :
On considère une architecture monoprocesseur sur laquelle on désire exécuter un
ensemble de 3 programmes dont le comportement est défini comme suit :

Madiafi Mohammed 1/3


École Nationale des Sciences Appliquées – Safi Systèmes d'exploitation
Université Cadi Ayyad – Marrakech 3ème année génie informatique
Année universitaire : 2017/2018

Processus Date d'arrivée Temps d'exécution


A 0 4 unités de CPU, 2 unités d'E/S, 2 unités de CPU
B 2 3 unités de CPU, 4 unités d'E/S, 2 unités de CPU
C 3 1 unités de CPU, 3 unités d'E/S, 3 unités de CPU

On considère que l'on dispose d'un seul canal simple pour gérer un disque, et que l'ordre
de services des requêtes pour ce disque se fait selon une politique FCFS.
On considère que l'ordonnancement sur le processeur se fait selon une stratégie SRT.
1. Remplir les diagrammes de Gantt relatifs à l'ordonnancement des trois processus.
2. Calculer le nombre de commutations de contexte.
3. Calculer les :
a) Temps d'attente du processeur pour chaque programme.
b) Temps de rotation de chaque programme.

Exercice n°3 :
1. Donner l'arborescence de processus créés lors de l'exécution du programme
suivant :
int main( ){
pid_t p1=fork( ), p2, p3;
if(p1==0) printf("P1(père, pid, fils) = (%d, %d, -)\n", getppid( ), getpid( ) );
else if (p1>0){
printf("P2(père, pid, fils) = (%d, %d, %d)\n", getppid( ), getpid( ), p1);
p2=fork( );
if(p2==0) printf("P3(père, pid, fils) = (%d, %d, -)\n", getppid( ), getpid( ) );
else if (p2>0){
printf("P4(père, pid, fils) = (%d, %d, %d)\n", getppid( ), getpid( ), p2);
p3=fork( );
if(p3==0) printf("P5(père, pid, fils) = (%d, %d, -)\n", getppid( ),
getpid( ) );
else if (p3>0)
printf("P6(père, pid, fils) = (%d, %d, %d)\n", getppid( ), getpid( ), p3);
else printf("Impossible de créer le processus\n");
}
else printf("Impossible de créer le processus\n");
}
else printf("Impossible de créer le processus\n");
return 0;
}
2. Quel est le processus père du processus exécutant ce programme ?

Exercice n°4 :
1. Quelle est l'arborescence créée par le programme suivant :
#include <stdio.h>
#include <unistd.h>

Madiafi Mohammed 2/3


École Nationale des Sciences Appliquées – Safi Systèmes d'exploitation
Université Cadi Ayyad – Marrakech 3ème année génie informatique
Année universitaire : 2017/2018

#include <sys/types.h>
int main(){
pid_t pid=fork();
if(pid>0){
pid=fork();
if(pid==0) pid=fork();
else if(pid>0) pid=fork();
else printf("Erreur de création du processus.\n");
}
else if(pid==-1) printf("Erreur de création du processus.\n");
while(wait()>0);
return 0;
}
2. Même question pour le programme suivant :
int main(){
pid_t pid, tmp=getpid();
int i=9;
while(i>=0){
i/=2;
i--;
pid=fork();
if(pid==0) printf("P%d(P%d, -)\n", getpid()-tmp, getppid()-tmp);
else if(pid>0){
if(getppid()-tmp>=0)
printf("P%d(P%d, P%d)\n", getpid()-tmp, getppid()-tmp, pid-tmp) ;
else printf("P%d(bash, P%d)\n", getpid()-tmp, pid-tmp);
}
else printf("Erreur de création du processus.\n");
}
while(wait()>0);
}
3. Écrire une fonction en C permettant de créer l'arborescence de processus
suivante :

4. Écrire une fonction en C permettant de créer n processus tels que :


a) n est un nombre strictement supérieur à 100.
b) Aucun des n processus créés n'a de fils.

Madiafi Mohammed 3/3