Vous êtes sur la page 1sur 16

Université Cheikh Anta

Diop

Ecole Supérieur Polytechnique

Département Génie
Informatique

Thème : Correction de travaux dirigés

Réalisé par : Sous la direction de :

Mahamat Youssouf Ali Dr Mandicou Ba

Année Académique :

2023-2024
EXERCICE1
Apres avoir complété les programmes suivants, dites ce qu’ils réalisent. Indiquons le pourquoi
du résultat affiché à l’écran. Disons combien de processus sont créés, l’état mémoire de chaque
processus, et donnons l’arbre généalogique qui en résulte.

Programme1 :

Ce programme nous affiche après avoir compilé :

Son arbre genealogique est :

P1 P2

Fork()

P3=1623 P2=8225

Résultat Nombre de processus


P1=8226, p2=8225, 8210 2
Programme2 :

Résultat Nombre de processus


1,2,3,4,5,6,7,8,9,10,11,11 12

Son arbre généalogique :

P1 P2
i=1 i=1

Fork() i++=2 etc


12
0

i=10 i=11

P11 fork()
Programme3:

Résultat Processus Arbre génealogique


0 9412 9413 8
9410 0 9415
910 9411 9414
9410 9411 0
0 9412 0
0 0 9416
9410 0 0
000

Programme4:
Résultat Nombre de processus Arbre genealogique
Ci-dessus indique le résultat 4 processus

Exercice 2
analysons et interprétons ce programme. Combien de lignes sont affichées et par quel
processus ? il faudra indiquons et discutons les ordres possibles dans lesquels ces lignes sont
affichées. Expliquons l’origine de la valeur de la fonction exit (-) de la ligne 21.
D’abord compilons voir le code :
Ce programme affiche 4 lignes. Les 3 premières lignes sont affichées par le processus
père et la 4ème ligne est affichée par le processus fils.
Père : printf("pid=%d\n",getppid()); -> printf("Bonjour, qui a gagné la CAN?\n") ->
printf("%d\n",!pid); -> if(pid) -> exit(224)

Fils : printf("%d\n",!pid); -> printf("Ciao Cioa et 2023 pour la deuxième étoile\n");

Père : printf("pid=%d\n",getppid()); -> printf("Bonjour, qui a gagne la CAN?\n") ->


pid=fork(); -> printf("%d\n",!pid); -> if(pid) -> exit(224)

Fils : printf("%d\n",!pid); -> printf("Ciao Cioa et 2023 pour la deuxieme etoile\n");

La valeur de la fonction exit(-) de la ligne 21 est 224 car elle est spécifiée comme
argument de la fonction exit. Cette valeur est utilisée pour indiquer à d'autres
programmes que le programme s'est terminé avec une erreur. Cela est particulièrement
utile si le programme est appelé à partir d'un autre programme.
Exercice 2 Programme 2 :
Avant détection de l’erreur

Après modification :
On a constaté que Le code contient une erreur de compilation, car la variable `i` n'est pas
déclarée. Il faut déclarer la variable `i` en dehors de la boucle `for` pour pouvoir l'utiliser à
la fin du programme.
Resultat Nombre de processus Arbre
Le résultat est juste au- Le nombre total de processus
dessus. créés est donc 7 (1 processus
père et 3 processus fils à
chaque itération de la boucle).

EXERCICE 3
1) Ecrire un programme qui illustre la création de processus à l’aide de l’appel système
fork. N (fournit en paramètre) fils crées : ils se contentent d’afficher leur numéro ainsi
que leur pid (avec la getpid).
Apres compilation on aura :

2) Ecrire un programme qui lance dix fils qui effectuent une course. A la fin du programme,
l’ordre des fils est affiché (chaque fils effectuera, par exemple une boucle vide de n tours, avec
n choisit au hasard entre 5000 et 10000).
3) Ecrire un programme qui illustre l’utilisation de l’appel système _exit et des
fonctions exit et atexit plusieurs procédures sont enregistrées pour la fermeture.
Lorsque le programme se termine, ces procédures sont ensuite appelées.
4) Ecrire un programme qui illustre l’utilisation de l’appel système wait : un
processus fils est créé et le processus attend la fin de l’exécution de son fils.
Ci-dessus c’est le résultat du programme numéro 4.

5) Ecrire un programme qui programme illustre le fonctionnement de waitpid : cinq


fils sont créés qui se mettent en pause (avec sleep) pendant un temps aléatoire. Le
père attend la fin de chaque fils, dans l’ordre de création.
Code source :

Ci-dessous le résultat obtenu :


6) Ecrire un programme qui illustre l’exécution d’un programme externe en utilisant
l’appel système execve. Un processus fils est créé et de remplacer par le programme
HELLO WORD. Ce dernier a pour but d’illustrer le fonctionnement de execve en
fournissant un programme prenant des arguments en ligne de commandes. Les
arguments sont simplement affiches, tout comme les variables d’environnement.

Vous aimerez peut-être aussi