211 votes

Comprendre Linux / proc / id / maps

J’essaie de comprendre l’utilisation de la mémoire de l’application de mon linux embarqué. Le fichier/utilitaire de /proc/pid/maps semble être une bonne ressource pour voir les détails. Malheureusement je ne comprends pas toutes les colonnes et les entrées.

Y at-il de bonne ressources/documentation pour le proc / / fichier/utilitaire de cartes ?

Que signifie les entrées anonymes inode 0 ? Celles-ci semblent être quelques-uns des plus gros segments mémoire.

353voto

Jay Conrod Points 12375

Chaque ligne en /proc/$PID/maps décrit une région contiguë de la mémoire virtuelle d'un processus ou thread. Chaque ligne contient les champs suivants:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • adresse - C'est le point de départ et l'adresse de fin de la région dans l'espace d'adressage du processus
  • autorisations - Ce qui décrit comment les pages dans la région peut être consulté. Il existe quatre types d'autorisations: lire, écrire, exécuter, et de partage. Si l'accès en lecture/écriture/exécution sont désactivés, un " - " apparaît au lieu du 'r'/'w'/'x'. Si une région n'est pas partagée, elle est privée, donc un " p "apparaît au lieu d'un "s". Si le processus tente d'accéder à la mémoire d'une manière qui n'est pas permis, faute de segmentation est généré. Les autorisations peuvent être modifiées à l'aide de l' mprotect appel système.
  • offset - Si la région a été cartographié à partir d'un fichier (à l'aide d' mmap), c'est l'offset dans le fichier dans lequel le mappage commence. Si la mémoire n'a pas été cartographié à partir d'un fichier, c'est juste 0.
  • appareil - Si la région a été cartographié à partir d'un fichier, c'est la majeure et la mineure numéro de périphérique (en hexadécimal) où le fichier de vie.
  • inode - Si la région a été cartographié à partir d'un fichier, c'est le numéro de fichier.
  • chemin - Si la région a été cartographié à partir d'un fichier, c'est le nom du fichier. Ce champ est vide pour les anonymes cartographiée des régions. Il existe également des régions avec des noms comme [heap], [stack]ou [vdso]. [vdso] signifie virtual dynamic shared object. Il est utilisé par des appels système pour passer en mode noyau. Voici un bon article sur le sujet.

Vous remarquerez peut-être beaucoup d'anonymes des régions. Ce sont généralement créées par des mmap mais ne sont attachées à aucun fichier. Ils sont utilisés pour un grand nombre de diverses choses comme la mémoire partagée ou de tampons non alloué sur le tas. Par exemple, je pense que la bibliothèque pthread utilise anonyme cartographiée des régions que des piles pour de nouvelles discussions.

18voto

wRAR Points 13223

``

``

« Comprendre le noyau Linux » 9.3. Régions de la mémoire ; 16.2. mappage de mémoire

« Comprendre le gestionnaire de mémoire virtuelle Linux » des régions de mémoire 4,4

11voto

Xeor Points 1246

mappage de mémoire n’est pas seulement utilisé pour mapper les fichiers en mémoire, mais est également un outil de demande de RAM de noyau. Ce sont ces entrées inode 0 - votre pile, tas, segments de bss, etc.

0voto

SamKan Points 14

J’utilise https://github.com/skanzariya/Memwatch cet utilitaire pour comprendre l’utilisation de la mémoire de mon application.

Il me donne un bon aperçu de la mémoire utilisée en Ko ainsi comme dans Total %.

Elle pourra être qu'utile.

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