Multitasking et multithreading |
|
|
Multitâche: Plusieurs applications peuvent être lancées et exécutées
simultanément sur une machine, qu'elles soient relatives au système d'exploitation ou qu'elles aient été
lancées par les utilisateurs. Deux multitâches:
Gestion du multitâche préemptif au sein de Windows (comme dans le cas de tous les systèmes d'exploitation modernes). Si un processeur multi-cœurs est utilisé, les différents cœurs fonctionnent simultanément et donc exécutent véritablement plusieurs instructions et donc plusieurs programmes en parallèle. De nombreuses applications sont conçues pour ne s'exécuter que sur un seul cœur et donc n'exploitent que la puissance de ce cœur unique. Développer une application exploitant toute la puissance de tous les cœurs disponibles dans une machine nécessite un travail de programmation mettant en oeuvre plusieurs processus indépendants utilisant le multitâche pour s'exécuter en parallèle (voir figure 1). Si des interactions élaborées (communications) doivent exister entre ces processus pour qu'ils concourent à la réalisation d'un travail commun, elles devront être gérées au moyen de dispositifs spécifiques car, étant indépendants et ne partageant pas de mémoire, les processus ne possèdent pas de canaux de communication directes et implicites. Toute échange d'informations sera soumis à contrôle via ces canaux de communication -> sécurité mais lenteur possible.
Figure 1: Multitâche système et utilisateur Service : Application généralement liée au système d'exploitation fonctionnant en tâche de fond avec ou sans action à l'écran ("démon" dans la terminologie Unix). Existence d'une alternative à l'utilisation des processus pour la programmation parallèle: les threads Thread : Une application peut être conçue sous la forme d'un processus maître P créant lui-même des sous-programmes identiques ou non s'exécutant indépendamment et "parallèlement" avec accès direct à la zone mémoire associée à P: des threads (processus léger) (voir figure 2).
Un thread peut être créé et lancé à tout instant. Un thread peut lui-même créér des threads. Une fois sa tâche finie, un thread s'interrompt (voir figure 3). Un thread peut être mis en pause et relancé.
Outre un intérêt algorithmique (développement facilité d'une application unique gérant
plusieurs activités en même temps), la programmation multi-threadée a pour caractéristique de
s'intégrer dans le fonctionnement multi-tâches. Ainsi, si un processeur multicœurs est utilisé, les
différents threads seront affectés à différents cœurs. Une véritable exécution
parallèle est ainsi obtenue avec exploitation réelle de la puissance des cœurs disponibles et ceci dans
le cadre d'une seule application. Par rapport aux techniques de programmation parallèle à base de processus, l'intérêt de la programmation
multi-threadée est que tous les threads partagent la même zone mémoire. Cela facilite le partage d'informations
entre eux (aucun contrôle, aucune impossibilité de communication, accès rapide). Priorités: Le système d'exploitation intègre la notion de priorités (modifiables par l'administrateur) pour gérer l'ordonnancement de l'attribution de temps CPU aux processus et à leurs éventuels threads. Ces priorités sont primordiales pour le bon fonctionnement du système d'exploitation. |