[Linux] pile du noyau et pile de l'espace utilisateur


Answers

Ma réponse est recueillie à partir d'autres questions SO avec mes affaires.

What's the difference between kernel stack and user stack?

En tant que programmeur de noyau, vous savez que le noyau doit être limité à partir de programmes utilisateur erronés. Supposons que vous gardiez la même pile pour le noyau et l'espace utilisateur, alors la segfault simple dans l'application utilisateur bloque le noyau et doit redémarrer.

Il y a une "pile de noyau" par CPU comme ISR Stack et une "pile de noyau" par Processus. Il y a une "pile d'utilisateurs" pour chaque processus, bien que chaque thread ait sa propre pile, y compris les threads de l'utilisateur et du noyau.

http://linux.derkeiler.com/Mailing-Lists/Kernel/2004-10/3194.html

Why kernel stack is used?

Donc, quand nous sommes en mode noyau, le type de pile de mécanisme est nécessaire pour traiter les appels de fonction, variables locales similaires à l'espace utilisateur.

http://www.kernel.org/doc/Documentation/x86/kernel-stacks

If a local variable is declared in an ISR, where it will be stored?

Il sera stocké dans la pile ISR (IRQSTACKSIZE). L'ISR s'exécute sur une pile d'interruption séparée uniquement si le matériel le prend en charge. Sinon, les trames de pile ISR sont poussées sur la pile du thread interrompu.

L'espace utilisateur ne sait pas et franchement ne se soucie pas de savoir si l'interruption est servie dans la pile du noyau du processus en cours ou dans une pile ISR séparée. Comme les interruptions viennent par cpu, la pile ISR doit être par cpu.

 Does each process has its own kernel stack ?

Oui. Chaque processus a sa propre pile de noyau.

 Then how the process coordinates between both these stacks?

@ La réponse de FrankH me va très bien.

Question

Quelle est la différence entre la pile du noyau et la pile de l'utilisateur? Pourquoi la pile du noyau est utilisée? Si une variable locale est déclarée dans un ISR, où sera-t-elle stockée? Chaque processus a-t-il sa propre pile de noyau? Alors comment le processus se coordonne-t-il entre ces deux piles?