SYSTEME D’EXPLOITATION
Tp5 : processus & synchronisation
(Programmation système)
Réalisé par :
Asmae Amakrane
Encadré par :
Mme. Yakine
Objectifs :
Maitriser les concepts de création et de gestion des processus lourds et
notamment l’appel à « fork () » et ses conséquences sur le fonctionnement
du programme et comprendre les problèmes de synchronisation entre les
processus père et fils et la possibilité de recouvrir le processus Fils en
utilisant la famille exec.
A. enance du TP:
1. la fonction fork :
Exercice 1 :
D’abord on va créer un fichier à l’aide du commande gedit et on le nommé
differ.c
Puis on écrit notre programme :
Apres en exécute le programme à l’aide du commande : gcc exemple.c –o
exemple.o et ./exemple.o
Exercice 2 :
Ce programme permet de créer deux processus (le père et son fils) à l’aide de
l’appel système fork(). Lorsqu’il est dans le processus père il retourne son PID=
2833 et celui de son fils PID=2834. Par contre, lorsque cet appel système crée un
processus fils il retourne la valeur 0 et le PPID du processus parent PPID=1865.
Et en fin ont obtenu le résultat :
2.synchronisation des processus :
Si On exécute le programme ./fork.o plusieurs fois on remarque que le
processus père termine avant son fils et le noyau s'arrange pour le « faire
adopter » par un processus système (INIT) C’est le cas d’un processus fils qui
devient orphelin.
Pour régler le programme du processus orpheline on ajoute wait(NULL) .
Tout processus fils qui meurt et dont le père, toujours en vie, n’est pas au
courant, est appelé processus zombie. Ce processus a été totalement dépourvu
de la mémoire mais reste toutefois présent dans la table des processus. La table
des processus étant limitée en taille pourrait provoquer un gel au système.
On écrit le programme Zombie.c :
*lister
Tester du commande dans une autre fenêtre : ps –e –o pid,ppid,stat,cmd :
Exécuter le programme zombie.c une autre fois :
On remarque que le processus fils s’est terminé alors que son père et toujours en
cours d’exécution, le processus fils est donc zombie.
-Lorsque le programme principal zombie se termine sans appeler wait le
processus zombie disparait.
L’état :
On remarque que le processus zombie a disparu. (Ressources libérées)
pour éviter la création du zombie :
On ajout wait(NULL)au père :
Apres l’exécution de programme :
On exécute ps une autre fois :
Voilà le résultat qu’on obtient :
On remarque que le zombie est disparu.
3-recouvrement de processus :
Pour savoir le chemin de la commande ls on tape which ls :
D’abord on modifie le programme fork.c pour que le fils recouvre son code
En utilisant la fonction execv, on remplace le programme en cours d’exécution dans
un processus par un autre programme.
Il existe plusieurs fonctions qui varient quant aux possibilités qu’elles proposent,
en ce qui concerne la fonction u tilisée dans notre programme execv, elle reçoit
une liste d’arguments à passer au nouveau programme sous forme d’un tableau
de pointeurs vers des chaînes terminées par NULL.
Puis on exécute la commande ls -l :
FIN.