TNSI : OS - Processus Légers / Threads⚓︎
Introduction⚓︎
Un processus peut lui-même être décomposé en sous-processus / threads ou tâches / tasks. Les threads permettent de ne plus être liés à une exécution totalement sérielle des instructions. Il est dès lors possible d’avoir, par exemple, un thread responsable d’exécuter un calcul lourd pendant qu’un autre gère les interactions avec l’utilisateur. Un serveur FTP, par exemple, peut plus facilement gérer plusieurs connexions simultanées, chaque connexion étant gérée par un thread.
Threads⚓︎
Définition⚓︎
Fil d'exécution / Thread
- Un processus est composé de un ou plusieurs
Threads /
Processus léger /Fil d'exécution ,
- Un Processus léger / thread est semblable à un processus: il représente l'exécution d'un ensemble d'instructions du langage machine d'un processeur, mais il partage un même espace mémoire avec d'autres threads.
- Il existe un thread principal (main)
- Un thread est attaché à un processus lourd parent
Groupes de Threads⚓︎
Groupes de Threads
- Les threads partageant un même espace mémoire sont regroupés en des groupes : cela permet par exemple de faciliter le parallélisme sur des machines multi-processeurs.
- En contrepartie, les données étant partagées dans le même espace mémoire, cela peut créer des conflits et impose une plus grande surveillance pour la synchronisation. (cf exercice ...)
Principales Utilisations⚓︎
Pte
Classiquement, les threads sont utilisés :
- pour développer des logiciels avec des Interfaces Graphiques, qui peuvent se focaliser sur la détection des événements extérieurs (souris, clavier, etc..) sans bloquer l'interface
- pour gérer les accès concurrents à des bases de données
Ressources d'un Thread⚓︎
Ressources d'un Thread
Pour fonctionner, un thread dispose de :
- Ressources Indépendantes:
- Une Pile
/ Stack
: Un pointeur dans la mémoire qui sert à stocker les variables locales, et l'information suffisante pour que le processeur comprenne quel sera la prochaine instruction à exécuter
- Registres
- Une Pile
- Ressources Partagées:
- L'Espace d'adressage mémoire du processus parent
- Les Fichiers ouverts par le processus parent
- Ressources gérées par le noyau correspondant au processus parent :
- État du processus
- Une Priorité : Information que le système d’exécution utilisera pour déterminer quel thread sera le prochain à obtenir du temps de processeur.
Threads vs Processus⚓︎
Voici une table de comparaison1 :
Processus | Thread | |
---|---|---|
Définition | Un Processus est une instance d'un programme en cours d’exécution |
Un Thread est une petite partie d’un processus. |
Communication entre eux |
La communication entre deux processus est uniquement externe, coûteuse et limitée. |
La communication entre deux threads se fait via la mémoire partagée, elle est moins coûteuse que celle entre processus. |
Multitâche | Le multitâche basé sur les processus permet à un ordinateur d’exécuter deux ou plusieurs programmes simultanément. (Pseudo-Parallélisme) |
Le multitâche basé sur les threads permet à un programme unique d’exécuter deux threads ou plus simultanément. |
Espace d'adressage | Chaque processus a son espace d’adressage distinct. |
Tous les threads d’un processus partagent le même espace d’adressage (que celui du processus). |
Tâche | Les processus sont des tâches lourdes | Les threads sont des tâches légères. |
Changement de Contexte |
Moins Rapide | Rapide |
Exemple | Vous travaillez sur un éditeur de texte, il fait référence à l’exécution d’un processus. |
Vous imprimez un fichier à partir d’un éditeur de texte tout en travaillant dessus, ce qui ressemble à l’exécution d’un thread dans le processus. |
Notes & Références⚓︎
Références⚓︎
- https://linux-attitude.fr/post/processus-et-threads
- Multitâche API PThread : Norme IEEE POSIX 1003.1c