You are on page 1of 14

Chapitre2 : Ordonnancement des processus

Partie3 : Processus et Threads


Les concepts de programmes, processus et threads sont fondamentaux dans le domaine de l'informatique et des
systèmes d'exploitation. Voici une explication plus détaillée de chacun de ces termes :

Programme :

 Un programme est un ensemble d'instructions écrites dans un langage de programmation spécifique.


 Il est généralement créé par un programmeur à l'aide d'un éditeur de texte ou d'un environnement de
développement.
 Un programme peut être composé de plusieurs fichiers source, bibliothèques, et autres ressources nécessaires à
son exécution.
 Il n'est pas en cours d'exécution, mais il représente plutôt le code source qui peut être interprété ou compilé pour
créer un processus en cours d'exécution.

Processus :

 Un processus est une instance en cours d'exécution d'un programme.


 Il est composé du code du programme, de l'espace mémoire alloué, des fichiers ouverts, des ressources d'E/S, et
d'autres informations liées à l'exécution.
 Un processus est créé lorsqu'un programme est lancé, que ce soit par l'usager, le système d'exploitation ou un
autre processus.
 Chaque processus a sa propre mémoire et espace d'exécution, et ils sont généralement isolés les uns des autres.

Threads :

 Un thread est une unité d'exécution plus petite au sein d'un processus.
 Un processus peut avoir plusieurs threads, chacun exécutant des parties distinctes du code du programme.
 Les threads au sein d'un même processus partagent la même mémoire et les mêmes ressources, ce qui facilite la
communication entre eux.
 Les threads permettent l'exécution simultanée de différentes parties d'un programme, ce qui peut améliorer
l'efficacité et la réactivité des applications.

Création d'un processus :

 Un processus peut être créé de différentes manières : par une requête de l'utilisateur (lorsqu'un programme est
lancé), par le système d'exploitation (gestion des E/S, interruptions, etc.), ou par un autre processus (processus
parent créant un processus enfant).

En résumé, un programme est une séquence d'instructions, un processus est l'instance en cours d'exécution de ce
programme avec ses propres ressources, et un thread est une unité d'exécution plus petite permettant une
exécution concurrente au sein d'un processus. La création d'un processus peut être initiée par l'utilisateur, le
système d'exploitation ou un autre processus.

