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

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

Übung zu Grundlagen der Betriebssysteme. 10. Übung

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

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

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

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

2. Aufgabenblatt Threads

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

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

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

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

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

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

Parallele Prozesse. Prozeß wartet

Klausur Nichtsequentielle Programmierung

Übung Betriebssysteme 11

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

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

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

Aufgabenblatt 7 Musterlösung

Lösung von Übungsblatt 9. (Interprozesskommunikation)

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

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

Lösungsvorschlag Serie 7 Parallelität

Softwarelösungen: Versuch 4

Verteilte Systeme CS5001

Klausur zur Vorlesung Grundlagen der Betriebssysteme

9. Vorlesung Betriebssysteme

Wegweiser. Das Erzeuger-/Verbraucher-Problem. Semaphore. Transaktionen. Botschaften

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

(Prof. Dr. J. Schlichter, WS 2011 / 2012) Übungsleitung: Dr. Wolfgang Wörndl

Info B VL 16: Monitore und Semaphoren

Betriebssysteme. Koordination und Synchronisation: Kritische Abschnitte, Sperren, Semaphore und Mutexe. Sommersemester 2014 Prof. Dr.

Leser-Schreiber-Realisierung mit Semaphoren

Übung zu Grundlagen der Betriebssysteme. 11. Übung

Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen)

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

Threads Einführung. Zustände von Threads

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

JJ Prozesse und Nebenläufigkeit

Klausur am

Wirtschaftsinformatik II Sommersemester Lo sungshinweise zu den Ü bungen P. Mandl, M. Dolag, B. Rottmüller, et al.

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

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

Tafelübung zu BSRvS1. 3. Philosophen. Fortsetzung Grundlagen C-Programmierung

3. Philosophen. Tafelübung zu BSRvS1. Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware. Lehrstuhl für Informatik 12 TU Dortmund

Arten der Synchronisation. Koordination nebenläufiger Prozesse. Koordinierung. Reihenschaltung. Einseitige Synchronisation

Klausur zur Vorlesung Grundlagen Betriebssysteme und Systemsoftware

Verteilte Anwendungen. Teil 3: Synchronisation

Test (Lösungen) Betriebssysteme, Rechnernetze und verteilte Systeme

Mutual Exclusion und Synchronisation. Peter Puschner 1

Prozeß-Interaktion u. -Kommunikation

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

2 Teil 2: Nassi-Schneiderman

9. Foliensatz Betriebssysteme

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

Deadlock. Peter Puschner Institut für Technische Informatik

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester 2012

2.3 Prozessverwaltung

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Einstieg in die Informatik mit Java

Aufgaben zum Thema Threads (Prozesse)

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Kapitel 6. Verklemmungen (Deadlocks)

Aufgabenblatt 6 Musterlösung

Proseminar Nichtsequentielle Programmiersprachen WS 2011/2012 Monitore

Nicht-blockierende Synchronisation für Echtzeitsysteme

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

Einstieg in die Informatik mit Java

Anwendung (2. Versuch:-) Entkopplung der Locks

Imperative Programmierung in Java: Kontrollfluß II

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Versuchsziele. Grundlagen. Überblick: FB Automatisierung und Informatik Betriebssysteme Thema: Bounded-Buffer-Problem. 3.

Aufgaben Semaphore Übersicht (Dijkstra)

Einstieg in die Informatik mit Java

OpenMP - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Informatik B - Objektorientierte Programmierung in Java. Vorlesung 21: Threads 2. Inhalt

Informatik I Übung, Woche 40

3.2 Prozessumschaltung

Musterklausur 2 für PMfE

Abschlusseigenschaften. Automaten und Formale Sprachen alias Theoretische Informatik. Sommersemester Abschlusseigenschaften

Literatur. VA SS Teil 5/Messages

Ausnahmebehandlung in Java

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

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

Betriebssysteme Theorie

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

Nebenläufigkeit mit Java

Betriebssysteme Teil 11: Interprozess-Kommunikation

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Monitore. Klicken bearbeiten

Probeklausur: Programmierung WS04/05

Transkript:

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

Allgemeine Synchronisationsprobleme Wir verstehen ein BS als eine Menge von parallel laufenden Systemprozessen. Diese Prozesse arbeiten auf gemeinsamen Daten (engl.: shared data). Das führt für parallele Prozesse zu besonderen Problemen bzw. Aufgaben: Synchronisation Wechselseitiger Ausschluss 2

