Speicherverwaltung Flashcards
Was passiert bei der statischen Relokation?
Objektdaten werden vom Binder verschoben, da alle Codestücke sich einen linearen Speicherbereich teilen
Swapping
Was beinhaltet Swapping?
- Auslagern ganzer Prozesse
- Speicher freigeben
- Ein anderes Programm in den freigewordenen Speicher einlagern
Fragmentierung (Verschnitt)
Wie entsteht interner Verschnitt?
- Der Speicher wird in Vielfachen von festen Blockgrößen vergeben
- Anforderungen werden auf das nächste Vielfache gerundet
- Dadurch ensteht Speicherplatz, der als belegt gekennzeichnet ist, aber nicht benutzt wird
Fragmentierung (Verschnitt)
Wie entsteht der externe Verschnitt?
- Durch die Dynamik des Belegens und Freigebens kann es vorkommen, dass eine Anforderung zwar von der Gesamtmenge des freien Speichers her erfüllbar wäre, durch die Zerstückelung jedoch kein hinreichend großes Stück gefunden werden kann.
- Dadurch entsteht Speicherplatz, der frei, aber (momentan) nicht belegbar ist
Freispeicherverwaltung: Reihenfolge
Welche Verfahren gibt es?
- In gleicher Reihenfolge: FIFO = First in First Out
- In umgekehrter Reihenfolge: LIFO = Last in First Out
Freispeicherverwaltung; Granularität
Nenne Punkte zur Granularität
- Konstante Einheiten: NUM = 1
- Vielfache gleicher Grundeinheiten: NUM = k
- Bestimmte Portionsgrößen: NUM = k1, k2, k3
- Beliebige Größen: NUM = x
Freispeicherverwaltung mit Bitmaps
Wie wird der Speicher unterteilt?
- Der Speicher wird in Blöcke gleicher Größe eingeteilt.
- Jeder Block hat ein Bit in der Bitmap, 1 = belegt, 0 = frei
- Je größer der Block, desto kleiner die Bitmap und desto größer der interne Verschnitt
- Es hat eine Laufzeit von O(n)
Freispeicherverwaltung mit Listen
Wie werden belegte und freie Speicherbereiche verkettet?
Belegte und freie Speicherbereiche werden mit einer linearen Liste verkettet
Freispeicherverwaltung mit Listen
Was ist der Nachteil der Listen?
Die Suche nach freiem Speicherplatz dauert lange und die Laufzeit bleibt theoretisch bei O(n)
Objekt-Orientierte Programme
Warum stellen OO-Programme besondere Herausforderungen an die Speicherverwaltung des Laufzeitsystems?
- Sehr viele Speicheranforderungen
- Meistens kleine Speicherbereiche
- Massenweise Freigabe durch den Garbage Collector
Objektorientierte Programme
Welche Optimierungen gibt es?
- Es macht Sinn “Konfektionsware” vorrätig zu haben
- Verspätetes Zusammenführen kann hilfreich sein
Buddy System alias “Halbierungsverfahren”
Aus wie viel Bytes besteht der Speicher?
Der Speicher besteht aus 2^kmax Bytes und wird in den Größen 2^min, 2^min+1… vergeben
Buddy System alias “Halbierungsverfahren”
Was wird bei einer Anforderung ausgewählt?
Bei einer Anforderung wird das kleinste passende Stück ausgewählt
Freispeicherverwaltung - First Fit
Erkläre “First Fit”
- Nimm den ersten freien Block, der groß genug ist
- Die Adresse wird von vorne durchlaufen
- Der durchschnittliche Suchaufwand ist gering - Im schlimmsten Fall immer noch O(n)
Freispeicherverwaltung - Next Fit
Erkläre “Next Fit”
- Nimm von der aktuellen Position in der Freispeicherliste aus den nächsten, der groß genug ist
- Dadurch, dass die Belegungen am Anfang vermieden werden gibt es bessere Suchzeiten als bei First-Fit
Freispeicherverwaltung - Best Fit
Erkläre “Best Fit”
- Nimm den Block mit dem geringsten externen Verschnitt
- Bessere Speichernutzung, da große Stücke nicht beachtet werden
- Neigt dazu, sehr kleine freie Stücke zu erzeugen, mit denen man gar nichts mehr anfangen kann
Freispeicherverwaltung - Worst Fit
Erkläre “Worst Fit”
Nimm den Block, der den größten externen Verschnitt hat
Freispeicherverwaltung - Nearest Fit
Erkläre “Nearest Fit”
- Wir geben eine Zieladresse vor und hätten den Speicherbereich gerne in der Nähe
- Man führt eine First-Fit-Suche durch
Spezialisierte Verfahren: Ringpuffer
Wie funktioniert das Verfahren mit Ringpuffer?
- Belegen und Freigeben in gleicher Reihenfolge (FIFO)
- Gleich lange Stücke
- Kein Suchen
- Kein externer Verschnitt