Phil Bull
philbull@gmail.com 2011
Michael Hill
mdhillca@gmail.com 2011, 2014
Das Speicherabbild eines Prozesses kann beim Diagnostizieren bestimmter Speicherprobleme helfen.
Christian Kirbach
christian.kirbach@gmail.com 2014, 2015, 2021
Benjamin Steinwender
b@stbe.at 2014
Mario Blättermann
mario.blaettermann@gmail.com 2017, 2021
Jürgen Benvenuti
gastornis@posteo.org 2023

# Was ist ein Speicherabbild?

Virtueller Speicher ist eine Darstellungsform der Kombination von Physikalischem Arbeitsspeicher und Auslagerungsspeicher eines Systems. Er ermöglicht laufenden Prozessen mit mehr als dem vorhandenen physikalischen Speicher zu arbeiten, indem Teile des physikalischen Speichers in Dateien auf einem Datenträger abgebildet werden.

Wenn ein Programm gestartet wird, weist ihm das System eine eindeutige Prozesskennung (PID) zu und die Instruktionen und Daten werden in die Speicherseiten geladen. Die Seitentabelle jedes Prozesses stellt die Beziehungen zwischen dessen Seiten im virtuellen Speicher und deren Ort im physischen Speicher dar. Das Speicherabbild zeigt die gesamte virtuelle Speicherbelegung des Prozesses und kann dazu eingesetzt werden, den Speicherverbrauch einer oder mehrerer laufender Instanzen eines Programms festzustellen, die korrekte Verwendung von gemeinsam verwendeten Bibliotheken sicherzustellen, die Ergebnisse einer Anpassung verschiedener Geschwindigkeitsoptimierungsparameter eines Programms zu beurteilen und Probleme wie Speicherlecks eines Programms zu diagnostizieren.

Falls mehrere Kopien eines Programms laufen, müssen die Instruktionen (auch Text genannt) eines Programms nur einmal in den physischen Speicher geladen werden. Bei jedem Start einer neuen Instanz des Programms (als eindeutiger Prozess mit eigenen virtuellen Speicherseiten) wird in dessen Seitentabelle die Zuordnung des Textes im virtuellen Speicher zu dessen Instruktionen im realen, echten Speicherort hinterlegt. Zusätzlich erscheinen jegliche vom Prozess genutzte dynamisch geladenen Bibliotheken getrennt im virtuellen Speicher, sind aber gemeinsam genutzte Referenzen zu dem selben Textsegment der Bibliothek im realen Speicher. Bei der Berücksichtigung der gesamten Speichernutzung eines Prozesses ist zu beachten, dass die vom Laden der dynamischen Bibliotheken in den Speicher verursachte Last über alle Prozesse verteilt werden kann, welche diese gegenwärtig nutzen.

Sollte das System mehr Speicherseiten benötigen als zur Verfügung stehen, werden einige der vorhandenen Seiten ausgelagert, das heißt, in den Auslagerungsspeicher geschrieben. Textseiten werden im Speicher als lesbar und ausführbar markiert und müssen nicht in den Auslagerungsspeicher geschrieben werden, weil sie aus dem ursprünglichen Speicherort auf dem Datenträger neu geladen werden können. Datenseiten sind auf lesbar und schreibbar gesetzt und werden auf dirty gesetzt, sobald sie im Speicher verändert wurden. Werden sie zur Auslagerung ausgewählt, müssen sie ausgelagert werden. Wird eine im Auslagerungsspeicher befindliche Seite von einem laufenden Prozess benötigt, muss sie vor der Nutzung aus dem Auslagerungsspeicher eingelagert werden, wodurch möglicherweise die Auslagerung einer anderen Seite ausgelöst wird.