Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Modul: B-BS Betriebssysteme SS 2014 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 SS 2014 Prof. Dr. Rüdiger Brause Adaptive Systemarchitektur Institut für Informatik Fachbereich Informatik und Mathematik."—  Präsentation transkript:

1

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

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

4 Folie 3 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) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

5 Folie 4 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! (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

6 Folie 5 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) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

7 Folie 6 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) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

8 Folie 7 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

9 Folie 8 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;... (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

10 Folie 9 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

11 Folie 10 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

12 Folie 11 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; (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

13 Folie 12 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 ! (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

14 Folie 13 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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 ? Implementierung Semaphoren: busy wait (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

16 Folie 15 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, (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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

18 Folie 17 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

19 Folie 18 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) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

20 Folie 19 R.Brause - 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 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) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

22 Folie 21 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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

24 Folie 23 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. (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

25 Folie 24 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

26 Folie 25 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

27 Folie 26 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!) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

28 Folie 27 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); (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

29 Folie 28 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

30 Folie 29 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); (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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. (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

32 Folie 31 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); (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

33 Folie 32 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

34 Folie 33 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

35 Folie 34 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

36 Folie 35 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. (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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

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

39 Folie 38 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

40 Folie 39 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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

42 Folie 41 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

43 Folie 42 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

44 Folie 43 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. (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

45 Folie 44 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

46 Folie 45 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) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

47 Folie 46 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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

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

51 Folie 50 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! (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

52 Folie 51 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) (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

53 Folie 52 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

54 Folie 53 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

55 Folie 54 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

56 Folie 55 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 !? (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

57 Folie 56 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

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

59 Folie 58 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

60 Folie 59 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. (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

61 Folie 60 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

62 Folie 61 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation

63 Folie 62 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 (C) Goethe-Universität, Frankfurt R.Brause - Betriebssysteme: ProzeßSynchronisation


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

Ähnliche Präsentationen


Google-Anzeigen