2009-12-29 7 views

Répondre

6

Conceptuellement, les deux ont la même structure de données: une pile.

La raison pour laquelle il existe deux piles différentes par thread est que, en mode utilisateur, le code ne doit pas être autorisé à corrompre la mémoire du noyau. Lors du passage au mode noyau, une pile différente en mémoire uniquement accessible en mode noyau est utilisée pour les adresses de retour, etc.

Si le mode utilisateur avait accès à la pile du noyau, il pouvait modifier une adresse de saut (par exemple), puis effectuer un appel système; quand le noyau saute à l'adresse précédemment modifiée, votre code est exécuté en mode noyau! En outre, les informations/informations relatives à la sécurité concernant d'autres processus (pour la synchronisation) peuvent figurer dans la pile du noyau, de sorte que le mode utilisateur ne doit pas non plus avoir accès en lecture.

0

La pile d'un système d'exploitation moderne typique est juste une région de mémoire utilisée pour stocker les adresses de retour et les données locales. Il a la même structure dans le noyau et en mode utilisateur, mais chaque thread a sa propre zone de mémoire pour stocker sa pile. Les commutateurs de contexte restaurent le pointeur de la pile, donc aucun thread ne voit la pile d'un autre thread même s'ils peuvent partager d'autres mémoires (si les threads sont dans le même processus).

Un thread n'a pas besoin d'utiliser la pile d'ailleurs. Le système d'exploitation fait des hypothèses sur la façon dont il sera utilisé, mais le thread n'a pas à les suivre.