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

  • 31
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager