Mutual Exclusion und Synchronisation. Peter Puschner Institut für Technische Informatik 1

Ähnliche Dokumente
Mutual Exclusion und Synchronisation. Peter Puschner 1

Mutual Exclusion und Synchronisation. Peter Puschner Institut für Technische Informatik

Mutual Exclusion und Synchronisation. Peter Puschner Institut für Technische Informatik

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen)

Erzeuger/Verbraucher-Problem: gemeinsamer Puffer Programm für Erzeuger. Kapitel IV

Kapitel IV. Prozesssynchronisation. VO Betriebssysteme

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (4) Eine untere Schranke für den Platzbedarf

Betriebssysteme Teil 11: Interprozess-Kommunikation

JJ Prozesse und Nebenläufigkeit

Übung zu Grundlagen der Betriebssysteme. 10. Übung

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion

Fakultät für Informatik der Technischen Universität München. Nebenläufigkeit. Probleme

Deadlock. Peter Puschner Institut für Technische Informatik

Softwarelösungen: Versuch 4

Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit ausgeführt werden.

Vorlesung "Verteilte Systeme" Sommersemester Verteilte Systeme. Verteilte Systeme, Sommersemester 1999 Folie 7.2

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Wolfram Burgard

leave: mov flag, 0 ; 0 in flag speichern: Lock freigeben ret

Literatur. Betriebssysteme WS 2015/16 - Teil 8/Synchronisation I

Erstes Leser-Schreiber-Problem

Leser-Schreiber-Realisierung mit Semaphoren

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz

Verteilte Systeme CS5001

Lösungsvorschlag Serie 7 Parallelität

Hans-Georg Eßer, FH München Betriebssysteme I, WS 2006/07, 2007/01/24 Zusammenfassung (2/2) Folie 2

WS Parallele Prozesse. Prof. Hannelore Frank. Parallele Prozesse. PetriNetze. Synchronisation UNIX. Wettbewerb PC Krit.Abschnitt Spinlocks

Erzeuger-Verbraucher-Problem

Domänenmodell: Fadenkommunikation und -synchronisation

( Faire ) Zuteilung eines Prozesses an den Prozessor (Entscheidung über Swapping) Wartende Prozesse in einer (FIFO-) Warteschlange organisieren

Klausur zur Vorlesung Grundlagen der Betriebssysteme

Übung Betriebssysteme 11

Übersicht. Nebenläufige Programmierung: Praxis und Semantik. Synchronisation (5) Bisher. Jetzt. Aktuelle Themen zu Informatik der Systeme: WS 2011/12

Inhaltsverzeichnis. Carsten Vogt. Nebenläufige Programmierung. Ein Arbeitsbuch mit UNIX/Linux und Java ISBN:

Aufgabenblatt 7 Musterlösung

Verhaltensbeschreibung und Spezifikationssprachen

Klausur Nichtsequentielle Programmierung. Nachname: Bachelor Magister. Vorname: Master Lehramt

Info B VL 17: Deadlocks

Vorlesung "Verteilte Systeme" Sommersemester Verteilte Systeme. Adreßraum. Rechner. Verteilte Systeme, Sommersemester 1999 Folie 19.

Systeme I: Betriebssysteme Kapitel 5 Nebenläufigkeit und wechselseitiger Ausschluss. Maren Bennewitz

librtipc - Bibliothek für echtzeitfähige Interprozesskommunikation

Aufgaben Semaphore Übersicht (Dijkstra)

Verteilte Anwendungen. Teil 3: Synchronisation

Wechselseitiger Ausschluss in verteilten Systemen / Elektionsalgorithmen. Özden Urganci Ulf Sigmund Ömer Ekinci

2.3 Prozessverwaltung

Single- und Multitasking

Parallele Prozesse. Prozeß wartet

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

Klausur Nichtsequentielle Programmierung

Literatur. VA SS Teil 5/Messages

1.1 Transitionssysteme Produkte von Transitionssystemen Kripkestrukturen Verifikation und Model-Checking...

Betriebssysteme G: Parallele Prozesse ( Teil C: SpinLock, Semaphore, Monitore)

Info B VL 16: Monitore und Semaphoren

Synchronisation und Kommunikation über Nachrichten

Prozeß-Interaktion u. -Kommunikation

Verteilte Systeme. 7. Verteilter wechselseitiger. Ausschluß. Wechselseitiger Ausschluß (mutual. exclusion)

Extended Scope. Events und Mailboxen. Florian Franzmann Tobias Klaus Florian Korschin Florian Schmaus Peter Wägemann

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen

Aufgabenblatt 8 Musterlösung

RTOS Einführung. Version: Datum: Autor: Werner Dichler

Proseminar Nichtsequentielle Programmiersprachen WS 2011/2012 Monitore

Mutual Exclusion. Annika Külzer Florian Störkle Dennis Herzner

Vorlesung Betriebssysteme II

Threads Einführung. Zustände von Threads

C-Code-Fragment Bankautomat. Vorlesung Betriebssysteme I II. Möglicher (typischer) Ablauf. Begriff der Race Condition

Einführung in die technische Informatik

Rechnerarchitektur und Betriebssysteme (CS201): Semaphor, Monitor, Deadlocks, Re-Entrance

Hans-Georg Eßer, Hochschule München Betriebssysteme I, SS Synchronisation (1) Folie 3

#define N 5 // Anzahl der Philosophen. while (TRUE) { // Der Philosoph denkt

Was machen wir heute? Betriebssysteme Tutorium 3. Organisatorisches. Prozesskontrollblock (PCB) Programmieraufgaben. Frage 3.1.a

Betriebssysteme 1 BS1-E SS Prof. Dr.-Ing. Hans-Georg Eßer Fachhochschule Südwestfalen. Foliensatz E: Synchronisation Deadlocks. v1.

Betriebssysteme 1. Einführung (2) Synchronisation: Probleme mit gleichzeitigem Zugriff auf Datenstrukturen Beispiel: Zwei Threads erhöhen einen Zähler

Synchrone Botschaften

Weitere Verbesserungen

6. Juni VO Prüfung Betriebssysteme. Ges.)(100) 1.)(35) 2.)(20) 3.)(45) Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

Anwendung (2. Versuch:-) Entkopplung der Locks

Kapitel 6. Verklemmungen (Deadlocks)

9. Vorlesung Betriebssysteme

Nicht-blockierende Synchronisation für Echtzeitsysteme

Aufgaben zum Thema Threads (Prozesse)

Nebenläufige und verteilte Programme CS2301

Speicherbasierte Kommunikation (T) Realisierung von Semaphoren (T) Shared Memory (P) Synchronisation mittels Semaphoren (P)

Verteilte Systeme Teil 2

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Verteilte Algorithmen TI5005

Technische Informatik II. SoSe Jörg Kaiser IVS EOS

Objektorientierte Programmierung

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Klausur zur Vorlesung Grundlagen der Betriebssysteme WS 2010 / 2011

Einführung: Zustandsdiagramme Stand:

Lösung von Übungsblatt 9. (Interprozesskommunikation)

Übung zu Grundlagen der Betriebssysteme. 11. Übung

Reihungen. Prof. Dr. Christian Böhm. In Zusammenarbeit mit Gefei Zhang. WS 07/08

Wintersemester 2009/10 Helmut Seidl Institut für Informatik TU München

Verklemmungen - Deadlocks

Verbessertes Konzept: Monitore

Transkript:

Mutual Exclusion und Synchronisation Peter Puschner Institut für Technische Informatik peter@vmars.tuwien.ac.at 1

Gemeinsame Ressourcen BS und Prozesse, parallel laufende Prozesse verwenden die selben Daten bzw. Ressourcen (Shared Memory, Files, Geräte) tauschen Daten aus und kooperieren daher brauchen wir: disziplinierten Zugriff auf gemeinsame Daten/ Ressourcen geordnete Abarbeitung verteilter Aktionsfolgen sonst Fehlverhalten: Inkonsistenz bzw. Abhängigkeit der Ergebnisse von Abfolge der Abarbeitungsschritte der einzelnen Prozesse Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 2

Beispiel 1 Prozess A a = a + 1; mov A, a inc A mov a, A Prozess B a = a 1; mov B, a dec B mov a, B a neu : parallele Ausführung von A u. B Fall 1 mov A, a inc A mov a, A mov B, a dec B mov a, B Fall 2 mov A, a mov B, a dec B mov a, B inc A mov a, A Fall 3 mov B, a dec B mov A, a inc A mov a, A mov a, B a alt a alt + 1 a alt 1 Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 3

Beispiel 2 Prozess A t := 0; loop ShM := t; t := (t+1) mod 10; end loop Prozess B loop t := ShM; print(t); end loop parallele Ausführung von A u. B ShM: 0 ShM: 1 print: 1 print: 1 ShM: 2 print: 2 ShM: 0 print: 0 ShM: 1 ShM: 2 print: 2 print: 2 ShM: 0 print: 0 ShM: 1 print: 1 ShM: 2 print: 2 Ausgabe: 1 1 2 0 2 2 0 1 2 Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 4

