Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Modul: B-BS Betriebssysteme WS 2012/13 Prof. Dr. Rüdiger Brause Adaptive Systemarchitektur Institut für Informatik Fachbereich Informatik und Mathematik.

Ähnliche Präsentationen


Präsentation zum Thema: "Modul: B-BS Betriebssysteme WS 2012/13 Prof. Dr. Rüdiger Brause Adaptive Systemarchitektur Institut für Informatik Fachbereich Informatik und Mathematik."—  Präsentation transkript:

1

2 Modul: B-BS Betriebssysteme WS 2012/13 Prof. Dr. Rüdiger Brause Adaptive Systemarchitektur Institut für Informatik Fachbereich Informatik und Mathematik (12) Prozess- synchronisation

3 Folie 2 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozesskommunikation Race Conditions, Semaphore Anwendungen Verklemmungen

4 Folie 3 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Race conditions Beispiel: Kontoführung Paralleler Zugriff auf globale Variable C Parallele Prozesse von vielen Benutzern arbeiten gleichzeitig auf den Daten. Falls gleichzeitig zwei Benutzer auf das gleiche Konto einzahlen möchten, so kann es sein, dass der Kontostand hinterher nicht stimmt. Ein solcher Fehler wird von keinem Kunden toleriert! Zeit 15:00 Uhr Konto C= :01 A := read(C) A := A A write(C) 15:04 15:03 15:02 B := read(C) B := B -100 B write(C) Konto C = einzahlen 100 abheben Eine Fehlbuchung tritt nur auf, wenn Prozess den Prozess überholt (race condition)

5 Folie 4 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Race conditions Situation: Warteschlangeneintrag eines PCB Einhängen A Aushängen B (1) Lesen des Ankers: PointToB(1) Lesen des Ankers: PointToB (2) Setzen des NextZeigers:=PointToB(2) Lesen des NextZeigers:PointToC (3) Setzen des Ankers:=PointToA(3) Setzen des Ankers:=PointToC Problem: (Race conditions: kontextbedingt, nicht-wiederholbare Effekte durch überholende Prozesse) a) Unterbrechung beim Aushängen von B durch Einhängen von A Prozeß A ist weg! b) Unterbrechung beim Einhängen von A durch Aushängen von B Prozeß B bleibt erhalten!

6 Folie 5 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Synchronisation: Forderungen 1.Zwei Prozesse dürfen nicht gleichzeitig in ihren kritischen Abschnitten sein (mutual exclusion). 2.Jeder Prozeß, der am Eingang eines kritischen Abschnitts wartet, muß irgendwann den Abschnitt auch betreten dürfen: kein ewiges Warten darf möglich sein (fairness condition). 3.Ein Prozeß darf außerhalb eines kritischen Abschnitts einen anderen Prozeß nicht blockieren. 4.Es dürfen keine Annahmen über die Abarbeitungsge- schwindigkeit oder Anzahl der Prozesse bzw. Prozessoren gemacht werden. (Dijkstra 1965)

7 Folie 6 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Synchronisierung: erster Versuch Naiver Ansatz: mutual exclusion mit globaler Variablen Wartesperre errichten, bis kritischer Abschnitt frei Initial dran=1 Prozeß 1Prozeß 2... WHILE dran 1 DO NoOp END; WHILE dran 2 DO NoOp END; Kritischer Abschnitt dran := 2;dran := 1;... Problem: nur wechselseitige Benutzung des kritischen Abschnitts möglich, Prozeß blockiert sich nach Ausführung selbst. (nicht-notw. Blockade sowie fairness sind verletzt bei ewigem Warten)

8 Folie 7 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Synchronisierung: zweiter Versuch Verbesserung: Zugang nur blockiert beim Aufenthalt in krit. Abschnitt Prozeß 1Prozeß 2... WHILE drin2=TRUE DONoOpEND; drin1 := TRUE; WHILE drin1=TRUE DONoOp END; drin2 := TRUE; Kritischer Abschnitt drin1 := FALSE;drin2 := FALSE;... Problem: Initialisierung drin1=drin2=False keine mutual exclusion! drin1=True, drin2=False P2 ist blockiert ohne Sinn

