GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verständnis von Linux /proc/id/maps

Jede Zeile in /proc/$PID/maps beschreibt einen Bereich zusammenhängenden virtuellen Speichers in einem Prozess oder Thread. Jede Zeile hat die folgenden Felder:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • Adresse - Dies ist die Start- und Endadresse der Region im Adressraum des Prozesses
  • Berechtigungen - Hier wird beschrieben, wie Seiten in der Region aufgerufen werden können. Es gibt vier verschiedene Berechtigungen:Lesen, Schreiben, Ausführen und Freigeben. Wenn Lesen/Schreiben/Ausführen deaktiviert sind, ein - erscheint anstelle von r /w /x . Wenn eine Region nicht freigegeben ist , es ist privat , also ein p erscheint anstelle von s . Wenn der Prozess versucht, auf unzulässige Weise auf den Speicher zuzugreifen, wird ein Segmentierungsfehler generiert. Berechtigungen können mit dem mprotect geändert werden Systemaufruf.
  • Versatz - Wenn die Region aus einer Datei zugeordnet wurde (mit mmap ), ist dies der Offset in der Datei, an dem die Zuordnung beginnt. Wenn der Speicher nicht aus einer Datei gemappt wurde, ist er nur 0.
  • Gerät - Wenn die Region aus einer Datei zugeordnet wurde, ist dies die Haupt- und Nebengerätenummer (in Hex), in der sich die Datei befindet.
  • Inode - Wenn die Region aus einer Datei gemappt wurde, ist dies die Dateinummer.
  • Pfadname - Wenn die Region aus einer Datei zugeordnet wurde, ist dies der Name der Datei. Dieses Feld ist für anonym zugeordnete Regionen leer. Es gibt auch spezielle Regionen mit Namen wie [heap] , [stack] , oder [vdso] . [vdso] steht für Virtual Dynamic Shared Object. Es wird von Systemaufrufen verwendet, um in den Kernelmodus zu wechseln. Hier ist ein guter Artikel darüber:"Was ist linux-gate.so.1?"

Möglicherweise bemerken Sie viele anonyme Regionen. Diese werden normalerweise von mmap erstellt sind aber keiner Datei angehängt. Sie werden für viele verschiedene Dinge wie gemeinsam genutzten Speicher oder Puffer verwendet, die nicht auf dem Heap zugewiesen sind. Ich denke zum Beispiel, dass die pthread-Bibliothek anonyme zugeordnete Regionen als Stapel für neue Threads verwendet.


Memory Mapping wird nicht nur verwendet, um Dateien in den Speicher abzubilden, sondern ist auch ein Werkzeug, um RAM vom Kernel anzufordern. Dies sind diese Inode-0-Einträge - Ihr Stack, Heap, BSS-Segmente und mehr


Bitte überprüfen Sie: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

Das Adressfeld ist der Adressraum in dem Prozess, den die Zuordnung einnimmt.

Das Perms-Feld ist ein Satz von Berechtigungen:

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

Das Offset-Feld ist der Offset in die Datei/was auch immer;

dev ist das Gerät (Major:Minor);

inode ist der Inode auf diesem Gerät. 0 gibt an, dass kein Inode mit der Speicherregion verknüpft ist, wie dies bei BSS (nicht initialisierte Daten) der Fall wäre.

Das Pfadnamenfeld ist normalerweise die Datei, die die Zuordnung unterstützt. Bei ELF-Dateien können Sie einfach mit dem Offset-Feld koordinieren, indem Sie sich das Offset-Feld in den ELF-Programmkopfzeilen ansehen (readelf -l).

Unter Linux 2.0 gibt es kein Feld, das den Pfadnamen angibt.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Linux – Zweck des Verzeichnisses /net?

  3. Linux – Zusammenführen von /usr/bin und /usr/sbin in /bin (gnu/linux)?

  4. Verständnis des /proc-Dateisystems

  5. Verstehen der /etc/inittab-Datei unter Linux

Grundlegendes zu Linux-Dateiberechtigungen

/dev/null unter Linux

/proc/cpuinfo- und /proc/meminfo-Dateien unter Linux

/etc/group-Datei verstehen

Verstehen der /etc/fstab-Datei unter Linux

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen