Adressraum der gemeinsam genutzten Bibliothek

8

Während ich über die geteilte Bibliothek studierte, las ich eine Aussage

  

Obwohl der Code einer gemeinsam genutzten Bibliothek unter mehreren geteilt wird   Prozesse, seine Variablen sind nicht. Jeder Prozess, der die Bibliothek verwendet   hat eigene Kopien der globalen und statischen Variablen, die definiert sind   in der Bibliothek.

Ich habe nur wenige Zweifel.

  1. Ob Code-Teil jedes Prozesses in einem separaten Adressraum ist?
  2. Gibt an, ob sich der Codecode-Teil einer freigegebenen Bibliothek in irgendeinem globalen (eindeutigen) Adressraum befindet.

Ich bin nur ein Anfänger, also bitte hilf mir zu verstehen.

Danke!

    
dearvivekkumar 07.11.2011, 09:17
quelle

1 Antwort

17

Gemeinsam genutzte Bibliotheken werden in einen Prozess geladen, indem sie die Datei in einen Teil des Adressraums des Prozesses mappen. Wenn mehrere Prozesse dieselbe Bibliothek laden, lässt das Betriebssystem sie einfach denselben physischen RAM teilen.

Teile der Bibliothek, die modifiziert werden können, wie z. B. statische globale Variablen, werden im Allgemeinen im Copy-on-Write-Modus geladen, so dass beim Versuch eines Schreibvorgangs ein Seitenfehler auftritt, indem der Kernel die betroffene Seite kopiert eine andere physikalische Seite des RAM (nur für diesen Prozess), das Mapping wird auf die neue Seite umgeleitet, und dann ist die Schreiboperation abgeschlossen.

Um Ihre spezifischen Punkte zu beantworten:

  1. Alle Prozesse haben ihren eigenen Adressraum. Das Teilen von physischem Speicher zwischen Prozessen ist für jeden Prozess unsichtbar (es sei denn, dies geschieht absichtlich über eine Shared-Memory-API).
  2. Alle Daten und der Code befinden sich im physischen RAM, einer Art Adressraum. Die meisten der Adressen, die Sie wahrscheinlich sehen, sind jedoch virtuelle Speicheradressen, die zum Adressraum des einen oder anderen Prozesses gehören, auch wenn dieser "Prozess" der Kernel ist.
Marcelo Cantos 07.11.2011, 09:30
quelle

Tags und Links