Freigegebene Bibliothekszuordnungen in / proc / pid / maps

8

Warum /proc/pid/mapsenthält es einige Datensätze für dieselbe Bibliothek? Hier ist ein Beispiel:

7fae7db9f000-7fae7dc8f000 r-xp 00000000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7dc8f000-7fae7de8f000 ---p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de8f000-7fae7de97000 r--p 000f0000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20
7fae7de97000-7fae7de99000 rw-p 000f8000 08:05 536861                     /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.20

Was bedeutet das ?

Irbis
quelle

Antworten:

12

Die vier Datensätze haben unterschiedliche Berechtigungen, sodass sie nicht zusammengeführt werden können.

  • Der r-xpEintrag beschreibt einen Block des ausführbaren Speichers ( xBerechtigungsflag). Das ist der Code.
  • Der r--pEintrag beschreibt einen Speicherblock, der nur lesbar ist ( rBerechtigungsflag). Das sind statische Daten (Konstanten).
  • Der rw-pEintrag beschreibt einen beschreibbaren Speicherblock ( wBerechtigungsflag). Dies gilt für globale Variablen der Bibliothek.
  • Der ---pEintrag beschreibt einen Teil des Adressraums, für den keine Berechtigungen (oder ein ihm zugeordneter Speicher) vorhanden sind.

Alle sind privat ( pFlag). Wenn also ein Prozess eine Seite ändert (was nur für den beschreibbaren Teil möglich ist), wird diese Seite kopiert (Copy-on-Write) und andere Prozesse werden nicht geändert.

Dieser letzte Eintrag ist eine Lücke zwischen dem Codesegment und dem Datensegment, die vom GNU-Linker unter bestimmten Umständen explizit eingefügt wird. Mit dieser Lücke soll sichergestellt werden, dass sich der Code (gemeinsam nutzbar zwischen Prozessen, die dieselbe Bibliothek verwenden) und die beschreibbaren Daten (nicht gemeinsam nutzbar) niemals auf derselben Seite befinden. Die Größe der Lücke beträgt 2 MB, da dies die größte Seitengröße¹ ist, die Linux für Ihre Architektur verwendet (amd64). Siehe Was ist der Zweck von scheinbar unbrauchbaren Speicherzuordnungen unter Linux? für mehr Details.

¹ Die meisten Seiten haben eine Größe von 4 KB, was der „normalen“ Seitengröße entspricht. Es kann jedoch Seiten geben, die weniger MMU-Indirektionen verwenden. Dies ist etwas schneller, verschwendet jedoch viel Speicherplatz, es sei denn, die Anwendung verwendet tatsächlich sehr große Speicherblöcke. Linux nennt diese riesigen Seiten .

Quelle und weitere Informationen für die nicht zugeordnete Lücke: Warum verwendet das Gnome-Panel 290 MB? von RJK. Siehe auch den Eintrag /proc/PID/mapsin der Linux - Kernel - Dokumentation , Grundlegendes zu Linux / proc / id / Karten und / proc / $ pid / Karten zeigen Seiten ohne rwx Berechtigungen für x86_64 Linux auf Stack - Überlauf.

Gilles 'SO - hör auf böse zu sein'
quelle