Comment passer du mode utilisateur au mode noyau?
J'apprends sur le noyau linux, mais je ne comprends pas comment faire pour passer du mode utilisateur au mode noyau de linux. comment ça marche?
pourriez-vous me donner quelques conseils ou me donner un lien pour le consulter ou certains livres à ce sujet?
merci beaucoup!
- Quel est le contexte de votre question? Êtes-vous demander à propos de certains CPU mécanismes sur un CPU ou en général? Est-il un problème que vous essayez de résoudre?
Vous devez vous connecter pour publier un commentaire.
La seule façon pour un espace utilisateur de l'application peut explicitement lancer un interrupteur pour le mode noyau au cours du fonctionnement normal est en faisant un appel système comme ouvert, lire, écrire etc.
Chaque fois qu'un utilisateur de l'application appelle ces appels système Api avec les paramètres appropriés, une interruption logicielle/exception(SWI) est déclenchée.
Comme un résultat de cette SWI, le contrôle de l'exécution de code à sauts de l'application de l'utilisateur à un emplacement prédéfini dans le Vecteur d'Interruption de la Table [FPI] fourni par le système d'exploitation.
Ce IVT contient une adresse pour le SWI gestionnaire d'exception routine, qui effectue toutes les étapes nécessaires pour changer l'application par l'utilisateur au mode noyau et de lancer l'exécution du noyau des instructions pour le compte de l'utilisateur processus.
Pour passer du mode utilisateur au mode noyau, vous devez effectuer un appel système.
Si vous voulez juste pour voir ce que la substance qui se passe sous le capot, allez à la TLDP est votre nouvel ami et voir le code (il est bien documenté, pas besoin de connaissances supplémentaires pour comprendre un code assembleur).
Vous intéresse:
Comme vous pouvez le voir, un appel système est juste un wrapper autour de l'assemblée de code, qui effectue une interruption (0x80) et, par conséquent, un gestionnaire de cet appel système sera appelé.
Nous allons tricher un peu et utiliser un préprocesseur C ici pour créer un fichier exécutable (foo.S est un fichier dans lequel vous mettez un code à partir du lien ci-dessous):
L'exécuter via strace pour s'assurer que nous allons obtenir ce que nous écrivons:
Je viens de lire à travers ce, et c'est une très bonne ressource. Il explique en mode utilisateur et en mode noyau, pourquoi des changements se produisent, comment cher ils sont, et donne quelques intéressantes liées à la lecture.
http://www.codinghorror.com/blog/2008/01/understanding-user-and-kernel-mode.html
Voici un court extrait:
Mode Noyau
En mode Noyau, l'exécution de code a un accès complet et illimité au matériel sous-jacent. Il peut exécuter une instruction CPU et de référence de n'importe quelle adresse mémoire. En mode noyau est généralement réservé pour les plus bas niveau, la plupart des confiance des fonctions du système d'exploitation. Se bloque en mode noyau sont catastrophiques; ils vont arrêter le PC entier.
Mode Utilisateur
En mode Utilisateur, l'exécution de code ne peut pas directement accéder à du matériel ou de la mémoire de référence. Le Code s'exécutant en mode utilisateur doit délégué à l'Api du système pour accéder à du matériel ou de la mémoire. En raison de la protection offerte par cette sorte d'isolement, se bloque en mode utilisateur sont toujours récupérables. La plupart du code en cours d'exécution sur votre ordinateur exécutera en mode utilisateur.