Bezeichnungen: Erzeuger-Konsumenten Problem Bounded Buffer : Puffer mit endlicher Kapazität Producer / Consumer Problem Betrachten wir eine Anwendung abstrakt: Produzent P erzeugt Daten und stellt sie in einen Puffer Konsument K nimmt die Einträge aus dem Puffer heraus 3

Ringpuffer #define BUFFER_SIZE 8 typedef struct {...} item; item b[buffer_size ]; // Puffer int in = 0; int out = 0; counter = 0; 4

Ring - Puffer counter = 5 7 0 6 5 b[0]... b[7] 1 2 out = 5 nextconsumed von b[5] holen 4 3 in = 2 nextproduced auf b[2] ablegen 5

Die Variable in zeigt auf den nächsten freien Platz im Puffer b. Die Variable out zeigt auf die erste belegte Position (so diese existiert) Zustand bei Grundsätzliche Überlegungen leerem Puffer b: counter = 0 vollem Puffer b: counter = BUFFER_SIZE 6

Code für Produzent Produzent verwendet die lokale Variable nextproduced vom Typ item b[in] = nextproduced; in = (in+1) % BUFFER_SIZE; counter++; 7

Code für Konsument Konsument verwendet die lokale Variable nextconsumed vom Typ item nextconsumed = b[out] ; out = (out+1) % BUFFER_SIZE; counter- - ; 8

Ring - Puffer counter = 5 7 0 6 5 b[0]... b[7] 1 2 out = 5 nextconsumed von b[5] holen 4 3 in = 2 nextproduced auf b[2] ablegen 9

Zusatzbedingungen Kapazität des Puffer b ist begrenzt. P darf nicht in den vollen Puffer einfügen C kann nicht aus dem leeren Puffer Einträge entnehmen Einträge (Nachrichten) sollen in der gleichen Reihenfolge entnommen werden, wie sie produziert (gesendet) wurden Puffer b glättet Geschwindigkeitsschwankungen von / zwischen P und C. 10

Busy waiting? ( Beschäftigtes Warten ) P darf nicht in vollen Puffer schreiben while (counter == BUFFER_SIZE) ; // no-op C kann nicht aus leerem Puffer lesen while (counter == 0 ); // no-op Problem: P und C verbrauchen CPU-Zeit während des Wartens Lösung durch Strategie beim Scheduling, oder spezielles Aktivierungs- / Aufweck- Konzept (engl.: wake-up) notwendig. 11

Ein Problem bleibt! Obgleich sowohl Produzent P als auch Konsument C (für sich alleine) korrekt arbeiten, gibt es ein Problem, wenn beide gemeinsam parallel laufen. while (1) { while (counter == 0 ); nextconsumed = b[out] ; out = (out+1) % BUFFER_SIZE; counter- - ; } 12

Gemeinsame (engl.: shared) Daten! counter wird von P und C verwendet!! P: counter = counter + 1; C: counter = counter - 1; P C reg 1 = counter; p1 reg 2 = counter; c1 reg 1 = reg 1 + 1; p2 reg 2 = reg 2-1; c2 counter = reg 1 ; p3 counter = reg 2 ; c3 13

Beispiel Status am Anfang (Annahme): counter = 5 Operationen: P erzeugt einen Eintrag C konsumiert einen Eintrag Erwartetes Ergebnis nach Ausführung: counter = 5 14

Beispiel für verzahnten Ablauf Op Operation reg 1 reg 2 counter Anfangszustand.. 5 p1 reg 1 = counter 5. 5 p2 reg 1 = reg 1 + 1 6. 5 c1 reg 2 = counter 6 5 5 c2 reg 2 = reg 2-1 6 4 5 p3 counter = reg 1 6 4 6 c3 counter = reg 2 6 4 4?? Könnte auch 6 (oder 5) sein! 15

Wettlaufbedingung Wenn mehrere parallele Prozesse auf shared data auch modifizierend zugreifen und das Ergebnis von der jeweiligen Zugriffsreihenfolge oder relativen Geschwindigkeit der Prozesse abhängt, so nennt man diese Situation eine race condition 16

