11 votes

Linux 3/1 adresse virtuelle fractionnée

Je suis en train de passer à côté de quelque chose en ce qui concerne la nécessité d'utiliser highmem pour gérer plus de 1 Go de RAM. Est-ce que quelqu'un pourrait me pointer où je me trompe? Merci!

Ce que je sais:

  • 1 Go de la mémoire virtuelle d'un processus (région de haute mémoire) est réservé aux opérations du noyau. L'espace utilisateur peut utiliser les 3 Go restants. C'est ce qu'on appelle un split 3/1.

  • Les fonctionnalités de mémoire virtuelle de la VM cartographient les pages de mémoire virtuelle (continues) sur les pages physiques (RAM).

ce que je ne sais pas:

  • Quelles opérations utilisent la mémoire virtuelle du noyau? Je suppose que des choses comme kmalloc(...) dans l'espace du noyau utiliseraient la mémoire virtuelle du noyau.

  • Je penserais que 4 Go de RAM pourraient être utilisés selon ce schéma. Je ne comprends pas pourquoi l'espace virtuel du noyau de 1 Go est le facteur limitant pour adresser l'espace physique. C'est là que mon compréhension échoue. Veuillez conseiller.

Je suis en train de lire ceci (http://kerneltrap.org/node/2450), qui est super. Mais cela ne répond pas tout à fait à ma question de manière satisfaisante.

12voto

caf Points 114951

La raison pour laquelle l'espace virtuel du noyau est un facteur limitant sur la mémoire physique utilisable est que le noyau a besoin d'accéder à toute la mémoire physique, et la façon dont il y accède est à travers des adresses virtuelles du noyau. Le noyau n'utilise pas d'instructions spéciales qui permettent un accès direct aux emplacements de la mémoire physique - il doit configurer des entrées de table de pages pour toutes les plages physiques auxquelles il veut accéder.

Dans le schéma "à l'ancienne", le noyau configurait les choses de telle sorte que les tables de pages de chaque processus mappaient les adresses virtuelles de 0xC0000000 à 0xFFFFFFFF directement aux adresses physiques de 0x00000000 à 0x3FFFFFFF (ces pages étaient marquées comme étant accessibles uniquement en mode noyau). Ce sont les "adresses virtuelles du noyau". Sous ce schéma, le noyau pouvait lire et écrire directement n'importe quel emplacement de la mémoire physique sans avoir à manipuler l'UMM pour changer les mappages.

Sous le schéma HIGHMEM, les mappages des adresses virtuelles du noyau aux adresses physiques ne sont pas fixes - des parties de la mémoire physique sont mappées dans et hors de l'espace d'adresses virtuelles du noyau en fonction des besoins du noyau pour accéder à cette mémoire. Cela permet d'utiliser plus de mémoire physique, mais au prix de devoir changer constamment les mappages virtuels-physiques, ce qui est une opération assez coûteuse.

6voto

Matt Joiner Points 29194

Mapper 1 Go de kernel dans chaque processus permet aux processus de passer en mode kernel sans effectuer également un changement de contexte. Les réponses aux appels système tels que read(), mmap() et autres peuvent alors être traitées de manière appropriée dans l'espace d'adressage du processus appelant.

Si l'espace pour le kernel n'était pas réservé dans chaque processus, le passage en "mode kernel" entre l'exécution du code utilisateur serait plus coûteux et ne pourrait pas utiliser le mapping d'adresse virtuelle par le biais de l'unité de gestion de mémoire matérielle (MMU) pour les appels système en cours de service.

Les systèmes exécutant un noyau 32 bits avec plus de 1 Go de mémoire physique peuvent affecter des emplacements mémoire physiques dans la ZONE_HIGHMEM (environ au-dessus de la marque de 1 Go), ce qui peut obliger le kernel à faire des acrobaties pour certaines opérations afin d'interagir avec eux. L'ajout de la PAE (extension d'adresse physique) aggrave ce problème en permettant jusqu'à 64 Go de mémoire physique, réduisant le ratio de mémoire dans la mémoire d'adresse physique de 1 Go aux zones allouées dans la ZONE_HIGHMEM.

-2voto

Alexandru Points 3999
  1. Par exemple, les appels système utilisent l'espace kernel.
  2. Vous pouvez avoir 64 Go de RAM physique, mais sur des plateformes 32 bits les processeurs peuvent accéder seulement à 4 Go en raison de l'adressage virtuel 32 bits. En réalité, vous pouvez avoir 1 Go de RAM et 3 Go de mémoire d'échange, et l'adressage virtuel fera croire que vous avez 4 Go. Sur les plateformes 64 bits, l'adressage virtuel est pratiquement illimité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X