2009-05-20 6 views
21

Est-ce que la pile du noyau est partagée pour tous les processus ou s'il y a une pile de noyau séparée pour chaque processus? Si elle est séparée pour chaque processus, où est stocké ce pointeur de pile? Dans task_struct?pile de noyau pour le processus linux

Répondre

17

Il y a juste une mémoire du noyau commun. Dans ce processus, chaque processus possède sa propre pile task_struct + kernel (8K par défaut). Dans un changement de contexte, l'ancien pointeur de pile est sauvegardé quelque part et le pointeur de pile réel pointe vers le haut de la pile (ou vers le bas selon l'architecture matérielle) du nouveau processus qui va s'exécuter.

+1

où est stocké ce pointeur de pile? – suresh

+2

Dans un changement de contexte, l'ancienne valeur de pointeur de pile est stockée dans le task_struct du processus qui est remplacé par un nouveau processus et le pointeur de pile du nouveau processus est lu dans task_struct de ce nouveau processus. –

12

This old article dit que chaque processus a sa propre pile de noyau. Voir les commentaires sur pourquoi cela semble être un très bon design.

J'ai essayé reading the current source pour m'assurer, mais puisque la pile du noyau est "implicite", elle n'est pas visible dans le task_struct. Ceci est mentionné dans l'article.

Cette réponse a été modifié pour incorporer la sagesse des commentaires. Merci.

+3

Je doute sérieusement que cela puisse être changé. La pile du noyau est un espace non partagé dans lequel les appels système peuvent placer leurs données. Si vous les partagiez entre les processus, plusieurs routines du noyau pourraient utiliser la même pile en même temps -> corruption de données. –

+1

Je pense que chaque processus a besoin de sa propre pile de noyau, car plusieurs processus différents peuvent exécuter des appels système simultanément et vous ne voudriez pas qu'ils soient mélangés. –

+0

Chaque processus a sa propre pile de noyau et chaque pile de noyau a son processus associé. Cela n'a jamais été changé. C'est pourquoi il y a quelque chose de pseudo-processus dans "ps". –

2

Le livre « Linux noyau de développement » de Robert L'amour a une bonne explication sur la pile du noyau de processus.

Et oui, chaque processus a sa propre pile de noyau et si je ne suis pas mal son pointeur est stocké sur thread_info structure. Mais je ne suis pas vraiment sûr à ce sujet, et la structure task_struct est stockée au début ou à la fin de la pile du noyau de processus, en fonction de l'architecture du processeur.

Vive. Carlos Maiolino

+2

A partir du noyau Linux 2.6, la structure 'thread_info' est stockée à la fin de la pile du noyau de chaque processus et non dans la structure task_struct. La structure 'thread_info' contient le pointeur vers la structure' task_struct' –

1

Je pense que chaque processus a sa propre pile en mode noyau. Le pilote s'exécute en mode noyau, le processus sera parfois bloqué lors de l'exécution de la routine du pilote. et le système d'exploitation peut planifier un autre processus à exécuter. Le processus planifié peut rappeler la routine du pilote. Si la pile du noyau est partagée, 2 processus utilisent la pile du noyau, les choses seront mélangées. Je suis intrigué par cette question depuis longtemps. Au début, je pense que la pile du noyau est partagée, certains livres le disent. Après avoir lu le développement du noyau Linux, et vu le code du pilote, je commence à penser que la pile du noyau n'est pas partagée.