J'essaie de comprendre l'utilisation de la mémoire de mon application Linux embarquée. L' /proc/pid/maps
utilitaire / fichier semble être une bonne ressource pour voir les détails. Malheureusement, je ne comprends pas toutes les colonnes et entrées.
Que signifient les entrées anonymes d'inode 0? Ceux-ci semblent être certains des segments de mémoire les plus importants.
proc(5)
mmap(2)
"Comprendre le noyau Linux" 9.3. Régions de mémoire; 16.2. Mappage de la mémoire «Comprendre le gestionnaire de mémoire virtuelle Linux» 4.4 Régions de mémoireRéponses:
Chaque ligne de
/proc/$PID/maps
décrit une région de mémoire virtuelle contiguë dans un processus ou un thread. Chaque ligne contient les champs suivants:-
apparaîtra à la place der
/w
/x
. Si une région n'est pas partagée , elle est privée , donc unp
apparaîtra à la place d'uns
. Si le processus tente d'accéder à la mémoire d'une manière non autorisée, une erreur de segmentation est générée. Les autorisations peuvent être modifiées à l'aide de l'mprotect
appel système.mmap
), il s'agit du décalage dans le fichier où le mappage commence. Si la mémoire n'a pas été mappée à partir d'un fichier, c'est juste 0.[heap]
,[stack]
ou[vdso]
.[vdso]
représente un objet partagé dynamique virtuel. Il est utilisé par les appels système pour passer en mode noyau. Voici un bon article à ce sujet: "Qu'est-ce que linux-gate.so.1?"Vous remarquerez peut-être beaucoup de régions anonymes. Ceux-ci sont généralement créés par,
mmap
mais ne sont joints à aucun fichier. Ils sont utilisés pour beaucoup de choses diverses comme la mémoire partagée ou les tampons non alloués sur le tas. Par exemple, je pense que la bibliothèque pthread utilise des régions mappées anonymes comme piles pour les nouveaux threads.la source
gpm
est-ce que le mappage du fichier binaire à une adresse virtuelle depuis le début, avec l'en-tête ELF, etc.? Le chargeur n'est-il pas censé analyser l'en-tête ELF et mapper des sections individuelles, pas le fichier entier?Le mappage de mémoire n'est pas seulement utilisé pour mapper des fichiers en mémoire, mais c'est aussi un outil pour demander de la RAM au noyau. Ce sont ces entrées inode 0 - votre pile, tas, segments bss et plus
la source
Veuillez vérifier: http://man7.org/linux/man-pages/man5/proc.5.html
Le champ d'adresse est l'espace d'adressage dans le processus occupé par le mappage.
Le champ perms est un ensemble d'autorisations:
Le champ offset est l'offset dans le fichier / peu importe;
dev est le périphérique (majeur: mineur);
inode est l'inode sur ce périphérique. 0 indique qu'aucun inode n'est associé à la région mémoire, comme ce serait le cas avec BSS (données non initialisées).
Le champ chemin sera généralement le fichier qui sauvegarde le mappage. Pour les fichiers ELF, vous pouvez facilement vous coordonner avec le champ offset en regardant le champ Offset dans les en-têtes du programme ELF (readelf -l).
Sous Linux 2.0, il n'y a pas de champ donnant le chemin.
la source