2016-10-17 3 views
2

Dieses ist von einer smaps Datei:
b750d000-b76bc000 r-xp 00000000 08:01 918842 /lib/i386-linux-gnu/libc-2.23.so
Die p in r-xp gibt es als privat geladen ist, glaube ich. Warum ist das so? Widerspricht dies nicht dem Zweck von gemeinsam genutzten Bibliotheken, wenn eine Kopie jeder .so-Datei in verschiedene Speicheradressen für verschiedene Prozesse geladen wird? Welchen Vorteil bietet dieses private Laden?Warum werden gemeinsam genutzte Bibliotheken (.so-Dateien) als privat geladen?

Antwort

0

p entspricht MAP_PRIVATE. man mmap behauptet, dass:

MAP_PRIVATE: Erstellen Sie eine private copy-on-write Mapping. Aktualisierungen der Zuordnung sind für andere Prozesse, die dieselbe Datei zuordnen, nicht sichtbar und werden nicht zur zugrunde liegenden Datei übertragen. [...]

Die physikalischen Speicherseiten für diese VMA werden, da keine Änderung so lange von allen Prozessen gemeinsam genutzt werden getan wird (sie mit dem Kernel-Cache gemeinsam genutzt werden als auch). Wenn eine virtuelle Seite in einem bestimmten Prozess geändert wird, wird die Seite für diesen Prozess dupliziert (nicht freigegeben) (copy-on-write).

Lassen Sie uns sehen:

$ cat /proc/self/maps 
00400000-0040c000 r-xp 00000000 08:11 529223        /bin/cat 
0060b000-0060c000 r--p 0000b000 08:11 529223        /bin/cat 
0060c000-0060d000 rw-p 0000c000 08:11 529223        /bin/cat 
[...] 
  • Die ersten und zweiten VMAs sind schreibgeschützt. Sie werden (typischerweise) nicht modifiziert und werden (typischerweise) von allen Prozessen gemeinsam genutzt.

  • Die dritte VMA (rw-p) ist beschreibbar, aber die Änderungen in einem Prozess müssen in anderen Prozessen nicht sichtbar sein. Diese VMA enthält die (änderbaren) globalen Variablen, die nicht von verschiedenen Prozessen gemeinsam genutzt werden.

Verwandte Themen