320 likes | 475 Views
Terminierung und Deadlocks. Totale Korrektheit. Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim. Übersicht. Einleitung await – Statement Totale Korrektheit Deadlocks Terminierung. Einleitung . ● Warum ist Programmverifikation so wichtig?. Einleitung .
E N D
Terminierung und Deadlocks Totale Korrektheit Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim
Übersicht • Einleitung • await – Statement • Totale Korrektheit • Deadlocks • Terminierung 1/21
Einleitung ● Warum ist Programmverifikation so wichtig? 2/21
Einleitung ● Warum ist Programmverifikation so wichtig? – Zuverlässigkeit der Software – Erstellung der Dokumentation einfacher – Kompatibilität besser überprüfbar 2/21
Einleitung • 1969 Hoare axiomatische Methode für sequentielle Programme • 1976 Owicki und Gries erweiterten Hoare‘s Methode für parallele Programme 3/21
Einleitung • 1969 Hoare axiomatische Methode für sequentielle Programme • 1976 Owicki und Gries erweiterten Hoare‘s Methode für parallele Programme • Nicht nur partielle Korrektheit • Sondern auch die anderen Eigenschaften (z.B. Deadlockfreiheit, gegenseitiger Ausschluss) 3/21
await - Statement • Formal: await B then S end • await wird für die Synchronisation von Prozessen verwendet. • B true => S atomar (unteilbar) ausgeführt werden • B false => S blockiert und andere Komponenten können ausgeführt werden. 4/21
Totale Korrektheit • {p} S {q} heißt partiell korrekt, wenn jede terminierende Berechnung von S, die in einem p- Zustand startet, in einem q-Zustand terminiert. • {p} S {q} heißt total korrekt, wenn jede Berechnung von S, die in einem p-Zustand startet, terminiert und ihren Endzustand q erfüllt. 5/21
Totale Korrektheit Um totale Korrektheit von Parallelen Programmen zu zeigen, müssen wir 1. Deadlockfreiheit 2. Divergenzfreiheit beweisen. 6/21
Beispiel Beispielprogramm für Deadlock: x := 1; y := 2; await (x=2) then y := 1; // await (y=1) then x := 2; 7/21
Deadlock: • Def: Ein Programm S mit Beweisskizze {p} S {q} ist deadlockfrei, falls es keinen Zustand x gibt (der p erfüllt), von dem aus S in einen Deadlock geraten kann. 8/21
Deadlock • Def: Ein Programm S mit Beweisskizze {p} S {q} ist deadlockfrei, falls es keinen Zustand x gibt (der p erfüllt), von dem aus S in einen Deadlock geraten kann. d.h. Es liegt ein noch nicht terminiertes Programm/Teilprogramm vor, das keinen Schritt weiter ausführen kann. 8/21
Deadlock Methode von Owicki und Gries: • Zähle alle potentiellen Deadlocks auf. • Zeige, dass keiner dieser potentiellen Deadlocks eintreten kann. 9/21
Deadlock Methode von Owicki und Gries: • Zähle alle potentiellen Deadlocks auf. • Zeige, dass keiner dieser potentiellen Deadlocks eintreten kann. Wenn keiner der potentiellen Deadlocks eintreten kann, tritt somit kein echter Deadlock ein => Das Programm ist Deadlock-Frei 9/21
Deadlock Def: Sei ein paralleles Programm (i) heißt potenzieller Deadlock von S, falls die folgenden zwei Bedingungen erfüllt sind: - Für jedes i ist entweder eine await- Anweisung in oder die leere Anweisung E, für die Terminierung von steht. - Es gibt ein i, so dass eine await-Anweisung in ist. 10/21
Deadlock (ii) Gegeben seien interferenz-freie Standard Beweisskizzen i € {1,…,n} , für schwache totale Korrektheit. Zu jedem potentiellen Deadlock gibt es ein Tupel von Zusicherungen: • fallsawait B then S end, • falls 11/21
Deadlock (ii) Gegeben seien interferenz-freie Standard Beweisskizzen i € {1,…,n} , für schwache totale Korrektheit. Zu jedem potentiellen Deadlock gibt es ein Tupel von Zusicherungen: • fallsawait B then S end, • falls Keine potentiellen Deadlocks können eintreten. 11/21
Deadlock • Parallelismus mit Deadlock-Freiheit: (1) Die Standard-Beweisskizzen für schwache totale Korrektheit sind interferenzfrei. (2) Für jeden potentiellen Deadlock von erfüllt das zugehörige Tupel von Zusicherungen die Formel 12/21
Beispiel: {x=0} await x = 1 then skip end // x:=1 {x=1} 13/21
Beispiel: {x=0} await x = 1 then skip end // x:=1 {x=1} {x=0 x=1} await x=1 then skip end {x=1} und {x=0} x:=1 {x=1}. 13/21
Beispiel: {x=0} await x = 1 then skip end // x:=1 {x=1} {x=0 x=1} await x=1 then skip end {x=1} und {x=0} x:=1 {x=1}. Potentielle Deadlock: (await x=1 then skip end, E). 13/21
Beispiel: {x=0} await x = 1 then skip end // x:=1 {x=1} {x=0 x=1} await x=1 then skip end {x=1} und {x=0} x:=1 {x=1}. Potentielle Deadlock: (await x=1 then skip end, E). Als Zusicherung: ((x=0 x=1) x 1, x=1) 13/21
Divergenz • Eine Berechnung von S divergiert, falls sie unendlich ist. S kann von x aus divergieren, falls es eine unendliche Berechnung von S gibt, die in x startet. 14/21
Terminierung • Um die Terminierung für totale Korrektheit zu zeigen, reicht while - Schleife von partielle Korrektheit nicht aus. • Hierbei gilt die Nachbedingung allerdings nur, wenn die Schleife verlassen wird, wenn sie also terminiert. 15/21
Terminierung while-Schleife: 16/21
Terminierung while-Schleife: • Diese Schleifenregel ist korrekt für sequentielle Programme. • Aber Parallele Programme können gegenseitig beeinflussen. 16/21
Terminierung Zur zeigen: t nimmt auf jedem möglichen Pfad durch den Schleifenrumpf S abnimmt. 17/21
Terminierung Zur zeigen: t nimmt auf jedem möglichen Pfad durch den Schleifenrumpf S abnimmt. Unter einem Pfad versteht man eine möglicherweise leere Folge von normalen Wertzuweisung und atomaren Bereichen. 17/21
Terminierung • Neue Schleifenregel: 1) ist eine Standart-Beweisskizze, 2) für jede normale Wertzuweisung und jeden atomaren Bereich T in S, 3) für jeden Pfad gibt es eine normale Wertzuweisung oder einen atomaren Bereich T in mit 4) 18/23
Terminierung • Zusätzlich müssen wir Interferenzfreiheit für totale Korrektheit zeigen: Interferenzfreiheit für partielle Korrektheit + t nimmt nicht zu. 19/21
S1: while (x>0) do y := 0; if (y=0) x := x-1; else y := 0 od S2: while (x>0) do y := 1; if (y=1) x := x-1; else y := 1 od Beispiel 20/21
Zusammenfassung • totale Korrektheit = partielle Korrektheit + garantierte Terminierung. • Deadlockfreiheit und Divergenzfreiheit • Aber es gibt auch Programme, die nicht unbedingt terminiert werden müssen. 21/21