GNU/Linux >> Tutoriels Linux >  >> Linux

Comprendre Linux /proc/id/maps

Chaque ligne dans /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 :

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • adresse - Il s'agit de l'adresse de début et de fin de la région dans l'espace d'adressage du processus
  • autorisations - Ceci décrit comment les pages de la région peuvent être consultées. Il existe quatre autorisations différentes :lecture, écriture, exécution et partage. Si la lecture/écriture/exécution sont désactivées, un - apparaîtra à la place du r /w /x . Si une région n'est pas partagée , c'est privé , donc un p apparaîtra à la place d'un s . 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 du mprotect appel système.
  • compensation - Si la région a été cartographiée à partir d'un fichier (en utilisant 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.
  • appareil - Si la région a été mappée à partir d'un fichier, il s'agit du numéro de périphérique majeur et mineur (en hexadécimal) où réside le fichier.
  • inode - Si la région a été cartographiée à partir d'un fichier, il s'agit du numéro de fichier.
  • chemin d'accès - Si la région a été cartographiée à partir d'un fichier, il s'agit du nom du fichier. Ce champ est vide pour les régions cartographiées anonymes. Il existe également des régions spéciales avec des noms tels que [heap] , [stack] , ou [vdso] . [vdso] signifie 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 de nombreuses régions anonymes. Ceux-ci sont généralement créés par mmap mais ne sont attachés à 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.


le mappage de mémoire n'est pas seulement utilisé pour mapper des fichiers dans la mémoire, mais est également un outil pour demander de la RAM au noyau. Ce sont ces entrées inode 0 - votre pile, votre tas, vos segments bss et plus


Veuillez vérifier :http://man7.org/linux/man-pages/man5/proc.5.html

address           perms offset  dev   inode       pathname
00400000-00452000 r-xp 00000000 08:02 173521      /usr/bin/dbus-daemon

Le champ d'adresse est l'espace d'adressage dans le processus occupé par le mappage.

Le champ perms est un ensemble d'autorisations :

 r = read
 w = write
 x = execute
 s = shared
 p = private (copy on write)

Le champ décalage est le décalage dans le fichier/quel que soit;

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 de nom de chemin sera généralement le fichier qui sauvegarde le mappage. Pour les fichiers ELF, vous pouvez facilement coordonner avec le champ de décalage en consultant le champ Décalage dans les en-têtes du programme ELF (readelf -l).

Sous Linux 2.0, il n'y a pas de champ indiquant le chemin.


Linux
  1. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  2. Linux – Lier /proc/mnt à /proc/mounts ?

  3. Linux – But du répertoire /net ?

  4. Linux – Fusionner /usr/bin et /usr/sbin dans /bin (gnu/linux) ?

  5. Comprendre le fichier /etc/inittab sous Linux

Comprendre les autorisations de fichiers Linux

/dev/null sous Linux

Fichiers /proc/cpuinfo et /proc/meminfo sous Linux

Comprendre le fichier /etc/group

Comprendre le fichier /etc/fstab sous Linux

Comprendre les fichiers /proc/mounts, /etc/mtab et /proc/partitions