# Speicherverwaltung ## Speicherhierarchie ### Registers - schnellste und kleinste Form des Speichers - direkt in Prozessor - Speicherung temporärer Daten und Zwischenergebnisse ### Cache - kleinerer, schnellerer Speicher - zwischen Register und RAM ### Hauptspeicher (RAM) - physischer Speicher - Prozessor kann direkt zugreifen ### Virtueller Speicher - langsamerer Speicher - Erweiterung des RAMs ## Speicheradressierung - Prozess, durch den ein Computer auf den physischen/virtuellen Speicher zugreift | **Physische Adressierung** | **Logische Adressierung** | |---------------------------------------------------------------|----------------------------------------------| | direkter Zugriff auf bestimmten Speicherort im physischen RAM | Adresse von Prozess generiert | | physische Adresse = tatsächliche Adresse des Speicherorts | wird später in physische Adresse umgewandelt | | | **Virtuelle Adressierung** | ## Speicherpartitionierung - Aufteilung des physischen Speichers in logische Abschnitte - können von verschiedenen Teilen des Systems genutzt werden - Mögliche Zwecke: - Betriebssystemcode - Anwendungsdaten - Temporäre Variablen - ... ### Statische Partitionierung ![image_281.png](image_281.png) - Aufteilung in Partitionen gleicher / unterschiedlicher Größe - im Idealfall möglichst passgenau - möglichst wenig interne Fragmentierung - Falls unterschiedliche Größe - BS verwaltet Warteschlange - | eigene für jede Partition | eine für alle | |--------------------------------------------------------|---------------| | :( bestimmte Partitionen werden seltener/nie verwendet | | - Nachteil: - zwangsläufig interne Fragmentierung - sehr ineffizient ![image_282.png](image_282.png) ## Dynamische Partitionierung - BS weist jedem Prozess eine zusammenhängende Partition zu - mit exakt benötigter Größe - dabei auch Fragmentierung - Darstellung des Speichers durch BS als verkettete Liste - Kennzeichnung, ob frei/belegt - Startadresse - Länge - Zeiger auf nächsten Eintrag - Unterschiedliche Zuteilungskonzepte - wie sucht/findet das BS einen freien Speicherbereich - **First Fit** - sucht bei jeder Anforderung ab Anfang des Adressraums - **Next Fit** - sucht ab letzter Zuweisung - **Best Fit** - Sucht immer den freien Bereich, der am besten zur Anforderung passt - am wenigsten Fragmentierung - ![image_450.png](image_450.png) ## Buddy-Speicherverwaltung - Ziel: Fragmentierung von Speicherblöcken minimieren - wird oft in BS und in der Verwaltung von Speicher-Pools verwendet - basiert auf - Blöcke gleicher Größe als Buddies zusammenfassen - effizienter Speicherzugriff/-freigabe ermöglichen ### Erstellung - Am Anfang ein Bereich, der gesamten Speicher abdeckt - Sobald ein Prozess Speicherplatz anfordert - Speicherkapazität zur nächsthöheren Zweierpotenz aufrunden - entsprechenden, freien Bereich suchen - Falls nicht existent - Nach Bereich doppelter Größe suchen - in zwei Teile teilen (Buddies) - eine Hälfte wird anfordernden Prozess zugewiesen - ![image_283.png](image_283.png) - Linux verwendet für Zuweisung von Speicherseiten zu Prozessen - Informationen in _/proc/buddyinfo_ - ![image_284.png](image_284.png)