Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Stefan Loidl, 0255886, Reference Counting II Freigeben zyklischer Zellstrukturen.

Ähnliche Präsentationen


Präsentation zum Thema: "Stefan Loidl, 0255886, Reference Counting II Freigeben zyklischer Zellstrukturen."—  Präsentation transkript:

1 Stefan Loidl, , Reference Counting II Freigeben zyklischer Zellstrukturen

2 Stefan Loidl, , Wurzel Wie entstehen Zyklen? Systemebene? Programmebene? Wie lassen sich Zyklen vermeiden?

3 Stefan Loidl, , Bobrows Technik Ansatzpunkt Behandle einen Zyklus wie eine einzelnes Objekt GG G externe Zelle 1 RC Gruppe G: 3 RC Gruppe H: 1 … externe Zelle 2 externe Zelle 3 Aber wie wird ein Zyklus erkannt?

4 Stefan Loidl, , Bobrows Technik Realisierungstechniken der Gruppen Zonenbasiertes Gruppieren: z.B.: Ableiten der Gruppe aus der Adresse Speicherverschnitt Beschriftende Gruppierungsverfahren: Zellenbeschriftung Zeiger auf das RC Feld Beide fix oder variabel Verschmelzen von Gruppen G G G externe Zelle 1 RC Gruppe G: 3 RC Gruppe H: 1 … externe Zelle 2 externe Zelle 3 Gruppe G Gruppe F Gruppe H

5 Stefan Loidl, , Weak- Pointer Algorithmen Grundidee: Unterteilen in 2 Kategorien von Pointern Normale RC- Verfahren auch für Zyklen Arbeiten von: Brownbridge, Salkild und Pepels. Invarianten: Jeder aktive Knoten kann vom der Wurzel her über einen Pfad von starken Referenzen erreicht werden. starke Referenzen dürfen niemals einen Zyklus schließen Wurzel

6 Stefan Loidl, , Brownbridges Algorithmus Eckdaten: Zwei Reference Count Felder. Ein Zeiger auf eine neue Zelle ist immer stark. Kopieren eines Pointers kann zu starken Zyklus führen! Brownbridge beschäftige sich nicht mit allgemeinen Pointer Systemen! Problemillustration: B Wurzel A C D E

7 Stefan Loidl, , Salkilds Modifikationen Ein kopierter Zeiger ist immer schwach Das Löschen gestaltet sich komplizierter (3 Fälle) //Fall 3: nur noch schwache Referenzen else if(SRC(P) == 0 && WRC(P) > 0){ invertStrength(P); forall(Children C of P){ suicide(P,C); } if(SRC(P) == 0){ forall(Children C of P){ delete(C); } free(T); } B Wurzel A C D E