Überblick Begriffe und Ziele Mutual Exclusion Condition Synchronization Programmierung v. Mutual Exclusion und Bedingungssynchronisation Semaphore Sequencer und Eventcounts Monitor, Nachrichten, NBW Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 5

Interaktion von Prozessen Wechselseitiger Ausschluss (Mutual Exclusion) Verhindern des gleichzeitigen Zugriffs auf Ressourcen (Atomicity) Ziel: Konsistenthalten der Daten Bedingungssynchronisation (Condition Synchronisation) Warten auf das Eintreten einer Bedingung Ziel: bestimmte Reihenfolge von Operationen Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 6

Mutual Excl. und Cond. Sync. Orthogonale Konzepte Vier mögliche Kombinationen MutEx. + + CondSync. + + Ziel unabhängige Aktionen vorgegebene Abfolge Konsistenthaltung Konsistenz und Abfolge Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 7

Begriffe: Mutual Exclusion P 1 P 2 kritischer Abschnitt gemeinsame Ressource, gemeinsamer Datenbereich kritischer Abschnitt Daten kritische Region Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 8

Kritischer Abschnitt Ein Prozess befindet sich im kritischen Abschnitt, wenn er auf gemeinsame Daten bzw. Ressourcen zugreift Wechselseitiger Ausschluss (mutual exclusion): zu jedem Zeitpunkt darf sich höchstens ein Prozess in seinem kritischen Abschnitt befinden Eintritt in kritischen Abschnitt muss geregelt erfolgen Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 9

Prozessstruktur für krit. Abschnitt kein Prozess darf in seinen kritischen Abschnitt eintreten, wenn sich bereits ein Prozess in seinem k.a. befindet Prozessstruktur... Prolog k.a. kritischer Abschnitt Epilog k.a.... Eintrittsprotokoll Austrittsprotokoll Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 10

Anforderungen für k.a. Lösung Mutual Exclusion Progress wenn sich kein Prozess im k.a. befindet und Prozesse in den k.a. eintreten möchten, darf die Entscheidung über den nächsten Prozess nicht unendlich lange verzögert werden Bounded Waiting Nachdem ein Prozess einen Request für den k.a. abgegeben hat, ist die Anzahl der Eintritte in den k.a. durch andere Prozesse abgeschrankt Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 11

Arten von Lösungen Softwarelösungen Annahmen: Atomizität einer Lese- bzw. Schreiboperation auf dem Speicher Hardwareunterstützte Lösungen Verwendung spezieller Maschineninstruktionen Höhere Synchronisationskonstrukte stellen dem Programmierer Funktionen und Datenstrukturen zur Verfügung Semaphore, Monitor, Message Passing, Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 12

Mutual Exclusion in Software Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 13

Softwarelösungen Zunächst 2 Prozesse, P0 und P1 dann Generalisierung auf n Prozesse, Pi, wobei Pi <> Pj für i <> j Synchronisation über globale Variable Busy Waiting: Warten auf das Eintreten einer Bedingung durch ständiges Testen (busy benötigt CPU-Zeit) while Bedingung true do nothing Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 14

Dekker-Algorithmus, 1. Versuch global: Prozess Pi: var turn: 0.. 1; while turn <> i do nothing; critical section turn = j; remainder section Mutual Exclusion gegeben Prozesse können nur abwechselnd in k.a. Wenn ein Prozess terminiert, wird der andere Prozess endlos blockiert Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 15

Dekker-Algorithmus, 2. Versuch global: var flag: array [0..1] of boolean; Prozess Pi: while flag[ j] do nothing; flag[i] := true; critical section flag[i] := false; remainder section Initialisierung: flag[i] := false; flag[ j] := false; Wenn ein Prozess terminiert, kann der andere Prozess weiterarbeiten Mutual Exclusion nicht garantiert Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 16

Dekker-Algorithmus, 3. Versuch global: Prozess Pi: var flag: array [0..1] of boolean; flag[i] := true; while flag[ j] do nothing; critical section flag[i] := false; remainder section Mutual Exclusion gesichert aber: Deadlock möglich Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 17

Dekker-Algorithmus, 4. Versuch Prozess Pi: flag[i] := true; while flag[ j] do begin flag[i] := false; wait for a short time; flag[i] := true; end; critical section flag[i] := false; remainder section Mutual Exclusion gesichert, kein Deadlock aber: Lifelock, Prozessoraktivität ohne Produktivität Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 18

