About this episode
In dieser Ausgabe greifen wir ein altes Thema erneut auf, bei dem ttimeless trotzdem stellenweise nur schwer folgen kann. Denn durch Wiederholung lernt man. Denn durch Wiederholung lernt man.Shownotes
Rückblick: wir hatten schon einige Folgen zu Speicherverwaltung
STP007: Speicherhierarchie (Festplatte und SSD, Arbeitsspeicher/RAM, Prozessor-Cache, Registerbank)
STP019: Speicherschutz (virtueller Speicher, Auslagerungsspeicher/Swap, Direct Memory Access)
Nachtrag/Linktipp: https://www.linuxatemyram.com
das war alles aus Sicht des Betriebssystems; diesmal Abläufe innerhalb des Prozesses
Was stellt uns das Betriebssystem bereit? -> Virtueller Speicher
nominale Größe: entsprechend der Adressbreite des Prozessors (für 32 Bit sind das 2^32 Bytes = 4 GiB, für 64 Bit sind es 2^64 Bytes = 16 EiB = 16.777.216 TiB)
nutzbar aber nur dort, wo das Betriebssystem für uns eine tatsächlich existierende Speicherseite einblendet
initiale Belegung (siehe Beispiel unten): hauptsächlich Programmdatei und benötigte Programmbibliotheken mit ihren entsprechenden Segmenten
Belegung (und Rückgabe) weiterer Speichersegmente mittels Syscalls (siehe STP019)
klassische Struktur des virtuellen Speichers: oben der Stapel, unten ein Haufen
vorher einige Bemerkungen zu klassischen Schutzmaßnahmen, die man im untenstehenden Beispiel sehen kann
die untersten paar KiB des Adressbereiches werden nie vergeben
dies verhindert versehentlichen Zugriff auf Nullzeiger mit hoher Wahrscheinlichkeit
Address Space Layout Randomization (ASLR): Programmdateien und Programmbibliotheken werden an zufällig gewählten Speicheradressen eingeblendet, um es Angreifern zu erschweren, das Programm so zu manipulieren, dass es ungeplant in deren Code hineinspringt
klingt nach einer einfach umsetzbaren Schutzmaßnahme
war aber lange nicht weit verbreitet, weil der benötigte Position Independent Code (PIC) mit einem kleinen Geschwindigkeitsverlust (1-3%) einhergeht
oberer Teil (d.h. bei hohen Adressen): Stack (Stapelspeicher)
Programme sind meist als ineinander verschachtelte Unterprogramme (Subroutinen) aufgebaut (siehe STP011)
Daten, die nur für die Dauer des jeweiligen Unterprogramms gebraucht werden, können im Stack aufgestapelt werden
Idee: Hauptroutine kriegt den ganzen Stack und knapst sich oben soviel ab, wie es selber braucht
nächste Unte