Synonymes de Thread
Liste des synonymes termes "thread" (fil d'exécution)

1
 Fil (d'exécution) : Un fil est un flux de contrôle indépendant à l'intérieur d'un processus. C'est le
terme souvent utilisé pour désigner un thread, en particulier dans le contexte de la programmation.

 Tâche : Ce terme, normalisé par ISO/CEI 2382-7:2000, peut être utilisé pour décrire une unité
d'exécution ou un processus léger.

 Processus léger ou allégé : Un processus léger (ou thread léger) est une unité plus légère qu'un
processus traditionnel. Il partage généralement la même mémoire et les mêmes ressources avec
d'autres threads du même processus.

 Fil d'instruction : Un autre terme pour désigner un thread, soulignant son rôle dans l'exécution
d'instructions.

 Exétron : Un terme moins courant, formé en ajoutant le suffixe "-tron", souvent utilisé dans le
contexte de l'analogie avec les particules subatomiques (électron, positron, neutron). Il est utilisé
pour décrire une unité d'exécution en référence à la nature élémentaire des processus d'exécution.

 Unité d'exécution ou unité de traitement : Ces termes désignent également un thread, soulignant
son rôle en tant qu'unité fondamentale qui exécute des instructions.

Deux configurations différentes en termes de mono-threading et multi-threading dans les espaces utilisateur et
noyau. Voici une explication pour chaque configuration :

Trois processus traditionnels (mono-thread) :

 Dans cette configuration, chaque processus représente une exécution indépendante d'une application.
 Chaque processus à son propre espace utilisateur et son propre espace noyau.
 Les processus fonctionnent de manière isolée, ce qui signifie qu'ils ne partagent pas directement de
mémoire ou de ressources entre eux.

2
 Les transitions entre les espaces utilisateur et noyau se produisent lors des appels système ou
d'événements similaires.

Trois threads à l'intérieur d'un processus (multi-thread) :

 Dans cette configuration, chaque processus est composé de plusieurs threads.


 Les threads partagent le même espace utilisateur, ce qui signifie qu'ils peuvent accéder et modifier la
même mémoire et les mêmes ressources.
 Chaque thread a son propre espace noyau, mais ils peuvent communiquer plus efficacement que les
processus traditionnels en raison du partage de l'espace utilisateur.
 Les transitions entre les espaces utilisateur et noyau se produisent également lors des appels système,
mais en raison du partage de l'espace utilisateur, la communication entre les threads est généralement
plus rapide.

Similarités entre processus et thread :

1. Exécution d'instructions : Les deux processus et threads représentent l'exécution d'un ensemble d'instructions
par un processeur. Ils sont des unités d'exécution fondamentales dans un système informatique.
2. Apparence de parallélisme : Du point de vue de l'utilisateur, les exécutions de processus et de threads semblent
se dérouler en parallèle. Cela signifie que l'utilisateur peut percevoir qu'ils s'exécutent simultanément, même si
cela peut ne pas être le cas au niveau matériel.

Différences entre processus et thread :

1. Partage de mémoire :
 Processus : Les processus ont leur propre espace mémoire virtuelle distinct. Chaque processus possède
une copie indépendante de la mémoire, ce qui signifie qu'ils ne partagent pas directement leur espace
mémoire avec d'autres processus.
 Thread : Les threads au sein d'un même processus partagent la même mémoire virtuelle. Cela signifie
qu'ils peuvent accéder et modifier les mêmes données en mémoire. Cependant, chaque thread possède
sa propre pile d'exécution.
2. Communauté de mémoire virtuelle :
 Processus : En raison du fait que les processus ont leur propre espace mémoire, le changement de
contexte entre deux processus implique un changement de mémoire virtuelle, ce qui peut être coûteux
en termes de performances.
 Thread : Comme les threads partagent la même mémoire virtuelle, le changement de contexte entre les
threads d'un même processus est moins coûteux. Il n'y a pas de besoin de changer l'espace mémoire
virtuelle, ce qui facilite la commutation de contexte.

En résumé, la principale différence réside dans le partage de mémoire. Les processus ont leur propre espace
mémoire distinct, tandis que les threads partagent la même mémoire au sein d'un processus. Ceci a des
implications importantes en termes de coûts de commutation de contexte et de communication entre les unités
d'exécution.

3
Intérêts des Threads

Les threads offrent plusieurs avantages et sont particulièrement utiles dans certaines
situations. Voici quelques-uns des intérêts des threads :

1. Exécution en parallèle :
 Les threads permettent l'exécution simultanée de plusieurs tâches au sein d'un même processus.
 Cela conduit à des applications plus performantes, car plusieurs threads peuvent travailler en
parallèle, exploitant ainsi les architectures multiprocesseurs et multicœurs.
2. Adapté aux architectures multiprocesseurs et multicœurs :
 Les architectures modernes sont souvent équipées de multiples processeurs ou cœurs. Les threads
peuvent être répartis sur ces ressources, permettant une utilisation efficace de la puissance de calcul
disponible.
3. Structuration des processus :
 La subdivision d'un processus en threads permet une structuration plus fine des tâches.
 Chaque thread peut être dédié à une sous-tâche spécifique, facilitant ainsi la conception modulaire
et la maintenance du code.
4. Utilisation efficiente des ressources système :
 Les threads au sein d'un même processus partagent plusieurs ressources système, telles que l'espace
mémoire et les fichiers ouverts.
 Cela évite la duplication inutile de ressources et contribue à une utilisation plus efficace des
ressources système disponibles.
5. Meilleure réactivité des applications :
 En utilisant des threads, certaines parties d'une application peuvent continuer à fonctionner même si
d'autres sont bloquées, améliorant ainsi la réactivité globale de l'application.
6. Communication facilitée :
 Les threads partageant le même espace mémoire, la communication entre eux peut être plus facile
et rapide que la communication entre processus, qui nécessite souvent des mécanismes de
communication interprocessus plus complexes.
7. Gestion des tâches concurrentes :
 Les threads sont souvent utilisés pour gérer des tâches concurrentes, où plusieurs activités doivent
être réalisées simultanément, comme dans les applications réseau, les interfaces graphiques, ou les
systèmes en temps réel.

4
Récapitulatif : Processus vs Thread

Processus :

 Environnement propre : Chaque processus a son propre environnement, y compris la mémoire, les fichiers, et
d'autres ressources. Il est généralement isolé des autres processus.
 Contexte volumineux : Un processus a un contexte d'exécution complet, ce qui signifie qu'il inclut l'état de
l'exécution, la mémoire, les fichiers ouverts, etc.
 Accès aux ressources : Un processus peut accéder à ses propres ressources, et dans certains cas, il peut accéder
aux ressources d'autres processus selon des règles d'accès strictes (protection).

Thread :

 Possède :
 Un état d'exécution (prêt, bloqué, etc.).
 Sa propre pile d'exécution.
 Un espace privé pour ses variables locales.
 Contexte plus léger : Comparé à un processus, un thread a un contexte d'exécution plus léger car il partage la
plupart des ressources avec d'autres threads du même processus.
 Accès aux ressources du processus père : Un thread peut accéder aux ressources du processus parent, car tous
les threads d'un même processus partagent la même mémoire.
 Peut créer d'autres threads : Un thread a la capacité de créer d'autres threads au sein du même processus.

Analyse de la programmation multithread :

Avantages :

1. Simplicité dans des situations complexes :


 Le modèle de programmation multithread peut simplifier la gestion de tâches complexes en permettant
l'exécution simultanée de plusieurs threads au sein d'un même processus.
2. Création rapide des threads :
 La création de threads est généralement plus rapide que celle des processus, ce qui peut conduire à des
gains de performances significatifs. Certains systèmes affichent un facteur de 100 entre la création de
threads et de processus.
3. Meilleure utilisation des ressources sur les machines multiprocesseurs :
 Les machines multiprocesseurs peuvent exploiter efficacement les threads en les répartissant sur
différents cœurs, permettant ainsi une meilleure utilisation des ressources de traitement.
4. Communication facilitée entre threads :
 La communication entre threads est généralement plus facile et plus rapide que celle entre processus,
car les threads partagent la même mémoire. Cela simplifie la mise en œuvre de la communication et de
la synchronisation entre les différentes parties d'un programme.
5. Réponse améliorée aux entrées/sorties :
 Un programme multithread peut dédier des threads spécifiques aux opérations d'entrée/sortie,
améliorant ainsi la réactivité de l'application en permettant à d'autres threads de continuer leur exécution
pendant les opérations bloquantes.

Inconvénients :

1. Complexité accrue :

5
 La programmation multithread est plus complexe que la programmation avec un seul thread. La gestion
de la synchronisation entre les threads, la résolution des conflits d'accès aux données partagées, et le
débogage de problèmes liés à la concurrence ajoutent de la complexité au processus de développement.
2. Synchronisation :
 La synchronisation entre threads pour éviter les conditions de concurrence et les accès concurrents aux
ressources partagées peut être délicate à implémenter correctement.
3. Débogage plus complexe :
 Trouver et résoudre les bugs dans un programme multithread peut être plus complexe en raison des
interactions concurrentes entre les threads.

Implémentation des threads


L’implémentation des threads varie considérablement d'un système d'exploitation à un autre en raison des
différences dans les modèles de threading et la manière dont les systèmes d'exploitation gèrent les processus
légers. Cependant, le standard POSIX (Portable Operating System Interface) a été développé pour fournir une
interface commune pour les systèmes d'exploitation UNIX et est également adopté par de nombreux autres
systèmes.

Rappel : POSIX (Portable Operating System Interface for uniX) est un ensemble de normes définissant une
interface standard entre les systèmes d'exploitation UNIX et les applications logicielles. L'objectif principal de
POSIX est de permettre la portabilité des applications entre différents systèmes d'exploitation UNIX.

Quelques points importants concernant l'implémentation des threads avec POSIX :

1. Interface standard POSIX pour les threads :


 POSIX définit une interface standard pour la programmation de threads. Cela inclut des fonctions pour
la création, la synchronisation et la gestion des threads,
2. Support d'une centaine de fonctions :
 POSIX offre un ensemble complet de fonctionnalités pour le support des threads. Cela inclut des
fonctions pour la création et la terminaison des threads, la gestion de l'état des threads, le partage de
données entre les threads, la synchronisation, et bien plus encore.
3. Mutex et variables de conditions :
 POSIX définit des mécanismes de synchronisation tels que les mutex pour protéger l'accès concurrent à
des ressources partagées, ainsi que les variables de condition (moniteurs) pour la communication entre
les threads.
4. Synchronisation :
 Les mécanismes de synchronisation inclus dans POSIX permettent de garantir l'exécution cohérente et
ordonnée des threads. Cela aide à éviter les problèmes de concurrence tels que les conditions de course.
5. Portabilité :
 L'utilisation de l'interface POSIX rend les programmes multithread portables entre différents systèmes
d'exploitation qui supportent POSIX. Cependant, il est important de noter que, bien que POSIX soit
largement adopté, il peut y avoir des différences dans les détails de l'implémentation.

6
Les deux schémas illustrent deux méthodes courantes d'implémentation des threads : l'implémentation en espace
utilisateur (a) et l'implémentation en espace noyau (b).

(a) Implémentation de threads en espace utilisateur :

 User Space (Espace utilisateur) :


 Les threads sont gérés au niveau de l'espace utilisateur, ce qui signifie que les opérations liées
aux threads sont effectuées sans intervention du noyau.
 Process (Processus) :
 Chaque processus a son propre espace mémoire et ses propres threads. La gestion des threads
est effectuée par une bibliothèque en espace utilisateur sans avoir besoin de faire appel au
noyau.
 Run-time Thread System (Système de threads à l'exécution) :
 Une bibliothèque en espace utilisateur gère la création, la planification et la terminaison des
threads sans l'intervention du noyau.
 Avantages :
 Plus rapide, car il évite les coûts liés aux changements de contexte entre l'espace utilisateur et
l'espace noyau.
 Plus flexible, car les opérations de gestion des threads peuvent être personnalisées pour
répondre aux besoins spécifiques.
 (b) Implémentation de threads en espace noyau :
 User Space (Espace utilisateur) :
 Les threads sont toujours gérés au niveau de l'espace utilisateur, mais certaines opérations
peuvent nécessiter l'intervention du noyau.
 Kernel Space (Espace noyau) :
 Le noyau est impliqué dans certaines opérations de gestion des threads, telles que la création et
la terminaison des threads.
 Kernel Thread Table (Table des threads du noyau) :
 Le noyau maintient une table de threads pour suivre les informations sur chaque thread.
 Avantages :
 Permet une gestion plus fine des threads par le noyau.

7
 Peut bénéficier de fonctionnalités du noyau, mais cela peut être plus coûteux en termes de
performances.

 En résumé, l'implémentation des threads en espace utilisateur offre une gestion plus rapide et flexible
des threads, tandis que l'implémentation en espace noyau peut fournir des fonctionnalités
supplémentaires mais peut être plus coûteuse en termes de performances. Le choix entre ces deux
approches dépend des besoins spécifiques de l'application.

Threads implémentés dans l'espace noyau


L'implémentation des threads dans l'espace noyau signifie que la gestion des threads est effectuée par le système
d'exploitation lui-même. Chaque thread est représenté en tant qu'objet du noyau, et l'ordonnanceur du système
d'exploitation est responsable du partage des ressources de traitement, des changements de contexte, des
changements d'état des threads, etc. Cette approche est considérée comme la plus simple en termes
d'implémentation.

Caractéristiques de l'implémentation des threads dans l'espace noyau :

1. Objets du noyau :
 Chaque thread est représenté comme un objet du noyau, ce qui signifie que toutes les opérations liées
aux threads sont effectuées par le noyau.
2. Ordonnanceur système :
 L'ordonnanceur du système d'exploitation est responsable de la planification des threads, de la
commutation de contexte entre eux, et de la gestion des priorités.
3. Gestion lourde de la création et de la destruction de threads :
 La création et la destruction de threads dans l'espace noyau sont relativement lourdes en termes de
ressources, ce qui peut affecter les performances.
4. Recyclage des threads :
 Pour optimiser les coûts de création et de destruction, plusieurs systèmes d'exploitation recyclent les
threads. Lorsqu'un thread meurt, il est marqué comme non-exécutable. Lorsqu'un nouveau thread est
créé, le thread non-exécutable peut être réactivé.

Plateformes utilisant les threads en espace noyau :

1. Windows (avant la version 7) :


 Les versions antérieures de Windows utilisaient l'implémentation des threads en espace noyau.
2. Linux (avec la librairie usuelle) :
 Linux prend en charge les threads en espace noyau, notamment avec la librairie standard de threads.
3. Solaris :
 Le système d'exploitation Solaris utilise l'implémentation des threads en espace noyau.
4. BSD (Berkeley Software Distribution) :
 Les systèmes d'exploitation basés sur BSD utilisent généralement l'implémentation des threads en
espace noyau.
5. Native POSIX Thread Library (NPTL) :
 NPTL, utilisé principalement dans les systèmes Linux modernes, offre une implémentation des threads
en espace noyau qui améliore les performances et l'évolutivité par rapport aux implémentations
précédentes.

En résumé, l'implémentation des threads dans l'espace noyau est une approche robuste mais peut être coûteuse en
termes de création et destruction de threads. Elle est utilisée dans plusieurs systèmes d'exploitation, mais d'autres
approches, comme l'implémentation en espace utilisateur, peuvent également être utilisées en fonction des
besoins spécifiques et des performances souhaitées.

8
Avantages de l'implémentation des threads dans l'espace noyau :

1. Utilisation optimisée des ressources de traitement (multiprocesseurs) :


 Les threads en espace noyau peuvent être planifiés et répartis sur plusieurs processeurs, permettant une
utilisation efficace des ressources multiprocesseurs.
2. Possibilité d'utiliser les interruptions :
 Les threads en espace noyau peuvent bénéficier de certaines fonctionnalités du noyau, y compris la
gestion des interruptions, ce qui peut être utile pour des applications nécessitant une réactivité accrue.
3. Réutilisation de fonctions éprouvées du système d'exploitation :
 L'utilisation des fonctionnalités du noyau permet de tirer parti des mécanismes de gestion de la
mémoire, de la planification des tâches, et d'autres fonctionnalités du système d'exploitation.

Inconvénients de l'implémentation des threads dans l'espace noyau :

1. Commutation de contexte plus lourde :


 La commutation de contexte entre threads en espace noyau est généralement plus coûteuse en termes de
performances par rapport à l'implémentation en espace utilisateur.
2. Gestion des threads nécessite des appels systèmes :
 Les opérations de gestion des threads, telles que la création, l'attente et la synchronisation, nécessitent
des appels systèmes, ce qui peut entraîner une surcharge en termes de coûts de performance.
3. Interface dépendante du système d'exploitation :
 L'interface pour la gestion des threads peut varier d'un système d'exploitation à l'autre, ce qui peut
rendre le code dépendant du système d'exploitation.
4. Blocage du processus en cas de défaut de page :
 En cas de défaut de page ou lors d'un appel système, le processus entier est bloqué au lieu de seulement
le thread concerné. Cela peut entraîner une baisse de l'efficacité, surtout dans les situations où plusieurs
threads fonctionnent indépendamment.

Implémentation des threads dans l'espace utilisateur :

L'implémentation des threads dans l'espace utilisateur signifie que le partage des ressources de traitement se fait
entièrement en espace utilisateur, sans implication directe du noyau. Le noyau n'a pas de connaissance de la
présence de threads dans les processus, et il y a un thread noyau pour chaque processus, indépendamment du
nombre de threads en exécution à l'intérieur de ce processus.

Caractéristiques de l'implémentation des threads dans l'espace utilisateur :

1. Partage des ressources en espace utilisateur :


 La gestion des threads se fait entièrement au niveau de l'espace utilisateur sans nécessiter d'intervention
du noyau.
2. Un thread noyau pour chaque processus :
 Chaque processus a un thread noyau associé, indépendamment du nombre de threads en espace
utilisateur.
3. Table de threads pour chaque processus :
 Chaque processus a sa propre table de threads, contenant les enregistrements nécessaires tels que les
registres, le compteur ordinal, le pointeur de pile, l'état, etc., de chaque thread.
4. Changement de contexte léger :
 Lorsqu'un thread est bloqué, ses registres sont enregistrés dans la table, et un autre thread est choisi. Les
registres du nouveau thread sont chargés, et il est prêt à s'exécuter. Ce changement de contexte est léger,
nécessitant seulement quelques instructions machines.

Plateformes utilisant les threads en espace utilisateur :

1. GNU Portable thread :

9
 Une bibliothèque de threads portables développée par le projet GNU, qui peut être utilisée pour mettre
en œuvre des threads en espace utilisateur.
2. JAVA (sur certaines JVM) :
 Certains environnements d'exécution Java (JVM) utilisent des threads en espace utilisateur pour la
gestion des threads Java.
3. C# :
 La programmation en C# avec le modèle de threading de la bibliothèque standard peut utiliser des
threads en espace utilisateur.
4. Smalltalk :
 Certains systèmes Smalltalk utilisent l'implémentation des threads en espace utilisateur.
5. Apple Inc. :
 Certaines implémentations sur les systèmes Apple peuvent utiliser des threads en espace utilisateur.

Avantages de l'implémentation des threads dans l'espace utilisateur :

 Changement de contexte léger :


 Les changements de contexte entre les threads sont légers, car ils ne nécessitent pas l'intervention du
noyau.
 Flexibilité et contrôle :
 Le programmeur a un contrôle direct sur la gestion des threads, offrant une grande flexibilité.
 Indépendance du système d'exploitation :
 L'implémentation des threads en espace utilisateur est indépendante du système d'exploitation, ce qui
facilite la portabilité du code.

Inconvénients de l'implémentation des threads dans l'espace utilisateur :

 Blocage du processus en cas de blocage d'un thread :


 Si un thread est bloqué, tout le processus peut être bloqué, car le noyau n'a pas la connaissance des
threads en espace utilisateur.
 Limitations sur l'utilisation des ressources :
 Les threads en espace utilisateur peuvent ne pas tirer pleinement parti de certaines fonctionnalités du
matériel, telles que l'utilisation efficace des multiprocesseurs.

Implémentation des threads en hybride utilisateur/noyau :

L'implémentation hybride des threads combine à la fois des threads noyau et des threads utilisateur pour tirer
parti des avantages de chaque approche tout en évitant leurs inconvénients respectifs. Cette approche utilise N
threads noyau qui exécutent M threads utilisateur (NM).

Caractéristiques de l'implémentation hybride :

1. Utilisation de threads noyau et utilisateur :


 La combinaison de threads noyau et utilisateur permet de bénéficier des avantages des deux approches.
2. Objectif :
 L'objectif est de tirer parti des avantages des threads utilisateur, tels que des changements de contexte
rapides, et des fonctionnalités des threads noyau, comme une gestion plus fine des ressources.
3. Plateformes implantant les threads hybrides :
 Certains systèmes d'exploitation, tels que Windows 7 à 10, ainsi que des architectures spécifiques
comme le Cray MTA-2 et Sun Solaris, ont mis en œuvre des threads hybrides.

Avantages de l'implémentation hybride :

10
1. Combinaison d'avantages :
 Les threads hybrides visent à combiner les avantages des threads utilisateur (changements de contexte
rapides) et des threads noyau (gestion fine des ressources).
2. Adaptabilité :
 Ils peuvent être adaptés pour répondre aux exigences spécifiques de l'application, offrant une plus
grande flexibilité.

Inconvénients de l'implémentation hybride :

1. Difficulté d'implémentation :
 La mise en œuvre d'une solution hybride est plus complexe, car elle nécessite une coordination entre le
code utilisateur et le code noyau.
2. Nécessite du code utilisateur et noyau :
 Les threads hybrides exigent la présence de code à la fois dans l'espace utilisateur et l'espace noyau, ce
qui peut rendre leur mise en œuvre plus complexe.

En résumé, l'implémentation des threads en hybride utilisateur/noyau cherche à exploiter les avantages des deux
approches, mais elle est plus difficile à mettre en œuvre en raison de la coordination nécessaire entre le code
utilisateur et le code noyau. Cette approche est adoptée par certains systèmes d'exploitation et architectures
spécifiques pour optimiser la performance tout en conservant la flexibilité.

11
Résumer de cette partie
Processus et Threads :

 Programme :
 Ensemble d'instructions dans un langage de programmation.
 Créé par un programmeur à l'aide d'un éditeur ou d'un environnement de développement.
 Processus :
 Instance en cours d'exécution d'un programme.
 Composé du code du programme, de l'espace mémoire, des fichiers ouverts, etc.
 Créé lorsqu'un programme est lancé.
 Threads :
 Unité d'exécution plus petite au sein d'un processus.
 Plusieurs threads peuvent exister dans un même processus.
 Partagent la même mémoire et ressources, facilitant la communication.
 Création d'un Processus :
 Initiée par l'utilisateur, le système d'exploitation, ou un autre processus.

Synonymes de Thread :

 Liste des synonymes :


 Fil (d'exécution), Tâche, Processus léger, Fil d'instruction, Exétron, Unité d'exécution.

Configurations de Mono-threading et Multi-threading :

Mono-threading :

 Chaque processus est une exécution indépendante.


 Processus isole son espace utilisateur et noyau.
 Transitions entre espaces lors d'appels système.

Multi-threading :

 Chaque processus a plusieurs threads.


 Threads partagent l'espace utilisateur, facilitant la communication.
 Transitions entre espaces utilisateur/noyau lors d'appels système.

Comparaison entre Processus et Thread :

Similarités :

1. Exécution d'instructions.
2. Apparence de parallélisme.

Différences :

1. Partage de mémoire :
 Processus : Espace mémoire distinct.
 Thread : Partage la même mémoire au sein du processus.
2. Commutation de contexte :
 Processus : Changement d'espace mémoire virtuelle.
 Thread : Changement de contexte plus léger.

12
Intérêts des Threads :

1. Exécution en parallèle.
2. Adapté aux architectures multiprocesseurs.
3. Structuration des processus.
4. Utilisation efficace des ressources système.
5. Meilleure réactivité des applications.
6. Communication facilitée.
7. Gestion des tâches concurrentes.

Récapitulatif Processus vs Thread :

Processus :

 Environnement propre.
 Contexte volumineux.
 Accès aux ressources propres et parfois d'autres processus.

Thread :

 Possède un état d'exécution, sa propre pile, espace privé.


 Contexte plus léger.
 Accès aux ressources du processus parent.

Analyse de la Programmation Multithread :

Avantages :

1. Simplicité dans des situations complexes.


2. Création rapide des threads.
3. Utilisation efficiente des ressources.
4. Communication facilitée entre threads.
5. Réponse améliorée aux entrées/sorties.

Inconvénients :

1. Complexité accrue.
2. Synchronisation délicate.
3. Débogage plus complexe.

Implémentation des Threads :

 Threads en Espace Noyau :


 Gérés par le système d'exploitation.
 Avantages : Utilisation optimisée des ressources, utilisation des interruptions.
 Inconvénients : Commutation de contexte plus lourde, interface dépendante du système.
 Threads en Espace Utilisateur :
 Gérés sans intervention du noyau.
 Avantages : Changement de contexte léger, indépendance du système.
 Inconvénients : Blocage du processus en cas de blocage d'un thread, limitations sur l'utilisation des
ressources.
 Threads en Hybride Utilisateur/Noyau :
 Combinaison d'avantages des deux approches.
 Avantages : Combinaison d'avantages, adaptabilité.
 Inconvénients : Difficulté d'implémentation, nécessite du code utilisateur et noyau.

13
Conclusion :

 L'implémentation des threads dépend des besoins spécifiques.


 Threads offrent parallélisme, adaptabilité, et meilleure utilisation des ressources.
 Choix entre espace utilisateur et noyau a des implications sur la performance et la complexité.
 L'approche hybride vise à tirer parti des avantages des deux mondes.

14

You might also like