Prinzipien, Modelle & Algorithmen der Nebenl¨aufigen Programmierung Wintersemester 2020/21
Das Mutual-Exclusion-Problem bei n Prozessen
Prof. Dr. David Sabel
LFE Theoretische Informatik
Letzte ¨Anderung der Folien: 30. Dezember 2020
Ubersicht: Algorithmen f¨ ¨ ur n Prozesse
1 Tournament-Algorithmen
2 Lamports Algorithmus
3 Bakery-Algorithmus
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 2/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Mutual-Exclusion f¨ ur n Prozesse
Gesucht: Algorithmen die f¨ ur n Prozesse funktionieren.
Annahme: n ist bekannt und bleibt konstant.
Einfache Idee:
Benutze die Algorithmen f¨ ur 2 Prozesse “Baum-artig”
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 3/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=d.c.
wantl=×| wantr=×|
Level 3
Level 2
wantl=×turn=d.c.| wantr=×|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=d.c.| wantr=×turn=d.c.
wantl=×| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=d.c.
wantl=×| wantr=×|
Level 3
Level 2
wantl=×turn=d.c.| wantr=×|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=d.c.| wantr=×turn=d.c.
wantl=×| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=d.c.
wantl=×| wantr=×|
Level 3
Level 2
wantl=×turn=d.c.| wantr=×|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=d.c.
wantl=×| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=d.c.
wantl=×| wantr=×|
Level 3
Level 2
wantl=Xturn=1| wantr=×|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=d.c.
wantl=×| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=d.c.
wantl=×| wantr=×|
Level 3
Level 2
wantl=Xturn=1| wantr=×|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=d.c.
wantl=×| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=d.c.
wantl=×| wantr=×|
Level 3
Level 2
wantl=Xturn=1| wantr=×|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=d.c.
wantl=×| wantr=×|
Level 3
Level 2
wantl=X|turn=2| wantr=Xturn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=1 wantl=X| wantr=×|
Level 3
Level 2
wantl=X|turn=2| wantr=Xturn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.) Kritischer Abschnitt P2 im Kritischen Abschnitt
turn=1 wantl=X| wantr=×|
Level 3
Level 2
wantl=X|turn=2| wantr=Xturn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=1 wantl=×| wantr=×|
Level 3
Level 2
wantl=X|turn=2| wantr=Xturn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=1 wantl=×| wantr=×|
Level 3
Level 2
wantl=×turn=2| wantr=X|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=Xturn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=1 wantl=×| wantr=×|
Level 3
Level 2
wantl=×turn=2| wantr=X|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=×turn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Idee des Tournament-Algorithmus (basierend auf Peterson-Alg.)
Kritischer Abschnitt
turn=1 wantl=×| wantr=×|
Level 3
Level 2
wantl=×turn=2| wantr=X|turn=d.c.
wantl=×|| wantr=×
Level 1
wantl=×|turn=2| wantr=×turn=1 wantl=X| wantr=×|
turn=d.c.
wantl=×|| wantr=×
turn=d.c.
wantl=×| wantr=×|
Prozess 1 2 3 4 5 6 7 8
turn: 2 = linkes Kind darf durch, 1 = rechtes Kind darf durch wantl =wantdes linken Kindes, wantr =wantdes rechten Kindes
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 4/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Eigenschaften der Tournament-Algorithmen
Einfach zu implementieren
Wechselseitiger Ausschluss, Deadlock-Freiheit und Starvation-Freiheit, wenn Algorithmus f¨ ur 2 Prozesse diese Eigenschaften hat.
Nachteil: dlog
2ne-maliges Ausf¨ uhren des Initialisierungs- und Ausgangscodes Auch dann, wenn nur ein einzelner Prozess in den kritischen Abschnitt will!
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 5/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus
Leslie Lamport (US-amerikanischer Informatiker, Turing Award 2013) Algorithmus ver¨ offentlicht 1987
Schneller Algorithmus f¨ ur N Prozesse
schnell = Wenn nur ein Prozess in den kritischen Abschnitt will, dann nur konstante Laufzeit
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 6/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus: Programm des i. Prozesses
Initial:y=0, f¨uri= 1, . . . , n:want[i]=False, Wert vonxegal loop forever
(1) restlicher Code (2) want[i] := True;
(3) x:=i;
(4) ify6= 0then (5) want[i] := False;
(6) awaity= 0;
(7) goto(2);
(8) y:=i;
(9) ifx6=ithen (10) want[i] := False;
(11) forj:=1tondo await¬want[j];
(12) ify6=ithen
(13) awaity= 0;
(14) goto(2);
(15) Kritischer Abschnitt (16) y:= 0;
(17) want[i] := False;
end loop
(2), (3) setze want[i]=True undx=i
(4)y6=0? schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0, dann Neustart
(8) setzey=i
(9)x6=i? noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 7/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus: Programm des i. Prozesses
Initial:y=0, f¨uri= 1, . . . , n:want[i]=False, Wert vonxegal loop forever
(1) restlicher Code (2) want[i] := True;
(3) x:=i;
(4) ify6= 0then (5) want[i] := False;
(6) awaity= 0;
(7) goto(2);
(8) y:=i;
(9) ifx6=ithen (10) want[i] := False;
(11) forj:=1tondo await¬want[j];
(12) ify6=ithen
(13) awaity= 0;
(14) goto(2);
(15) Kritischer Abschnitt (16) y:= 0;
(17) want[i] := False;
end loop
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0, dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 7/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus: Programm des i. Prozesses
Initial:y=0, f¨uri= 1, . . . , n:want[i]=False, Wert vonxegal loop forever
(1) restlicher Code (2) want[i] := True;
(3) x:=i;
(4) ify6= 0then (5) want[i] := False;
(6) awaity= 0;
(7) goto(2);
(8) y:=i;
(9) ifx6=ithen (10) want[i] := False;
(11) forj:=1tondo await¬want[j];
(12) ify6=ithen
(13) awaity= 0;
(14) goto(2);
(15) Kritischer Abschnitt (16) y:= 0;
(17) want[i] := False;
end loop
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0, dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
α β
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 7/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Zwei M¨ oglichkeiten, den
Kritischen Abschnitt zu
erreichen!
Lamports Algorithmus: Einfache Eigenschaften
Satz
F¨ ur Lamports Algorithmus gilt:
Wenn ein einzelner Prozess in den Kritischen Abschnitt m¨ ochte, dann f¨ uhrt er nur konstant viele Operationen durch.
Lamports Algorithmus ist nicht Starvation frei.
Beweis: Folgt direkt aus dem Algorithmus / Flussdiagramm.
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 8/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (1)
Satz
Lamports Algorithmus garantiert wechselseitigen Ausschluss.
Beweis durch Widerspruch:
Annahme: Prozess i und Prozess j sind gleichzeitig im kritischen Abschnitt, wobei i zuerst im kritischen Abschnitt war.
Fallunterscheidung:
Prozess i erreicht den kritischen Abschnitt entlang Pfad α.
Prozess i erreicht den kritischen Abschnitt entlang Pfad β.
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 9/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (2)
Fall 1: 2 Prozesse betreten den kritischen Abschnitt, erster entlang α:
i: erster Prozess (entlangα)
j: zweiter Prozess (entlangαoderβ)
Wennidurch (9) l¨auft gilt:
x=iundy6= 0.
Impliziert:
(1)jnoch nicht durch (3), oder (2)jdurch (3) bevoridurch (3) Fall (1): Dajvor (4):
–jwird in (5)-(7) geschickt – und wartet bisy= 0, D.h.jkann nicht mehr in KA Fall (2): Wennjdurch (9), giltx6=j. D.h. kein Eingang entlangα.
Entlangβ: an derfor-Schleife wirdjwarten bis want[i]=False gilt (geht erst nachdemiKA verl¨asst)
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 10/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (2)
Fall 1: 2 Prozesse betreten den kritischen Abschnitt, erster entlang α:
i: erster Prozess (entlangα)
j: zweiter Prozess (entlangαoderβ) Wennidurch (9) l¨auft gilt:
x=iundy6= 0.
Impliziert:
(1)jnoch nicht durch (3), oder (2)jdurch (3) bevoridurch (3) Fall (1): Dajvor (4):
–jwird in (5)-(7) geschickt – und wartet bisy= 0, D.h.jkann nicht mehr in KA Fall (2): Wennjdurch (9), giltx6=j. D.h. kein Eingang entlangα.
Entlangβ: an derfor-Schleife wirdjwarten bis want[i]=False gilt (geht erst nachdemiKA verl¨asst)
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 10/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (2)
Fall 1: 2 Prozesse betreten den kritischen Abschnitt, erster entlang α:
i: erster Prozess (entlangα)
j: zweiter Prozess (entlangαoderβ) Wennidurch (9) l¨auft gilt:
x=iundy6= 0.
Impliziert:
(1)jnoch nicht durch (3), oder (2)jdurch (3) bevoridurch (3)
Fall (1): Dajvor (4): –jwird in (5)-(7) geschickt – und wartet bisy= 0, D.h.jkann nicht mehr in KA Fall (2): Wennjdurch (9), giltx6=j. D.h. kein Eingang entlangα.
Entlangβ: an derfor-Schleife wirdjwarten bis want[i]=False gilt (geht erst nachdemiKA verl¨asst)
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 10/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (2)
Fall 1: 2 Prozesse betreten den kritischen Abschnitt, erster entlang α:
i: erster Prozess (entlangα)
j: zweiter Prozess (entlangαoderβ) Wennidurch (9) l¨auft gilt:
x=iundy6= 0.
Impliziert:
(1)jnoch nicht durch (3), oder (2)jdurch (3) bevoridurch (3) Fall (1): Dajvor (4):
–jwird in (5)-(7) geschickt – und wartet bisy= 0, D.h.jkann nicht mehr in KA
Fall (2): Wennjdurch (9), giltx6=j. D.h. kein Eingang entlangα.
Entlangβ: an derfor-Schleife wirdjwarten bis want[i]=False gilt (geht erst nachdemiKA verl¨asst)
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 10/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (2)
Fall 1: 2 Prozesse betreten den kritischen Abschnitt, erster entlang α:
i: erster Prozess (entlangα)
j: zweiter Prozess (entlangαoderβ) Wennidurch (9) l¨auft gilt:
x=iundy6= 0.
Impliziert:
(1)jnoch nicht durch (3), oder (2)jdurch (3) bevoridurch (3) Fall (1): Dajvor (4):
–jwird in (5)-(7) geschickt – und wartet bisy= 0, D.h.jkann nicht mehr in KA Fall (2): Wennjdurch (9), giltx6=j.
D.h. kein Eingang entlangα.
Entlangβ: an derfor-Schleife wirdjwarten bis want[i]=False gilt (geht erst nachdemiKA verl¨asst)
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 10/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (2)
Fall 1: 2 Prozesse betreten den kritischen Abschnitt, erster entlang α:
i: erster Prozess (entlangα)
j: zweiter Prozess (entlangαoderβ) Wennidurch (9) l¨auft gilt:
x=iundy6= 0.
Impliziert:
(1)jnoch nicht durch (3), oder (2)jdurch (3) bevoridurch (3) Fall (1): Dajvor (4):
–jwird in (5)-(7) geschickt – und wartet bisy= 0, D.h.jkann nicht mehr in KA Fall (2): Wennjdurch (9), giltx6=j.
D.h. kein Eingang entlangα.
Entlangβ: an derfor-Schleife wirdjwarten bis want[i]=False gilt (geht erst nachdemiKA verl¨asst)
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 10/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Unm¨ oglich!
Lamports Algorithmus garantiert Mutual-Exclusion (3)
Fall 2: 2 Prozesse betreten den kritischen Abschnitt, erster entlang β:
i: erster Prozess (entlangβ)
j: zweiter Prozess (entlangαoderβ)
Wennidie for-Schleife durchlaufen hat:
ykann erst ver¨andert werden nachdemiKA verl¨asst:
ihatte darauf gewartet, dass alle want-Eintr¨age falsch sind: Jeder andere Prozess liest entwedery6= 0in (4) und bleibt am await in (6) h¨angen, oder (wenn er y=0 gelesen hatte) setzt er seinen want-Eintrag erst auf False, nachdemerybeschrieben hat.
Deshalb: jkannynicht ver¨andern, undy=igilt, bisiKA verl¨asst
D.h.jnicht entlangβ.
jnicht entlangα: Day=iundykann nicht ge¨andert werden: Alle andere Prozesse werden bei Zeile (4) zum Warten gelenkt.
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 11/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (3)
Fall 2: 2 Prozesse betreten den kritischen Abschnitt, erster entlang β:
i: erster Prozess (entlangβ)
j: zweiter Prozess (entlangαoderβ) Wennidie for-Schleife durchlaufen hat:
ykann erst ver¨andert werden nachdemiKA verl¨asst:
ihatte darauf gewartet, dass alle want-Eintr¨age falsch sind: Jeder andere Prozess liest entwedery6= 0in (4) und bleibt am await in (6) h¨angen, oder (wenn er y=0 gelesen hatte) setzt er seinen want-Eintrag erst auf False, nachdemerybeschrieben hat.
Deshalb: jkannynicht ver¨andern, undy=igilt, bisiKA verl¨asst
D.h.jnicht entlangβ.
jnicht entlangα: Day=iundykann nicht ge¨andert werden: Alle andere Prozesse werden bei Zeile (4) zum Warten gelenkt.
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 11/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (3)
Fall 2: 2 Prozesse betreten den kritischen Abschnitt, erster entlang β:
i: erster Prozess (entlangβ)
j: zweiter Prozess (entlangαoderβ) Wennidie for-Schleife durchlaufen hat:
ykann erst ver¨andert werden nachdemiKA verl¨asst:
ihatte darauf gewartet, dass alle want-Eintr¨age falsch sind: Jeder andere Prozess liest entwedery6= 0in (4) und bleibt am await in (6) h¨angen, oder (wenn er y=0 gelesen hatte) setzt er seinen want-Eintrag erst auf False, nachdemerybeschrieben hat.
Deshalb:j kannynicht ver¨andern, undy=igilt, bisiKA verl¨asst
D.h.jnicht entlangβ.
jnicht entlangα: Day=iundykann nicht ge¨andert werden: Alle andere Prozesse werden bei Zeile (4) zum Warten gelenkt.
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 11/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (3)
Fall 2: 2 Prozesse betreten den kritischen Abschnitt, erster entlang β:
i: erster Prozess (entlangβ)
j: zweiter Prozess (entlangαoderβ) Wennidie for-Schleife durchlaufen hat:
ykann erst ver¨andert werden nachdemiKA verl¨asst:
ihatte darauf gewartet, dass alle want-Eintr¨age falsch sind: Jeder andere Prozess liest entwedery6= 0in (4) und bleibt am await in (6) h¨angen, oder (wenn er y=0 gelesen hatte) setzt er seinen want-Eintrag erst auf False, nachdemerybeschrieben hat.
Deshalb:j kannynicht ver¨andern, undy=igilt, bisiKA verl¨asst
D.h.jnicht entlangβ.
jnicht entlangα: Day=iundykann nicht ge¨andert werden: Alle andere Prozesse werden bei Zeile (4) zum Warten gelenkt.
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 11/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus garantiert Mutual-Exclusion (3)
Fall 2: 2 Prozesse betreten den kritischen Abschnitt, erster entlang β:
i: erster Prozess (entlangβ)
j: zweiter Prozess (entlangαoderβ) Wennidie for-Schleife durchlaufen hat:
ykann erst ver¨andert werden nachdemiKA verl¨asst:
ihatte darauf gewartet, dass alle want-Eintr¨age falsch sind: Jeder andere Prozess liest entwedery6= 0in (4) und bleibt am await in (6) h¨angen, oder (wenn er y=0 gelesen hatte) setzt er seinen want-Eintrag erst auf False, nachdemerybeschrieben hat.
Deshalb:j kannynicht ver¨andern, undy=igilt, bisiKA verl¨asst
D.h.jnicht entlangβ.
jnicht entlangα: Day=iundykann nicht ge¨andert werden: Alle andere Prozesse werden bei Zeile (4) zum Warten gelenkt.
(2), (3) setze want[i]=True undx=i
(4)y6=0?
schon ein anderer Prozess
zwischen (9)-(15)?
(5)-(7) gib Versuch auf, warte auf y=0,
dann Neustart
(8) setzey=i
(9)x6=i?
noch ein anderer Prozess
(nach mir) durch (3)?
(10),(11) Warte, dass keiner mehry
setzen kann
(15) Kritischer Abschnitt
(12) War ich der letzte dery
gesetzt hat?
(13), (14) Warte, dass
kritischer Abschnitt verlassen wird, dann Neustart (16),(17) setze y=0, want[i]=False
Nein Ja
Nein Ja
Ja
Nein
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 11/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Unm¨ oglich!
Lamports Algorithmus ist Deadlock-frei (1)
Satz
Lamports Algorithmus ist Deadlock-frei.
Beweis: N¨ achste Folien.
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 12/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus ist Deadlock-frei (2)
loop forever (1) restlicher Code (2) want[i] := True;
(3) x:=i;
(4) ify6= 0then (5) want[i] := False;
(6) awaity= 0;
(7) goto(2);
(8) y:=i;
(9) ifx6=ithen (10) want[i] := False;
(11) forj:=1tondo await¬want[j];
(12) ify6=ithen
(13) awaity= 0;
(14) goto(2);
(15) Kritischer Abschnitt (16) y:= 0;
(17) want[i] := False;
end loop
SeiP = (i1, j1),(i2, j2), . . .eine Berechnungsequenz, wobei ik: Nummer des Prozesses, der einen Schritt macht jk: Programmzeile, die Prozessik ausf¨uhrt
Zu jedem(ik, jk)gibt es einen festen Zustand (Variablenbelegung + Codezeiger der Prozesse)
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 13/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus ist Deadlock-frei (3)
loop forever (1) restlicher Code (2) want[i] := True;
(3) x:=i;
(4) ify6= 0then (5) want[i] := False;
(6) awaity= 0;
(7) goto(2);
(8) y:=i;
(9) ifx6=ithen (10) want[i] := False;
(11) forj:=1tondo await¬want[j];
(12) ify6=ithen
(13) awaity= 0;
(14) goto(2);
(15) Kritischer Abschnitt (16) y:= 0;
(17) want[i] := False;
end loop
Nehme an:P widerlegt die Deadlock-Freiheit
D.h. es gibt einen Schritt nach dem kein Prozess mehr den kritischen Abschnitt erreicht: ⇒Es gibtk sodass f¨ur alle k0≥k:jk0 6= 15.
Aber mindestens einer will in den kritischen Abschnitt (ist im Initialisierungscode):
⇒Es gibtl≥k0 so dassjl∈ {2, . . . ,14}
Nach weiteren Schritten kann kein anderer Prozess mehr im Abschlusscode sein:
⇒Es gibtk2≥l, so dass f¨ur allek20 ≥kgilt:
jk0
2 ∈ {1−14}
Nach weiteren Schritten muss irgendein Prozessy setzen und danach kann keiner y auf 0 setzen:
⇒Es gibtk3≥k2, so dassy6= 0f¨ur alle Zust¨ande abk3
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 14/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Lamports Algorithmus ist Deadlock-frei (4)
loop forever (1) restlicher Code (2) want[i] := True;
(3) x:=i;
(4) ify6= 0then (5) want[i] := False;
(6) awaity= 0;
(7) goto(2);
(8) y:=i;
(9) ifx6=ithen (10) want[i] := False;
(11) forj:=1tondo await¬want[j];
(12) ify6=ithen
(13) awaity= 0;
(14) goto(2);
(15) Kritischer Abschnitt (16) y:= 0;
(17) want[i] := False;
end loop
F¨ur alle Schritte nachk3 gilt:
Wenn Prozessinicht Zeile 8 als n¨achstes ausf¨uhren will, dann wird Prozessinie Zeile8ausf¨uhren.
(Day6= 0wird er am await h¨angen bleiben).
Nachdem alle Prozesse, die noch Zeile8ausf¨uhren k¨onnen, dies getan haben,
wird also kein weiterer mehryumsetzen k¨onnen.
Seim≥k3, wobei Schritt(im,8)das letzte Mal ist, dass Zeile 8 ausgef¨uhrt wird.
Dann gilt danach: Alle Prozesse ungleichim werden ihren want-Eintrag nach endlichen vielen Schritten auf False setzen undyverbleibt aufim.
D.h. Prozessimkann an keinem await h¨angen bleiben und muss somit den kritischen Abschnitt erreichen.
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 15/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Eigenschaften von Lamports Algorithmus
Zusammenfassend:
Erf¨ ullt wechselseitigen Ausschluss Erf¨ ullt Deadlock-Freiheit
Konstante Anzahl an Operationen, wenn nur ein Prozess den kritischen Abschnitt betreten m¨ ochte
Erf¨ ullt keine Starvation-Freiheit
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 16/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bounded Waiting
R¨ uckblick:
Starvation-Freiheit: Wenn ein Prozess seinen kritischen Abschnitt betreten m¨ ochte, dann muss er ihn nach endlich vielen Berechnungsschritten betreten.
Sagt nichts dar¨ uber aus, wie lange eine Prozess warten muss
Wartender Prozess: Prozess wartet aktiv solange, bis ein anderer Prozess das Warten beendet
Beispiel: Warten an einem await, bis anderer Prozess Wert ¨ andert, sodass Bedingung war wird.
Aufteilung des Initialisierungscode in: Doorway und Waiting
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 17/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bounded Waiting (2)
Restlicher Code
Doorway
Initialisierungscode Waiting
Kritischer Abschnitt
Ausgangscode
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 18/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bounded Waiting (3)
Definition
Ein Mutual-Exclusion-Algorithmus erf¨ ullt
r-bounded waiting, wenn f¨ ur jeden Prozess i gilt: Wenn Prozess i den Doorway verl¨ asst, bevor Prozess j (mit j 6= i) den Doorway betritt, dann betritt Prozess j den kritischen Abschnitt h¨ ochstens r Mal, bevor Prozess i den kritischen Abschnitt betritt.
bounded waiting, wenn es ein r ∈ IN gibt, so dass der Algorithmus r-bounded waiting erf¨ ullt.
die FIFO-Eigenschaft, wenn er 0-bounded waiting erf¨ ullt. (FIFO = first-in-first-out)
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 19/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bemerkungen
Bounded Waiting impliziert nicht Deadlock-Freiheit!
Lamports Algorithmus erf¨ ullt kein Bounded-Waiting!
FIFO-Eigenschaft informell: Erster Prozess, der den Doorway ¨ uberschritten hat ist als erster im kritischen Abschnitt
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 20/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bakery-Algorithmus
Erf¨ ullt die FIFO-Eigenschaft (0-bounded waiting) Idee des Algorithmus:
Im Doorway
” zieht“ Prozess eine Nummer, die gr¨ oßer ist als jede andere vergebene Nummer
Prozess mit kleinster Nummer darf in den KA.
Verfahren wurde wohl in B¨ ackereien benutzt (daher der Name)
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 21/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bakery-Algorithmus: Einfache Variante
Initial: f¨ ur i = 1, . . . n number[i]=0 Programm des i. Prozesses
loop forever (1) restlicher Code
(2) number[i] := 1+max (number);
(3) for j:=1 to n do
(4) await number[j]=0 or (number[j],j) ≥
lex(number[i],i) (5) Kritischer Abschnitt
(6) number[i]=0 end loop
Doorway, Waiting
≥
lex= lexikographische Ordnung
Annahme: Maximum-Berechnung und Zuweisung atomar
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 22/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bakery-Algorithmus: Einfache Variante
Initial: f¨ ur i = 1, . . . n number[i]=0 Programm des i. Prozesses
loop forever (1) restlicher Code
(2) number[i] := 1+max (number);
(3) for j:=1 to n do
(4) await number[j]=0 or (number[j],j) ≥
lex(number[i],i) (5) Kritischer Abschnitt
(6) number[i]=0 end loop
Doorway, Waiting
≥
lex= lexikographische Ordnung
Annahme: Maximum-Berechnung und Zuweisung atomar
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 22/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bakery-Algorithmus: Einfache Variante
Initial: f¨ ur i = 1, . . . n number[i]=0 Programm des i. Prozesses
loop forever (1) restlicher Code
(2) number[i] := 1+max (number);
(3) for j:=1 to n do
(4) await number[j]=0 or (number[j],j) ≥
lex(number[i],i) (5) Kritischer Abschnitt
(6) number[i]=0 end loop
Doorway, Waiting
≥
lex= lexikographische Ordnung
Annahme: Maximum-Berechnung und Zuweisung atomar
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 22/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus
Bakery-Algorithmus: Einfache Variante
Initial: f¨ ur i = 1, . . . n number[i]=0 Programm des i. Prozesses
loop forever (1) restlicher Code
(2) number[i] := 1+max (number);
(3) for j:=1 to n do
(4) await number[j]=0 or (number[j],j) ≥
lex(number[i],i) (5) Kritischer Abschnitt
(6) number[i]=0 end loop
Doorway, Waiting
≥
lex= lexikographische Ordnung
Annahme: Maximum-Berechnung und Zuweisungatomar
TCS | 04 Mutual-Exclusion beinProzessen | WS 2020/21 22/37 Tournament-Algorithmen Lamports Algorithmus Bakery-Algorithmus