CPU Passe du mode utilisateur au mode noyau: Que signifie exactement le faire? Comment ça fait cette transition?

StackOverflow https://stackoverflow.com/questions/2479118

Question

CPU Permet de passer du mode utilisateur au mode noyau: Que signifie exactement le faire? Comment ça fait cette transition?

EDIT:

Même si elle dépend l'architecture s'il vous plaît me fournir une réponse. L'architecture est à vous. Dites-moi pour l'architecture que vous connaissez.

Je veux faire une idée sur ce que toutes les choses seront impliqués.

Était-ce utile?

La solution

Note: ceci est principalement pertinent pour l'architecture x86. Voici une explication quelque peu simplifiée.

La transition est habituellement causée par une des opérations suivantes:

  • défaut (par exemple une erreur de page ou d'une autre exception causée par l'exécution d'une instruction)
  • d'interruption (par exemple une interruption de clavier ou de finition I / O)
  • Trap (par exemple un appel système)

Qu'est-ce qui se passe normalement est que le système vérifie la table de descripteur d'interruption (IDT). Chaque exception (interruption, défaut, etc.) a un numéro associé à ce qui est utilisé pour indexer dans ce tableau.

A partir de ce tableau, le CPU peut déterminer le gestionnaire d'interruption pour exécuter.

Dans le cadre de la transition prennent effet les modifications suivantes (en général):

  • Commutateur à pile noyau
  • EFLAGS sont enregistrés
  • sélecteur de segment de code et EIP sont enregistrés.
  • sélecteur de segment de pile et de pointeur de pile sont enregistrés
  • Lancer l'exécution du gestionnaire d'interruption
  • Les registres généraux sont enregistrés (travail de gestionnaire)
  • sélecteurs de segment sont modifiés à ceux du noyau (travail de gestionnaire)

Vous êtes maintenant en mode noyau.

Hope qui aide:)

Autres conseils

Ce système est à charge, mais le mécanisme habituel est une opération userland provoque une interruption logicielle. Cette interruption fait les modes de commutation du processeur et de sauter dans le code du noyau, qui vérifie ensuite ce que le programme a essayé de faire (appel système?) Et fait ensuite l'action demandée et revient au code de mode utilisateur. D'autres mécanismes en plus d'une interruption de logiciel pourrait provoquer la transition ainsi; par exemple dans un système multi-tâches préemptif, une interruption de minuterie peut déclencher le planificateur d'exécuter.

Ma compréhension est que tout programme dont les registres ont les deux segments RLSP zéro sera en cours d'exécution en mode noyau alors que tout programme dont les registres ont les deux segments RLSP = 1 sera en cours d'exécution en mode utilisateur. En fait, les deux bits de poids faible des rgeisters de segment définissent le niveau Priviledge (0 plus haut vers le plus bas 3)

Alors, pour faire une course de prgram en mode noyau, vous devez configurer le segment enregistre être 0010 hex (je crois). Je ne sais pas comment vous pouvez placer un programme dans cet espace de mémoire sans écraser quelque chose d'autre - autrement dit, comment l'éditeur de liens veiller à ce que? En outre, si vous voulez appeler le code en mode noyau à partir du code en mode utilisateur, vous devez savoir comment passer des paramètres - ils n'utilisent pas le même soace mémoire, ne peut donc pas transmettre des données par référence mémoire. Je suppose que vous devez passer dans les registres.

Si anynody peut combler les lacunes dans ce qui précède, je serais très reconnaissant.

Dans Windows, lorsque vous effectuez un appel système, les routines de bibliothèque appeler un point d'entrée du noyau résidant dans l'espace d'adressage du système d'exploitation. À son tour, prend la CPU en mode superviseur en exécutant à cet effet un particulier d'instruction, comme sysenter . Ce qu'il fait est mise essentiellement un peu dans les drapeaux registre. Cela permet au système d'exploitation d'utiliser des instructions privilégiées.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top