Wechselseitiger Ausschluss Problem der race condition beim Producer/Consumer (shared counter!): Erfordert eine entsprechende Synchronisation der parallelen Prozesse Zu gewährleisten, dass zu jedem Zeitpunkt nur ein Prozess die Variable counter ändert» Es gibt einen Codebereich in C und P, in dem beide Prozesse die gemeinsame (engl.: shared) Variable counter ändern können.» Weder P noch C dürfen diesen kritischen Bereich ausführen, während der jeweils andere Prozess dies (bereits) macht: Wechselseitiger Ausschluss 17

Kritischer Abschnitt (engl.: critical region) Eine Folge von Operationen auf gemeinsame (engl.: shared) Daten, welche sich beim Zugriff wechselseitig zeitlich ausschließen müssen, heißt CR = Kritischer Abschnitt (engl.: critical region/critical section wir verwenden das Kürzel CR). Die Ausführung eines kritischen Bereiches ist nur immer einem Prozess zu einem Zeitpunkt möglich = Wechselseitiger Ausschluss 18

CR schematisch do { { EINTRITT IN CR KRITISCHER ABSCHNITT AUSTRITT AUS CR } while (1) 19

Anforderungen an eine Lösung Wechselseitiger Ausschluss (Mutual exclusion) Höchstens ein Prozess ist in einer CR. Fortschritt (Progress) P bleibt nur für eine begrenzte Zeit in der CR. Kein Prozess außerhalb seiner CR darf einen anderen am Eintreten in eine solche blockieren. Beschränktes Warten (Fairness) Wenn P eine CR betreten will, so wird dies innerhalb endlicher Zeit gestattet. Keine Annahmen (No assumptions) Relative Geschwindigkeit der Prozesse und Anzahl der Prozesse bzw. Prozessoren ist beliebig 20

Klassiker! E. Dijkstra zeigte in seiner klassischen Veröffentlichung (1965) Cooperating Sequential Processes, welche typischen Probleme es gibt: Verletzung von Mutual Exclusion Erzwungene Reihenfolge Verletzung von Progress (vgl.: deadlock) 21

Ein (falsches) Beispiel Der folgende Algorithmus erfüllt gegenseitigen Ausschluss. Aber: Er unterstützt NICHT die Fortschritt-Bedingung Lösung führt zu Verklemmung (engl.: deadlock) Beschäftigtes Warten (engl.: busy waiting) innerhalb der WHILE- Schleife 22

Wechselseitiger Ausschluss, COBEGIN (*P0*) do { flag[0]=true; while flag[1]; //no-op // Kritischer Bereich flag[0]=false; } aber Verklemmung (1) boolean flag [2]; flag[0]=false; flag[1]=false; COEND (*P1*) do { flag[1]:=true; while flag[0]; //no-op //Kritischer Bereich flag[1]=false; } 23

Wechselseitiger Ausschluss erfüllt P 0 setzt zuerst flag[0] auf true und zeigt damit, dass er bereit ist, die CR zu betreten: do { flag[0]=true; Wechselseitiger Ausschluss, aber Verklemmung (2) 24

Wechselseitiger Ausschluss aber Verklemmung (3) P 0 wartet dann bis flag[1] auf false steht. while flag[1]; //no-op Das ist erfüllt, sobald P 1 die CR verlassen hat. Beim Verlassen des CR setzt P 1 das flag[1] auf false und erlaubt damit dem anderem Prozess, die CR zu betreten: flag[0]=false; 25

Ist das nicht gleich wie im counter Beispiel des Ringbuffers? Nein! Wechselseitiger Ausschluss aber Verklemmung (4) P1 liest flag[1] und schreibt flag[0] P2 schreibt flag[1] und liest flag[0]»beides sind unterschiedliche Speicherzellen! Aber: P1 und P2 (lesen &) schreiben auf counter»das ist dieselbe Speicherzelle! 26

Wechselseitiger Ausschluss aber Verklemmung (5) ABER, nehmen wir folgende Verzahnung an T0: P0 setzt flag[0] =true; Hier Interrupt, CPU schaltet von P0 auf P1 T1: P1 setzt flag[1] =true; JETZT laufen P0 und P1 im while-loop ewig. Die Fortschritt-Bedingung ist nicht erfüllt! 27