1 Dr.A.Adouane Le modèle de processus décrit jusqu’ici est un programme qui s’
1 Dr.A.Adouane Le modèle de processus décrit jusqu’ici est un programme qui s’exécute selon un chemin unique avec un seul compteur ordinal, On dit qu’il a un flot de contrôle unique ou un seul thread. Les systèmes modernes offrent au processus une exécution multi-threads, cela permet l’exécution simultanée des parties d’un même processus Dr.A.Adouane 2 Le processus est vu comme étant un ensemble de ressources (code exécutable, segments de données, de fichiers, de périphériques, etc.) Les parties constituants le processus sont appelées flots de contrôle ou processus légers (threads en anglais) En plus des ressources communes, chaque thread a sa propre zone de données ou de variables locales, sa propre pile d’exécution, ses propres registres et son propre compteur ordinal Dr.A.Adouane 3 Les threads sont des processus légers exécutés à l’intérieur d’un processus L’exécution des threads est concurrente Il existe toujours au moins un thread : le thread principal La durée de vie d’un thread ne peut pas dépasser celle du processus qui l’a crée Les threads d’un même processus partagent la même mémoire Dr.A.Adouane 4 Dr.A.Adouane 5 Réactivité Le processus continue à s’exécuter même si certaines de ses parties sont bloquées. Partage de ressources facilite la coopération, améliore la performance Économie d’espace mémoire Les threads issues du même processus utilise la même mémoire Économie de temps: Par exemple sous Solaris, la création d’un processus est 30 fois plus lente que celle d’un thread Dr.A.Adouane 6 • Si plusieurs processus problème d’accès ! • Un thread pour interagir avec l’utilisateur, • Un thread pour reformater en arrière plan, • Un thread pour sauvegarder périodiquement le document Dr.A.Adouane 7 Serveur web sans threads: le serveur en attente récupère une requête et la traite jusqu’à la fin avant de passer à une autre Si la requête est bloquée en attente du disque, le serveur est inactif mais ne peut prendre d’autres requêtes Dr.A.Adouane 8 Le Dispatcher thread se charge de réceptionner les requêtes. Il choisit, pour chaque requête reçue, un thread libre (en attente d’une requête). Ce thread va se charger d’interpréter la requête. Dr.A.Adouane 9 Tout comme les processus, les threads peuvent prendre plusieurs états: Actifs : En cours d’exécution, qui utilise le processeur Bloqué : thread qui attend un événement pour se débloquer. ◦Un thread qui lance un appel système pour récupéré une entrée au clavier, il reste bloqué jusqu’à ce qu’on tape sur le clavier. ◦Un thread peut également attendre qu’un autre thread le débloque. Prêt : Le thread est planifié pour l’exécution, il attend son tour Dr.A.Adouane 10 Dr.A.Adouane 11 Un thread inclut: Un compteur ordinal qui effectue le suivie des instructions à exécuter Des registres qui détiennent ses variables de travail en cours Une pile qui contient l’historique de l’exécution Dr.A.Adouane 12 Les threads autorisent les exécutions multiples dans le même environnement de processus Les threads se partagent un espace d’adressage, les fichiers ouverts et les ressources, on dit qu’on fait du multithreading En comparaison, les processus se partagent la mémoire physique, les disques et autres ressources Dr.A.Adouane 13 Dr.A.Adouane 14 Tout les threads ont le même espace d’adressage ils ont les même variables globales Chaque thread peut lire, écrire ou effacer la pile d’un autre thread Les threads proviennent du même utilisateur sont crée pour coopérer entre eux pas de nécessité de protection entre threads Dr.A.Adouane 15 Chaque thread possède sa propre pile (Stack) Dr.A.Adouane 16 Les piles contiennent un bloc d’activation (Frame) pour chaque procédure invoquée par le thread et qui n’a encore rien retourné Le bloc d’activation contient les variables locales de la procédure et l’adresse de retour après exécution Chaque thread appelle des procédure différentes chaque thread a besoin de sa propre pile Dr.A.Adouane 17 La majorité des systèmes permettent le multiflot (multithreading). Ils sont offerts soit au niveau utilisateur, soit au niveau noyau, on retrouve donc : Les threads utilisateur Les threads noyau Les threads combinés Dr.A.Adouane 18 Les threads utilisateur sont implantés dans une bibliothèque (niveau utilisateur) qui fournit un support pour les gérer Ils sont portables sur différentes plate-formes (ne sont pas gérés par le noyau). Ils sont gérés par une application. Le changement de contexte est rapide Dr.A.Adouane 19 Le noyau gère les processus (table des processus) et ne se préoccupe pas de l’existence des threads (modèle plusieurs- à-un). Lorsque le noyau alloue le processeur à un processus, le temps d’allocation du processeur est réparti entre les différents threads du processus (cette répartition n’est pas gérée par le noyau). Dr.A.Adouane 20 Dr.A.Adouane 21 Les threads Java peuvent être créés en : ◦dérivant la class Thread ◦Implémentant l’interface Runnable Plusieurs API pour contrôler les threads: suspend() , sleep() , resume() , stop() , etc. Les threads Java sont gérés par la machine virtuelle Java (JVM). Dr.A.Adouane 22 À tout instant, au plus un thread par processus est en cours d’exécution. Cette implémentation n’est pas intéressante pour des systèmes multiprocesseurs. Si un thread d’un processus se bloque, tout le processus est bloqué. Pour pallier cet inconvénient, certaines librairies transforment les appels système bloquants en appels système non bloquants. Dr.A.Adouane 23 Le thread utilisateur s’exécute au dessus d’un système d’exécution (run time system) qui est une collection de procédures prenant en charge les threads, et utilise les appels de fonction : Pthread_create: crée un nouveau thread Pthread_exit: termine le thread appelant Pthread_join: attendre la fin d’un thread Pthread_yield: libère l’UC pour laisser un autre thread s’exécuter Dr.A.Adouane 24 Chaque processus a sa propre table de threads, les informations nécessaires au redémarrage d’un thread prêt ou bloqué y sont stocké Si un thread est susceptible de se bloqué, il invoque une procédure du système d’exécution (locale), si elle décide de le bloquer elle stock ses registres dans la table des threads Elle regarde ensuite dans la table si un thread est prêt pour l’exécution, et recharge les registres de ce nouveau thread Se type de basculement est plus rapide que le changement de contexte des processus Dr.A.Adouane 25 Dans certains SE comme UNIX il est possible de prédire le blocage de thread Un appel système appelé SELECT permet de savoir si un read à venir donne un blocage La procédure Read est remplacer par Select, si le Select s’exécute alors la procédure Read est invoqué Dr.A.Adouane 26 Si Select se bloque alors un autre thread est exécuter, quand il fini on essaye encore le thread bloqué Ce système de prédiction est peu efficace et oblige à réécrire des parties de la bibliothèque, mais n’a pas de remplacement Le code intervenant avant et après l’appel système pour cette vérification est appelé code WRAPPER Dr.A.Adouane 27 Si un programme appelle une instruction qui ne se trouve pas en mémoire, un défaut de page se produit, le SE cherche l’instruction manquante dans le disque. Pendant ce temps le processus est bloqué Si un thread provoque le défaut de page, le noyau bloque le processus dans son ensemble sans voir le thread et attend que l’E/S disque finisse Cela pénalise le processus qui a peut être d’autre thread à exécuter ! Dr.A.Adouane 28 Sont directement supportés par le noyau du système d'exploitation. Le système d'exploitation se charge de leur gestion, Un temps CPU est alloué à chaque thread (modèle un-à-un) Si un thread d’un processus est bloqué, un autre thread du processus peut être élu par le noyau Cette implémentation est plus intéressante pour les systèmes multiprocesseurs. Dr.A.Adouane 29 Un processus peux ajuster les niveaux de priorité de ses threads. Par exemple, un processus peut améliorer son interactivité en assignant : ◦une forte priorité à un thread qui traite les requêtes des utilisateurs ◦une plus faible priorité aux autres. Dr.A.Adouane 30 Le noyau connait les threads et détient la table de threads pour les suivre Lorsqu’un thread veut créer ou détruire un autre thread, il effectue un appel noyau qui prend en charge la demande en modifiant la table des threads Si un thread se bloque le noyau peut exécuter un autre thread du même processus ou d’un autre processus Dr.A.Adouane 31 Dr.A.Adouane 32 La création et destruction de thread noyau est relativement lourde Le recyclage de thread est utilisé pour diminuer cette charge Après la destruction d’un thread il est marqué non exécutable, mais ses structures de données noyau ne sont pas effacé Lorsqu’un thread doit être crée, un ancien thread est réactivé pour réduire la charge CPU Dr.A.Adouane 33 Si un thread d’un processus déclenche un défaut de page, le noyau peut facilement exécuter un autre thread du même processus pendant que la page demandé est récupéré Dr.A.Adouane 34 Linux ne fait pas de distinction entre les processus et les threads qui sont communément appelés tâches. Il implémente le modèle multiflot un-à-un. La création de tâches est réalisée au moyen de l’appel système clone(). Clone() permet de spécifier les ressources à partager (espace d’adressage, fichiers, signaux..) entre les tâches créatrice et créée Dr.A.Adouane 35 Inconvénients : Performance (gestion plus coûteuse) Les programmes utilisant les threads noyau sont moins portables que ceux qui utilisent des threads utilisateur. Changement de contexte lent Dans le cas uploads/Industriel/ les-threads.pdf
Documents similaires










-
31
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Jan 10, 2022
- Catégorie Industry / Industr...
- Langue French
- Taille du fichier 3.3829MB