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