TP Processus
TP Processus
TP Processus
TP processus
BCI Informatique
TP processus
B. Dupouy et S. Gadret
SOMMAIRE
1.
2.
3.
4.
Organisation du TP :
Utilisation des commandes du shell
Introduction aux exercices en C
Cration de processus (fonction fork)
1. Fonctions utilises
2. Exercice 1
3. Exercice 2
5. Synchronisation de processus pre et fils (mcanisme wait/exit)
1. Fonctions utilises
2. Mcanisme wait/exit
6. Pre et fils excutent des programmes diffrents
1. Fonction utilise
2. Fonctionnement de exec
7. Exercice rendre
Organisation du TP:
1re partie Exemples faire fonctionner
Exercice rendre. L'envoyer par mail l'enseignant
qui vous fait les , par exemple : dupouy@enst.fr
2me partie Le texte du sujet ( subject) doit contenir le mot :
TPASTpour les AST matrises
TP1Apour les lves de 1re anne
Documentation
Le support de cours sur les processus se trouve ici.
1/6
14/2/2014
TP processus
Les exercices suivants s'attachent montrer les diffrences entre processus et utilisateur et mettre en
vidence quelques points importants du systme Unix.
1. Pour constater la diffrence utilisateur/processus, on essaiera la squence de commandes suivantes:
who
who am i
ps -l
ps -edf
ps -axl
ou
ps -ael
2/6
14/2/2014
TP processus
Par la suite, pour compiler les fichiers et crer les excutables, utiliser la commande gcc.
Par exemple (premier exercice) :
gcc exo1.c -o exo1
ou, mieux :
gcc -Wall exo1.c -o exo1
Sur une machine multi-processeur on peut avoir forcer l'excution sur un seul processeur, dans ce cas il
faut utiliser la commande taskset, par exemple :
taskset -c 0 ./exo1
Cette fonction va crer un processus. La valeur de retour nde cette fonction indique :
n> 0
On est dans le processus pre,
n= 0
On est dans le processus fils,
n = -1
fork a chou, on n'a pas pu crer de processus.
getpid():
Cette fonction retourne le numro du processus courant.
getppid():
Cette fonction retourne le numro du processus pre.
III.2 Exercice 1
1. Aprs compilation de exo1.c, on excutera le programme exo1plusieurs fois.
Pourquoi cinq lignes sont-elles affiches alors qu'il n'y a que deux printfdans le programme ?
Pour rcuprer ce programme exo1.c, cliquer ici.
2. Ajouter maintenant la ligne suivante derrire l'appel fork:
if (valeur == 0) sleep (4);
III. 3 Exercice 2
Pour rcuprer le programme suivant : fork-mul.c, cliquer ici.
Compiler fork-mul.c, puis l'excuter.
Aprs excution et l'aide du schma suivant, relever les numros des processus et numroter l'ordre
d'excution des instructions printfde faon retrouver l'ordre d'excution des processus.
http://www.infres.enst.fr/~domas/BCI/Proc/TPproc.html
3/6
14/2/2014
TP processus
Remarque:
si on relve un numero de processus gal 1, il s'agit du processus init, pre de tous les processus. Init
adopte les processus orphelins, c'est dire qu'un processus dont le pre s'est termin devient fils de 1, et
getppid()renvoie 1.
termine un processus, iest un octet (donc valeurs possibles : 0 255) renvoy dans une variable du
type intau processus pre.
wait( &Etat ):
met le processus en attente de la fin de l'un de ses processus fils.
Quand un processus se termine, le signal SIGCHILDest envoy son pre. La recption de ce signal
fait passer le processus pre de l'tat bloqu l'tat prt. Le processus pre sort donc de la fonction
wait.
La valeur de retour de waitest le numro du processus fils venant de se terminer.
Lorsqu'il n'y a plus (ou pas) de processus fils dont il faut attendre la fin, la fonction waitrenvoie -1.
Chaque fois qu'un fils se termine le processus pre sort de wait, et il peut consulter Etatpour obtenir des
informations sur le fils qui vient de se terminer.
Etatest un pointeur sur un mot de deux octets :
L'octet de poids fort contient la valeur renvoye par le fils ( ide la fonction exit( i )),
l'octet de poids faible :
contient 0dans le cas gnral,
En cas de terminaison anormale du processus fils, cet octet de poids faible contient la valeur du
signal reu par le fils.
Cette valeur est augmente de 80 en hexadcimal (128 dcimal), si ce signal a entrain la
sauvegarde de l'image mmoire du processus dans un fichier core.
http://www.infres.enst.fr/~domas/BCI/Proc/TPproc.html
4/6
14/2/2014
TP processus
Commentaires :
ficest le nom du fichier excutable qui sera charg dans la zone de code du processus qui appelle
execl.
Si ce fichier n'est pas dans le rpertoire courant, il faut donner son nom complet (chemin absolu).
Les paramtres suivants sont des pointeurs sur des chaines de caractres contenant les arguments
passs ce programme (cf. argven C).
La convention UNIX impose que la premire soit le nom du fichier lui-mme et que le dernier soit un
pointeur nul.
Par exemple, si on veut charger le fichier appel progqui se trouve dans le rpertoire courant et qui
n'utilise auncun argument pass sur la ligne de commande :
execl ("prog", "prog", (char *)0)
5/6
14/2/2014
TP processus
On peut excuter ce programme en lui passant diverses commandes en argument, par exemple, si
l'excutable s'appelle fexec:
fexec /usr/bin/xclock
fexec /bin/ps
fexec exo1 (si on a fait : gcc -Wall exo1.c -o exo1)
fexec /usr/bin/emacs
...
http://www.infres.enst.fr/~domas/BCI/Proc/TPproc.html
6/6