Dr. Welf Löwe und Markus Noga 1
Gliederung: Teil 3 - Anpassungen
1. Einführung– Motivation– Definition, – Konzepte für Komponenten (klassische, kommerzielle, akademische)
2. Industrielle Komponentensysteme der 1. Generation1. CORBA 2. Enterprise JavaBeans3. (D)COM
3. Anpassungen – Daten und Funktion– Interaktion
• Kommunikation• Synchronisation• Protokolle
– Lebendigkeit
Dr. Welf Löwe und Markus Noga 2
Problem
Komponenten zusammengesetzt
Komponentenprotokoll erzwungen– Guarded methods (Locks)– „Unerwartete“ Methoden werden blockiert
Nichts „Falsches“ passiert
Frage: passiert überhaupt etwas?
Lebendigkeit des Komponentensystems muss garantiert werden.
Dr. Welf Löwe und Markus Noga 3
Beispiel: Telecom-Channel
dial answer
talk
hang up
/ send voice data
signal quitring bell signal answer
Dr. Welf Löwe und Markus Noga 4
Komponentensystem
Caller
Channel
Callee
Dr. Welf Löwe und Markus Noga 5
Caller und Callee symetrisch
Caller
Channel
Callee
send
receivesend
receive
Schnittstellen Sender und Receiver
class Sender{sync dial(int n){
channel.dial(n);}sync answer(){
answered.signal();channel.answer();
}sync talk(VoiceData d){
answered.wait();channel.talk(d);answered.signal();
}sync hangUp(){
channel.hangUp();answered.init();
}}
class Receiver{sync ringBell();
sync signalAnswer() {answered.signal();
}
sync sendVoiveData(VoiceData d);
sync signalQuit() {answered.init();
}}
Dr. Welf Löwe und Markus Noga 7
Petri-Netze
Bipatiter Graph
Stellen- mit Verweis auf Transitionsknoten
Transitions- mit Verweis auf Stellenknoten
Situation:– Markierung der Stellen mit Marken
Lauf: – Übergangsfunktion: Situation Situation– Sind all Vorstellen einer Transition belegt, wird deren Markierung
gelöscht und die Nachstellen markiert– Schalten nichtdeterministisch aber fair
Petri-Nets
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial signal answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
dial answer hang upring bell talk send voice data signal quit
Dr. Welf Löwe und Markus Noga 19
Problem
Wie zeigt man, dass keiner dieser Läufe verklemmt? – garantiertes Schalten– kein Deadlock
Wie zeigt man, dass lediglich Teile des Netzes schalten?– alle Transitionen schalten irgendwann– kein Livelock
Randbedingung dabei– Simulation zeigt einen Lauf– Allgemein unendlich viele Läufe– Beweis durch Probe ausgeschlossen
dial answer hang upring bell talk signal quit
1 3 6
7
2 4
5
81
2 3
4
5 6
7
8 1110
9
9
Dr. Welf Löwe und Markus Noga 21
Transitionsmatrix C
t1 t2 t3 t4 t5 t6 t7 t8 t9s1 -1 1s2 -1 1s3 1 -1s4 1 -1s5 1 -1s6 1 -1s7 1 0 -1s8 1 1 -1s9 -1 1 -1
s10 1 -1s11 1 -1
Dr. Welf Löwe und Markus Noga 22
Transitionsinvariante
T-Invariante
Vektor entsprechend den Transitionen
Gibt Anzahl von Schaltungen an, die zur Ausgangssituation führt
Bestimmen durch Lösen von:
Cd=0
Dr. Welf Löwe und Markus Noga 23
Lösen von Cd=0
-1 1 d1-1 1 d21 -1 d31 -1 d4
1 -1 d51 -1 d61 0 -1 d7
1 1 -1 d8-1 1 -1 d9
1 -1 d101 -1 d11
= 0
d1=d2=d3=d4=d5=d7=d8=d9=d10=d11=1d6=2
Dr. Welf Löwe und Markus Noga 24
Lebendigkeitsbedingung
di sind verschieden von 0– jede Transition schaltet irgendwann– kein Livelock
Verklemmungsfreie Schaltfolge – aus der initialen Belegung– maximal exponentiell viele Folgen– kein Deadlock
Im Beispiel– t1 t2 t3 t4 t5 t6 t7 t8 t10 t11– jede Transition schaltet einmal
Dr. Welf Löwe und Markus Noga 25
Problem
Betrachtete Systeme sind endlich
Keine dynamische Erzeugung von Objekt
Im Beispiel– Ein Kanal – Beliebig viele potentielle Telefonierer
Schalten an Bedingungen geknüpft, die vom Programmzustand abhängen
Im Beispiel– Anschalten von BND Abhördienst bei „kritischen“ Dateninhalten
Lösung algebraische Petri-Netze
Dr. Welf Löwe und Markus Noga 26
Algebraische Petri-Netze
Idee:– Markiere Stellen mit Termen einer Termalgbra– Konstruiere Terme auf den Kanten– Rechne auf den Stellen entsprechend den Rechengesetzen der
Algebra
Interpretation:– Netz entspricht der Komponente– Term der Algebra entspricht Objekten der Komponente– Stelle und Term entspricht dem Zustand
Algebraic Petri-Nets
dial answer hang upring bell talk send voice data signal quit
Ni i
i i i ii i
ii
i i
i i
i i
i i
Algebraic Petri-Nets
dial answer hang upring bell talk send voice data signal quit
Ni i
i i i (i,d)i i
ii
i i
i i
(i,d) d
i i
ok(d)
Dr. Welf Löwe und Markus Noga 29
Transitionsinvariante
Voraussetzung Wohldefiniertheit– wie bei einfachen Netzen– zusätzlich „Sortenreinheit“: Stellen enthalten nur Terme einer
Algebra
T-Invariante, wenn keine Operationen auf den Kanten– Vektor entsprechend den Transitionen– Gibt Anzahl von Schaltungen an, die zur Ausgangssituation führt– Bestimmen durch Lösen von: Cd=0
Sonst– Beweis durch symbolisches Rechnen– i.a. unentscheidbar
Dr. Welf Löwe und Markus Noga 30
Alternative
Bislang – Deadlockvermeidung– Garantie, das System ist lebendig– Statisch sicher
Alternative– Deadlockerkennung– Erkenne zur Laufzeit, wenn Deadlock eingetreten ist– Dynamisch sicher
Nachteil– Laufzeitprobleme– Was tun, wenn Deadlock erkannt wurde
Dr. Welf Löwe und Markus Noga 31
Problembeschreibung
Abhängigkeitsgraph– Bipatiter Graph– Prozessknoten warten auf Locks– Locks sind von Prozessen aquiriert
Deadlocksituation– Zyklus im Abhängigkeitsgraph
Dr. Welf Löwe und Markus Noga 32
Beispiel
class ProcessOne extends Thread{
public void run(){l1.wait();l2.wait();
doSome();
l2.signal();l1.signal();
}}
class ProcessTwo extends Thread{
public void run(){l2.wait();l1.wait();
doSome();
l1.signal();l2.signal();
}}
Dr. Welf Löwe und Markus Noga 33
Abhängigkeitsgraph Beispiel - ok
ProcessOne
ProcessTwo
l1
l2
Dr. Welf Löwe und Markus Noga 34
Beispiel
class ProcessOne extends Thread{
public void run(){l1.wait();l2.wait();
doSome();
l2.signal();l1.signal();
}}
class ProcessTwo extends Thread{
public void run(){l2.wait();l1.wait();
doSome();
l1.signal();l2.signal();
}}
Dr. Welf Löwe und Markus Noga 35
Abhängigkeitsgraph Beispiel - deadlock
ProcessOne
ProcessTwo
l1
l2
Dr. Welf Löwe und Markus Noga 36
Klassifikation der Lösungsansätze
Timeout– Nach bestimmter Wartezeit stellt Prozess Erfolglosigkeit des
Wartens fest– Versuch wird mit Fehler abgebrochen– Keine Erkennung im eigentlichen Sinn
Zentrale Erkennung
Dezentrale Erkennung
Dr. Welf Löwe und Markus Noga 37
Zentrale Erkennung
Eine Komponente wird zentraler Deadlockerkenner
Alle Wartesituationen werden– aktiv der Zentrale gemeldet– zyklisch von der Zentrale abgefragt
Zentrale setzt den Abhängigkeitsgraphen zusammen
Stellt fest, ob er zyklisch ist
Löst Zyklus auf, indem ein Prozess mit Ausnahme terminiert, der damit sein Lock freigibt
Dr. Welf Löwe und Markus Noga 38
ProcessOne sendet Abhängigkeit
class ProcessOne extends Thread{
public void run(){l1.wait();l2.wait();
doSome();
l2.signal();l1.signal();
}}
class ProcessTwo extends Thread{
public void run(){l2.wait();l1.wait();
doSome();
l1.signal();l2.signal();
}}
Dr. Welf Löwe und Markus Noga 39
ProcessTwo sendet Abhängigkeit
class ProcessOne extends Thread{
public void run(){l1.wait();l2.wait();
doSome();
l2.signal();l1.signal();
}}
class ProcessTwo extends Thread{
public void run(){l2.wait();l1.wait();
doSome();
l1.signal();l2.signal();
}}
Dr. Welf Löwe und Markus Noga 40
Phantom deadlock
ProcessOne
ProcessTwo
l1
l2
Dr. Welf Löwe und Markus Noga 41
Auflösung
Theorie:– Mehrphasenprotokolle – dabei Locking des Programmlaufes– ineffizient
Praxis– Man lebt mit Fehlerhafter Erkennung– Nachprüfen des Ergebnissen eliminiert die meisten
Phantomdeadlocks
Dr. Welf Löwe und Markus Noga 42
Dezentrale Erkennung
Keine Zentrale Entscheidungsinstanz
Kein „Bottleneck“ in verteilten Anwendungen
Klassifikation– Pfadsende Algorithmen– Testnachrichten Algorithmen– Globale Zustandserkennung
Dr. Welf Löwe und Markus Noga 43
Pfadsende Algorithmen
Berechnen lokalen Teil des Abhängigkeitsgraphen
Mögliches Unwissen über andere Teile wird explizit in lokalen Graphen codiert– „External“ – Knoten im Graphen für aquirierte oder nachgefragte
Locks von Entfernten Komponenten
– Pfad: Ext P1 ... Pn Ext kann komprimiert werden
Löse lokale Konflikte lokal
Tausche Information über lokale Abhängigkeiten mit entfernten Komponenten aus
Dr. Welf Löwe und Markus Noga 44
Verteilter Abhängigkeitsgraph
ProcessOne
ProcessTwo
l1
l2
Ext Ext
l1 ProcessOne
ProcessTwo
Dr. Welf Löwe und Markus Noga 45
Abgeglichener Abhängigkeitsgraph
ProcessOne
ProcessTwo
l1
l2
ProcessOne
ProcessTwo
l1
l2
Ext Ext
Dr. Welf Löwe und Markus Noga 46
Bewertung
Vorteile– Verteilter Algorithmus – kein Bottleneck
Nachteil– Viel Verkehr– Phantomdeadlocks möglich
Dr. Welf Löwe und Markus Noga 47
Testnachrichten
Kein expliziter Abhängigkeitsgraph
Spezielle Nachrichten– Blockiert ein Prozess wird eine Nachricht gesendet– Erkennen von Deadlocks anhand der Nachrichten, die den Prozess
erreichen
Unterscheidung bezüglich Nachrichtenempfänger– Echobasiert – Senden an alle Nachbarn– Ahängigkeitsbasiert – Senden an den Halter des Locks auf den wir
warten
Dr. Welf Löwe und Markus Noga 48
Echobasierte Testnachrichten
Echo Algorithmus:– Initial: sende Echo (mit eindeutiger Id) an alle Nachbarn, – Empfang von Echo Nachricht:
• sende an alle Nachbarn, außer an den Sender
• ignoriere weitere Echo Nachrichten mit gleicher Id
• wenn kein entsprechender Nachbar mehr vorhanden, sende Echo Antwort an Sender
– Empfang von Echo Antwort: sende Echo Antwort an Sender der Echo Nachricht
Idee: Deadlockinfo aus Echoantwort
Overkill! Nur sinnvoll, wenn Echo aus anderen Gründen sowieso implementiert ist (z.B. zur Hardwarekontrolle)
Dr. Welf Löwe und Markus Noga 49
Abhängigkeitsbasierte Testnachrichten
Kein expliziter Abhängigkeitsgraph
Spezielle Nachrichten– Blockiert ein Prozess wird eine Nachricht an den Halter des Locks
gesendet– Ist der auch blockiert, leitet er die Nachricht weiter an die Halter der
Locks auf die er wartet etc.– Kommt die initiierte Nachricht zum Sender zurück ist ein Zyklus
erkannt
Erkennen von Phantomdeadlocks möglich– Ignoriere Nachrichten über nicht (mehr) aquirierte Locks– Weitersenden nur beim Blockieren und Halten der Locks
Dr. Welf Löwe und Markus Noga 50
ProcessOne sendet Abhängigkeit
class ProcessOne extends Thread{
public void run(){l1.wait();l2.wait();
//ProcessTwo.probe(l2);
doSome();
l2.signal();l1.signal();
}}
class ProcessTwo extends Thread{
public void run(){l2.wait();l1.wait();
//ProcessOne.probe(l1);
doSome();
l1.signal();l2.signal();
}}
Dr. Welf Löwe und Markus Noga 51
ProcessTwo sendet Abhängigkeit
class ProcessOne extends Thread{
public void run(){l1.wait();l2.wait();
//ProcessTwo.probe(l2);
doSome();
l2.signal();l1.signal();
}}
class ProcessTwo extends Thread{
public void run(){l2.wait();l1.wait();
//ProcessOne.probe(l1);
doSome();
l1.signal();l2.signal();
}}
Dr. Welf Löwe und Markus Noga 52
Phantom deadlock
ProcessOne
ProcessTwo
l1
l2
probe(l1)
probe(l2)
Dr. Welf Löwe und Markus Noga 53
ProcessOne sendet Abhängigkeit
class ProcessOne extends Thread{
public void run(){l1.wait();l2.wait();
//ProcessTwo.probe(l2);
doSome();
l2.signal();l1.signal();
}}
class ProcessTwo extends Thread{
public void run(){l2.wait();l1.wait();
//ProcessOne.probe(l1);
doSome();
l1.signal();l2.signal();
}}
Dr. Welf Löwe und Markus Noga 54
Abhängigkeitsgraph Beispiel - deadlock
ProcessOne
ProcessTwo
l1
l2
probe(l1)
probe(l2)
resendProbe(l1)
resendProbe(l2)
Dr. Welf Löwe und Markus Noga 55
Bewertung
Vorteile– Verteilter Algorithmus – kein Bottleneck– keine Phantomdeadlocks– kein expliziter Aufbau des Abhängigkeitsgraphen
Nachteil– Viel Verkehr– Phantomdeadlocks bei alternativen Locks
• warten auf Lock1 oder Lock2
• dann effizient beim Erkennen dieser
Dr. Welf Löwe und Markus Noga 56
Globale Zustandserkennung
Idee:– konstruiere ein konsistentes Bild des verteilten Systemzustandes
(Abhängigkeitsgraph)– Erkenne Zyklen auf diesem konsistenten Abhängigkeitsgraphen
Lösungen– Mehrere Phasen (Runden) oder Indirektionen– Locking oder Markierung der Nachrichten mit Phasen Ids
Ein Vertreter– Lockverwaltung
Dr. Welf Löwe und Markus Noga 57
Lockverwaltung
Jedes Objekt ist durch einen Lock (oder mehrere) geschützt
Aquirierung über Objekte
Abgabe der Kontrolle der Locks eines Objekts an das aquirierende Objekt
Aquisitionsbaum
Anfragen immer über Wurzel des Aquisitionsbaum
Dadurch relevanter Teil des Abhängigkeitsgraphen
Dr. Welf Löwe und Markus Noga 58
Beispiel
aquire lock
give upcontrol
Dr. Welf Löwe und Markus Noga 59
Deadlock Situation
Dr. Welf Löwe und Markus Noga 60
Anfrage über Lockverwalter
Dr. Welf Löwe und Markus Noga 61
Bewertung
Vorteile– Verteilter Algorithmus – kein Bottleneck– keine Pantomdeadlocks
Nachteil– Viel Verkehr– Viel Verwaltung
Dr. Welf Löwe und Markus Noga 62
Fazit
Deadlockvermeidung ist besser als Deadlockerkennung
Deadlockvermeidung– Spezifikation der Komponenten– u.U. Handbeweise vom Komponentenzusammensetzer
Deadlockerkennung– Laufzeitprobleme– u.U. Phantomdeadlocks– Was tun, wenn Deadlock erkannt wurde?
• Kann nicht geraten werden
• Spezifikation (Exceptionprogrammierung) durch Komponentenentwererfer