11 Speicherverwaltung verwaltendes System verwalteter Speicher enthält Laufzeitsystem Adreßraum Codebereich Keller Halde Instruktionen temporäre Variable Objekte Arbeitsspeicher Seiten/Segmente Externer Speicher Blöcke Betriebssystem 11.1 Explizite Speicherfreigabe auf der Halde - z.B. in Pascal, Modula, C, C++, ... VAR x,y,z: POINTER TO T; a,b: T; BEGIN NEW(x); y := x; ... DISPOSE(x); bewirkt Speicherfreigabe und x=nil ... NEW(z); a := y^; liefert eventuell Müll y^:= b; zerstört eventuell z ... Speicherfreigabe y enthält hängenden Verweis (dangling reference) Unterlassene Speicherfreigabe Speicherleck (memory leak) 11.2 Automatische Speicherfreigabe für nicht mehr erreichbare Objekte im Keller ohnehin; auf der Halde: Verweiszähler (reference counts) versagt bei zyklischen Geflechten Speicherbereinigung (garbage collection), sobald die Halde überläuft (aber auch nebenläufig möglich): alle nicht vom Keller aus erreichbaren Objekte werden gelöscht, d.h. der von ihnen belegte Platz wird freigegeben Klassische Speicherbereinigung in 2 Phasen: Mark & Sweep 1. Mark: Ermittlung aller erreichbaren Objekte: Ausgehend von den Verweisen im Keller werden alle über Verweise erreichbaren Objekte markiert (= Graph-Traversierung in Präordnung!) 2. Sweep: Speicherfreigabe Die nicht markierten Objekte werden gelöscht, bei den markierten Objekten werden die Marken gelöscht 11.3 Freispeicherverwaltung durch unsichtbare Operationen allocate und deallocate interface Storage {// Modell: Bitliste s (0 = „frei“, 1 = „belegt“) int allocate(int size); // Vor.: s enthält einen freien Abschnitt der Länge size. // Eff.: Dieser Abschnitt ist jetzt belegt; dessen Index wird als // Ergebnis geliefert und ist als Adresse eines neu // zugeteilten Speicherbereichs verwendbar. void deallocate(int address, int size); // Vor.: // Eff.: Der bei address beginnende Abschnitt der Länge size // ist frei. } Implementierung: Repräsentation der Freispeicherliste als 1 Bitliste oder durch 2 Blockverkettung oder mit 3 Buddy System Suchstrategie bei 1, 2 für allocate : + First-Fit - Best-Fit - Worst-Fit 11.4 Persistente Objekte Unterschiedliche Lebensdauern von Objekten: kurzlebig Keller transient Halde Betriebssystem-Kern Dateisystem, Datenbanksystem persistent Archivsystem langlebig wünschenswert: Identifizierung der Begriffe Objekt und Datei: Table myPhones = new HashTable(); ... Table allPhones = get Table from „~telekom/berlin“; // eventuell Ausnahme ... ... myPhones.enter(„Rojas“, allPhones.lookup(„Rojas“)); ... put myPhones to „~lohr/phonebook“; ... Rückblick ALP III Datenabstraktion und objektorientierte Programmierung Klassen, Vererbung, Datenabstraktion, Spezifikation, Verifikation Datenstrukturen und Algorithmen Folgen, Bäume, Mengen, Relationen, Graphen Datenspeicherung Speicherverwaltung, Persistenz Vorschau: anknüpfende Veranstaltungen SS Software-Praktikum ( div. Java-Bibliotheken) WS Entwurf und Analyse von Algorithmen Nichtsequentielle Programmierung Softwaretechnik und natürlich viele andere ... Viel Spaß! Viel Erfolg!