Multitâche préemptif

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 17 mai 2021 à 22:03 et modifiée en dernier par O4ub (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

En informatique, le multitâche préemptif désigne la capacité d'un système d'exploitation à exécuter ou arrêter une tâche planifiée en cours.

Un ordonnanceur préemptif présente l'avantage d'une meilleure réactivité du système et de son évolution, mais l'inconvénient vient des situations de compétition (lorsque le processus d'exécution accède à la même ressource avant qu'un autre processus (préempté) ait terminé son utilisation).

Principe de fonctionnement

L'ordonnanceur distribue le temps du processeur entre les différents processus. Dans un système préemptif, à l'inverse d'un système collaboratif, l'ordonnanceur peut interrompre à tout moment un processus en cours d'exécution pour permettre à un autre de s'exécuter. Les processus ne sont pas autorisés à accaparer le processeur. Une quantité de temps définie par le système est attribuée à chaque processus. Ce droit de préemption peut tout aussi bien survenir avec des interruptions matérielles.

Un processus peut être spécifié comme « préemptible » ou « non préemptible ». Un processus préemptible peut être suspendu au profit d'un processus ou d'une interruption. Un processus non préemptible ne peut être suspendu qu'au profit d'une interruption. Le temps qui lui est accordé est plus long, et l'attente plus courte.

Certains processus peuvent être affectés d'une priorité. La préemption peut avoir lieu pour exécuter un processus prioritaire immédiatement. Mais elle peut aussi avoir lieu parce que le système d'exploitation juge que le processus actuel a utilisé le processeur trop longtemps. Ainsi, les autres processus peuvent eux aussi s'exécuter un peu, même s'ils sont moins prioritaires.

Au fur et à mesure de l'évolution des systèmes d'exploitation, les concepteurs ont quitté la logique binaire « préemptible / non préemptible » au profit de systèmes plus fins de priorités multiples. Le principe est conservé, mais les priorités des processus sont échelonnées.

Pendant la préemption, l'état du processus (drapeaux, registres et pointeur d'instruction) est sauvé dans la mémoire. Il doit être rechargé dans le processeur pour que l'exécution reprenne : c'est la commutation de contexte.

Un système d'exploitation préemptif conserve en permanence la haute main sur les tâches exécutées par le processeur, contrairement à un système d'exploitation non préemptif, ou collaboratif, dans lequel c'est le processus en cours d'exécution qui prend la main et décide du moment où il la rend. L'avantage le plus évident d'un système préemptif est qu'il peut empêcher un processus dysfonctionnel d'accaparer sans fin le processeur.

Historique

Les premiers systèmes préemptifs naissent dans les années 1960 avec les travaux autour de multics. Le premier système préemptif largement diffusé est Unix durant les années 1970, ainsi que toutes les familles de systèmes qui en sont inspirés.

Les premiers systèmes d'exploitation Windows de Microsoft (Windows 3.1) étaient des systèmes collaboratifs. Windows 95, Windows 98 et Windows Me, s'ils adoptent le noyau Win32 qui pourrait les classer parmi les systèmes préemptifs, conservent néanmoins, pour raison de compatibilité ascendante avec Windows 3.1, un mode coopératif dans lequel ils basculent dès qu'une application 16 bits est exécutée. Ce mode de fonctionnement rend ces systèmes d'exploitation peu fiables, le système ne pouvant pas interrompre une tâche fautive.

Tous les systèmes d'exploitation modernes (Notamment macOS et Linux, AmigaOS et tous les Windows NT depuis le 3.1 et suivants, 4, 2000, XP, Vista et 7) sont des systèmes préemptifs.

Voir aussi