Vous êtes sur la page 1sur 6

Les Processus

Numro de session 1 2 Intitul de la session Dfinition dun processus Gestion des processus - identification dun processus - cration dun processus - terminaison dun processus

Session 1 : Dfinition des processus

1.1 Dfinition Un processus est limage en mmoire dun programme en cours dexcution, il a un cycle de vie : il nat, il meurt. Un mme programme lanc deux fois gnre deux processus diffrents. Un processus peut crer dautres processus, on les appelle ses fils . Un processus est identifi en mmoire par un numro unique dfini par le systme dexploitation appel le PID (Processus IDentifier). 1.2 Arbre des processus d'un systme Unix Le schma ci-dessous prsente l'arborescence des processus d'un systme Unix. Init est le processus parent de tous les autres. Il permet d'attribuer le nom de la machine, d'initialiser la date et l'heure, de contrler si le systme a bien t arrt. Il lance un processus de surveillance getty qui permet d'afficher le message login : sur un cran terminal et d'attendre une rponse. Il lance galement un processus de surveillance du rseau : inetd. Les processus dont le nom se termine par 'd' sont appels processus dmons. Ce sont des processus serveurs qui tournent en boucle afin d'offrir le mme service plusieurs clients.

Arborescence des processus Unix

Le systme Unix nous offre une commande pour afficher le statut des processus actifs un moment donn : ps qui affiche la liste des processus associs la fentre terminal en cours.

Les options les plus frquemment utilises sont : - ps l affiche toutes les caractristiques des processus en cours. - ps u affiche les processus de tous les utilisateurs. - ps e affiche les processus du systme dexploitation. Pour plus de dtails sur les options de la commande ps consulter laide Unix : man ps. Exemple dutilisation de la commande ps l :

1.3 Les diffrents tats dun processus: Comme nous lavons nonc prcdemment, un processus a un cycle de vie, ses 4 tats principaux sont : - Initial : le processus est nouvellement cr et se trouve dans un tat de transition, - Actif : le processus sexcute, - En attente : le processus est suspendu, il libre alors lUC pour un autre processus, - Final (zombie) : le processus a termin son excution.

Etats d'un processus

Remarque : un instant donn, un seul processus est actif (sauf cas des multiprocesseurs). 1.4 Contexte : Chaque processus possde son propre contexte sauvegard en mmoire. Il est dcrit par une zone de la mmoire qui contient : - la pile dexcution, - les donnes statiques et dynamiques du programme, - le code comprenant les instructions qui forment le programme.

Nous venons de voir ce qutait un processus, travers sa dfinition, ses diffrents tats, et son contexte. Nous allons maintenant mettre en vidence la gestion des processus sous Unix, et notamment comment il est possible de les crer.

2
2.1

Session 2 : Gestion des processus


Identification dun processus

Voici quelques exemples de fonctions utilises dans un programme, permettant lidentification dun processus : - echo $$ (commande unix) : dans un script shell, cette commande donne le PID du processus, - int getpid() : fonction qui retourne le PID du processus en cours dexcution, - int getppid() : fonction qui retourne le PID de son pre. 2.2 Cration dun processus

Un programmeur peut forcer la cration dun nouveau processus en effectuant un appel systme : int fork(). Le fork cre ainsi un fils, copie quasi identique du processus appelant (pre). Voici ce qui est inchang par rapport au processus pre : - les segments de code, de donnes et de pile du pre, - la table des fichiers (les pointeurs de fichiers sont semblables et les deux processus utilisent le mme enregistrement dans la table des fichiers au niveau du systme), - le rpertoire actuel et le rpertoire racine, - les numros d'utilisateur rel et effectif de ce groupe, - les priorits du processus, - le terminal de contrle. Le PID tant un numro didentification unique, le fils et le pre ont deux PID diffrents. Syntaxe : int fork() ; Valeur de retour : - > 0 si on se trouve dans le processus pre (PID du fils cr), - = 0 si on est dans le processus fils cr, - = -1 si le fork choue. Cest le seul lment disponible pour savoir dans quel processus lon se trouve lors de lcriture des programmes.

Exemple : if (((pid=fork()) = = 0) { //pid = 0 // on est dans le fils //traitement excut par le fils } else { //la variable pid contient une valeur positive qui est le pid du fils //on est dans le pre //traitement excut par le pre }

Remarque : Le nombre de processus est limit. Lorsque ce nombre est atteint, il devient impossible de crer un nouveau processus.

2.3

Terminaison dun processus

Terminaison volontaire ou normale : Sous Unix, un processus se termine en excutant la fonction exit(), il rentre alors dans un tat final. La variable tat pourra alors tre consulte par le processus pre aprs la terminaison dun fils. Syntaxe : void exit(etat) int etat ; /* tat de la terminaison du processus dfini par le programmeur*/

Terminaison involontaire : Un processus peut tre interrompu au cours de son excution par la rception dun signal (vnement) (Cf.Chapitre 2). Le noyau invoque alors la fonction exit(0) pour le processus qui se termine. Attente de la terminaison dun fils : Aprs avoir cr un processus fils, le processus pre doit attendre que celui-ci ait termin son excution avant de poursuivre la sienne. On parle de fonctionnement synchrone entre le pre et le fils. Syntaxe : Int wait (circonstance) Int * circonstance ; /*tat de terminaison du fils*/

Si circonstance = 0 alors on ne tient pas compte de ltat de terminaison du fils. Sinon, circonstance correspond ladresse dune zone dans laquelle sera rcupre ltat de terminaison du fils. Valeur de retour : - > 0 : correspond au PID du fils termin (le premier quand il y en a plusieurs). - < 0 : erreur du wait() (en gnral 1). Lors de lappel de la fonction wait(), le noyau du systme cherche un fils zombie ( ltat terminal). Si il en trouve un, il renvoie au pre le PID de ce fils ainsi que la variable tat retourne par celui-ci. Commutation dimage : Commuter limage dun processus signifie substituer lenvironnement utilisateur de ce processus par un autre excutable. Il ny a pas cration dun nouveau processus mais changement de cet environnement utilisateur. Syntaxe : execl (nouvel excutable) ; /*Remplace le code en cours par le nouveau excutable appel.*/ Execl remplace les segments de code et de donnes par ceux du nouveau programme excutable et cre un nouveau segment de pile, il ny a aucune possibilit de retour dans lancien programme (le code tant cras).

Remarque : il existe plusieurs variantes de la fonction execl() (Cf man exec).

A travers ce chapitre, vous avez acquis des connaissances sur les processus en gnral. Il est not que les processus sont rarement indpendants les uns des autres, le comportement correct dune application comportant plusieurs processus est alors fortement li deux notions : la synchronisation (par les signaux) et la communication (par les tubes). Nous aborderons ces notions dans les chapitres 2 et 3.