# Speicherabstraktion > Idee, dass Anwendungen und Benutzer nicht direkt mit physischem Speicher interagieren müssen. > Sie können stattdessen auf einer höheren, abstrakten Ebene arbeiten > > Ermöglicht einfachere, flexiblere Verwendung des Speichers, da Details der physischen Speicherhardware > vor Benutzer und Anwendung verborgen werden. ## Adressräume - Gesamter Bereich von Speicheradressen, welcher durch System/Prozess verwendet werden kann - ermöglicht Beschränkung des Zugriffs auf bestimmte Speicherbereiche - Sicherheit & Integrität gewährleisten - unautorisierten Speicherzugriff verhindern ## Relokation - Jede Anwendung bekommt eigenen Adressraum des physischen Speichers - Dafür Spezialregister in der CPU - ermöglichen laden von Programmen in den Speicher ohne Relokation - **Basisregister** - Startadresse des Programms - **Limitregister** - Länge des Programms - **Nachteil:** - Bei jedem Speicherzugriff Addition und Vergleich ausführen - Addition benötigt wegen Carry-Bit lange - _Vergleich ist fine_ > In der Praxis ist die benötigte RAM-Menge oft größer als der physische Speicher ## Swapping - Prozesse zwischen primären Speicher(RAM) und sekundären Speicher (Festplatte) austauschen - Entlastung des RAM durch Auslagerung nicht benötigter Prozesse - Kann Leistung beeinträchtigen - Zugriff auf sekundären Speicher dauert länger - ![image_285.png](image_285.png) > Sehr erfolgversprechend, da normale SATA nur Max-Übertragungsgeschwindigkeit von einigen 100MB/s hat > > → es dauert Sekunden, um ein 1GB-Programm aus-/einzulagern ## Virtual Memory - Virtueller Speicher ermöglicht mehr Speicher zu verwenden als vorhanden ist - Physischer Speicher und ein Teil der Festplatte werden als virtueller Speicher behandelt - BS kann effizienten Gebrauch von begrenzten RAM machen - Prozesse und Daten dynamisch zwischen physischem Speicher und sekundärem Speicher verschieben - Gesamtleistung optimieren :) - ## Dynamischer Speicher - Speicherplatz, der zur Laufzeit eines Programms dynamisch angefordert, freigegeben wird - Speicherplatz während Laufzeit variieren - bietet Flexibilität - Programme können während Ausführung an sich ändernde Anforderungen reagieren - müssen nicht im Voraus Speicherplatz reservieren - Wird oft im Heap reserviert - Heap wird meist für lokale Variablen, Funktionsaufrufe verwendet - ermöglicht Heap dynamische Zuweisung von Speicherplatz - Programmierer ist für Freigabe von Speicherplatz verantwortlich - vernachlässigte Freigabe kann zu Speicherlecks führen - einige Programmiersprachen haben eine automatische Speicherverwaltung (_Garbage Collection_) - ![image_286.png](image_286.png) ## Paging - Speicherverwaltungstechnik - Virtueller Speicher wird in kleine, gleichgroße Blöcke (_Seiten_) unterteilt - Können dann in physischem Speicher / Festplatte ausgelagert werden ([Swapping](#swapping)) - Adressen werden mithilfe von Indizierung, Basisregistern und Segmentregistern generiert - = virtuelle Adresse, bildet virtuellen [Adressraum](#adressr-ume) - virtueller Adressraum besteht aus Einheiten fester Größe - werden _Seitenrahmen (page frame)_ genannt - Beispiel: - ![image_287.png](image_287.png) - Seiten und Seitenrahmen sind hier 4KB - normalerweise von 512 Byte - 1GB - Present-/Absent-Bit zeigt an, ob Seiten physisch im Speicher vorhanden sind - Greift Programm auf einen Speicherbereich zu, der noch nicht in den Speicher geladen wurde - Seitenfehler (_page fault_) wird ausgelöst - BS gibt einen Seitenrahmen im Speicher frei - BS lädt entsprechende Seite in jetzt freien Seitenrahmen - Befehl wird nochmal ausgeführt - ![image_288.png](image_288.png) - Muss schnell gehen, da es sonst zu Engpass wird - Meist < 0,2 ns - Jeder Prozess hat eigenen Adressraum - benötigt eigene Seitentabelle ## Memory Management Unit (MMU) - virtuelle Adresse, die von Prozessen/Programmen verwendet werden in physische Adressen umwandeln - mithilfe von Seitentabellen oder anderen Mechanismen - Schlüsselelement des Speichermanagements - zentrale Rolle bei Implementierung von Funktionen - wie virtuellem Speicher und Paging - ![image_289.png](image_289.png) - 16Bit Adresse wird in 4-Bit-Seitennummer und 12Bit Offset zerlegt - 4 Bit → 16 Seiten - 12 Bit → 4096 Byte adressierbar - ![image_290.png](image_290.png) - [YouTube: _Virtuelle Speicherverwaltung mit MMU_](https://www.youtube.com/watch?v=QPL-xJ6ePqQ) ## Translation Lookaside Buffer - Assoziativer Speicher (TLB) für schnellere Adressumwandlung der MMU - Puffert Seitenzugriffe - ermöglicht direkteren Zugriff auf wichtige Informationen der Speichertabelle - ohne Zugriff auf Seitentabelle - enthält nur wenige Einträge - Schnelle Suche - Arbeitet als Cache für MMU