9 Folie 8 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Synchronisierung: Lösung Peterson 1981 Verbesserung: eine globale Variable, 2 Prozeß- Zustandsvariable. Initial Interesse1 = Interesse2 = FALSE Prozeß 1Prozeß 2... Interesse1 := TRUE;Interesse2 := TRUE; dran := 1; WHILE dran=1 AND Interesse2=TRUE DONoOp END; dran := 2; WHILE dran=2 AND Interesse1=TRUE DONoOp END; Kritischer Abschnitt Interesse1 := FALSE;Interesse2 := FALSE;...

10 Folie 9 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Lösung: Signale und Semaphoren Peterson : Synchronisierung durch Signale (Interesse) Semaphor Allgemein: Das Semaphor (Signalbarken, Dijkstra 1965) Passieren P(s) Passieren P(s) waitFor (signal) Aufruf vor krit. Abschnitt, Warten falls besetzt Verlassen V(s) Verlassen V(s) send (signal) Aufruf nach krit. Abschnitt, Aktivieren eines wart. Prozesses Beispiel: paralleles Hochzählen z = 1, 2, 3,... z global Prozeß 1Prozeß 2... P(s) V(s)... z :=z+1; WriteInteger(z) warten freigeben

11 Folie 10 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Implementierung Semaphoren: busy wait Software Pseudo-Code Semaphore=Zähler, initial s=1 PROCEDURE P(VAR s:INTEGER) BEGIN Ununterbrechbar! WHILE s<=0 DO NoOp END; Ununterbrechbar! s:=s-1; END P; PROCEDURE V(VAR s:INTEGER) BEGIN Ununterbrechbar! s:=s+1; Ununterbrechbar! END V; Problem: spin locks können fairness verletzten, wenn die Zeitscheibe eines niedrig-prio Prozeß im krit. Abschnitt zu Ende geht

12 Folie 11 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Implementierung Semaphoren: Schlafen TYPE Semaphor = RECORD value: INTEGER; list : ProcessList; END; Initial: s.value:=1 Software Pseudo-Code Datenstruktur PROCEDURE P(VAR s:Semaphor) BEGIN s.value:=s.value-1; IF s.value < 0 THEN einh ä ngen(MyID,s.list); sleep; END; END P; PROCEDURE V(VAR s:Semaphor) VAR PID: ProcessId; BEGIN IF s.value < 0 THEN PID:=aush ä ngen(s.list); wakeup(PID); END; s.value:=s.value +1; END V;

13 Folie 12 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Atomare Aktionen Beispiel:Geldtransaktion Sie überweisen Abbuchung 2000 Empfänger-Gutbuchung 2000 Wo ist das Geld? Keine oder neue Überweisung = Verlust! Forderung: Atomare Aktion Entweder vollständige Transaktion oder gar keine ! (roll back bei Abbruch) Computerabsturz !

14 Folie 13 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Interrupts ausschalten (Probleme: timer, power failure, I/O) Atomare Instruktionsfolgen Test And Set (test and set lock) PROCEDURE TestAndSet(VAR target:BOOLEAN): BOOLEAN VAR tmp:BOOLEAN; tmp:=target; target:= TRUE; RETURN tmp; END TestAndSet; Swap PROCEDURE swap(VAR source,target: BOOLEAN) VAR tmp:BOOLEAN; tmp:=target; target:=source; source:=tmp; END swap; Fetch And Add PROCEDURE fetchAndAdd(VAR a, value:INTEGER):INTEGER VAR tmp:INTEGER; tmp:=a; a:=tmp+value; RETURN tmp; END fetchAndAdd; HW-Implementierung: Atomare Aktionen

15 Folie 14 Software Pseudo-Code Semaphore=Zähler, initial s=1 PROCEDURE P(VAR s:INTEGER) BEGIN Ununterbrechbar! WHILE FetchAndAdd(s,-1)<= 0 Ununterbrechbar! DO FetchAndAdd(s,+1) END END P PROCEDURE V(VAR s:INTEGER) BEGIN Ununterbrechbar! FetchAndAdd(s,+1) Ununterbrechbar! END V Probleme ? R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Implementierung Semaphoren: busy wait

16 Folie 15 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Implementierung der Semaphor-Operationen, Anwendung Multiprozessorsynchronisation VAR s: INTEGER;(* Semaphore, initial = 1*) PROCEDURE P(s); PROCEDURE V(s); BEGIN LOOP FetchAndAdd(s,1) END V; IF (FetchAndAdd(s,-1) >= 1) THEN RETURN END; FetchAndAdd(s,1); ENDLOOP; END P; s = 1, Anwendung Multiprozessoren WHILE s<1 DO NoOp END; P2 P1 P3 P2 P2 P3 P3.... P1 0,-1, 0, -1, 0, -1, 0,-1, 0, P2 P2 -1,

