Objekt

Werbung
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!
Herunterladen