[go: nahoru, domu]

Aller au contenu

« Multitâche préemptif » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
JulesROGUE (discuter | contributions)
Fonctionnalité de suggestions de liens : 2 liens ajoutés.
 
(42 versions intermédiaires par 33 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{voir homonymie|Préemption}}
{{voir homonymie|Préemption}}


En [[informatique]], la '''préemption''' est la capacité d'un [[système d'exploitation]] [[multitâche]] à exécuter ou stopper une tâche planifiée en cours en faveur d'une tâche de priorité supérieure.
En [[informatique]], le '''[[multitâche]] [[Préemption|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 [[Ordonnancement dans les systèmes d'exploitation|ordonnanceur]] préemptible présente l'avantage d'une meilleure réactivité du système et de son évolution, mais l'inconvénient vient des [[situation de compétition|situations de compétition]] (lorsque le processus d'exécution accède à la même ressource avant qu'un autre processus (préemptif) ait terminé son utilisation).
Un [[Ordonnancement dans les systèmes d'exploitation|ordonnanceur]] préemptif présente l'avantage d'une meilleure réactivité du système et de son évolution. Les différentes tâches peuvent être exécutées en parallèle, à la fois par un changement de contexte très rapide et par la répartition sur différents processeurs. Le seul inconvénient que l'on pourrait donner à un système multitâche préemptif vient des [[situation de compétition|situations de compétition]], en général relativement limité. Lorsqu'un processus d'exécution accède à une ressource, il faut dans certains en particulier, que le ou les autres systèmes libèrent la ressource, mais c'est de toute façon également dans les systèmes monotâche ou multitâche coopératif. Dans un grand nombre de cas, le système permet des changements de contexte laissant une utilisation simultanée ou quasi-simultanée (de l'ordre que quelques micro secondes entre chaque processus) de différents processus simultanément.


==Principe de fonctionnement==
== Principe de fonctionnement ==
L'[[Ordonnancement dans les systèmes d'exploitation|ordonnanceur]] distribue le temps du [[processeur]] entre les différents [[Processus (informatique)|processus]]. Dans un système préemptif, à l'inverse d'un système collaboratif, l'ordonnanceur peut interrompre à tout moment une tâche en cours d'exécution pour permettre à une autre tâche de s'exécuter.
L'[[Ordonnancement dans les systèmes d'exploitation|ordonnanceur]] distribue le temps du [[processeur]] entre les différents [[Processus (informatique)|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 peuvent s'accaparer le ou un processeur que de façon limitée dans le temps, par alternance, en fonction de la priorité du processus ou du [[fil d'exécution]] (thread). 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 que logicielles, selon les cas.


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 (informatique)|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.
Dans un [[système d'exploitation]] multitâche préemptif, les [[processus (informatique)|processus]] ne sont pas autorisés à prendre un temps non-défini pour s'exécuter dans le processeur. Une quantité de temps définie est attribuée à chaque processus ; si la tâche n'est pas accomplie avant la limite fixée, le processus est renvoyé dans la pile pour laisser place au processus suivant dans la file d'attente, qui est alors exécuté par le processeur. Ce droit de préemption peut tout aussi bien survenir avec des interruptions matérielles.


On affecte généralement une priorité plus ou moins élevée aux processus. 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 durant un laps de temps déterminé, même s'ils sont moins prioritaires.
Certaines tâches peuvent être affectées d'une priorité ; une tâche pouvant être spécifiée comme « préemptive » ou « non préemptive ». Une tâche préemptive peut être suspendue (mise à l'état « ready ») au profit d'une tâche de priorité plus élevée ou d'une [[Interruption (informatique)|interruption]]. Une tâche non préemptive ne peut être suspendue qu'au profit d'une interruption. Le temps qui lui est accordé est plus long, et l'attente dans la file d'attente plus courte.


Au fur et à mesure de l'évolution des systèmes d'exploitation, les concepteurs ont quitté la logique binaire « préemptive / non préemptive » au profit de systèmes plus fins de priorités multiples. Le principe est conservé, mais les priorités des programmes sont échelonnées.
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 le code soit exécuté de nouveau : c'est la [[commutation de contexte]].
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.
==Quelques exemples==
Concrètement, 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 est seul juge du moment où il la rend. L'avantage le plus évident d'un système préemptif est qu'il peut en permanence décider d'interrompre un processus, principalement si celui-ci échoue et provoque l'instabilité du système.


== Historique ==
Les premiers systèmes d'exploitation Windows de [[Microsoft]] ([[Microsoft Windows 3.x|Windows 3.1]]) étaient des systèmes collaboratifs. [[Microsoft Windows 95|Windows 95]], [[Microsoft Windows 98|Windows 98]] et [[Microsoft Windows Me|Windows Me]], s'ils adoptent le noyau [[Windows API|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 et {{refnec|fait que les entreprises s'en détourneront pour s'orienter vers des solutions totalement préemptives}}. Tous les systèmes d'exploitation modernes (Les systèmes [[UNIX|Unix]], tel que [[Mac OS X]] et [[Linux]], le système [[AmigaOS]] et tous les Windows [[Microsoft Windows XP|XP]], [[Microsoft Windows Vista|Vista]] et [[Windows 7|7]]) sont des systèmes préemptifs. On doit signaler aussi que l'un des premiers vrais systèmes d'exploitation préemptif fût OS2 et OS2 warp d'IBM.
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.

* Multitâche collaboratif : [[Mac OS Classic]] (1984), [[The Operating System|TOS]] de l'[[Atari ST]] (1985) ou [[RISC OS]] (d'Acorn, 1987) ;
* Multitâche préemptif : [[AmigaOS]] (1984), [[Linux]] (1991), [[FreeBSD]] (1993), [[BeOS]] (1995, duquel est dérivé [[Haiku (système d'exploitation)|Haiku]]), [[NetBSD]] et [[OpenBSD]] (1995), [[NeXTSTEP]] (1995), [[macOS]] (sous le nom Mac OS X, dérivé de NeXTSTEP, 2001).

Les premiers systèmes d'exploitation Windows de [[Microsoft]] ([[Microsoft Windows 3.x|Windows 3.1]], 1990) étaient des systèmes collaboratifs. [[Microsoft Windows 95|Windows 95]], [[Microsoft Windows 98|Windows 98]] et [[Microsoft Windows Me|Windows Me]], s'ils adoptent le noyau [[Windows API|Win32]] qui pourrait les classer parmi les systèmes préemptifs, conservent néanmoins, pour raison de [[Compatibilité ascendante et descendante|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 ([[AmigaOS]] (1995), [[macOS]] et tous les [[Windows NT]] depuis le 3.1 et suivants) sont des systèmes préemptifs.


== Voir aussi ==
== Voir aussi ==
Ligne 25 : Ligne 32 :
* [[Commutation de contexte]]
* [[Commutation de contexte]]


{{Portail informatique}}
{{Portail|informatique}}


[[Catégorie:Terminologie de l'informatique]]
[[Catégorie:Terminologie de l'informatique]]
[[Catégorie:Ordonnanceur]]
[[Catégorie:Ordonnanceur]]


[[cs:Preempce (informatika)]]
[[de:Multitasking#Präemptives Multitasking]]
[[de:Multitasking#Präemptives Multitasking]]
[[en:Preemption (computing)]]
[[it:Pre-rilascio]]
[[ja:プリエンプション]]
[[pl:Wywłaszczenie (informatyka)]]
[[pt:Preemptividade]]
[[ru:Вытесняющая многозадачность]]

Dernière version du 3 janvier 2024 à 18:30

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. Les différentes tâches peuvent être exécutées en parallèle, à la fois par un changement de contexte très rapide et par la répartition sur différents processeurs. Le seul inconvénient que l'on pourrait donner à un système multitâche préemptif vient des situations de compétition, en général relativement limité. Lorsqu'un processus d'exécution accède à une ressource, il faut dans certains en particulier, que le ou les autres systèmes libèrent la ressource, mais c'est de toute façon également dans les systèmes monotâche ou multitâche coopératif. Dans un grand nombre de cas, le système permet des changements de contexte laissant une utilisation simultanée ou quasi-simultanée (de l'ordre que quelques micro secondes entre chaque processus) de différents processus simultanément.

Principe de fonctionnement[modifier | modifier le code]

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 peuvent s'accaparer le ou un processeur que de façon limitée dans le temps, par alternance, en fonction de la priorité du processus ou du fil d'exécution (thread). 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 que logicielles, selon les cas.

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.

On affecte généralement une priorité plus ou moins élevée aux processus. 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 durant un laps de temps déterminé, 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[modifier | modifier le code]

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, 1990) é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 (AmigaOS (1995), macOS et tous les Windows NT depuis le 3.1 et suivants) sont des systèmes préemptifs.

Voir aussi[modifier | modifier le code]