48 votes

Comment le noyau Linux gère-t-il moins de 1 Go de mémoire physique?

Je suis en train d'apprendre le noyau linux internes et lors de la lecture de "la Compréhension du Noyau Linux", tout à fait un peu de mémoire liés à des questions qui m'a frappé. L'un d'eux est, comment le noyau Linux gère le mappage de la mémoire si la mémoire physique de dire seulement 512 MO est installé sur mon système.

Comme je l'ai lu, noyau cartes 0(ou 16) MO-896 MO de RAM physique dans 0xC0000000 adresse linéaire et peut attaquer directement à elle. Ainsi, dans le cas décrit ci-dessus, où je n'ai que 512 MO:

  • Comment le noyau de la carte 896 MO à partir de seulement 512 MO ? Dans le système décrit, le noyau de mettre les choses en place, de sorte que chaque processus de tables de page mappé adresses virtuelles de 0xC0000000 à 0xFFFFFFFF (1 GO) directement à l'adresse physique de 0 x 00000000 à 0x3FFFFFFF (1 GO). Mais quand je n'ai que 512 MO de RAM physique, comment puis-je carte, adresses virtuelles de 0xC0000000-0xFFFFFFFF physique 0x00000000-0x3FFFFFFF ? Le Point est que j'ai un physique de 0x00000000-0x20000000.

  • Que sur les processus en mode utilisateur dans cette situation?

  • Chaque article explique que la situation, lorsque vous avez installé 4 GO de mémoire et le noyau des cartes de 1 GO dans l'espace du noyau et les processus utilisateur utilise le reste de la quantité de RAM.

J'apprécierais toute aide pour améliorer ma compréhension.

Merci..!

45voto

osgx Points 28675

Pas tous les virtuel (linéaire), les adresses doivent être mappés à quoi que ce soit. Si le code d'accès unmapped page, le défaut de page est ressuscité.

La physique de la page peut être associé à plusieurs adresses virtuelles simultanément.

Dans les 4 GO de mémoire virtuelle il y a 2 sections: 0x0... 0xbfffffff - est du processus, de la mémoire virtuelle et 0xc0000000 .. 0xffffffff est une mémoire virtuelle du noyau.

  • Comment le noyau de la carte 896 MO à partir de seulement 512 MO ?

C'cartes jusqu'à 896 MO. Donc, si vous avez seulement 512, il y aura seulement 512 MO mappé.

Si votre mémoire physique est en 0x00000000 à 0x20000000, il sera mappé pour noyau direct de l'accès à des adresses virtuelles 0xC0000000 à 0xE0000000 (cartographie linéaire).

  • Que sur les processus en mode utilisateur dans cette situation?

Phys mémoire pour les processus utilisateur sera mappé (pas de manière séquentielle, mais plutôt aléatoire page-à-page mapping) pour les adresses virtuelles 0x0 .... 0xc0000000. Cette cartographie sera le deuxième de la cartographie pour les pages à partir de 0..896 MO. Les pages seront prises à partir de page libre des listes.

  • Où sont les processus en mode utilisateur dans phys RAM?

N'importe où.

  • Chaque article explique que la situation, lorsque vous avez installé 4 GO de mémoire et le

Pas de. Chaque article explique comment 4 Go d'espace d'adressage virtuel est mappé. La taille de la mémoire virtuelle est toujours de 4 GO (pour la version 32 bits de la machine sans la mémoire des extensions comme PAE/PSE/etc pour les architectures x86)