Dekker-Algorithmus flag[i] := true; while flag[ j] do if turn = j then begin flag[i] := false; while turn = j do nothing; flag[i] := true; end; critical section turn := j; flag[i] := false; remainder section flag Zustand der beiden Prozesse turn bestimmt die Reihenfolge des Eintretens in den k.a. im Falle von völligem Gleichlauf (siehe 4. Versuch) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 19

Peterson-Algorithmus eleganter, leichter zu durchschauen als Dekker Alg. Prozess Pi: loop flag[i] := true; turn := j; while flag[ j] and turn = j do nothing; critical section flag[i] := false; remainder section end loop Initialisierung: flag[i] := false; flag[ j] := false; Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 20

Peterson-Algorithmus Mutual Exclusion P0 setzt flag[0] auf true à P1 blockiert P1 im k.a. à flag[1] = true à P0 blockiert kein endloses gegenseitiges Blockieren Annahme: P0 blockiert in while-schleife (d.h. flag[1] = true und turn = 1 ) P1 will nicht in k.a. >< flag[1] = true P1 wartet auf k.a. >< turn = 1 P1 monopolisiert k.a. >< P1 muss turn vor neuerlichem Eintritt in k.a. auf 0 setzen Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 21

Bakery Algorithm Lösung des k.a.-problems für n Prozesse Nummernvergabe für k.a.; Prozess mit der niedrigsten Nummer (>0) tritt als erstes ein Nummer 0 keine Anforderung für k.a. Pi und Pj mit gleichen Nummern: Pi kommt vor Pj in k.a., wenn i < j es gilt stets: neu vergebene Nummer >= vorher vergebene Nummern var choosing: array [0..n-1] of boolean; number: array [0..n-1] of integer; Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 22

loop choosing [i] := true; number [i] := 1 + max(number [0],, number [n-1]); choosing [i] := false; for j := 0 to n-1 do begin while choosing [ j] do nothing; while number [ j] <> 0 and (number [ j],j) < (number [i],i) do nothing; end; critical section number [i] := 0; remainder section end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 23

Hardwareunterstützte Lösungen Interrupt Disabling für Uniprozessorsystem geeignet aber: Einschränkung des BS beim Dispatching anderer Tasks Rückgabe der Kontrolle an das BS? Schutz von Instruktionssequenzen im BS Spezielle Maschineninstruktionen Test and Set Exchange (Swap) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 24

Test and Set Hardwareinstruktion, die zwei Aktionen atomar (d.h. ununterbrechbar) ausführt à Mutual Exclusion function testset (var i: integer): boolean; begin if i = 0 then begin i := 1; testset := true; end; else testset := false; end. Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 25

Test and Set für k.a. globale Var.: Prozess Pi: var b: integer; b := 0; while not testset (b) do nothing; critical section b := 0; remainder section Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 26

Sicherung des k.a. mit exchange globale Var.: var b: integer; b := 0; Prozess Pi: var key: integer; key := 0; key := 1; do exchange (key, b) while key = 1; critical section exchange (key, b); remainder section einfacher Prolog für den k.a. für beliebig viele Prozesse erfordert Busy Waiting Starvation von Prozessen möglich Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 27

Semaphore Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 28

Semaphore Synchronisationsmechanismus, der kein Busy Waiting notwendig macht (vom BS zur Verfügung gestellt) Semaphore S: Integer-Variable, auf die nach der Initialisierung nur mit zwei atomaren Funktionen, wait und signal, zugegriffen werden kann statt Busy Waiting: Blockieren der wartenden Prozesse in Blocked Queues (siehe Abschnitt Prozesse ) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 29

Semaphore Ziel: Verwendung von Semaphoren zum Sichern eines kritischen Abschnitts auf einfache Art wait (S); critical section signal (S); remainder section Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 30

Semaphore - Datenstruktur Semaphore ist ein Record: type semaphore = record value: integer; queue: list of process; end; Auf einen Semaphor S wartende Prozesse werden in die Blocked Queue von S (S.queue) gestellt Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 31

Semaphore - Operationen init (S, val): S.value := val; S.queue := empty list; wait (S): S.value := S.value - 1; if S.value < 0 then add this process to S.queue and block it; signal (S): S.value := S.value + 1; if S.value <= 0 then remove a process P from S.queue and place P on ready queue; Semaphore müssen auf einen nicht-negativen Wert (für Mutual Exclusion auf 1) initialisiert werden Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 32

Wechselseitiger Ausschluss Initialisierung: Prozess Pi: init (S, 1) wait (S); critical section signal (S); remainder section Maximal ein Prozess im k.a. Reihenfolge, in der Prozesse in den k.a. eintreten, ist nicht a-priori festgelegt (hängt von Behandlung der Queue ab, typischer Weise FIFO à Bounded Waiting, Fairness) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 33

