2011-05-24 2 views
0

Je regardais beaucoup si fil en ligne/tutoriels sur la façon dont l'espace d'adressage du processus est divisé en processus/noyauComment 4gb (VM) d'espace d'adressage utilisé pendant swithcing de/vers l'espace utilisateur à noyau espace

Ex: i avoir un certain programme Helloworld en ce que j'ai appel en tant que printf (à son tour, il fait écrire l'appel système pour entrer dans l'espace noyau)

Mon doute comment la pile du programme Helloworld utilisé par le noyau. Pouvez-vous me dire comment l'exécution se poursuit tout ...

./helloworld -> printf() -> appel système d'écriture -> pilote d'affichage -> retour d'écriture -> Retour à la helloworld

Merci, Amarender

Répondre

0

La réponse détaillée à cette question dépend du noyau et de l'architecture spécifiques. Cependant, la réponse générale est que lorsque l'espace utilisateur veut appeler le noyau, il exécute une instruction d'interruption, qui amène le processeur à modifier le niveau de privilège et à commencer à exécuter le code du noyau. Dans le cadre du changement de niveau de privilège, le processeur basculera également vers une pile de noyau. Lorsque le noyau est terminé, il exécute une séquence return-from-trap qui restaure la pile de l'espace utilisateur et reprend l'exécution là où elle s'était arrêtée.

0

En bref: Lorsque l'appel du système d'écriture est effectué, le trap int $80 est généré. Le gestionnaire enregistre les registres de processus en cours sur la pile du noyau (présente dans l'espace adresse du noyau). Ensuite, les CPL dans les registres de segments sont modifiés pour permettre l'utilisation de tables de pages de noyau. Ensuite, le noyau regarde sa table d'appels système et trouve l'adresse appropriée de la routine désirée. L'exécution passe ensuite à la routine qui à son tour peut appeler le code du pilote de périphérique. Après avoir fait son travail, le noyau retourne en mode utilisateur en restaurant le contenu du registre et le CPL dans les registres de segments.

Questions connexes