Ich versuche, die Speichernutzung meiner eingebetteten Linux-Anwendung zu verstehen. Das /proc/pid/maps
Utility/Datei scheint eine gute Ressource zu sein, um die Details zu sehen. Leider verstehe ich nicht alle Spalten und Einträge.
Was bedeuten die anonymen Inode 0-Einträge? Dies scheinen einige der größeren Speichersegmente zu sein.
Jede Zeile in /proc/$PID/maps
beschreibt einen Bereich zusammenhängenden virtuellen Speichers in einem Prozess oder Thread. Jede Zeile hat folgende Felder:
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
-
wird anstelle von r
/w
/x
angezeigt. Wenn eine Region nicht gemeinsam genutzt ist, ist sie privat, sodass ein p
anstelle eines s
angezeigt wird. Wenn der Prozess versucht, auf unzulässige Weise auf den Speicher zuzugreifen, wird ein Segmentierungsfehler generiert. Berechtigungen können mit dem Systemaufruf mprotect
geändert werden.mmap
) zugeordnet wurde, ist dies der Offset in der Datei, in der die Zuordnung beginnt. Wenn der Speicher nicht aus einer Datei zugeordnet wurde, ist er nur 0.[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 dazu: "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 verwendet, z. B. für gemeinsam genutzten Speicher oder Puffer, die nicht auf dem Heap zugeordnet sind. Ich denke zum Beispiel, dass die pthread-Bibliothek anonym zugeordnete Regionen als Stapel für neue Threads verwendet.
die Speicherzuordnung wird nicht nur zum Zuordnen von Dateien zum Speicher verwendet, sondern ist auch ein Tool zum Anfordern von RAM vom Kernel. Dies sind die Einträge für Inode 0 - 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 belegt.
Das Feld perms besteht aus einer Reihe von Berechtigungen:
r = read
w = write
x = execute
s = shared
p = private (copy on write)
Das Versatzfeld ist der Versatz in die Datei/was auch immer;
dev ist das Gerät (major: minor);
inode ist der Inode auf diesem Gerät. 0 zeigt an, dass dem Speicherbereich kein Inode zugeordnet ist, wie dies bei BSS der Fall wäre (nicht initialisierte Daten).
Das Pfadnamenfeld ist normalerweise die Datei, die die Zuordnung sichert. Bei ELF-Dateien können Sie leicht mit dem Versatzfeld koordinieren, indem Sie das Versatzfeld in den ELF-Programm-Headern (readelf -l) betrachten.
Unter Linux 2.0 gibt es kein Feld, das den Pfadnamen angibt.