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

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

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

Mutual Exclusion und Synchronisation. Peter Puschner 1

Softwarelösungen: Versuch 4

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

Verteilte Systeme CS5001

Domänenmodell: Fadenkommunikation und -synchronisation

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

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

Monitore. Klicken bearbeiten

Bitte verwenden Sie nur dokumentenechtes Schreibmaterial!

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

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

Kapitel 4. Monitore und wechselseitiger Ausschluss

Nebenläufige Programmierung

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

Technische Informatik II

Task A Zündung. Task B Einspritzung. Task C Erfassung Pedalwert. J. Schäuffele, Th. Zurawka: Automotive Software Engineering, Vieweg, 2003

Programmierkurs Java

Prozedurale Datenbank- Anwendungsprogrammierung

Betriebssystembau (BSB)

Verbessertes Konzept: Monitore

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Grundlagen verteilter Systeme

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Übersicht. Nebenläufige Programmierung. Praxis und Semantik. Einleitung. Sequentielle und nebenläufige Programmierung. Warum ist. interessant?

Motivation. Motivation

FAQ IMAP (Internet Message Access Protocol)

E-PRIME TUTORIUM Die Programmiersprache BASIC

Nebenläufige und verteilte Programme CS2301

Über Arrays und verkettete Listen Listen in Delphi

1 topologisches Sortieren

S7-Hantierungsbausteine für R355, R6000 und R2700

Architektur Verteilter Systeme Teil 2: Prozesse und Threads

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation

Verwendung des IDS Backup Systems unter Windows 2000

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

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

4D Server v12 64-bit Version BETA VERSION

Kapitel MK:IV. IV. Modellieren mit Constraints

IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft

Zur Konfiguration werden hierbei das Setup-Tool und die Shell verwendet.

Grundlagen verteilter Systeme

Synchronisation in Java. Invisible Web

VBA-Programmierung: Zusammenfassung

Java-Programmierung mit NetBeans

Software Engineering Klassendiagramme Assoziationen

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Anlegen eines SendAs/RecieveAs Benutzer unter Exchange 2003, 2007 und 2010

Dialognetze. Ziel : Beschreibung von Methoden und Beschreibungstechniken für den Entwurf und die Dokumentation von Dialogabläufen

Übungen Programmieren 1 Felix Rohrer. Übungen

Windows Small Business Server (SBS) 2008

Erwin Grüner

Business Process Model and Notation

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

Kapitel IV. Prozesssynchronisation. VO Betriebssysteme

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Client-Server-Beziehungen

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Java Kurs für Anfänger Einheit 5 Methoden

Synchronisierung von Transaktionen ohne Sperren. Annahme: Es gibt eine Methode, zu erkennen, wann eine Transaktion die serielle Ordnung verletzt.

3. Stored Procedures und PL/SQL

Gesicherte Prozeduren

OPERATIONEN AUF EINER DATENBANK

Mediator 9 - Lernprogramm

Objektorientierte Programmierung

Übungen zur Vorlesung. Datenbanken I

Dokumentenkontrolle Matthias Wohlgemuth Telefon Erstellt am

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Grundlagen der Informatik

Petri-Netze / Eine Einführung (Teil 2)

Daten-Synchronisation zwischen Mozilla Thunderbird (Lightning) / Mozilla Sunbird und dem ZDV Webmailer

IBM Software Demos Tivoli Provisioning Manager for OS Deployment

Zur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus

:: Anleitung Hosting Server 1cloud.ch ::

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Vorkurs Informatik WiSe 15/16

Grundlagen der Theoretischen Informatik, SoSe 2008

Installation der SAS Foundation Software auf Windows

Kontrollstrukturen - Universität Köln

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Übersicht Programmablaufsteuerung

Lehrer: Einschreibemethoden

Lokale Installation von DotNetNuke 4 ohne IIS

Verwendung des Terminalservers der MUG

Agile Vorgehensmodelle in der Softwareentwicklung: Scrum

Grundbegriffe der Informatik

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Java Einführung Operatoren Kapitel 2 und 3

Abschnitt: Algorithmendesign und Laufzeitanalyse

LPT1 Anschluss mit PCMCIA Karte

Modellierung und Programmierung 1

Lizenzierung von Windows Server 2012

5.2 Neue Projekte erstellen

Was ist Logische Programmierung?

VHDL Verhaltensmodellierung

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

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 14/15 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 14/15 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 14/15 4

Überblick Begriffe und Ziele Mutual Exclusion Condition Synchronization Programmierung v. Mutual Exclusion und Bedingungssynchronisation Semaphore Sequencer und Eventcounts Monitor, Nachrichten Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 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 14/15 6

Mutual Excl. und Cond. Sync. Orthogonale Konzepte Vier mögliche Kombinationen MutEx. + + CondSync. + + Ziel unabhängige Aktionen vorgegebene Abfolge Konsistenz Konsistenz und Abfolge Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 12

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

Softwarelösungen Zunächst 2 Prozesse, P0 und P1 dann Generalisierung auf n Prozesse, Pi, wobei Pi <> Pj für i <> j HW: atomares Lesen/Schreiben eines Wertes 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 27

Semaphore Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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. à allgemeinere Synchronisationsaufgaben S.count < 0: S.count Prozesse in der Queue von S blockiert (in gezeigter Implementierung) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 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 14/15 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 14/15 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 14/15 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 14/15 39

Semaphore -- Beispiele Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 57

Sequencer und Eventcounts Mechanismen zur direkten Steuerung der Reihenfolge von Aktionen (Cond.Sync.) Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 67

Monitor, Nachrichten Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 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 14/15 69

Monitor Monitor sorgt für Mutual Exclusion, kein explizites Programmieren Gemeinsamer Speicher ist im Monitorbereich anzulegen Bedingungssynchronisation ü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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 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 14/15 78

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 14/15 79

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 14/15 80

Zusammenfassung Monitor Kapselung von gemeinsamen Objekten, Zugriffsfunktionen und Bedingungsvariablen Messages Atomare Datenstruktur Synchronisationssemantik Peter Puschner, TU Wien Vorlesung Betriebssysteme, Mutex & Sync.; WS 14/15 81