web-dev-qa-db-fra.com

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

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

J'espère que quelqu'un peut éclairer de la lumière.

19
Sen

Sur un noyau préventif, un processus en mode de noyau peut être remplacé par un autre processus au milieu d'une fonction de noyau.

Ceci s'applique uniquement aux processus exécutés en mode noyau, un processus d'exécution de la CPU en mode utilisateur est considéré comme "inactif". Si un processus de mode utilisateur souhaite demander un service du noyau, il doit émettre une exception que le noyau peut gérer.

Par exemple:

Processus A exécute un gestionnaire d'exception, processus B est réveillé par une demande IRQ, le noyau remplace le processus A avec B (commutateur de processus forcé). Processus A est laissé non fini. Le planificateur décide par la suite si le processus A obtient le temps de processeur ou non.

Sur un noyau non imprévé, le processus A aurait simplement utilisé tout le temps du processeur jusqu'à ce qu'il soit terminé ou décide volontairement de permettre à d'autres processus de l'interrompre (commutateur de processus planifié).

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

En dehors de cela, il existe des approches pour rendre le noyau Linux (presque) pleinement préventif.

15
wag

la préemption est -> la capacité du système d'exploitation à préempter ou à arrêter une tâche actuellement planifiée en faveur d'une tâche de priorité plus élevée. La planification peut être celle de, mais pas limitée à la planification de processus ou d'E/S, etc.

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

Cependant, jusqu'à 2,6 noyaux, le noyau lui-même n'était pas pré-élément: dès qu'un fil est entré dans le noyau, il n'a pas pu être préempté à exécuter un autre fil. Cependant, cette absence de préemption dans le noyau a causé plusieurs problèmes liés à la latence et à l'évolutivité. Ainsi, la préemption du noyau a été introduite dans 2,6 noyaux, et on peut l'activer ou le désactiver à l'aide de l'option Config_Prempée. 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 le système entier. Si config_preempt est désactivé, le comportement 2.4 est restauré.

Revendosé et formaté de: http://www.linuxquestions.org/questions/linux-general-1/prevremptive-vs-non-preimtive-kernel-582437/

2
Madhur Ahuja

Un noyau préventif permet de préempter un processus alors qu'il fonctionne en mode noyau. Un noyau non préventif n'autorise pas un processus en cours d'exécution dans le noyau Modeto préempté; Un processus en mode noyau fonctionnera jusqu'à ce qu'il quitte le mode de noyau, les blocs ou le contrôle volontairement de la CPU. De toute évidence, un noyau non préventif est essentiellement exempt de conditions de race sur les structures de données du noyau, car un seul processus est actif dans le noyau à la fois. Nous ne pouvons pas dire la même chose à propos des noyaux préventifs, ils doivent donc être soigneusement conçus pour que les données de noyau partagées soient exemptes de conditions de race. Les noyaux préventifs sont particulièrement difficiles à concevoir pour les architectures SMP, car dans ces environnements, il est possible que deux processus en mode noyau fonctionnent simultanément sur différents processeurs. Un noyau préventif convient davantage à la programmation en temps réel, car il permettra un processus en temps réel pour préempter un processus en cours d'exécution dans le noyau. En outre, un noyau préventif peut être plus réactif, car il y a moins de risques qu'un processus en mode noyau fonctionnera pour une période de longue durée avant de renoncer au processeur aux processus d'attente. Bien entendu, cet effet peut être minimisé en concevant le code du noyau qui ne se comporte pas de cette manière. Plus tard dans ce chapitre, nous explorons comment divers systèmes d'exploitation gèrent la préemption dans le noyau.

1
nimesh thakur