Quelle est la différence entre le noyau non préemptif, préemptif et sélectif préemptif?


Réponses:


14

Sur un noyau préemptif, un processus s'exécutant en mode noyau peut être remplacé par un autre processus au milieu d'une fonction du noyau.

Cela ne s'applique qu'aux processus s'exécutant en mode noyau, un processeur exécutant des processus en mode utilisateur est considéré comme "inactif". Si un processus en mode utilisateur veut demander un service au noyau, il doit émettre une exception que le noyau peut gérer.

Par exemple:

Process Aexécute un gestionnaire d'exceptions, Process Best réveillé par une requête IRQ, le noyau remplace le processus Apar B(un commutateur de processus forcé). Le processus An'est pas terminé. Le planificateur décide ensuite si le processus Aobtient du temps CPU ou non.

Sur un noyau non préemptif, le processus Aaurait simplement utilisé tout le temps du processeur jusqu'à ce qu'il soit terminé ou décide volontairement d'autoriser d'autres processus à l'interrompre (un changement de processus planifié).

Les systèmes d'exploitation basés sur Linux d'aujourd'hui n'incluent généralement pas de noyau entièrement préemptif, il existe encore des fonctions critiques qui doivent fonctionner sans interruption. Je pense donc que vous pourriez appeler cela un "noyau préemptif sélectif".

En dehors de cela, il existe des approches pour rendre le noyau Linux (presque) entièrement préemptif.


Le Macintosh System 6 et le code associé (par exemple, System 7, System 8 et System 9) n'étaient pas tous préemptifs. Le passage d'Apple à MacOS X a également vu l'introduction du multitâche préemptif.
Mei

le noyau remplace le processus A par B (un commutateur de processus forcé). -> De manière anglaise, peut-on dire alternativement pour la phrase que le processus A est préempté (par le processus B)?
RSB

2

la préemption est -> La capacité du système d'exploitation à anticiper ou à arrêter une tâche actuellement planifiée au profit d'une tâche de priorité plus élevée. La planification peut être, mais sans s'y limiter, la planification des processus ou des E / S, etc.

Sous Linux, les programmes de l'espace utilisateur ont toujours été préemptifs: le noyau interrompt les programmes de l'espace utilisateur pour passer à d'autres threads, en utilisant le tick d'horloge normal. Ainsi, le noyau n'attend pas que les programmes de l'espace utilisateur libèrent explicitement le processeur (ce qui est le cas en multitâche coopératif). Cela signifie qu'une boucle infinie dans un programme en espace utilisateur ne peut pas bloquer le système.

Cependant, jusqu'à 2.6 noyaux, le noyau lui-même n'était pas préemtible: dès qu'un thread est entré dans le noyau, il ne pouvait pas être empêché d'exécuter un autre thread. Cependant, cette absence de préemption dans le noyau a causé plusieurs problèmes de latence et d'évolutivité. Ainsi, la préemption du noyau a été introduite dans les noyaux 2.6, et on peut l'activer ou la désactiver en utilisant l'option CONFIG_PREEMPT. Si CONFIG_PREEMPT est activé, le code du noyau peut être préempté partout, sauf lorsque le code a désactivé les interruptions locales. Une boucle infinie dans le code ne peut plus bloquer l'ensemble du système. Si CONFIG_PREEMPT est désactivé, le comportement 2.4 est restauré.

ReQuoted et formaté à partir de: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/


Pourquoi le noyau 2.4 n'était-il pas préemptif?
Sen

Mieux vaut demander à Linus Torvalds :)
Madhur Ahuja

1

Un noyau préemptif permet de préempter un processus lorsqu'il s'exécute en mode noyau. Un noyau non préemptif ne permet pas à un processus s'exécutant en mode noyau d'être préempté; un processus en mode noyau s'exécutera jusqu'à ce qu'il quitte le mode noyau, bloque ou cède volontairement le contrôle du processeur. De toute évidence, un noyau non préemptif est essentiellement exempt de conditions de concurrence critique sur les structures de données du noyau, car un seul processus est actif dans le noyau à la fois. Nous ne pouvons pas en dire autant des noyaux préemptifs, ils doivent donc être soigneusement conçus pour garantir que les données de noyau partagées sont exemptes de conditions de concurrence. Les noyaux préemptifs sont particulièrement difficiles à concevoir pour les architectures SMP, car dans ces environnements, il est possible que deux processus en mode noyau s'exécutent simultanément sur des processeurs différents. Un noyau préemptif est plus adapté à la programmation en temps réel, car cela permettra à un processus en temps réel de devancer un processus en cours d'exécution dans le noyau. En outre, un noyau préemptif peut être plus réactif, car il y a moins de risque qu'un processus en mode noyau s'exécute pendant une période arbitrairement longue avant de laisser le processeur aux processus en attente. Bien sûr, cet effet peut être minimisé en concevant du code du noyau qui ne se comporte pas de cette façon. Plus loin dans ce chapitre, nous explorons comment différents systèmes d'exploitation gèrent la préemption au sein du noyau. cet effet peut être minimisé en concevant du code du noyau qui ne se comporte pas de cette façon. Plus loin dans ce chapitre, nous explorons comment différents systèmes d'exploitation gèrent la préemption au sein du noyau. cet effet peut être minimisé en concevant du code du noyau qui ne se comporte pas de cette façon. Plus loin dans ce chapitre, nous explorons comment différents systèmes d'exploitation gèrent la préemption au sein du noyau.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.