Aufgabenblatt 7 Musterlösung

Ähnliche Dokumente
Aufgabenblatt 8 Musterlösung

Übung zu Grundlagen der Betriebssysteme. 10. Übung

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

JJ Prozesse und Nebenläufigkeit

Aufgabenblatt 6 Musterlösung

Klausur zur Vorlesung Grundlagen der Betriebssysteme

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

Klausur am

Leser-Schreiber-Realisierung mit Semaphoren

Info B VL 16: Monitore und Semaphoren

Klausur zum Kurs Betriebssysteme (1802) am 19. September 2009

Erstes Leser-Schreiber-Problem

Erzeuger-Verbraucher-Problem

Girls Day 2017 Programmierung

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Einstieg in die Informatik mit Java

Grundlagen in C# und.net

M3 M4 M7 VORNAME: Gewinnt VERTIEFUNG:

Betriebssysteme Teil 11: Interprozess-Kommunikation

Vorkurs Informatik WiSe 16/17

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015. Musterlösung

Einstieg in die Informatik mit Java

Software Entwicklung 1. Rekursion. Beispiel: Fibonacci-Folge I. Motivation. Annette Bieniusa / Arnd Poetzsch-Heffter

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

Aufgabenblatt 5 Musterlösung

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

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Aufbau eines "B-Baums" der Ordnung 3, Teil 1

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

Einstieg in die Informatik mit Java

Thomas Gewering Benjamin Koch Dominik Lüke. (geschachtelte Schleifen)

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

Informatik II. Semesterklausur

Variablenarten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

M3 M4 M7 VORNAME: Nom-Kenner VERTIEFUNG: Ausdruck des vorab bekannt gemachten Quelltextes

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

Informatik B von Adrian Neumann

Zentralübung Grundlagen der Programmierung

Aufgaben Semaphore Übersicht (Dijkstra)

Aufgabe 9 Threads [12]

13. Dynamische Datenstrukturen

Kapitel 5. Monitore und Synchronisationsbedingungen

Nebenläufigkeit mit Java

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

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

Bitte beachten Sie, dass diese Aufgaben keinerlei Beschränkung des zu prüfenden Stoffes noch sonstige Rückschlüsse auf die Klausur begründen.

Objektorientierte Programmierung und Modellierung

Institut für Programmierung und Reaktive Systeme 2. Februar Programmieren I. Übungsklausur

16. Dynamische Datenstrukturen

Einstieg in die Informatik mit Java

Kapitel 3: Variablen

Parallele Programmiermodelle II

Einführung in die Informatik Iterationen

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Einstieg in die Informatik mit Java

Java I Vorlesung Nebenläufigkeit

Einführung in die Informatik Iterations

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

Ursprünge. Die Syntax von Java. Das Wichtigste in Kürze. Konsequenzen. Weiteres Vorgehen. Rund um Java

System.out.println("TEXT");

Informatik I Übung, Woche 40

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Prüfung Softwareentwicklung I (IB)

Info B VL 17: Deadlocks

Kurs 1613 Einführung in die imperative Programmierung

Einführung in die Informatik 1

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

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

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

Martin Unold INFORMATIK. Geoinformatik und Vermessung

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

Allgemeine Hinweise:

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

2. Aufgabenblatt Threads

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben

3A Synchronisation: Weitere Aufgaben

Kurs 1613 Einführung in die imperative Programmierung Lösungen der Aufgaben zum Studientag

Vorkurs Informatik WiSe 17/18

Übung zur Vorlesung Programmierung

Anwendung (2. Versuch:-) Entkopplung der Locks

Prüfung Informatik D-MATH/D-PHYS :00 11:00

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

Einstieg in die Informatik mit Java

Klausur "ADP" SS 2016

Softwaretechnik 1 Übung 5

Fachhochschule Wedel 31. Januar 2004 Prof. Dr. Uwe Schmidt

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

2 Teil 2: Nassi-Schneiderman

Kontrollflüsse. Dining Philosophers. 6. Verklemmungen. Systemsoftware. Seite 6.1. (c) 2002, Prof. Dr. P. Sturm, Universität Trier

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

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Datenstrukturen und Algorithmen

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

