# 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