Qu'est-ce que la préemption / Qu'est-ce qu'un noyau préemtible? Qu'est-ce que cela?

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

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

49
demandé sur BobbyShaftoe 2009-05-03 17:27:30

5 réponses

Multitâche préemptive-exécution de plusieurs processus/threads sur un seul processeur, créant l'illusion qu'ils s'exécutent simultanément lorsque chacun reçoit de petites tranches de temps multiplexées à exécuter. Un processus est "préempté" lorsqu'il est programmé hors exécution et attend la prochaine tranche de temps pour s'exécuter.

Préventive noyau est celui qui peut être interrompu au milieu de l'exécution d'un code - par exemple, en réponse à un appel système - pour faire d'autres choses et exécuter d'autres threads, éventuellement ceux qui ne sont pas dans le noyau.

Le principal avantage d'un noyau préemptif est que les appels sys ne bloquent pas l'ensemble du système. Si un appel sys prend beaucoup de temps à se terminer, cela ne signifie pas que le noyau ne peut rien faire d'autre en ce moment. Le principal inconvénient est que cela introduit plus de complexité au code du noyau, devant gérer plus de cas finaux, effectuer un verrouillage plus fin ou utiliser des structures et des algorithmes sans verrou.

58
répondu shoosh 2015-04-09 09:45:54

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

14
répondu BobbyShaftoe 2009-05-03 13:43:53

D'autres ont expliqué de manière adéquate ce qu'est un noyau préemptible.

À quoi sert-il?

La Plupart des avantages sont:

  • latence inférieure sur les systèmes non-SMP-généralement utilisés dans les systèmes en temps réel ou pour d'autres choses où la latence est importante (applications audio, vidéo peut-être)
  • enseigner aux développeurs de noyau qui n'ont pas de systèmes SMP comment écrire le code correct pour SMP

Avec un noyau non préemptible, sur un système de processeur unique, il est possible les développeurs du noyau pour être paresseux et s'en sortir sans aucun verrouillage la plupart du temps-bien sûr, c'est un gros échec sur SMP. Les noyaux préemptibles leur permettent d'obtenir cette douleur sans plus de noyaux.

7
répondu MarkR 2009-05-03 21:54:04

La préemption signifie que le système d'exploitation prend en charge plusieurs tâches (un morceau de code distinct et autonome) et basculera entre les tâches selon un calendrier. Lorsqu'une tâche est interrompue, il est appelé "préemption". Les systèmes d'exploitation modernes supportent cela - mais ce n'est pas nécessaire pour les systèmes embarqués simples, par exemple. Les frais généraux de la prise en charge de la commutation de tâches ne valent pas toujours la peine.

4
répondu Jeff 2009-05-03 13:47:29

Je pense que ce post explique vos questions:

Qu'est-ce que la préemption?

La capacité du système d'exploitation de préempter ou d'arrêter une tâche actuellement planifiée en faveur d'une tâche de priorité plus élevée. La planification peut être l'une des, mais sans s'y limiter, la planification de processus ou d'E/S, etc.

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 passez à d'autres threads, en utilisant la tique d'horloge régulière. 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 d'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 préempté pour exécuter un autre thread. Le processeur pourrait être utilisé pour exécuter un autre thread lorsqu'un appel système a été terminé, ou lorsque le thread en cours a demandé explicitement au planificateur d'exécuter un autre thread en utilisant la fonction schedule (). Cela signifie qu'une boucle infinie dans le code du noyau a bloqué tout le système, mais ce n'est pas vraiment un problème : le code du noyau est conçu de sorte qu'il n'y a pas de boucles infinies.

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é, ensuite, 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 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 peut faire exécuter des tâches hautement prioritaires et répondre en temps opportun.

Inconvénients: cela rend l'écriture de code difficile dans le noyau de préemption, en particulier dans SMP, et vous devez tenir compte de nombreux facteurs.

4
répondu Nan Xiao 2015-11-27 10:07:10