Dans cet article, nous comprendrons le modèle multithreading dans le système d'exploitation.
Modèle multithread :
Le multithreading permet à l'application de diviser sa tâche en threads individuels. En multithread, le même processus ou la même tâche peut être effectué en fonction du nombre de threads, ou on peut dire qu'il y a plus d'un thread pour effectuer la tâche en multithreading. Avec l’utilisation du multithreading, le multitâche peut être réalisé.
ensembles en java
Le principal inconvénient des systèmes à thread unique est qu'une seule tâche peut être effectuée à la fois. Pour pallier l'inconvénient de ce thread unique, il existe le multithreading qui permet d'effectuer plusieurs tâches.
Par exemple:
Dans l'exemple ci-dessus, client1, client2 et client3 accèdent au serveur Web sans aucune attente. En multithreading, plusieurs tâches peuvent s’exécuter en même temps.
Dans un système d'exploitation, les threads sont divisés en thread au niveau de l'utilisateur et en thread au niveau du noyau. Les threads au niveau utilisateur géraient une forme indépendante au-dessus du noyau et étaient donc gérés sans aucun support du noyau. A l’inverse, le système d’exploitation gère directement les threads au niveau du noyau. Néanmoins, il doit exister une forme de relation entre les threads au niveau de l'utilisateur et au niveau du noyau.
Il existe trois modèles multithread établis classifiant ces relations :
- Plusieurs à un modèle multithread
- Modèle multithread un à un
- Plusieurs à plusieurs modèles multithreading
Plusieurs à un modèle multithread :
Le modèle plusieurs à un mappe de nombreux threads de niveau utilisateur à un thread du noyau. Ce type de relation facilite un environnement de changement de contexte efficace, facilement implémenté même sur un noyau simple sans prise en charge des threads.
services Web Java
L'inconvénient de ce modèle est que, comme il n'existe qu'une seule planification de threads au niveau du noyau à un moment donné, ce modèle ne peut pas tirer parti de l'accélération matérielle offerte par les processus multithread ou les systèmes multiprocesseurs. En cela, toute la gestion des threads se fait dans l’espace utilisateur. En cas de blocage, ce modèle bloque tout le système.
Dans la figure ci-dessus, le modèle plusieurs à un associe tous les threads au niveau utilisateur à des threads uniques au niveau du noyau.
algorithme de Kruskal
Modèle multithread un à un
Le modèle un-à-un mappe un seul thread au niveau de l'utilisateur à un seul thread au niveau du noyau. Ce type de relation facilite l'exécution de plusieurs threads en parallèle. Cependant, cet avantage a son inconvénient. La génération de chaque nouveau thread utilisateur doit inclure la création d'un thread noyau correspondant provoquant une surcharge, ce qui peut nuire aux performances du processus parent. Les systèmes d'exploitation Windows et Linux tentent de résoudre ce problème en limitant la croissance du nombre de threads.
Dans la figure ci-dessus, un modèle associe ce thread au niveau de l'utilisateur à un seul thread au niveau du noyau.
Modèle multithread de modèle plusieurs à plusieurs
Dans ce type de modèle, il existe plusieurs threads au niveau utilisateur et plusieurs threads au niveau du noyau. Le nombre de threads du noyau créés dépend d'une application particulière. Le développeur peut créer autant de threads aux deux niveaux mais peuvent ne pas être identiques. Le modèle plusieurs à plusieurs est un compromis entre les deux autres modèles. Dans ce modèle, si un thread effectue un appel système bloquant, le noyau peut planifier l'exécution d'un autre thread. De plus, avec l’introduction de plusieurs threads, la complexité n’est pas présente comme dans les modèles précédents. Bien que ce modèle permette la création de plusieurs threads de noyau, une véritable concurrence ne peut pas être obtenue par ce modèle. En effet, le noyau ne peut planifier qu'un seul processus à la fois.
De nombreuses versions du modèle multithread associent plusieurs threads au niveau utilisateur à la même variété ou à une bien moindre variété de threads au niveau du noyau dans la figure ci-dessus.