GNU/Linux >> Tutoriels Linux >  >> Linux

Linux - Différence entre l'espace utilisateur et l'espace noyau ?

L'espace du noyau est-il utilisé lorsque le noyau s'exécute au nom du programme utilisateur, c'est-à-dire l'appel système ? Ou est-ce l'espace d'adressage pour tous les threads du noyau (par exemple le planificateur) ?

Si c'est le premier, cela signifie-t-il que le programme utilisateur normal ne peut pas avoir plus de 3 Go de mémoire (si la division est de 3 Go + 1 Go) ? De plus, dans ce cas, comment le noyau peut-il utiliser la mémoire haute, car à quelle adresse de mémoire virtuelle les pages de la mémoire haute seront-elles mappées, car 1 Go d'espace noyau sera logiquement mappé ?

Réponse acceptée :

L'espace du noyau est-il utilisé lorsque le noyau s'exécute au nom du programme utilisateur, c'est-à-dire l'appel système ? Ou est-ce l'espace d'adressage pour tous les threads du noyau (par exemple le planificateur) ?

Oui et oui.

Avant d'aller plus loin, nous devrions dire ceci à propos de la mémoire.

La mémoire est divisée en deux zones distinctes :

  • L'espace utilisateur , qui est un ensemble d'emplacements où s'exécutent les processus utilisateur normaux (c'est-à-dire tout autre que le noyau). Le rôle du noyau est de gérer les applications s'exécutant dans cet espace afin qu'elles ne se gênent pas entre elles et avec la machine.
  • L'espace noyau , qui est l'emplacement où le code du noyau est stocké et s'exécute sous.

Les processus s'exécutant sous l'espace utilisateur n'ont accès qu'à une partie limitée de la mémoire, alors que le noyau a accès à toute la mémoire. Les processus exécutés dans l'espace utilisateur ne le font pas non plus avoir accès à l'espace noyau. Les processus de l'espace utilisateur ne peuvent accéder qu'à une petite partie du noyau via une interface exposée par le noyau - les appels système . Si un processus effectue un appel système, une interruption logicielle est envoyée au noyau, qui distribue alors le gestionnaire d'interruption approprié et continue son travail après la fin du gestionnaire.

Le code d'espace du noyau a la propriété de s'exécuter en "mode noyau", qui (sur votre ordinateur de bureau typique -x86-) est ce que vous appelez le code qui s'exécute sous le ring 0 . Généralement dans l'architecture x86, il y a 4 anneaux de protection . Ring 0 (mode noyau), Ring 1 (peut être utilisé par les hyperviseurs ou les pilotes de machines virtuelles), Ring 2 (peut être utilisé par les pilotes, je n'en suis pas si sûr). L'anneau 3 est sous lequel les applications typiques s'exécutent. C'est l'anneau le moins privilégié et les applications qui y sont exécutées ont accès à un sous-ensemble des instructions du processeur. L'anneau 0 (espace noyau) est l'anneau le plus privilégié et a accès à toutes les instructions de la machine. Par exemple, une application "simple" (comme un navigateur) ne peut pas utiliser les instructions d'assemblage x86 lgdt pour charger la table des descripteurs globaux ou hlt pour arrêter un processeur.

Si c'est le premier, cela signifie-t-il que le programme utilisateur normal ne peut pas avoir plus de 3 Go de mémoire (si la division est de 3 Go + 1 Go) ? De plus, dans ce cas, comment le noyau peut-il utiliser la mémoire haute, car à quelle adresse de mémoire virtuelle les pages de la mémoire haute seront-elles mappées, car 1 Go d'espace noyau sera logiquement mappé ?

Pour une réponse à cela, veuillez vous référer à l'excellente réponse par wag ici

Connexes :Visibilité de la barre d'état de Nautilus - Vérifier rapidement l'espace libre ?
Linux
  1. La Différence Entre [[ $a ==Z* ]] Et [ $a ==Z* ] ?

  2. La différence entre compte utilisateur et compte de service ?

  3. Quelle est la différence entre un utilisateur normal et un utilisateur système ?

  4. Différence entre les chemins absolus et relatifs sous Linux

  5. Comment mmapper un tampon du noyau Linux à l'espace utilisateur?

Comprendre la différence entre les commandes sudo et su sous Linux

Quelle est la différence entre les noyaux macOS et Linux

Quelle est la différence entre suspendre et hiberner sous Linux

Quelle est la différence entre Linux et Unix ?

différence entre netstat et ss sous linux?

Quelle est la différence entre l'espace utilisateur et l'espace noyau ?