Multitasking et multithreading

 

RETOUR

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.
Pas d'exécution véritablement parallèle dans le cas des machines mono-processeur.
Une seule instruction processeur (une seule application) est exécutée à tout instant, mais le système d'exploitation permute à cadence rapide entre toutes les applications en exécution par affectations successives de l'utilisation exclusive du processeur.
Le cadencement étant très rapide, l'impression est ainsi donnée que les applications s'exécutent en parallèle.

Deux multitâches:

  • Multitâche préemptif: Le système d'exploitation gère l'attribution des temps de calcul aux applications et switche entre elles sans qu'elles n'aient à s'occuper de quoi que ce soit (elles ne peuvent pas l'empêcher et n'ont même pas conscience de fonctionner en multitâche). Toute application peut fonctionner en multitâche dans ce cadre sans avoir à être conçue pour.

  • Multitâche non-préemptif: Les applications rendent elles-mêmes la main au système d'exploitation et gèrent leurs contextes d'exécution respectifs. Les applications doivent être conçues spécifiquement dans ce cadre, sinon le multitâche ne fonctionne pas.

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
à base de processus indépendants

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).


Figure 2: Application multi-threadée

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é.


Figure 3: Ordonnacement des threads au sein d'une application

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.
A contrario, si la programmation multi-threadée n'est pas utilisée, une application unique ne s'exécute que sur un seul cœur. Les autres cœurs sont inexploités par cette application mais restent disponibles pour les autres applications et le système d'exploitation.

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).
Ceci peut aussi être un inconvénient car le système ne gère aucune protection des données -> possibilité d'anarchie mémoire et donc de plantage.

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.