Semaphore - Implementierung wait und signal müssen als atomare Operationen ausgeführt werden Sichern der Semaphoroperationen (= k.a.) mit Test and Set zusätzliche Record-Komponente flag in der Semaphordatenstruktur Vor k.a.: Busy Waiting mit Test von flag da wait und signal sehr kurz sind, kommt es kaum zum Busy Waiting; daher ist der Overhead vertretbar Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 34

Semaphore - Bemerkungen S.count >= 0: Anzahl der Prozesse, die hintereinander ein wait ausführen können, ohne warten zu müssen Initialisierung von S mit Wert n à n Prozesse können gleichzeitig in den k.a. S.count < 0: S.count Prozesse in der Queue von S blockiert (in gezeigter Implementierung) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 35

Semaphore - Bemerkungen Binary Semaphore: nimmt nur die Werte 0 oder 1 an Counting Semaphore: kann beliebige (nicht negative) ganzzahlige Werte annehmen - implementierungsabhängig Operationen wait und signal werden in der Literatur auch als P und V bezeichnet Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 36

Bedingungssynchronisation Verschiedene Prozesse: P1 und P2 Codeabschnitt C1 in P1 muss vor Abschnitt C2 in P2 ausgeführt werden Semaphore für Bedingungssynchronisation (Condition Synchronisation) Initialisierung: init (S, 0) P1: C1; signal (S); P2: wait (S); C2; Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 37

