Question

Expliqué dans vos propres mots, qu'est-ce que la préemption et que signifie-t-elle pour un noyau (linux)?

Quels sont les avantages et les inconvénients d’avoir un noyau préemptible?

Était-ce utile?

La solution

Multitâche préemptif - Exécution de plusieurs processus / threads sur un même processeur, créant l’illusion qu’ils s’exécutent simultanément alors que chacun se voit allouer de petites tranches de temps multiplexées. Un processus est "préempté". lorsqu’il est programmé en fin d’exécution et attend la prochaine tranche de temps.

Un noyau préemptif est un noyau qui peut être interrompu au cours de l'exécution du code - par exemple en réponse à un appel système - pour faire autre chose et exécuter d'autres threads, éventuellement ceux qui ne sont pas dans le noyau.

L’avantage principal d’un noyau préemptif est que les appels système ne bloquent pas l’ensemble du système. Si un appel système prend beaucoup de temps, cela ne signifie pas que le noyau ne peut rien faire d’autre à l’heure actuelle. Le principal inconvénient est que cela introduit plus de complexité dans le code du noyau, car il doit gérer plus de cas finaux, effectuer un verrouillage plus fin ou utiliser des structures et des algorithmes sans verrouillage.

Autres conseils

Vous devriez vraiment utiliser le terme "préemptif". Il existe différents types de préemption. En gros, c'est très simple et vous le comprenez probablement sous un autre nom. Un système d'exploitation préemptif peut basculer des contextes entre des threads en mode utilisateur sans aucune programmation spéciale dans l'application préemptée. Cela permet le multitâche. Un système d'exploitation peut basculer et revenir à un processus et cette commutation est essentiellement transparente. Il existe également un noyau préemptif, qui permet de préempter les threads en mode noyau (la plupart des systèmes d'exploitation ne le permettent pas, mais cela est nécessaire pour certaines applications, telles que les systèmes en temps réel). Notez que ceci est une explication très simplifiée.

D'autres ont bien expliqué ce qu'est un noyau préemptible.

À quoi sert-il?

Généralement, les avantages sont les suivants:

  • Latence réduite sur les systèmes non SMP - généralement utilisée dans les systèmes temps réel ou pour d’autres tâches dans lesquelles la latence est importante (applications audio et vidéo, par exemple)
  • Enseigner aux développeurs du noyau qui ne disposent pas de systèmes SMP comment écrire le code correct pour SMP

Avec un noyau non préemptible, sur un système à un seul processeur, les développeurs du noyau peuvent rester paresseux et s’échapper sans aucun verrouillage la plupart du temps - bien sûr, c’est un gros FAIL sur SMP. Les noyaux préemptibles leur permettent d’obtenir cette douleur sans autre noyau.

Je pense que cet post explique vos questions:

  

qu'est-ce que la préemption?

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é supérieure. La planification peut être l’une des procédures de planification ou d’entrées / sorties, etc., mais sans y être limitée.

  

qu'est-ce qu'un noyau de préemption?

Sous Linux, les programmes d’espace utilisateur ont toujours été préemptibles: le noyau interrompt les programmes d’espace utilisateur pour passer à d’autres threads, à l’aide du tick régulier de l’horloge. Ainsi, le noyau n'attend pas que les programmes de l'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 utilisateur ne peut pas bloquer le système.

Cependant, jusqu'aux noyaux 2.6, le noyau lui-même n’était pas pré-programmable: dès qu’un thread était entré dans le noyau, il ne pouvait pas être préempté d’exécuter un autre thread. Le processeur peut être utilisé pour exécuter un autre thread lorsqu'un appel système est terminé ou lorsque le thread actuel demande explicitement au planificateur d'exécuter un autre thread à l'aide de la fonction schedule (). Cela signifie qu'une boucle infinie dans le code du noyau a bloqué l'ensemble du système, mais ce n'est pas vraiment un problème: le code du noyau est conçu pour qu'il n'y ait pas de boucles infinies.

La préemption de noyau a été introduite dans les noyaux 2.6 et peut être activée ou désactivée à l’aide de l’option CONFIG_PREEMPT. Si CONFIG_PREEMPT est activé, le code du noyau peut être préempté partout, sauf s'il 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é.

  

Avantages et inconvénients?

Avantages: le noyau de préemption peut améliorer la latence et l’évolutivité, et il permet aux tâches hautement prioritaires d’être exécutées et d’intervenir rapidement.

Inconvénients: il est difficile d’écrire du code dans le noyau de préemption, en particulier dans SMP, et vous devez prendre en compte de nombreux facteurs.

Préemption signifie que le système d'exploitation prend en charge plusieurs tâches (une partie de code distincte et autonome) et bascule d'une tâche à une autre. Quand une tâche est interrompue, on l’appelle "préemptant". Les systèmes d’exploitation modernes supportent cela - mais ce n’est pas nécessaire pour les systèmes embarqués simples, par exemple. La surcharge de la commutation de tâches ne vaut pas toujours la peine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top