GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est l'utilité d'avoir une partie noyau dans l'espace de mémoire virtuelle des processus Linux ?

  1. Le mappage du noyau existe principalement pour les besoins du noyau, pas pour les processus utilisateur. Du point de vue du processeur, toute adresse de mémoire physique qui n'est pas mappée en tant qu'adresse linéaire peut tout aussi bien ne pas exister. Mais le processeur doit être capable d'appeler le noyau :pour traiter les interruptions, gérer les exceptions... Il doit également être capable d'appeler le noyau lorsqu'un processus utilisateur émet un appel système (il existe différentes manières arriver donc je n'entrerai pas dans les détails). Sur la plupart sinon toutes les architectures, cela se produit sans la possibilité de changer de table de page — voir par exemple SYSENTER . Ainsi, au minimum, les points d'entrée dans le noyau doivent être mappés dans l'espace d'adressage actuel à tout moment.

  2. allocations du noyau sont dynamiques, mais l'espace d'adressage ne l'est pas. Sur x86 32 bits, diverses divisions sont disponibles, telles que la division 3/1 Gio illustrée dans votre diagramme ; sur x86 64 bits, la moitié supérieure de l'espace d'adressage est réservée au noyau (voir la carte mémoire dans la documentation du noyau). Cette scission ne peut pas bouger. (Notez que les bibliothèques sont chargées dans l'espace utilisateur. Les modules du noyau sont chargés dans l'espace du noyau, mais là encore, cela ne modifie que les allocations, pas la répartition de l'espace d'adressage.)

  3. En mode utilisateur, il existe un mappage unique pour le noyau, partagé par tous les processus. Lorsqu'un mappage de page côté noyau change, ce changement est répercuté partout.

    Lorsque KPTI est activé, le noyau a ses propres mappages privés, qui ne sont pas exposés lors de l'exécution du code de l'espace utilisateur ; ainsi, avec KPTI, il y a deux mappages, et les modifications apportées au noyau privé ne seront pas visibles dans l'espace utilisateur (ce qui est tout l'intérêt de KPTI).

    La carte mémoire du noyau mappe toujours tout le noyau (en mode noyau lors de l'exécution de KPTI), mais ce n'est pas nécessairement un à un - sur x86 64 bits, par exemple, elle inclut une carte complète de la mémoire physique, de sorte que toutes les adresses physiques du noyau sont mappé au moins deux fois.


Linux
  1. Comment utiliser la commande Linux sed

  2. Linux - Qu'implique la disposition de la mémoire du noyau virtuel dans Dmesg ?

  3. Linux - Quelles sources d'entropie sont utilisées par le noyau Linux ?

  4. Pilote de périphérique du noyau Linux vers DMA à partir d'un périphérique dans la mémoire de l'espace utilisateur

  5. Que signifie __init dans le code du noyau Linux ?

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

Qu'est-ce que le Shell sous Linux ?

Comment surveiller l'utilisation de la mémoire dédiée au noyau ?

Comment puis-je réserver un bloc de mémoire à partir du noyau Linux ?

Combien de RAM le noyau utilise-t-il ?

Le noyau entier est-il chargé en mémoire au démarrage ?