17 Folie 16 Frage Angenommen, Sie haben 3 Prozesse und 2 kritische Abschnitte pro Prozess. Wieviele Semaphore benötigen Sie? ? 2 ? 3 ? 6 ? 12 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Code A Krit. Abschn. Code B Krit. Abschn. Code C Krit. Abschn.

18 Folie 17 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt memory Prozesse Semaphoren: Unix lockf Sperren Dateizugriff P(s) lock file msem_init Semaphorinit. zumSpeicherzugriff msem_lock Sperren eines Semaphors P(s) msem_unlock Entsperren eines Semaphors V(s) msem_remove Entfernen eines Semaphors semctl Semaphorkontrolloperationen semget hole Semaphorwert semop Semaphoroperation

19 Folie 18 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Semaphore: Windows NTProzesse CreateSemaphore() Erzeugen OpenSemaphore() Initialisieren WaitForSingleObject(Sema,TimeOutVal ) P(s) ReleaseSemaphore() V(s) Kernprozesse Spin locks : keine Referenzen zu Disk-Speicher, keine traps & syscalls Threads Semaphore = Type CRITICAL_SECTION InitializeCriticalSection(S) EnterCriticalSection(S) P(s) LeaveCriticalSection(S) V(s)

20 Folie 19 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Synchronisierung: Threads und ObjekteObject (Instanz 1) Object Thread 2 Object (Instanz 2) Object Thread 1 Zwei Threads innerhalb eines Prozesses erzeugen das gleiche Objekt. Die Methoden beider Objekt-Instanzen greifen auf die gleichen globalen Daten (Attribute) zu. Chaos, wenn beide Threads auf die globalen Daten zugreifen. Globale Daten (static) Problem:

21 Folie 20 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Lösung: Prozeßgruppen Apartment C Apartment B Apartment A Prozess Y Prozess X Objekt 1 Objekt 2 t3t3 t2t2 t1t1 t4t4 t5t5 t6t6 t7t7 Mögliche Lösung: Sperrung der Objekte, Serialisierung des Zugriffs (marshalling) Nachteil: keine Parallelaktivitäten möglich! Windows NT: explizite Zuordnung der Threads zu Objektmengen (Apartments)

22 Folie 21 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Lösung: Threadgruppen in NT F ü r jedes Objekt Speicherung des Threading-Modells (STA, MTA,both) in der Registrierung. MTA nur bei lokalen Daten ! Thread 1 Thread 2 main STA Single-Threaded Apartment STA Thread 3 Multi-Threaded Apartment MTA Thread 4 Prozess Marshalling Objekt 1Objekt 2 Objekt 3 Objekt 4

23 Folie 22 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozesskommunikation Race Conditions, Semaphore Anwendungen Verklemmungen

24 Folie 23 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Anwendung: Synchr. von Prozessen Präzedenzgraph Implementierung mit Semaphoren PROCESS A: TaskBodyA; V(b); V(c); END A; PROCESS B: P(b);TaskBodyB; V(d1);V(e); END B; PROCESS C: P(c);TaskBodyC; V(d2); END C; PROCESS D: P(d1); P(d2); TaskBodyD; END D; PROCESS E: P(e);TaskBodyE; END E; Globale Variable b,c,d1,d2,e mit 0 initialisieren.

25 Folie 24 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Synch. Erzeuger-Verbraucher Problem: race condition innerhalb der Flusskontrolle bei Umschaltung nach used=0 Pufferfüllung, dann ewiges Schlafen beider Prozesse. Erzeuger LOOP produce(item) IF used=N THEN sleep(); putInBuffer(item); used := used+1; IF used=1 THEN wakeup(Verbraucher );); END LOOP Verbraucher LOOP IF used=0 THEN sleep(); getFromBuffer(item); used := used-1 IF used = N-1 THEN wakeup(Erzeuger); consume(item); END LOOP Naiver Ansatz Naiver Ansatz Initial : used = 0 Umschaltung

