Professional Documents
Culture Documents
Chapitre2 3
Chapitre2 3
Programme :
Processus :
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.
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 :
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.
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.
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.
Avantages :
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.
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.
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).
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.
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é.
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 :
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.
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.
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).
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é.
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 :
Mono-threading :
Multi-threading :
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.
Processus :
Environnement propre.
Contexte volumineux.
Accès aux ressources propres et parfois d'autres processus.
Thread :
Avantages :
Inconvénients :
1. Complexité accrue.
2. Synchronisation délicate.
3. Débogage plus complexe.
13
Conclusion :
14