Université Dr.
Yahia Fares - Medea- Module: Système d'Exploitation 1
Faculté des Sciences
Série n°2 (Processus sous UNix)
Exercice N°1:
1. Dans le système UNIX, les véritables appels système sont effectués à partir:
d’un programme utilisateur
d’une commande shell
d’une procédure de la bibliothèque standard
Sont-ils exécutés en mode superviseur ou en mode utilisateur ?
2. Dans le système UNIX, est-ce que tout processus a un père ? Que se passe-t-il
lorsqu’un processus devient orphelin (mort de son père) ? Quand est-ce un processus
passe à l’état Zambie ?
3. Pour lancer en parallèle plusieurs traitements d’une même application, vous avez le
choix entre les appels système fork( ) et pthread_create( ). Laquelle des deux
possibilités choisir ? pourquoi ?
4. Citez trois événements qui provoquent l’interruption de l’exécution d’un processus
en cours, dans le système UNIX.
Exercice N°2:
Afficher les valeurs de i et j (pour le père et pour le fils) a la fin de chacun des programmes
suivants:
P1 P2
int i=2 ; int i=4, j=10;
int main ( ) int main ( )
{ {
j=10; int p ;
int p ; p = fork();
while(i-- && p = fork()) if(p<0) exit(1) ;
if(p<0) exit(1) ; j += 2;
j += 2; if (p == 0)
if (p == 0) {
{ i *= 3;
i *= 3; j *= 3;
j *= 3; }
} else
else {
{ i *= 2;
i *= 2; j *= 2;
j *= 2; }
} printf(“i=%d, j=%d”, i,j) ;
printf(« i=%d, j=%d », i,j) ; return 0 ;
return 0 ; }
}
1
Exercice N°3:
Combien de processus engendre l’´evaluation de la commande C:
fork() && ( fork() || fork() ) ;
2. Dessiner l’arbre généalogique des processus engendrés par cette ligne.
Exercice N°4:
Considérons le programme suivant :
#include<unistd.h>
main( )
fork();
fork();
fork();
1. Sans faire l'exécution, donner le nombre de processus générés et dessiner l’arbre des
processus engendrés.
2. Remplacez le premier appel à « fork() » par un appel à « execl() » qui exécute le
programme lui même.
Que se passe-t-il ?
3. Remplacez le deuxième appel à « fork() » par un appel à « execl() » qui exécute le
programme lui même. Que se passe-t-il maintenant ?