3 La notion de processus léger
3.1 Définition
Le
processus léger
constitue une extension du modèle traditionnel de processus. Un
processus
classique est constitué d'un espace d'adressage avec un seul fil d'exécution, ce fil d'exécution étant représenté par une
valeur de compteur ordinal et une pile d'exécution. Un processus léger est un espace d'adressage dans lequel plusieurs fils
d'exécution peuvent évoluer en parallèle. Ces fils d'exécution sont chacun caractérisés par une valeur de compteur ordinal
propre et une pile d'exécution privée.
Définition : Processus léger
Un processus léger est un espace d'adressage dans lequel plusieurs fils d'exécution peuvent évoluer en parallèle. Ces fils
d'exécution sont chacun caractérisés par une valeur de compteur ordinal propre et une pile d'exécution privée.
Le gros avantage lié à la notion de processus léger est un allègement des opérations de
commutations de contexte
: en effet lorsque le processeur commute d'un fil d'exécution à un autre fil et que ces deux fils appartiennent au même espace
d'adressage, alors la commutation est très allégée puisqu'elle consiste seulement à changer de pile et de valeur de compteur
ordinal, le contexte mémoire restant le même. Un inconvénient majeur est que l'espace d'adressage est complètement partagé
entre tous les fils d'exécution qui évoluent au sein de celui-ci et donc les opérations de synchronisation sont plus souvent
requises. .
3.2 Primitives associées aux processus léger
- int pthread_create (pthread_t *thread, const pthread_attr_t *attr, void * (*start_routine)(void *), void *arg) :
Création d'un processus léger : un processus léger identifié par l'identificateur *thread est crée et attaché à l'exécution
de la routine (*start_routine)(void *), void *arg).
- nt pthread_join ( pthread_t thread, void **value_ptr) :
synchronisation entre processus légers : permet au processus léger principal d'attendre la terminaison de ses fils.
- int pthread_exit (void **value_ptr) :
terminaison de processus léger
La figure ci-dessous donne un exemple d'un programme dans lequel un processus léger principal (le main) crée 4 autres processus
légers qui sont chacun rattachés à la fonction void t_pthread(int i). Chaque processus léger affiche le pid du processus auquel
il appartient (l'espace d'adressage) par l'appel à la fonction getpid, puis son propre identifiant par l'appel à la fonction
pthread_self().
 |
Exemple de programmation avec les processus légers. .
|
|
Processus
Processus
Les processus légers
|