Transkript:

Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 7 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Steuerung eines Warenautomaten (Bearbeitung zu Hause) Anleitung wie man solche Probleme systematisch lösen kann: 1) Identifizieren Sie die Prozesse des Systems Die Prozesse sind die Aktivitäten, die nebenläufig ausgeführt werden und sich dabei synchronisieren müssen. Sie ergeben sich meist unmittelbar aus der Problemstellung. In der Aufgabe haben wir drei Prozesse: Automat, Kunden und Lieferant. 2) Notieren Sie die Aktionen der einzelnen Prozesse Hier muss klar werden, welcher Prozess was tut, in welcher zeitlichen Reihenfolge die Aktionen eines Prozesses ablaufen und wo es Schleifen oder Verzweigungen gibt. Die Aktionen eines Prozesses ergeben sich meist unmittelbar aus der Aufgabenbeschreibung. Die Synchronisationsoperationen (die P- und V-Operationen auf Semaphoren) müssen Sie hier noch nicht einfügen; sie werden in Schritt 5 ergänzt. Die Prozesse laufen wie folgt ab: falls leer: warte auf Lieferant; warte auf 5 Euro; gib Chips-Tüte aus; 3) Identifizieren Sie die Synchronisationsbedingungen warte, bis Automat frei; wirf 5 Ein-Euro-Stücke ein; warte auf Chips-Tüte; gib Automaten frei; fülle Chips-Tüten nach; Eine Synchronisationsbedingung ist eine zeitliche Abhängigkeit, die zwischen zwei oder mehr Prozessen durchgesetzt werden muss. Die Synchronisationsbedingungen ergeben sich am besten dadurch, dass man die Problembeschreibung genau durchliest und jede zeitliche Bedingung mit einer eigenen Farbe in dem Text markiert wird. In der Aufgabe gibt es vier Synchronisationsbedingungen: (i) Nur ein Kunde benutzt den Automaten gleichzeitig (wechselseitiger Ausschluss). (ii) Ein Kunde wartet, bis der Automat die Ware liefert. (iii) Der Automat wartet, bis 5 Euro eingeworfen wurden. (iv) Der leere Automat wartet, bis der Lieferant 200 Chips-Tüten gebracht hat. 4) Definieren Sie die Semaphore Im Normalfall muss jede der Synchronisationsbedingungen mit einem eigenen Semaphor realisiert werden. Geben Sie jeweils an, wie das Semaphor heißen soll, wie es initialisiert wird und welcher Bedingung es zugeordnet ist. (i) mutex = 1: zum wechselseitigen Ausschluss der Kunden. (ii) ware = 0: zur Blockierung des Kunden bis zur Warenübergabe. (iii) geld = 0: zur Blockierung des Automaten bis zur Geldübergabe. (iv) chips = 200: zur Blockierung des Automaten, falls er leer ist. 1