Abwechselnder Zugriff Beispiel: Datentransfer von P1 an P2 P1 schreibt, P2 liest Shared Memory kein Duplizieren bzw. Verlust von Daten Init.: init ( P1: loop gen. data; P2: loop read ShM; write ShM; use data; end loop end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 38

Abwechselnder Zugriff Beispiel: Datentransfer von P1 an P2 P1 schreibt, P2 liest Shared Memory kein Duplizieren bzw. Verlust von Daten Init.: init (S1, 1); init (S2, 0); P1: loop gen. data; wait (S1); write ShM; signal (S2); end loop P2: loop wait (S2); read ShM; signal (S1); use data; end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 39

Semaphore -- Beispiele Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 40

Aufgabe Gegeben: 3 zyklische Prozesse, A, B, C A produziert Daten und schreibt sie auf ShM B und C lesen die Daten vom ShM (ohne Einschränkung der Parallelität) Datenaustausch findet immer wieder statt Jeder von A geschriebene Datensatz soll von B und C genau einmal gelesen werden??? Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 41

Producer-Consumer Problem Produzent generiert Information, die vom Konsumenten gelesen wird Beispiel: Druckaufträge an einen Drucker Einzelne Datensätze werden über einen Puffer an den Konsumenten übergeben Producer Consumer b[0] b[1] b[2] b[3] Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 42

P-C mit unbegrenztem Puffer Produzent kann jederzeit ein Datenelement schreiben Konsument muss auf Daten warten in zeigt auf nächstes freies Puffer-Element out zeigt auf nächstes zu lesendes Element b[0] b[1] b[2] b[3] b[4] out in Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 43

P-C: Semaphore Mutual Exclusion: zu jedem Zeitpunkt darf nur ein Prozess auf den Puffer zugreifen (Semaphore S ) Bedingungssynchronisation: der Konsument darf nur dann lesen, wenn mindestens ein ungelesenes Datenelement im Puffer steht (Counting Semaphore N spiegelt Anzahl der Elemente im Puffer wieder) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 44

P-C: Implementierung Initialisierung: init (S, 1); init(n, 0); in := out := 0; append (v): b[in] := v; in := in + 1; take ( ): w := b[out]; out := out + 1; return w; Producer: loop produce (v); P (S); append (v); V (S); V (N); end loop Consumer: loop P (N); P (S); w := take ( ); V (S); consume (w) end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 45

P-C mit Ringpuffer Begrenzter Puffer mit K Elementen Lesen: mind. ein neuer Wert notwendig Schreiben: mind. ein Element beschreibbar b[0] b[1] b[2] b[3] b[4] b[k-1] out in b[0] b[1] b[2] b[3] b[4] b[k-1] in out Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 46

Ringpuffer: Semaphore Semaphore wie bei unbegrenztem Puffer Mutual Exclusion: zu jedem Zeitpunkt darf nur ein Prozess auf den Puffer zugreifen (S) Bedingungssynchronisation: der Konsument darf nur dann lesen, wenn mindestens ein ungelesenes Datenelement im Puffer steht (N) Bedingungssynchronisation: der Produzent darf nur dann schreiben, wenn mindestens ein leerer Speicherbereich vorhanden ist (E) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 47

P-C Ringpuffer-Implementierung Initialisierung: init (S, 1); init (N, 0); init (E, K ); in := out := 0; append (v): b[in] := v; in := (in + 1) mod K; take ( ): w := b[out]; out := (out + 1) mod K; return w; Producer: loop produce (v); P (E); P (S); append (v); V (S); V (N); end loop Consumer: loop P (N); P (S); w := take ( ); V (S); V (E); consume (w) end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 48

Reihenfolge von P und V Reihenfolge von V-Operationen beliebig Achtung: Abfolge von P-Operationen ist relevant! Producer: produce (v); P (E); P (S); append (v); Consumer: P (S); P (N); w := take (); vertauscht! falsch!!! Systemverklemmung (Deadlock), wenn Consumer bei leerem Puffer (N=0) in k.a. eintritt. Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 49

Reader-Writer Problem Es gibt Lese- und Schreibeprozesse, die auf eine gemeinsame Ressource zugreifen Beliebig viele Leser dürfen parallel lesen Schreiber benötigen exklusiven Zugriff Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 50

Reader-Writer Problem init (x, 1); init (y, 1); init (z, 1); init (wsem, 1); init (rsem, 1); rc := 0; wc := 0; Reader: loop P (x); rc := rc + 1; if rc = 1 then P (wsem); V (x); read; P (x); rc := rc - 1; if rc = 0 then V (wsem); V (x); end loop Writer: loop P (wsem); write; V (wsem); end loop Leser haben Priorität Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 51

Reader-Writer Problem Reader: loop P (z); P (rsem); P (x); rc := rc + 1; if rc = 1 then P (wsem); V (x); V (rsem); V (z); read; P (x); rc := rc - 1; if rc = 0 then V (wsem); V (x); end loop Writer: loop P (y); wc := wc + 1; if wc = 1 then P (rsem); V (y); P (wsem); write; V (wsem); P (y); wc := wc - 1; if wc = 0 then V (rsem); V (y); end loop Schreiber haben Priorität Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 52

Dining Philosophers Problem klassisches Problem der Synchronisation 5 Philosophen denken und essen jeder braucht zum Essen zwei Gabeln gesucht: Lösung ohne Deadlock und Starvation Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 53

Dining Philosophers Problem Jedem Philosophen entspricht ein Prozess Ein Semaphore pro Gabel fork: array[0..4] of semaphore; foreach i in [0..4] init (fork[i], 1); Erster Versuch: Prozess Pi: loop think; P (fork[i]); P (fork[(i+1) mod 5]); eat; V (fork[(i+1) mod 5]); V (fork[i]); end loop Erster Versuch: Deadlock, wenn alle Philosophen gleichzeitig die erste Gabel aufnehmen Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 54

Dining Philosophers: Lösungen Zusätzlicher Semaphore, der maximal 4 Philosophen gleichzeitig das Aufnehmen einer Gabel erlaubt Mindestens ein Prozess nimmt die Gabeln in umgekehrter Reihenfolge auf atomare P-Operation für mehrere Semaphore mp (fork[i], fork[(i+1) mod 5]); Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 55

P und V für mehrere Semaphore mp, mv: atomare Operationen P und V für eine Menge von Semaphoren mp (S1, S2,, Sn): blockiert solange, bis alle Semaphore S1 bis Sn größer als 0 sind Löst Problem der Reihung von P-Operationen mv (S1, S2,, Sn): erhöht alle Semaphore S1 bis Sn um eins Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 56

Spinlocks Mehrwertige Semaphore mittels Busy Waiting realisiert Sicherung kurzer kritischer Abschnitte auf Multiprozessorsystemen CPU-Overhead, aber kein Process Switch P (S): S := S - 1; while S < 0 do nothing; V (S): S := S + 1; Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 57

Sequencer und Eventcounts Mechanismen zur direkten Steuerung der Reihenfolge von Aktionen (Cond.Sync.) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 58

Eventcounts Ereigniszähler Eventcount E: ganzzahlige Variable zum Zählen der Vorkommnisse von Ereignissen. Der Anfangswert von E ist 0. advance (E): erhöht E um 1 await (E, val): blockiert Prozess bis E >= val Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 59

Beispiel Eventcounts Nach jedem 10ten Vorkommnis eines Events E1 soll die Aktion S1 durchgeführt werden. Bei jedem Auftreten von E1: advance (E); P1: t := 0; loop t := t+10; await (E, t); S1; end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 60

Sequencer Sequencer S: ganzzahlige Variable mit Anfangswert 0, auf der die Operation ticket definiert ist. ticket (S): atomare Aktion, liefert den Wert des Sequencers S und erhöht anschließend den Wert von S um 1. Eventcounts und Sequencer: vgl. Ausgabe von Nummern und Warten auf Aufruf an einem Schalter (Behörde, Arzt, etc.) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 61

E und S: Mutual Exclusion Sicherung eines k.a. sequencer: S; eventcount: E; await (E, ticket (S)); critical section; advance (E); vgl.: semaphore: S; init (S, 1); P (S); critical section; V (S); Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 62

E und S: Producer-Consumer sequencer: Pticket, Cticket; eventcount: In, Out; Producer: loop produce (v); t := ticket (Pticket); -- nur ein Producer await (In, t); -- schreibbares Element await (Out, t-k+1); b[ t mod K ] := v; -- Element geschrieben -- nächster Producer advance (In); end loop Consumer: loop u := ticket (Cticket); -- nur ein Consumer await (Out, u); -- lesbare Daten await (In, u+1); w := b[ u mod K ]; -- Daten gelesen -- nächster Consumer advance (Out); consume (w) end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 63

Eventcounts mit/ohne Sequencer Eventcounts mit Sequencern, wenn sich neu ankommende Prozesse mit den laufenden Prozessen aufsynchronisieren müssen (z.b., Server mit mehreren Clients) Verwendung von Eventcounts ohne Sequencer Bedingungssynchronisation fixe Menge von parallelen Prozessen vordefiniertes (ev. zyklisches) Synchronisationsmuster Ablaufsteuerung durch eine State Machine Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 64

Eventcounts ohne Sequencer loop S0; end loop loop S1; end loop loop S2; end loop t := 0; loop await (E, t); S0_act; advance (E); t := t+3; end loop t := 1; loop await (E, t); S1_act; advance (E); t := t+3; end loop t := 2; loop await (E, t); S2_act; advance (E); t := t+3; end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 65

Distributed Mutual Exclusion Rechner Rechner Rechner Rechner Interface Zugriff auf gemeinsame Ressource: Lokale Kopie von E auf jedem Knoten ticket (S): Ticket vom Master anfordern advance (E): Nachricht an alle Knoten, dass die lokale Kopie des Eventcounts zu erhöhen ist await (E, val): unverändert Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 66

Probleme mit Sync-Konstrukten Semaphoroperationen bzw. Operationen mit Eventcounts und Sequencern sind über Prozesse verteilt, daher unübersichtlich Operationen müssen in allen Prozessen korrekt verwendet werden Ein fehlerhafter Prozess bewirkt Fehlverhalten aller Prozesse, die zusammenarbeiten Monitore Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 67

Monitor, Nachrichten und NBW Protokoll Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 68

Monitor Softwaremodul, bestehend aus: Prozeduren Lokalen Daten Initialisierungscode Eigenschaften Zugriff auf lokale Variable: Monitorprozeduren Eintritt von Prozessen in den Monitor über Monitorprozeduren max. 1 Prozess zu jedem Zeitpunkt im Monitor Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 69

Monitor Monitor sorgt für Mutual Exclusion, kein explizites Programmieren Gemeinsamer Speicher ist im Monitorbereich anzulegen Prozesssynchronisation über Monitorvariable Programmierung von Wartebedingungen für Bedingungsvariable (Condition Variables) Monitoreintritt, wenn Wartebedingungen der Bedingungsvariablen erfüllt sind Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 70

Condition Variables Lokal im Monitor (Zugriff nur im Monitor) Zugriff nur über die Zugriffsfunktionen cwait (c): blockiert aufrufenden Prozess bis Bedingung(svariable) c den Wert true annimmt csignal (c): Setze einen Prozess, der auf die Bedingung c wartet, fort wenn mehrere Prozesse warten, wähle einen aus wenn kein Prozess wartet, keine Aktion keine speichernde Wirkung (< > Semaphore-wait) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 71

Monitor Entering Processes Cond. c1 Cond. cn Urgent Queue cwait (c1) cwait (cn) csignal Waiting Area Local Data Cond. Var. Procedure Prozedur Prozedur Init. Code Monitor Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 72

Monitor: Producer-Consumer monitor ProducerConsumer b: array[0..k-1] of items; In := 0, Out := 0, cnt := 0 : integer; notfull, notempty: condition; append (v): if (cnt = K) cwait (notfull); b[in] := v; In := (In + 1) mod K; cnt := cnt + 1; csignal (notempty); take (v): if (cnt = 0) cwait (notempty); v := b[out]; Out := (Out + 1) mod K; cnt := cnt - 1; csignal (notfull); Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 73

Message Passing Methode zur Interprozesskommunikation (IPC) für einzelne Computer und verteilte Systeme Mechanismus für Synchronisation und Mutual Exclusion Eine Nachricht ist eine atomare Datenstruktur Funktionen zum Senden und Empfangen send (destination, message) receive (source, message) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 74

Charakteristika von Nachrichten Synchronisation send: blocking, non-blocking receive: blocking, non-blocking, test for arrival Datenverwaltung Warteschlange (Queue) Empfangene Daten überschreiben alte Werte Adressierung 1:1 vs. 1:N physikalisch, logisch; direkt, indirekt (Mailbox, Portadressierung) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 75

Mailbox und Portadressierung P 1 Mailbox Q 1 P n Q n P 1 Port Q P n Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 76

Ereignis- vs. Zustandsnachricht Ereignisnachricht (Event Message) send: Queue für neue Nachrichten (blocking oder non-blocking) receive: Konsumieren beim Lesen (Queue) Zustandsnachricht (State Message) send: nicht-blockierendes Senden eines Speicherinhalts receive: Überschreiben der alten Datenwerte, Lesen ist nicht konsumierend Semantik ähnlich Variablensemantik Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 77

Ereignisnachricht für MutEx Prozesse verwenden eine gemeinsame Mailbox mutex und eine Nachricht (Token) Blocking receive, (non-blocking) send Prozess Pi: loop receive (mutex, msg); critical section; send (mutex, msg); remainder section; end loop Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 78

Non-Blocking Write Protokoll Bisher genannte Mechanismen für Mutual Exclusion führen zum Blockieren von Prozessen Blockieren kann in speziellen Situationen Probleme verursachen Beispiel: Schreiber möchte die Uhrzeit aktualisieren, aber ein Leser niedriger Priorität wird im kritischen Abschnitt (beim Lesen der Uhrzeit) von einem Prozess höherer Priorität unterbrochen. Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 79

NBW-Protokoll Annahmen Verteiltes System Kommunikation über gemeinsamen Speicher (shared Memory) Es gibt genau einen Schreiber mit einem eigenen Prozessor (kein Wettstreit um CPU) Es gibt mehrere Leser (auf einer oder mehreren anderen CPUs) Schreibintervalle sind groß im Vergleich zur Dauer eines Schreibzugriffs Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 80

NBW - Forderungen Konsistenz: Ergebnisse von Leseoperationen müssen konsistent sein Non-Blocking Property: Der Schreiber darf nicht von Lesern blockiert werden Timeliness: Die Verzögerung von Prozessen, die Leseoperationen ausführen, muss zeitlich abschrankbar sein Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 81

NBW-Protokoll Beschreibung Initialisierung: CCF := 0; /* concurrency control flag */ Writer: CCF_old := CCF; CCF := CCF_old + 1; write; CCF := CCF_old + 2; Reader: do CCF_begin := CCF; read; CCF_end := CCF; while CCF_end <> CCF_begin or CCF_begin mod 2 = 1 CCF Arithmetik in Praxis: Restklassenarithmetik modulo (2 * bign) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 82

NBW-Protokoll Korrektheit Folgende Szenarien sind zu untersuchen: 1. 2. 3. 4. Read Write Read Write Write Read Write Read 5. 6. Read Write Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 83

Zusammenfassung Anforderungen paralleler Prozesse Konsistenter Zugriff auf gemeinsame Daten Vorgegebene Reihenfolge von Aktionen Mutual Exclusion à Konsistenz Condition Synchronization à Reihenfolge Kritischer Abschnitt Aktionen, die gemeinsame Daten manipulieren mit Konstrukten zur Synchronisation gesichert Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 84

Zusammenfassung Sicherung des kritischen Abschnitts Lösungen abhängig vom Instruction Set Unterstützung durch Betriebssystem kein Busy Waiting! Semaphore init, wait und signal, bzw. P und V Achtung: Reihenfolge der wait Operationen Eventcounts und Sequencer await, advance, ticket Offene vs. klar vordefinierte Synchronisationsfolge Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 85

Zusammenfassung Monitor Kapselung von gemeinsamen Objekten, Zugriffsfunktionen und Bedingungsvariablen Messages Atomare Datenstruktur Synchronisationssemantik Non-Blocking Write Protokoll Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 11/12 86