Comme indiqué en 8.1.3. Memory Zones de la livre (j'utilise troisième édition), il y a quelques zones de la mémoire physique:

  • ZONE_DMA - Contient des cadres de page de mémoire en dessous de 16 MO
  • ZONE_NORMAL - Contient des cadres de page de mémoire et de plus de 16 MB et au-dessous de 896 MO
  • ZONE_HIGHMEM - Contient des cadres de page de mémoire et au-dessus 896 MO

Donc, si vous avez 512 MO, votre ZONE_HIGHMEM sera vide, et ZONE_NORMAL aura 496 MO de mémoire physique mappé.

Aussi, jetez un oeil à l' 2.5.5.2. Final kernel Page Table when RAM size is less than 896 MB section de l'ouvrage. C'est à propos de cas, lorsque vous avez moins de mémoire que 896 MO.

Aussi, pour les BRAS il y a une certaine description de la mémoire virtuelle mise en page: http://www.mjmwired.net/kernel/Documentation/arm/memory.txt

La ligne 63 PAGE_OFFSET high_memory-1 est directement mappée partie de la mémoire

17voto

Thomas Pornin Points 36984

Le matériel fournit une Unité de Gestion Mémoire. C'est un morceau de circuit qui est en mesure d'intercepter et de modifier tout accès à la mémoire. Chaque fois que le processeur accède à la mémoire vive, par exemple pour lire de la prochaine instruction à exécuter, ou pour l'accès aux données déclenchée par une instruction, il le fait à certains d'adresse qui est, grosso modo, d'une valeur de 32 bits. Un mot de 32 bits peut avoir un peu plus de 4 milliards de valeurs distinctes, donc il y a un espace d'adressage de 4 GO: c'est le nombre d'octets qui pourrait avoir une adresse unique.

Ainsi, le processeur envoie la demande à ses sous-système de mémoire, comme "lecture de l'octet à l'adresse de x et de lui donner de nouveau à moi". La demande passe par la MMU, qui décide quoi faire avec la demande. Le MMU pratiquement divise les 4 GO d'espace dans les pages; taille de la page dépend du matériel que vous utilisez, mais les tailles typiques sont 4 et 8 ko. Le MMU utilise des tables qui indiquent ce qu'il a à faire avec des accès pour chaque page: soit l'accès est accordé avec une réécrit l'adresse (l'entrée de page dit: "oui, la page contenant l'adresse de x existe, il est dans la RAM physique à l'adresse y"), ou rejeté, à quel point le noyau est appelé à gérer les choses de plus loin. Le noyau peut décider de tuer le processus fautif, ou pour faire un peu de travail et de modifier la MMU les tables afin que l'accès peut-être essayé à nouveau, cette fois avec succès.

C'est la base de la mémoire virtuelle: du point de vue, le processus a un peu de RAM, mais le noyau a déplacé vers le disque dur, dans "l'espace de swap". Le tableau correspondant est marqué comme "absent" dans la MMU les tables. Lorsque le processus accède à ses données, le MMU appelle le noyau, ce qui extrait les données, de l'échange, il met à l'espace libre dans la mémoire RAM physique, et modifie la MMU les tables de point de l'espace. Le noyau, puis saute en arrière pour le processus de code, le droit à l'instruction, ce qui a déclenché toute l'affaire. Le processus de code ne voit rien de l'ensemble de l'entreprise, à l'exception que l'accès à la mémoire a pris un certain temps.

Le MMU gère également les droits d'accès, ce qui empêche un processus de lecture ou d'écriture de données qui appartient à d'autres processus, ou pour le noyau. Chaque processus a son propre ensemble de MMU les tables, et le noyau de la gestion de ces tables. Ainsi, chaque processus a son propre espace d'adressage, comme s'il était seul sur une machine avec 4 GO de RAM, sauf que le processus était mieux de ne pas accéder à la mémoire qu'il n'a pas alloué à juste titre, à partir du noyau, parce que les pages correspondantes sont marqués comme absent ou interdit.

Lorsque le noyau est appelée par le biais d'un système d'appel à partir d'un certain processus, le noyau de code doit s'exécuter dans l'espace d'adressage du processus; de sorte que le code du noyau doit être quelque part dans l'espace d'adressage de chaque processus (mais protégés: le MMU tables d'empêcher l'accès à la mémoire du noyau d'utilisateur non privilégié de code). Parce que le code peut contenir des adresses codées en dur, le noyau a intérêt à être à la même adresse pour tous les processus; classiquement, Linux, cette adresse est 0xC0000000. La MMU les tables pour chaque carte de processus qu'une partie de l'espace d'adressage à ce que physiques RAM bloque le noyau est chargé au démarrage. Notez que le noyau de la mémoire n'est jamais échangé (si le code qui peut lire les données à partir de l'espace de swap a été lui-même échangé, les choses allaient mal tourner assez vite).

Sur un PC, les choses peuvent être un peu plus compliqué, car il y a 32-bit et 64-bit les modes et les registres de segment, et PAE (qui agit comme une sorte de deuxième niveau MMU avec d'énormes pages). Le concept de base reste le même: chaque processus a son propre point de vue d'un virtuel 4 GO d'espace d'adressage, et le noyau utilise la MMU pour mapper chaque page virtuelle à une position physique dans la mémoire vive, ou nulle part à tous.

4voto

artless noise Points 7110

osgx a une excellente réponse, mais je vois un commentaire où quelqu'un ne comprend toujours pas.

Chaque article explique que la situation, lorsque vous avez installé 4 GO de mémoire et le noyau des cartes de 1 GO dans l'espace du noyau et utilisateur processus utilise le reste de la quantité de RAM.

Ici est beaucoup de la confusion. Il est la mémoire virtuelle et il y a de la mémoire physique. Tous les 32 bits PROCESSEUR dispose de 4 go de virtuel de la mémoire. Le noyau Linux traditionnel de split a été 3G/1G pour l'utilisateur de la mémoire et de la mémoire du noyau, mais les nouvelles options permettent de partitionnement différent.

Pourquoi la distinction entre le noyau et l'espace utilisateur? - à ma propre question

Lorsqu'une tâche de swaps, de la MMU doit être mis à jour. Le noyau MMU espace doit rester le même pour tous les processus. Le noyau doit traiter les interruptions de faute et demande à tout moment.

Comment le virtuel pour la cartographie physique de travail? - à ma propre question.

Il y a un grand nombre de permutations de la mémoire virtuelle.

  • un seul privé de la cartographie pour une RAM physique de la page.
  • un double virtuel de cartographie à une seule page physique.
  • une cartographie qui jette une SIGBUS ou d'une autre erreur.
  • une correspondance soutenue par disque/swap.

À partir de la liste ci-dessus, il est facile de voir pourquoi vous pouvez avoir plus virtuel, espace d'adressage de la mémoire physique. En fait, le gestionnaire de défauts généralement inspecter les processus de la mémoire pour voir si une page est mappé (je veux dire alloué pour le processus), mais pas dans la mémoire. Dans ce cas, le gestionnaire de défauts qui fera appel à la I/O sous-système pour lire dans la page. Lorsque la page a été lu et la MMU les tableaux mis à jour pour pointer l'adresse virtuelle à une nouvelle adresse physique, le processus qui a provoqué la faute d'un curriculum vitae.

Si vous comprenez ce qui précède, il devient clair pourquoi vous aimeriez avoir un plus grand virtuel de la cartographie de la mémoire physique. Il est de savoir comment l'échange de mémoire est prise en charge.

Il y a d'autres utilisations. Par exemple, deux processus peuvent utiliser le même code de la bibliothèque. Il est possible qu'ils en sont à différentes adresses virtuelles dans l'espace de processus en raison de la liaison. Vous pouvez cartographier les différentes adresses virtuelles à la même page physique dans ce cas, afin d'économiser de la mémoire physique. C'est assez fréquent pour de nouvelles attributions; ils pointent tous vers une physique de 'zéro' la page. Lorsque vous touchez/écrire la mémoire du zéro page est copiée et une nouvelle page physique alloué (de VACHE ou de copie sur écriture).

Il est aussi parfois utile de disposer de ces pages virtuelles alias avec une que mis en cache et l'autre comme non mis en cache. Les deux pages peuvent être examinés afin de voir quelles sont les données mises en cache et ce qui ne l'est pas.

Principalement virtuel et physique ne sont pas les mêmes! Facilement dit, mais souvent une source de confusion lorsque l'on regarde les Linux VMM code.

3voto

shawn xy bai Points 98

-

Salut, en fait, je ne travaille pas sur du matériel x86 plate-forme, de sorte qu'il peut exister des erreurs techniques dans mon post.

À ma connaissance, la fourchette entre 0(ou 16)MO - 896 MO est inscrite spécialement lorsque vous avez plus de RAM que ce nombre, dire, vous avez 1 go de RAM physique à votre conseil d'administration, qui est appelé "mémoire insuffisante". Si vous avez plus de RAM physique de 896 MO sur votre conseil d'administration, puis, le reste de la RAM physique est appelé highmem.

En parlant de votre question, il y a 512MiBytes RAM physique à votre conseil d'administration, donc en fait, il n'y a pas de 896, pas de highmem.

La mémoire RAM totale du noyau peut voir et peut également la carte est de 512 mo.

Parce qu'il y est de 1 pour 1 correspondance entre la mémoire physique et virtuelle du noyau de l'adresse, il est donc 512MiBytes espace d'adressage virtuel du noyau. Je ne suis vraiment pas sûr de savoir si ou non l'état de la phrase est juste, mais il est ce qui, dans mon esprit.

Ce que je veux dire, c'est si il y a 512MBytes, puis la quantité de RAM physique du noyau peut gérer est également 512MiBytes, en outre, le noyau ne peut pas créer un tel grand espace d'adressage comme au-delà de 512MBytes.

Reportez-vous à l'espace utilisateur, il y en a un autre point, les pages de l'utilisateur de l'application peut être permutée vers le disque dur, mais les pages du noyau ne peut pas.

Donc, pour l'utilisateur de l'espace, avec l'aide de tables de pages et d'autres modules, il semble qu'il y ait encore 4GBytes espace d'adressage. Bien sûr, c'est l'espace d'adressage virtuel, pas de RAM physique de l'espace.

C'est ce que je comprends.

Merci.

0voto

user3287223 Points 21

Si la mémoire physique est inférieure à 896 Mo, le noyau Linux mappe jusqu'à cette adresse physique.

Pour plus de détails, voir ceci .. http://learnlinuxconcepts.blogspot.in/2014/02/linux-addressing.html

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