5) Ergänzen Sie die Prozesse aus Schritt 2 durch die Semaphor-Operationen Jetzt müssen Sie die P- und V-Operationen der Semaphore, die in Schritt 4 eingeführt wurden, in die Prozesse aus Schritt 2 einfügen. P-Operationen müssen dabei an die Stellen gesetzt werden, an denen ein Prozess auf ein bestimmtes Ereignis warten muss (also ggf. blockiert werden soll). V-Operationen kommen an die Stellen, an denen ein Prozess einem anderen signalisiert, dass er jetzt weiterlaufen darf. Eine erste Lösung sieht daher wie folgt aus: Semaphore ware = 0; Semaphore geld = 0; Semaphore chips = 200; int i; int count=200; // falls leer: warte auf Lieferant; P(chips); // warte auf 5 Euro; P(geld); //gib Chips-Tüte aus; count ; V(ware); // warte, bis Automat frei; P(mutex); // wirf 5 Ein-Euro-Stücke ein; V(geld); // warte auf Chips-Tüte; P(ware); // gib Automaten frei; V(mutex); //fülle Chips-Tüten nach; for (i=count; i<200; i++) V(chips); count = 200; Da wir in der Vorlesung davon ausgehen, daß der Zählerwert eines Semaphors nicht ausgelesen werden kann 1, brauchen wir einen zusätzlichen Zähler count, der die Chipstüten im Automaten mitzählt. Achtung: Die obige Lösung hat noch eine mögliche Race-Condition beim Zugriff auf count! Um dieses Problem zu lösen, müssen wir für einen wechselseitigen Ausschluss zwischen Automat und Lieferant sorgen, der sicherstellt, daß count immer identisch mit dem Zähler des Semaphors chips ist. Dazu verwenden wir ein Semaphore mutex2, das mit 1 initialisiert wird. Semaphore mutex2 = 1; Semaphore ware = 0; Semaphore geld = 0; Semaphore chips = 200; int i; int count=200; P(mutex2); // falls leer: warte auf Lieferant; P(chips); // warte auf 5 Euro; P(geld); //gib Chips-Tüte aus; count ; V(ware); V(mutex2); Anmerkungen: // warte, bis Automat frei; P(mutex); // wirf 5 Ein-Euro-Stücke ein; V(geld); // warte auf Chips-Tüte; P(ware); // gib Automaten frei; V(mutex); //fülle Chips-Tüten nach; P(mutex2); for (i=count; i<200; i++) V(chips); count = 200; V(mutex2); In der Klausur müssen Sie nur die Ergebnisse der Schritte 4 und 5 hinschreiben, es sei denn, es wird ausdrücklich anders verlangt. 1 Reale Implementierungen lassen dies ggf. zu. 2

In der Klausur werden derart komplexe Synchronisationsaufgaben nicht verlangt. Aufgabe 2: Leser-Schreiber Synchronisation (Bearbeitung zu Hause) Gemeinsame Variable: Semaphore oktowrite = 1; Semaphore readers = 3; int activereaders = 0; Schreiber: oktowrite.p(); // write data base oktowrite.v(); Leser: readers.p(); mutex.p(); activereaders++; if (activereaders == 1) oktowrite.p(); mutex.v(); // read data base readers.v(); mutex.p( ; activereaders--; if (activereaders == 0) oktowrite.v(); mutex.v(); Aufgabe 3: Leser-Schreiber Synchronisation (Bearbeitung zu Hause) monitor ReaderWriter boolean writerisactive; integer activereaders; condition oktoaccess; (* Initialisierung *) writerisactive := false; activereaders := 0; procedure ReadStart while writerisactive do wait(oktoaccess); activereaders := activereaders + 1; procedure ReadEnd activereaders := activereaders - 1; if activereaders = 0 then signal(oktoaccess); procedure WriteStart 3

while writerisactive or activereaders > 0 do wait(oktoaccess); writerisactive := true; procedure WriteStop writerisactive := false; signal(oktoaccess); end monitor; Aufgabe 4: Synchronisation mit Monitoren (Bearbeitung zu Hause) monitor Toilette integer nfrau; (* Zahl der Frauen in der Toilette *) integer nmann; (* Zahl der Männer in der Toilette *) condition okfrau; (* Frau kann eintreten *) condition okmann; (* Mann kann eintreten *) (* Initialisierung *) nfrau := 0; nmann := 0; procedure Frau_moechte_eintreten while nmann > 0 do wait(okfrau); nfrau := nfrau + 1; procedure Frau_verlaesst_die_Toilette nfrau := nfrau - 1; if nfrau = 0 then signal(okmann); procedure Mann_moechte_eintreten while nfrau > 0 do wait(okmann); nmann := nmann + 1; procedure Mann_verlaesst_die_Toilette nmann := nmann - 1; if nmann = 0 then signal(okfrau); end monitor; Aufgabe 5: Synchronisation: Implementierung eines Semaphors (Bearbeitung zu Hause) public class MySemaphore private int sem; 4

private final Lock m1; private final Condition c1; public MySemaphore(int initval) sem = initval; m1 = new Lock("m1"); c1 = m1.newcondition("c1"); public void acquire() m1.lock(); while (sem == 0) c1.await(); sem--; m1.unlock(); public void release() m1.lock(); sem++; c1.signal(); m1.unlock(); 5