26 Folie 25 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Synch. Erzeuger-VerbraucherLösung Signal speichern. Aber: unbekannte Prozesszahl...? Semaphor einführen: belegtePl ä tze := 0, freiePl ä tze := N, mutex := 1 ErzeugerVerbraucher LOOP produce(item) P( freiePlätze ); P(P(mutex); putInBuffer(item); V(V(mutex); V( belegtePlätze ); END LOOP LOOP P( belegtePlätze ); P(P(mutex); getFromBuffer(item); V(V(mutex); V( freiePlätze ); consume(item); END LOOP krit. Abschnittskontrolle + Flusskontrolle durch Semaphor

27 Folie 26 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt readers/writers - Problem Aufgabe Aufgabe: Koordination Lesen-Schreiben von Dateien Erstes readers/writers-Problem (Vorrang f ü r Leser) Ein Leser soll nur warten, falls ein Schreiber bereits Zugriffsrecht zum Schreiben bekommen hat. Dies bedeutet, da ß kein Leser auf einen anderen Leser warten mu ß, nur weil ein Schreiber wartet. Problem: Schreiber wartet ewig (verhungert!) Zweites readers/writers-Problem (Vorrang f ü r Schreiber) Wenn ein Schreiber bereit ist, f ü hrt er das Schreiben so schnell wie m ö glich durch. Wenn also ein Schreiber bereit ist, die Zugriffsrechte zu bekommen, d ü rfen keine neuen Leser mit Lesen beginnen. Problem: Leser wartet ewig (verhungert!)

28 Folie 27 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt P(ReadSem); readcount:=readcount+1; IF readcount=1 THEN P(WSem) END; V(ReadSem);... Reading_Data();... P(ReadSem); readcount:=readcount-1; IF readcount=0 THEN V(WSem) END; V(ReadSem); Synchronisation readers/writers Semaphor ReadSem : Semaphor f ü r Lese-Strategie WSem : Mutex f. Schreibvorgang LesenSchreiben P(WSem);... Writing_Data();... V(WSem);

29 Folie 28 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Multiprozessor-Synchronisation Warteschlangenmanagement beim NYU-Ultracomputer (1983) FIFO-Ringpuffer im shared memory Schutz der InSlot/OutSlot-Zeiger mittels FetchAndAdd Puffermanagement full/empty RingBuf[0] RingBuf[N-1] RingBuf[1] OutSlot InSlot Fix InUse Init: 0

30 Folie 29 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Multiprozessor-Synchronisation Ein/Aushängen bei der ready-queue EinhängenAushängen IF InUse >= N THEN Full:=TRUE; RETURN END ; IF FetchAndAdd(InUse,1)>=N THEN FetchAndAdd(InUse,-1); Full:=TRUE; RETURN END ; MyInSlot:=FetchAndAdd (InSlot,1)MOD N; P (InSem[MyInSlot]); RingBuf[MyInSlot]:=data; V (OutSem[MyInSlot]); FetchAndAdd(Fix,1); IF Fix <= 0 THEN Empty:=TRUE; RETURN END ; IF FetchAndAdd(Fix,-1)<=0 THEN FetchAndAdd(Fix,1); Empty:=TRUE; RETURN END ; MyOutSlot:=FetchAndAdd (OutSlot,1)MOD N; P (OutSem[MyOutSlot]); data:=RingBuf[MyOutSlot]; V (InSem[MyOutSlot]); FetchAndAdd(InUse,-1);

31 Folie 30 Frage Warum benötigt man bei jedem einzelnen Slot einen P/V-Mechanismus? Warum reicht der FetchAndAdd-Mechanismus nicht aus? Antwort FetchAndAdd ist für die Flußsteuerung nötig, aber reicht nicht für den Slot-Schutz etwa bei halb gefülltem Puffer. R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt

32 Folie 31 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Fehler bei Semaphoranwendung Mögliche Fehler Mögliche Fehler bei P/V-Anwendung Vertauschung : alle sind nur gleichzeitig im krit. Abschnitt V(mutex);... krit. Abschnitt...; P(mutex); Replikation oder Weglassen: ewiges Warten P(mutex);... krit. Abschnitt...; P(mutex); Falsche Reihenfolge Erzeuger-Verbraucher-Problem Erzeuger P(freiePlätze); P(mutex); putInBuffer(item); V(mutex); V(belegtePlätze); Erzeuger P(mutex); P(freiePlätze); putInBuffer(item); V(mutex); V(belegtePlätze);

33 Folie 32 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Monitore Lösung Lösung: Syntaktische Kapselung des kritischen Bereichs critical region Shared s (Semaphor) region s do mutual exclusion P(s); ; V(s) conditional critical region region s when B do Abstrakter Datentyp Monitor interner, automatischer Schutz von Daten und Methoden durch Compiler MONITOR (* lokale Daten und Prozeduren *) PUBLIC (* Methoden der Schnittstelle nach außen *) BEGIN (*Initialisierung *)... ENDMONITOR

34 Folie 33 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Monitore: Erzeuger/Verbraucher MONITOR Buffer; Schnittstelle TYPE Item = ARRAY[1..M] of BYTE; VAR RingBuf: ARRAY[1..N] of Item; InSlot, (* 1. freier Platz *) OutSlot, (* 1. belegter Platz *) used:INTEGER; PUBLIC PROCEDURE putInBuffer(item:Item); BEGIN... END; PROCEDURE getFromBuffer(VAR item:Item); BEGIN... END; BEGIN used:=0; InSlot:=1; OutSlot:=1; END MONITOR; ErzeugerVerbraucher LOOP produce(item) Buffer.putInBuffer(item) END LOOP Buffer.getFromBuffer(item) consume(item); END

35 Folie 34 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Monitore: Flußkontrolle Erzeuger/Verbraucher: Zusätzliche Flußkontrolle nötig CONDITION s Signal(s) sendet Signal s an alle, die im Monitor warten Wait(s) wartet auf ein Signal PROCEDURE putInBuffer(item:Item) IF used=N THEN wait(frei)END; RingBuf[InSlot]:=item; used := used+1; InSlot := (InSlot+1) MOD N; signal(belegt); END putInBuffer; PROCEDURE getFromBuffer(VAR item:Item); IF used=0 THEN wait( belegt )END item := RingBuf[OutSlot]; used := used-1; OutSlot := (OutSlot+1) MOD N; signal(frei); END getFromBuffer; CONDITION frei, belegt Beispiel

36 Folie 35 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Monitore: Java Konstrukt synchronized ( ) Thread wartet, bis frei ist (automat. Semaphor). Innerhalb eines synchronized-Bereichs kann man zusätzlich mit den Methoden wait() auf ein Signal warten, das mit notify() gesendet wird, etwa zur Flusskontrolle.

37 Folie 36 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozesskommunikation Race Conditions, Semaphore Anwendungen Verklemmungen

38 Folie 37 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen Beispiel

39 Folie 38 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen (deadlocks) Beispiel: Datei bearbeiten und ausdrucken durch zwei Prozesse P1 P2 Drucker P1 hat die Datei, will den Drucker P2 hat den Drucker, will die Datei

40 Folie 39 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen Bedingungen Notwendige und hinreichende Bedingungen (Coffman 1971) Beschränkte Belegung (mutual exclusion) semaphorgeregelter Zugang Zusätzliche Belegung (hold-and-wait) hat Drucker, will Datei Keine vorzeitige Rückgabe (no preemption) behält Datei bzw. Drucker Gegenseitiges Warten (circular wait) P1 wartet auf P2, P2 wartet auf P1

41 Folie 40 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt VerklemmungenStrategien: das Problem ignorieren, die Verklemmungen erkennen und beseitigen, die Verklemmungen vermeiden, die Verklemmungen unmöglich machen. eine der Bedingungen (1)–(4) verhindern

42 Folie 41 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen Erkennen und beseitigen Anzeichen: viele Prozesse warten, aber CPU ist idle Prozesse müssen zu lange warten Betriebsmittelgraph (resource allocation graph) P 1 P 3 B 3 B 1 B 2 P 4 P 5 P 2 B 4 Verklemmungsbedingungen erfüllt bei Zyklen im Graphen

43 Folie 42 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen E S = Zahl der BetriebsmittelBM vom Typ S B KS = Zahl der von Prozeß K belegten BM vom Typ S C KS = Zahl der von Prozeß K geforderten BM vom Typ S verfügbare Zahl der BM vom Typ S Erkennungsalgorithmus für Verklemmung (0)Alle Prozesse sind unmarkiert. (1)Suche einen unmarkierten Prozeß K, bei dem für alle Betriebsmittel S gilt A S C KS. (2)Falls ein solcher Prozeß existiert, markiere ihn und bilde A S :=A S +B KS. (3)Gibt es einen solchen Prozeß ? DANN erneut (1) und (2). (4)SONST STOP. Wenn ein unmarkierter Prozeß ex. : Verklemmung ex ! Beispielrechnung

44 Folie 43 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen Beseitigen Prozesse abbrechen z.B. verklemmten Prozess oder Prozess mit notw. BM Prozesse zurücksetzen auf check point und verklemmenden Prozess warten lassen Betriebsmittel entziehen von verklemmtem Prozess und warten, bis BM frei werden.

45 Folie 44 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen Verklemmungsbedrohte Zustände vermeiden Test: Banker-Algorithmus (Dijkstra 1965) konservative Kreditausleihe eines Bankers: Gib nur Kredit, wenn auch die Wünsche von anderen, vorgemerkten Kunden berücksichtigt werden können bei sichergestellter Rückzahlung. Verklemmung-JA = Verklemmungsbedrohung; sie muß nicht eintreten, wenn rechtzeitig BM zurückgegeben werden. Vermeidung: lehne eine neue BM-Anforderung ab, wenn der Test sagt, daß dies zu einer Verklemmung führen kann. Aber: Realität unbekannte BM-Forderungen der Zukunft Prozesszahl + BM-Zahl wechselt Laufzeit- + Speicherintensiver Algorithmus

46 Folie 45 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen Unmöglich machen Verhindere eine der vier Bedingungen Beschränkte Belegung (mutual exclusion) BM fest nur einem Service-Prozess zuordnen Zusätzliche Belegung (hold-and-wait) Nur ein BM pro Prozess (aber: lesen und drucken nicht gleichzeitig) Alle nötigen BM auf einmal anfordern (nicht bekannt und Vergeudung!) Alle BM zurückgeben vor Neuanforderung (Verwaltungsaufwand!) Keine vorzeitige Rückgabe (no preemption) Vorzeitiger Prozess-Abbruch kann Inkonsistenzen verursachen Gegenseitiges Warten (circular wait) Ordnungsrelation für BM einführen (Linearisierung)

47 Folie 46 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Verklemmungen Beispiele Ordnungsrelation Durchnummerieren der BM derart, dass nur höhere Nummern angefordert werden (nicht immer möglich). Anordnung in einer Hierarchie Supervision der record-Belegung Prozeß A Prozeß E Prozeß AProzeß C

48 Folie 47 Frage Angenommen, man kann bei der BM-Belegung einen Timer (Zeituhr) aufsetzen. Welche der vier notwendigen Bedingungen für Verklemmungen sind damit nicht erfüllt? Anwort: Bedingung 3: no premption, kein vorzeitiger Abbruch R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt

49 Folie 48 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozesskommunikation Race Conditions, Semaphore Anwendungen Verklemmungen

50 Folie 49 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation Verbindungsanzahl unicast multicast broadcast

51 Folie 50 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Adressierung Eindeutige Adressierung: Qualifizierter ID mit IP Adresse = Prozeß-ID.RechnerName.Firma.Land z.B hera.rbi.uni-frankfurt.de Problem : Prozeß wechselt ID bei Neustart, Aufgabe bleibt Lösung: logische ID, nicht physische. Beispiel: Drucker Prädikatsadresse: Spezifikationen als Adresse IFANDAND (IF 386-CPU AND Java_installiert AND Drucker) = True: fühle dich angesprochen, sonst nicht. Arbeitsverteilung!

52 Folie 51 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation Verbindungsorientierte Kommunikation openConnection (Adresse) Feststellen, ob der Empfänger existiert und bereit ist: Aufbau der Verbindung send ( Message )/ receive(Message) Nachrichtenaustausch; closeConnection Leeren der Nachrichtenpuffer, Beenden der Verbindung Verbindungslose Kommunikation send (Adresse, Message)/ receive(Adresse, Message)

53 Folie 52 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Mailboxen Mailbox = Nachrichtenpuffer z.B. TYPE Mailbox = RECORD SenderQueue : tList; EmpfängerQueue : tList; MsgQueue : tList; MsgZahl : INTEGER; einhängen(tMsg):PROCEDURE; aushängen(tMsg):PROCEDURE; END Message = Kopf + Daten TYPE tMsg = RECORD EmpfängerAdresse: STRING; AbsenderAdresse:STRING; NachrichtenTyp:tMsgTyp; SequenzNummer:INTEGER; Länge:CARDINAL; Data:POINTER TO tBlock; // oder inline data END; Zugriff mit Semaphoren schützen! für Flußkontrolle Kopf

54 Folie 53 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Pipes Unix pipe() unidirektionale Kommunikation Programm1 | Programm2 |.. | Programm N Windows NT CreatePipe() Bidirektionale pipes Globale Kommunikation: named pipes write() Programm 1 read() Programm 2

55 Folie 54 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Signale Problem: Synchrones Warten blockiert Prozesse Abhilfe: Benachrichtigung durch asynchrone Signale (Software-Interrupts) Aufsetzen der Reaktion auf ein Signal, z.B. in UNIX mit sigaction(ISR) Abarbeiten des Hauptprogramms Bei Signaleintritt: Abarbeiten der angegebenen ISR Weiterarbeiten im Hauptprogramm

56 Folie 55 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Signale Implementierung von Semaphoroperationen mit Signalen TYPE Semaphor = RECORD besetzt : BOOLEAN; frei : SIGNAL; END; PROCEDURE P(VAR S:Semaphor); BEGIN IF S.besetzt THEN waitFor(S.frei) END; S.besetzt:= TRUE; END P; PROCEDURE V(VAR S:Semaphor); BEGIN S.besetzt:= FALSE; send(S.frei) END V; Unterbrechung verhindern durch Sperren des Signal-Interrupt !?

57 Folie 56 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: atomic broadcast Problem: Synchronisierung von Globaldaten (Systemtabelle,...) Lösung: Atomarer Rundspruch (atomic broadcast) Endliche Übertragungszeit Nachricht an alle oder keinen Gleiche Nachrichten-Reihenfolge Implementierung: konsistente Message-Reihenfolge Konsistenz durch Nachrichten an alle, auch sich selbst! Empfänger- prozesse Sender Globaldaten mailbox

58 Folie 57 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation Programmsynchronisation Rendez-vous-Konzept(Ada) Warten ohne Pufferung aufeinander Senderprogramm Empfängerprogramm... send(Empfänger,Msg);... receive(Sender,Msg)...

59 Folie 58 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Synchronisation Guarded Commands (Dijkstra 1975) Konstrukte: DOunendl. loop C 1 command1 C 2 command2.... OD IF Auswahl IF C 1 command1(a > b) print größer / gleich C 2 command2(a < b) print kleiner....FI

60 Folie 59 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Synchronisation Kommunizierende Sequentielle Prozesse CSP (Hoare 1978) Konstrukte: s A Auf ein Ereignis s folgt der Zustand A P = (s A)Wenn s kommt, so wird Zustand A erreicht, und P nimmt A an. Für den parallelen Fall ist P = (s 1 A | s 2 B |... | s n D) Wenn s 1 kommt, nimmt P den Wert A an. Wenn s 2 kommt, dann B, usw.

61 Folie 60 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Synchronisation CSP in OCCAM (INMOS 1988) Konstrukte: Kanal!data1 send(Kanal,data1) Kanal?data2 receive(Kanal,data2) Bei Rendez-vous: data2 := data1 PAR cmd1 parallele Ausf ü hrung cmd2 SEQ cmd1 sequentielle Ausf ü hrung cmd2 ALT cmd1 einer davon wird ausgef ü hrt cmd2

62 Folie 61 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Synchronisation Beispiel: Erzeuger – Verbraucher, Code für Puffer producer!buffer producer?buffer consumer consumer?more Erzeuger Puffer Verbraucher producer consumer!buffer consumer?buffer consumer!more

63 Folie 62 R.Brause - WS Betriebssysteme: ProzeßSynchronisation (C) Goethe-Universität, Frankfurt Prozeßkommunikation: Synchronisation Synchronisation durch Kommunikation putInBuffer(item) send(consumer,item) Item internen Puffer, geregelt mit P() und V() getFromBuffer(item) receive(producer,item) interner Puffer Item, geregelt mit P() und V() Erzeuger LOOP produce(item); send(consumer,item); END Verbraucher LOOP receive(producer,item); consume(item); END


Herunterladen ppt "Modul: B-BS Betriebssysteme WS 2012/13 Prof. Dr. Rüdiger Brause Adaptive Systemarchitektur Institut für Informatik Fachbereich Informatik und Mathematik."

Ähnliche Präsentationen


Google-Anzeigen