Vous êtes sur la page 1sur 3

École Nationale des Sciences Appliquées – Safi Université Cadi Ayyad – Marrakech Année universitaire : 2017/2018

Systèmes d'exploitation 3ème année génie informatique

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, T AM , et le temps de rotation moyen T RM .

3. On s'intéresse à l'ordonnancement par priorités dynamiques ajustées tous les 150 cycles d'horloge en utilisant la formule :

Priorité = T Att + T Res

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 :

École Nationale des Sciences Appliquées – Safi Université Cadi Ayyad – Marrakech Année universitaire : 2017/2018

Systèmes d'exploitation 3ème année génie informatique

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( );

getpid( ) );

if(p3==0)

printf("P5(père, pid, fils) = (%d, %d, -)\n", getppid( ),

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>

École Nationale des Sciences Appliquées – Safi Université Cadi Ayyad – Marrakech Année universitaire : 2017/2018

Systèmes d'exploitation 3ème année génie informatique

#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);

}

Écrire

3. une

fonction

en

C

permettant

de

créer

l'arborescence

de

processus

suivante :

créer l'arborescence de processus suivante : 4. Écrire une fonction en C permettant de créer n

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.