8 Stefan Loidl, , Salkilds Modifikationen /** * Suchroutine die starke Zyklen von * einem Knoten Start aus findet und * Diese beseitigt. */ void suicide(pointer Start, pointer N){ if(isStrong(N)){ if(N == Start || SRC(N) > 1){ weaken(N); } else{ forall(Children T of N)){ suicide(Start, T); } B Wurzel A C D E

9 Stefan Loidl, , Pepelss Modifikationen Lösen Salkilds Terminierngsproblem Verwendet ein doppeltes Markierungsschema 1. verhindert unendliche Anzahl von Suchen 2. garantiert das Terminieren einer Suche größerer Speicherbedarf Problem mit der Laufzeitkomplexität (exponentiell)

10 Stefan Loidl, , Brownbridges Realisierung Jedes Objekt und jeder Pointer wird mit einem Stärkebit versehen Bitwert Pointer = Bitwert Objekt starker Pointer Der Stärkewert einer Zelle bestimmt was SRC bzw. WRC ist Stärkewert alle eingehenden Pointer kann damit in einer Operation invertiert werden Aufgrund der Systemoperationen Vorteilhaft

11 Stefan Loidl, , Partielle Mark-Sweep Algorithmen Hybride Algorithmen (Reference Counting Mark-Sweep) Mark-Sweep ist nur für Zyklen zuständig Mark-Sweep soll so wenig als möglich zum Einsatz kommen Dreiphasiges Verfahren: 1. Einfluss interner Pointer aufheben 2. Traversieren und Reference Counts wieder herstellen 3. Entfernen der nicht erreichbaren Zellen 11 2 Externer Knoten

12 Stefan Loidl, , Linss Algorithmus Lazy cyclic Reference Counting 1. Aufschieben durch Einsatz eines Control Sets 2. Einfach referenzierte Zellen werden sofort freigegeben 3. Sammeln potentiell freizugebender Zellen 4. Zustände in Form eines Farbschemas (hier: schwarz, grau, weiß, violett) Farbübergänge 1. weiß schwarz: Reservieren der Zelle, beim Collection cycle 2. schwarz violett: Löschen eines mehrfach ref. Pointers 3. violett schwarz: Update auf Zelle 4. violett, schwarz grau: markGrey Phase (1) 5. grau schwarz: scanBlack Phase (2) Vermeiden von Mehrfachreferenzen im Control Set

13 Stefan Loidl, , Linss Algorithmus Mark-Sweep Collection Cycle void markGrey(cell C){ if(colour(C) != grey){ colour(C) = grey; forall(Children T of C){ RC(T) = RC(T) - 1; markGrey(T); } void scan(cell C){ if(colour(C) == grey){ if(RC(C) > 0){ scanBlack(C); } else{ colour(C) = white; forall(Children T of C){ scan(T); } void scanBlack(cell C){ colour(C) = black; forall(Children T of C){ RC(T) = RC(T) + 1; if(colour(T) != black){ scanBlack(T); } void collectControlSet(){ cell C = ControlSet.getCell(); if(colour(C) == violet){ marGrey(C); scan(C); collectWhite(C); } else if(!ControlSet.empty()){ collectControlSet(); }

14 Stefan Loidl, , Linss Algorithmus B Wurzel A C D E B A C D E Phase 1: markGrey

15 Stefan Loidl, , Linss Algorithmus B Wurzel A C D E 1 1 D E Phase 3: collectWhite

16 Stefan Loidl, , Linss Algorithmus Control Set Strategien Bewirtschaftungsstrategie Teil Abarbeitungsstrategie Realisierungstechnik des Control Sets collectWhite Strategien Erfolgsrezept großteils einmalige Referenzierung Zyklen hinreichend klein violette Phase hält nicht allzu lange an

17 Stefan Loidl, , Linss Algorithmus Kombination mit gewichtetem RC Wenig Kommunikation- Garbagecollection in verteilten Systemen Synchronisation der Phasen notwendig Variabilität des Verfahrens wegen unterschiedlichen Synchronisationen noch größer 16 A B C A B C 8 8 Erzeugen des Pointers

18 Stefan Loidl, , Resümee Pro Einfach und verständlich Kann mit programmiertechnischer Freigabe vermischt werden Rechenaufwand verzahnt gut mit Nutzprogramm Contra Sehr anfällig wenn ein Fehler aufgetreten ist Selten bis nie in großen kommerziellen Systemen Zyklen in den Zellen bedeuten erhöhte Rechenzeit

19 Stefan Loidl, , Literatur [Bobrow80] Bobrow, D.: Managing Reentrant Structures Using Reference Counts. ACM TOPLAS 2(3): , 1980 [Jones92] Jones, R, Lins, R.: Cyclic weighted reference counting without delay. Computing Laboratory, The University of Kent at Canterbury. Technical Report [Jones96] Jones, R, Lins, R.: Garbage Collection: Algorithms for Automatic Dynamic Memory Management. John Wiley 1996 [Bacon01] Bacon, D., Attanasio, C., Loc, H, and Smith, S. Java without the Coffee Breaks: A Nonintrusive Multiprocessor Garbage Collector. PLDI'01, SIGPLAN Notices, 2001


Herunterladen ppt "Stefan Loidl, 0255886, Reference Counting II Freigeben zyklischer Zellstrukturen."

Ähnliche Präsentationen


Google-Anzeigen