Proseminar Nichtsequentielle Programmiersprachen WS 2011/2012 Monitore
|
|
- Karoline Hofmeister
- vor 7 Jahren
- Abrufe
Transkript
1 Fachbereich Mathematik und Informatik Institut für Informatik Proseminar Nichtsequentielle Programmiersprachen WS 2011/2012 Monitore Sascha Kretzschmann 2. November 2011
2 Inhaltsverzeichnis 1 Einleitung 2 2 Monitore nach Brinch Hansen / Hoare Vorüberlegung Monitordefinition Zusammenfassung Monitoren in Java Umsetzung Zusammenfassung Anwendungsbeispiel 9 5 Quellen 12 1
3 1 Einleitung Für nichtsequenzielle Programmierung ist das wichtigste Sicherheitskriterium die Gewährleistung, dass sich Prozesse beim Zugriff auf Variablen nicht gegenseitig interferieren, also beeinflussen. Das bedeutet ferner, dass jeder Zugriff auf gemeinsam genutzte Variablen oder Ressourcen unbedingt von Sperren (locks), Semaphoren o.ä. überwacht werden muss. Ein Semaphor ist dabei eine Datenstruktur, welches einen fundamentalen Mechanismus zur Synchronisation darstellt. Sie wurden als Verallgemeinerung und Abstraktion von Spin-Locks von Edsger W. Dijkstra vorgeschlagen. Sie können sehr leicht und systematisch dazu benutzt werden, das Problem des gegenseitigen Ausschlusses (mutual exclusion) zu lösen. Jedoch birgt dies einige Probleme und Gefahren. Bei unachtsamer Benutzung kann es nämlich zu Fehlern kommen, die eine kontrollierte Ausführung des Programmes nicht mehr gewährleisten, da es sich lediglich um einen Mechanismus auf niedriger Ebene handelt. Als Beispiele sind dabei, das Vertauschen der P- und V-Operation oder das zu häufige Benutzen derer, anzuführen. Um dieses Problem zu beheben, führte Per Brinch Hansen Monitore als Programmierkonzept ein. [1] Dieses wurde später von C.A.R Hoare populär gemacht. [5] Im ersten Teil meiner Ausarbeitung werde ich besonders auf die Umsetzung von Monitoren nach Brinch Hansen / Hoare eingehen. Der zweite Teil soll darstellen, wie das ursprüngliche Monitor-Konzept in Java umgesetzt wird, bzw. Unterschiede herausarbeiten. Am Ende skizziere ich noch ein einfaches Beispiel. 2
4 2 Monitore nach Brinch Hansen / Hoare 2.1 Vorüberlegung Per Brinch Hansen wollte die sequentielle Programmiersprache Pascal um nichtsequentielle Elemente erweitern. [1] Sein Hauptanliegen war dabei, ein Sprachkonzept zu entwickeln, indem parallele Prozesse Daten in einem gemeinsamen Speicher teilen können. Mehrere Prozesse sollen also Daten gemeinsam nutzen können. Dazu betrachten wir einen Prozess detaillierter. Ein Prozess besteht aus Zugriffsrechten, einer privaten Datenstruktur und einem sequentiellen Programm, welches abgearbeitet wird. Offensichtlich arbeitet es auf seinen privaten Daten. Jedoch kann ein Prozess nicht auf die private Datenstruktur eines anderen Prozesses zugreifen. Wie können also konkurrierende Prozesse Daten gemeinsam nutzen, zum Beispiel über einen gemeinsamen Puffer? Die Lösung ist zunächst trivial. Es existiert ein Puffer und zwei Prozesse in Form eines producer process und eines consumer process, wobei der Produzent Daten erzeugt und diese im Puffer ablegt und der Konsument diese aufruft. [1] Folglich können konsumierende Prozesse Daten aufrufen und verarbeiten, solange diese existieren. Produzierende Prozesse hingegen stellen Daten zur Verfügung, solange der gemeinsam benutzte Puffer nicht voll ist. Doch wie soll jetzt der Puffer umgesetzt werden, so dass gegenseitiger Ausschluss (mutual exclusion) sichergestellt wird? Die Lösung sind Monitore. 2.2 Monitordefinition Ein Monitor ist ein Konstrukt, welches parallele Prozesse synchronisiert und ggf. die Zugriffsreihenfolge kontrolliert. D.h. es wird mutual exclusion gewährleistet, so dass zu jeder Zeit immer nur genau ein Prozess Code einer Prozedur ausführt. [3] Ein Monitor definiert Variablen, auf die man nur über die deklarierten Monitor-Prozesse zugreifen kann. Zusätzlich gibt es die Möglichkeit, Bedingungsvariablen (condition variables) zu definieren. 3
5 2 Monitore nach Brinch Hansen / Hoare Auf diese können nun folgende Operationen ausgeführt werden: 1. wait(c): warte, bis ein Prozess signalisiert, dass Bedingung c erfüllt ist 2. signal(c): signalisiere einen Prozess, der gerade auf c wartet 3. signalall(c): wie signal(c), nur, dass alle Prozesse signalisiert werden 4. empty(c): überprüfe, ob ein Prozess gerade auf Bedingung c wartet Beim Signalisieren von Prozessen kann man weiterhin vier verschiedene Möglichkeiten des Fortführens unterscheiden: 1. Signal-and-continue: Der Signalisierende fährt fort und der aufgeweckte Prozess ist zu einem späteren Zeitpunkt dran, wenn Monitor frei ist. 2. Signal-and-wait: Der signalisierende Prozess wartet und ist zu einem späteren Zeitpunkt dran. Der aufgeweckte Prozess kann nun arbeiten. 3. Signal-and-urgent-wait: wie oben, nur das dem signalisiertem Prozess garantiert wird, dass er nach dem aufgeweckten Prozess dran wird (wird vorne an die Queue gesetzt) 4. Signal-and-return: Die Signalisierung ist nur mit dem Verlassen eines Prozesses aus dem Monitor verbunden. Wollen wir uns nun einmal verschiedene "Typen"von Monitoren anschauen, die teilweise die eben genannten Varianten des Signalisierens umsetzen. Es existieren nämlich verschiedene Möglichkeiten, wie Prozesse in einem Monitor verwaltet werden. Zu den populärsten gehört einmal die Variante nach Hoare: Hoare style monitor [3] 4
6 2 Monitore nach Brinch Hansen / Hoare Diese Art von Monitoren besitzt eine Eingangswarteschlange und eine Warteschlange für jede Bedingungsvariable. Sobald ein Prozess den Monitor betritt, wird er zunächst in die Eingangswarteschlange eingereiht. Dort verbleibt er, solange ein anderer Prozess Code in der kritischen Sektion ausführt. Wird zum Beispiel wait(s) aufgerufen, landet der Prozess in der Warteschlange für die Bedingungsvariable s. Die zweite Variante stammt von Mesa: Mesa style monitor [3] Mesa benutzt die signal-and-continue Variante mit einer FIFO Warteschlangen. Im Gegensatz zu Hoare, landen also signalisierte Prozesse zunächst einmal wieder in der Eingangswarteschlange. Auch Java Monitore sind eine Variation dieses Types. 2.3 Zusammenfassung Im vorherigen wurden Monitore beschrieben und gezeigt, wie diese zusammen mit Klassen und Prozessen in Concurrent Pascal umgesetzt wurden. Dabei sollten sich einige entscheidende Punkte herausgestellt haben. 1. Monitore sind historisch das erste nicht triviale Sprachkonzept für Synchronisation. 2. Jede condition variable bringt eine eigene Warteschlange, in der Prozesse separat verzögert werden können, um auf bestimmte Bedingungen zu warten. 3. Wird eine Bedingung erfüllt, bekommen wartende Prozesse ein Signal. 4. Dabei gibt es vier verschiedene Varianten des Signalisierens, die Einfluss auf die Ausführungsreihenfolge haben (können). 5
7 3 Monitoren in Java 3.1 Umsetzung Um in Java auch Nichtsequenzialität benutzen zu können, wurden Threads eingeführt. Ein Thread kann man sich als ein abgekapseltes Objekt vorstellen, welches sequenziellen Code abarbeitet. In Java existiert kein Konstrukt, mit dem man Monitore explizit erzeugen kann. Somit kann man so gut wie jedes Objekt als einen Monitor verwenden. Jedoch wird dann kein gegenseitiger Ausschluss garantiert. Wir wollen uns also zu Beginn erst einmal anschauen, was alles getan werden muss, um "normale"java Klassen in eine Java Monitor Klasse zu überführen. 1. Instanzvariablen der Klassen müssen private deklariert sein 2. Methoden müssen als synchronized deklariert werden 3. Bedingte Synchronisation mit wait(), notify() und notifyall() Folglich unterscheidet sich die Umsetzung von Monitoren in Java stark, von der eigentlichen Auffassung nach Brinch Hansen/Hoare. [1] Das macht die ganze Sache relativ unsicher und garantiert keinen leichten und sicheren Umgang mehr, so wie es ursprünglich gedacht war. Weiterhin existieren keine Bedingungsvariablen. Stattdessen hat jedes Objekt einen Lock, der nur gehalten werden kann, wenn die Methoden synchronized deklariert wurden. [4] Neben einer Eingangswarteschlange (entry queue) existiert lediglich eine wait queue, in der alle wartenden Threads verwaltet werden. 6
8 3 Monitoren in Java Java style monitor [3] Nun kann es aber sein, dass nach der Prüfung einer bestimmten Bedingung, ein Thread verzögert werden muss. Dazu werden die oben genannten drei Methoden zur bedingten Synchronisation verwendet. Diese wären (sei o eine Ausprägung vom Typ Object): 1. o.wait(): lock von o wird freigegeben, Thread gelangt in Queue 2. o.release(): weckt einen Thread auf, der dann wartet, bis er Lock von o bekommt 3. o.releaseall():wie release(), nur werden alle Threads aufgeweckt Mit anderen Worten, man synchronisiert also über die Locks der Objekte. Und das kann man sich so vorstellen. Beim Aufruf einer synchronized Methode, eignet (acquire) sich der Thread den Lock an und kann unter gegenseitigem Ausschluss die gemeinsam genutzten Daten manipulieren. Danach wird der Lock wieder freigegeben. [4] 3.2 Zusammenfassung Abschließend noch einmal zusammengefasst, inwiefern sich das Monitorkonzept in Java vom "klassischen"monitor nach Brinch Hansen insbesondere unterscheidet. 1. In Java existiert kein Monitorkonstrukt, sowie keine Bedingungsvariablen. 2. Die Umsetzung eines Monitors in Java ist immer eine Variation des Monitores nach Mesa mit signal-and-continue. 7
9 3 Monitoren in Java 3. Bedingungsvariablen können simuliert werden, indem über das Lock von Objekten synchronisiert wird. 4. Sind jedoch alle Methoden einer Klasse synchronized deklariert, entspricht dies der klassischen Monitorvariante. 5. Java Monitore sind eine Variante nach Mesa, mit signal-and-continue. 6. Fairness wird in Java nicht "betrachtet", anders gesagt kann darüber keine Aussage getroffen werden. 8
10 4 Anwendungsbeispiel Hier die Umsetzung eines Bounded Buffers in Concurrent Pascal und in Java: bounded b u f f e r : monitor begin b u f f e r : array O.. N 1 of p o r t i o n ; l a s t p o i n t e r : O.. N 1 ; count : O.. N; nonempty, n o n f u l l : c o n d i t i o n ; procedure append ( x : p o r t i o n ) ; begin i f count = N then n o n f u l l. wait ; note 0 <= count < N; b u f f e r [ l a s t p o i n t e r ] := x ; l a s t p o i n t e r := l a s t p o i n t e r o l ; count := count + 1 ; nonempty. s i g n a l end append ; procedure remove ( r e s u l t x : p o r t i o n ) ; begin i f count = 0 then nonempty. wait ; note 0 < count < N; x := b u f f e r [ l a s t p o i n t e r o count ] ; n o n f u l l. s i g n a l end remove ; count := 0 ; l a s t p o i n t e r := 0 ; end bounded b u f f e r ; Bounded buffer in Java [5] Es gibt Produzenten, die Daten erzeugen und diese an Konsumenten weitergeben.die Weitergabe erfolgt mit Hilfe des Buffers, der eine bestimmte Anzahl von Daten lagern kann. Es muss darauf geachtet werden, dass der Produzent wartet, sollte der Buffer voll sein. Hierfür existiert die Bedingungsvariable nonfull. Sollte der Puffer also voll sein, dann wartet der Prozess in der Warteschlange der Bedingungsvariable. Er wird erst wieder signalisiert, wenn ein Prozess die Methode remove() aufgerufen hat, und somit wieder etwas prouziert werden kann. 9
11 4 Anwendungsbeispiel Außerdem sollen Konsumenten, die einen leeren Buffer vorfinden, ebenfalls warten. Für diesen Fall gibt es die Bedingungsvariable nonempty. Das Prinzip ist das selbe, wie bei nonfull. Im folgenden sehen wir nun die Umsetzung des Bounded Buffers in Java: class B u f f e r { private Object [ ] b u f f e r ; // Das Object b u f f e r hat d i e i n d i z e s in und out private int in, out, count, s i z e ; public synchronized void append ( Object o ) { while ( count == s i z e ) wait ( ) ; // Buffer i s t v o l l b u f f e r [ in ] = o ; in = ( in + 1) % s i z e ; // P r o d u z i e r t ++count ; // Erhoehe counter n o t i f y A l l ( ) ; // Wecke a l l e wartenden Threads } public synchronized Object remove ( ) { while ( count == 0) wait ( ) ; // Buffer i s t l e e r Object o = b u f f e r [ out ] ; b u f f e r [ out ] = null ; // Konsumiert out = ( out + 1) % s i z e ; count ; // Senke counter n o t i f y A l l ( ) ; // Wecke a l l e wartenden Threads return o ; } } public B u f f e r ( ) { this. in = 0 ; this. out = 0 ; this. count = 0 ; this. s i z e = 1 0 ; } Bounded buffer in Java [4] Bei dieser Umsetzung existiert nur eine Warteschlange, nämlich die implizize Bedingungsvariable des Objektes (wait queue). Da nun beim Signalisieren nicht auf spezielle Warteschlangen 10
12 4 Anwendungsbeispiel zugegriffen werden kann (alle befinden sich in einer), werden alle wartenden Prozesse mit der releaseall()-methode aufgeweckt und nach dem Prinzip signal-and-continue behandelt. Ein weiterer Unterschied ist, dass die Bedingungen über while-schleifen überprüft werden. Es kann nämlich passieren, dass ohne Aufruf der releaseall()-methode ein wartender Prozesse aufgeweckt wird. Um Probleme durch dieses unvorhersehbare Verhalten zu umgehen, haben wir die ebend erwähnte Überprüfung umgesetzt (covering condition). 11
13 5 Quellen Brinch Hansen, P., 1975a. The programming language Concurrent Pascal. IEEE Transactions on Software Engineering 1, June, ; [1] Brinch Hansen, P., Java s insecure parallelism, SIGPLAN Notices 34, 4 (April 1999), Copyright 1999, [2] Kyas, Prof. Dr. Marcel 2011, Manuskript zur Vorlesung ALP4, Freie Universität Berlin, Abschnitt über Monitore [3] Gorlatsch, Sergei 2006, Multithreating and Networking im Java-Umfeld Volresung 4, Uni Münster, 11-24; [4] C.A.R. Hoare: Monitors An Operating System Structuring Concept. Comm. of the ACM 17.10, October 1974; ftp://reports.stanford.edu/pub/cstr/reports/cs/tr/73/401/cs-tr pdf [5] 12
Monitore. Klicken bearbeiten
Sascha Kretzschmann Institut für Informatik Monitore Formatvorlage und deren Umsetzung des Untertitelmasters durch Klicken bearbeiten Inhalt 1. Monitore und Concurrent Pascal 1.1 Warum Monitore? 1.2 Monitordefinition
MehrÜbung zu Grundlagen der Betriebssysteme. 10. Übung 18.12.2012
Übung zu Grundlagen der Betriebssysteme 10. Übung 18.12.2012 Aufgabe 1 a) Was versteht man unter einem kritischen Abschnitt oder kritischen Gebiet (critical area)? b) Welche Aufgabe hat ein Semaphor? c)
MehrInfo B VL 16: Monitore und Semaphoren
Info B VL 16: Monitore und Semaphoren Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 16: Monitore und
MehrPROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker
Multithreading PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker Steffen Helke Technische Universität Berlin Fachgebiet Softwaretechnik 10. Juni 2013 Übersicht Rückblick: Producer-Consumer-Problem
MehrParallele Prozesse. Prozeß wartet
Parallele Prozesse B-66 Prozeß: Ausführung eines Programmes in seinem Adressraum (zugeordneter Speicher) Parallele Prozesse: gleichzeitig auf mehreren Prozessoren laufende Prozesse p1 p2 verzahnte Prozesse:
MehrÜbung Betriebssysteme 11
Übung Betriebssysteme 11 Christian Motika Christian-Albrechts-Universität zu Kiel Institut für Informatik AG Echtzeitsysteme / Eingebettete Systeme Kiel, Germany 29-JAN-2013 CAU - WS 2012/13 Übung Betriebssysteme
MehrLeser-Schreiber-Realisierung mit Semaphoren
Leser-Schreiber-Realisierung mit Semaphoren Reader: down(semwriter); down(semcounter); rcounter++; up(semwriter); read(); down(semcounter); rcounter--; Writer: Problem: down(semwriter); Busy Waiting siehe
MehrThread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen
Thread-Synchronisation in in Java Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen Die Klasse Thread Die Die Klasse Thread gehört zur zur Standardbibliothek von von
MehrBetriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen)
Betriebssysteme G: Parallele Prozesse (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen) 1 Allgemeine Synchronisationsprobleme Wir verstehen ein BS als eine Menge von parallel
MehrInformatik B. Vorlesung 8 Synchronisierung von Threads. Dr. Ralf Kunze
Vorlesung 8 Synchronisierung von Threads 1 Rückblick Threads Erzeugen, Starten und Stoppen Fehler abfangen Gemeinsamer Zugriff auf Ressourcen Kritische Blöcke (Einleitung) 2 Kritische Blöcke Kritische
MehrJJ Prozesse und Nebenläufigkeit
1 Wiederholung: Algorithmus von Peterson boolean ready0=false, ready1=false; int turn=0; JJ Prozesse und Nebenläufigkeit (Auszug aus der Vorlesung) while( 1 ) Prozess 0 ready0 = true; turn = 1; while(
MehrWirtschaftsinformatik II Sommersemester Lo sungshinweise zu den Ü bungen P. Mandl, M. Dolag, B. Rottmüller, et al.
Wirtschaftsinformatik II Sommersemester 2016 Lo sungshinweise zu den Ü bungen 2-6 @Prof. P. Mandl, M. Dolag, B. Rottmüller, et al. Seite 1 / 6 Übung 2 Verwendung von Java-Threads Ableitung von Klasse Thread
MehrVerteilte Systeme CS5001
Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Client-Server-Anwendungen: Vom passiven (shared state) Monitor zum aktiven Monitor Monitor (Hoare, Brinch-Hansen,
Mehrparallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.
Threads parallele Prozesse auf sequenziellen Prozessoren Prozesse und Threads Es gibt zwei unterschiedliche Programme: Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher. Ein Thread
MehrGliederung. Monitor (eine auf ein Modul bezogene) Klasse
Systemprogrammierung Prozesssynchronisation: Hochsprachenebene Wolfgang Schröder-Preikschat Lehrstuhl Informatik 4 04. November 2014 c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2 # WS 2014/15
MehrInfo B VL 17: Deadlocks
Info B VL 17: Deadlocks Objektorientiere Programmierung in Java 2003 Ute Schmid (Vorlesung) Elmar Ludwig (Übung) FB Mathematik/Informatik, Universität Osnabrück Info B VL 17: Deadlocks p.327 Conditional
MehrObjektorientierte Programmierung
Objektorientierte Programmierung Ausnahmebehandlung und Nebenläufigkeit 9. Vorlesung am 15. Dezember 2010 Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A
MehrBeispiel für überladene Methode
Beispiel für überladene Methode class Gras extends Futter {... abstract class Tier { public abstract void friss (Futter x); class Rind extends Tier { public void friss (Gras x) {... public void friss (Futter
MehrLebenszyklus von Threads
Threads Umgangssprachlich Faden, Diskussionsfaden, Gewinde, Faser, Garn, roter Faden Threads ermöglichen Nebenläufigkeit (parallele Ausführung von Anwendungsteilen). Typisch für Threads ist,dass sie zu
MehrSystemprogrammierung
Systemprogrammierung Prozesssynchronisation: Hochsprachenebene Wolfgang Schröder-Preikschat Lehrstuhl Informatik 4 12. Januar 2011 c wosch (Lehrstuhl Informatik 4) Systemprogrammierung WS2010/11 1 / 20
MehrErstes Leser-Schreiber-Problem
Erstes Leser-Schreiber-Problem Szenario: mehrere Leser und mehrere Schreiber gemeinsamer Datenbereich Schreiber haben exklusiven Zugriff Leser können parallel zugreifen (natürlich nur, wenn kein Schreiber
MehrDas Monitorkonzept Brinch-Hansen
Das Monitorkonzept (nach Hoare/Brinch Brinch-Hansen 1974) Nur ein Prozess bzw. Thread kann zu einem bestimmten Zeitpunkt im Monitor aktiv sein => gegenseitiger Ausschluss, mutual exclusion. Geschützte
MehrAufgabenblatt 8 Musterlösung
Prof. Dr. rer. nat. Roland Wismüller Aufgabenblatt 8 Musterlösung Vorlesung Betriebssysteme I Wintersemester 2017/18 Aufgabe 1: Erzeuger-Verbraucher Synchronisation (Bearbeitung in der Übungsstunde) Erzeuger-Verbraucher-Problem:
MehrTesten nebenläufiger Objekte
Testen nebenläufiger Objekte Threads in Java Julian Lambertz Seminar Tests in Informatik und Statistik im SS 2004 Universität Ulm J.L., Juni 2004 1 Themenüberblick Einleitung Begriff der Nebenläufigkeit
MehrSystemprogrammierung
Systemprogrammierung Prozesssynchronisation: Hochsprachenebene Wolfgang Schröder-Preikschat Lehrstuhl Informatik 4 16. November 2011 c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2#WS2011/12
Mehr9 Synchronisation 9.5 Monitor
Monitor (engl. monitor) 9 Synchronisation 9.5 Monitor Ein synchronisierter abstrakter Datentyp, d.h., ein ADT mit impliziten Synchronisationseigenschaften[66, 67]: mehrseitige Synchronisation an der Monitorschnittstelle
MehrMonitor (eine auf ein Modul bezogene) Klasse
Systemprogrammierung Prozesssynchronisation: Hochsprachenebene Wolfgang Schröder-Preikschat Lehrstuhl Informatik 4 16. November 2011 c wosch (Lehrstuhl Informatik 4) Systemprogrammierung SP2#WS2011/12
MehrVorlesung Informatik II
Vorlesung Informatik II Universität Augsburg Wintersemester 2011/2012 Prof. Dr. Bernhard Bauer Folien von: Prof. Dr. Robert Lorenz Lehrprofessur für Informatik 17. JAVA Kommunikation von Threads 1 Motivation
MehrAusnahmebehandlung in Java
Ausnahmebehandlung in Java class A { void foo() throws Help, SyntaxError {... class B extends A { void foo() throws Help { if (helpneeded()) throw new Help();... try {... catch (Help e) {... catch (Exception
MehrLaborskript Verteilte Systeme
Laborskript Verteilte Systeme Nebenläufigkeit in Java Prof. Dr. Oliver Haase 1 Threads Java bietet zwei verschiedene Arten an, Threads zu erzeugen und zu starten: Entweder durch Erweitern der Klasse Thread,
MehrEinstieg in die Informatik mit Java
1 / 25 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 25 1 Die Philosophie 2 Definition
MehrPthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester
Seminar: Multicore Programmierung Sommersemester 2009 16.07.2009 Inhaltsverzeichnis 1 Speichermodell 2 3 Implementierungsvielfalt Prioritätsinversion 4 Threads Speichermodell Was sind Threads innerhalb
MehrAnwendung (2. Versuch:-) Entkopplung der Locks
Gut gemeint aber leider fehlerhaft... Jeder Producer benötigt zwei Locks gleichzeitig, um zu produzieren: 1. dasjenige für den Puffer; 2. dasjenige für einen Semaphor. Musser fürden Semaphor einwait()
MehrNebenläufigkeit mit Java
Nebenläufigkeit mit Java Einheit 03: Synchronisation Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Synchronisation von Threads Locks Java Monitor-Konzept Lock Freigabe Zusammenspiel
MehrKlausur Nichtsequentielle Programmierung
Klausur Nichtsequentielle Programmierung Prof. Dr. Marcel Kyas 22. Juli 2009 Nachname: Bachelor Magister Vorname: Master Lehramt Diplom Hinweise zur Klausur Bitte überprüfen Sie, dass Sie alle Seiten dieser
MehrErzeuger-Verbraucher-Problem
Erzeuger-Verbraucher-Problem Hier: Puffer der Größe 1, Erzeuger, Verbraucher Zwei Semaphore werden eingesetzt, um zwischen Threads "Ereignisse zu melden" Man kann Semaphore auch verwenden, um Ereignisse
MehrVerkettete Datenstrukturen: Listen
Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).
MehrNebenläufige und verteilte Programme CS2301
Nebenläufige und verteilte Programme CS2301 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Monitorprogramme: Passive Monitore und aktive Threads Monitor-Anwendungen: Spezifikation
MehrEinführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper
Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,
MehrInhaltsverzeichnis. Carsten Vogt. Nebenläufige Programmierung. Ein Arbeitsbuch mit UNIX/Linux und Java ISBN:
Inhaltsverzeichnis Carsten Vogt Nebenläufige Programmierung Ein Arbeitsbuch mit UNIX/Linux und Java ISBN: 978-3-446-42755-6 Weitere Informationen oder Bestellungen unter http://www.hanser.de/978-3-446-42755-6
Mehr9. Vorlesung Betriebssysteme
Dr. Christian Baun 9. Vorlesung Betriebssysteme Hochschule Mannheim WS1213 1/39 9. Vorlesung Betriebssysteme Dr. Christian Baun Hochschule Mannheim Fakultät für Informatik wolkenrechnen@gmail.com Dr. Christian
MehrZur Erinnerung: Threads. Threadverwaltung. Threads: Prioritäten. Beispiel Flugbuchungsprogramm. Nichtdeterminismus
Zur Erinnerung: Threads Programmierung (fortgeschrittene Konzepte) Threads, Monitore, Semaphore und speisende en Wolf-Ulrich Raffel (uli@wuraffel.de) Möglichkeiten, Threads zu definieren Bildung einer
MehrJava Concurrency Utilities
Java Concurrency Utilities Java unterstützt seit Java 1.0 Multithreading Java unterstützt das Monitorkonzept mittels der Schlüsselworte synchronized und volatile sowie den java.lang.object Methoden wait(),
MehrInnere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java
Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 13.06.07 G. Bohlender (IANM UNI Karlsruhe) Innere Klassen 13.06.07 1 / 11
MehrSven Osterwald Concurrent Objects. Proseminar Parallele Programmierung in Java
Sven Osterwald 12.05.2010 Concurrent Objects Proseminar Parallele Programmierung in Java Überblick 1. Einführung 2. Beispiel FIFO-Queue mit und ohne Lock 3. Korrektheit bei sequentiellen Objekten 4. Korrektheit
MehrVerteilte Anwendungen. Teil 3: Synchronisation
Verteilte Anwendungen Teil 3: Synchronisation 08.04.18 1 Literatur [3-1] Werner, Dieter: Theorie der Betriebssysteme. Hanser, 1992 [3-2] Dannegger, Christian; Geugelin-Dannegger, Patricia: Parallele Prozesse
MehrGegenseitiger Ausschluss 102
Gegenseitiger Ausschluss 102 MX = M (P 1... P n ) M = (lock unlock M) P i = (lock begin_critical_region i end_critical_region i unlock private_work i P i ) n Prozesse P 1... P n wollen konkurrierend auf
MehrBetriebssysteme Theorie
Betriebssysteme Theorie SS 2011 Hans-Georg Eßer Dipl.-Math., Dipl.-Inform. Foliensatz D (05.05.2011) Synchronisation 05.05.2011 Betriebssysteme-Theorie, Hans-Georg Eßer Folie D-1 Einführung (1) Es gibt
MehrBetriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion
Betriebssysteme Vorlesung im Herbstsemester 2010 Universität Mannheim Kapitel 6: Speicherbasierte Prozessinteraktion Felix C. Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung
Mehr#define N 5 // Anzahl der Philosophen. while (TRUE) { // Der Philosoph denkt
Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)
MehrObjektorientierte Programmierung und Klassen
Objektorientierte Programmierung und Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 16.5.07 G. Bohlender (IANM UNI Karlsruhe) OOP
MehrJava I Vorlesung Nebenläufigkeit
Java I Vorlesung 10 Nebenläufigkeit 28.6.2004 Threads Synchronisation Deadlocks Thread-Kommunikation Innere Klassen Anonyme Klassen Nebenläufigkeit http://java.sun.com/docs/books/tutorial/essential/threads/
MehrVerbessertes Konzept: Monitore
Verbessertes Konzept: Monitore Ein Nachteil von Semaphoren ist die Notwendigkeit zur expliziten Anforderung P und Freigabe V des kritischen Bereiches durch den Programmierer Vergißt der Entwickler z.b.
MehrEinführung in die Programmierung Blockkurs Java
Michael Bader 19. 25. Februar 2003 Freitag Inhaltsübersicht Exceptions und Errors Ausnahmebehandlung: try/catch/finally Threads Zugriffskontrolle bei gemeinsamen Variablen: synchronized, wait(), notify()
MehrEinstieg in die Informatik mit Java
1 / 16 Einstieg in die Informatik mit Java Innere Klassen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 16 1 Einführung 2 Element-Klassen 3 Lokale Klassen 4 Anonyme Klassen
MehrNebenläufige Programmierung
Nebenläufige Programmierung Perspektiven der Informatik 27. Januar 2003 Gert Smolka Telefon-Szenario Eine Telefonzelle Mehrere Personen wollen telefonieren Immer nur eine Person kann telefonieren Ressource
MehrJedesObjekt(mit ÝÒ ÖÓÒ Þ -Methoden)verfügtübereine. wartender Threads sowie die Objekt-Methoden:
JedesObjekt(mit ÝÒ ÖÓÒ Þ -Methoden)verfügtübereine weitereschlange Ì Ö ÉÙ Ù Û Ø Ò Ì Ö amobjekt wartender Threads sowie die Objekt-Methoden: ÔÙ Ò ÚÓ Û Ø µ Ø ÖÓÛ ÁÒØ ÖÖÙÔØ Ü ÔØ ÓÒ ÔÙ Ò ÚÓ ÒÓØ Ý µ ÔÙ Ò ÚÓ
MehrBetriebssysteme G: Parallele Prozesse ( Teil C: SpinLock, Semaphore, Monitore)
Betriebssysteme G: Parallele Prozesse ( Teil C: SpinLock, Semaphore, Monitore) 1 Hardwareunterstützung Uniprozessor-System Verbiete Interrupts während des Aufenthalts in einer CR disable interrupt CR(bzw:
MehrKapitel 4. Monitore und wechselseitiger Ausschluss
Seite 1 Kapitel 4 Monitore und wechselseitiger Ausschluss Prof. Dr. Rolf Hennicker 28.05.2015 4.1 Interferenzen Seite 2 Parallel ablaufende Prozesse können sich gegenseitig (störend) beeinflussen. Beispiel
MehrDie Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit ausgeführt werden.
7 Parallelität und Nebenläufigkeit Mehrere Prozessen oder Threads Parallelität Die Anweisungen zweier Prozesse werden parallel bearbeitet, wenn die Anweisungen unabhängig voneinander zur gleichen Zeit
MehrRepetitorium Informatik (Java)
Repetitorium Informatik (Java) Tag 6 Lehrstuhl für Informatik 2 (Programmiersysteme) Übersicht 1 Klassen und Objekte Objektorientierung Begrifflichkeiten Deklaration von Klassen Instanzmethoden/-variablen
MehrParallelität, Threads
Parallelität, Threads Tutorium 17 Fabian Miltenberger 30.06.2014 INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD) KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum
MehrDurch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei
Lösungsvorschläge zur Klausur zum Kurs 1618 Sommersemester 2001 am 22.9.2001 Aufgabe 1 a) Benutzungsbeziehung: class Kennzeichen class Fahrzeug boolean gueltigeskennzeichen (Kennzeichen kz) Objekte der
MehrThread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java
Thread-Konzept in objektorientierten Programmiersprachen 1 Threads ein Thread ist ein eigenständiges Programmfragment, das parallel zu anderen Teilen eines Programmes ablaufen kann alle Threads eines Programmes
Mehr1. Motivation. Problemstellung: Dateninkonsistenzen (data races) aufgrund von konkurrierenden Zugriffen auf gemeinsame Daten sollen verhindert werden.
1. Motivation Problemstellung: Dateninkonsistenzen (data races) aufgrund von konkurrierenden Zugriffen auf gemeinsame Daten sollen verhindert werden. 25.09.09 Ferienakademie 2009 Kurs 1: Data Coloring
MehrTU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.
TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D. Übung zur Vorlesung Einführung in die Informatik 2 für Ingenieure (MSE) Alexander van Renen (renen@in.tum.de)
MehrAbschnitt 10: Datenstrukturen
Abschnitt 10: Datenstrukturen 10. Datenstrukturen 10.1Einleitung 10.2 Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 829 / 867 Einleitung Überblick 10. Datenstrukturen 10.1Einleitung
Mehrleave: mov flag, 0 ; 0 in flag speichern: Lock freigeben ret
Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)
MehrOpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer
OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell
MehrVererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 14.1.
Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 14.1.08 G. Bohlender (IANM UNI Karlsruhe) Vererbung 14.1.08 1 / 11 Übersicht 1
MehrEinstieg in die Informatik mit Java
1 / 39 Einstieg in die Informatik mit Java Objektorientierte Programmierung und Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 39 1 Überblick:
MehrEinführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für
MehrThreads Einführung. Zustände von Threads
Threads Einführung Parallelität : Zerlegung von Problemstellungen in Teilaufgaben, die parallelel ausgeführt werden können (einfachere Strukturen, eventuell schneller, Voraussetzung für Mehrprozessorarchitekturen)
MehrNebenläufige Programmierung: Praxis und Semantik. Programmierprimitiven (2)
Stand der Folien: 6. Dezember 2011 Aktuelle Themen zu Informatik der Systeme: Nebenläufige Programmierung: Praxis und Semantik Programmierprimitiven (2) WS 2011/12 Monitore Anwendungsbeispiele Monitore
MehrAufgabenblatt 7 Musterlösung
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
MehrInstitut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke
Institut für Programmierung und Reaktive Systeme Java 6 Markus Reschke 13.10.2014 OOP Objekte = Verhalten (durch Methoden) + Daten (durch Attribute) Klassen = Baupläne für Objekte Kapselung von Programmteilen
MehrEinstieg in die Informatik mit Java
1 / 35 Einstieg in die Informatik mit Java Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 35 1 Grundlagen 2 Verdeckte Variablen 3 Verdeckte Methoden 4 Konstruktoren
MehrPraktikum aus Softwareentwicklung 2, Stunde 5
Praktikum aus Softwareentwicklung 2, Stunde 5 Lehrziele/Inhalt 1. Threads Threads Threads sind parallele, oder auf Rechnern mit nur einer CPU quasi-parallele, Programmabläufe in Java. Sie können beispielsweise
MehrPThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes
PThreads Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message queues, pipes, shared memory
Mehr(b.) Welche Möglichkeit gibt es, die Methode run so zu verändern, dass Bora Bora IMMER zuletzt ausgegeben wird?
Threads - Seite 1 Threads (1.) (a.) Nehmen Sie das Beispiel 2 von der Folie und ändern Sie dies ab, so dass sie z.b. ein Array von 100 Threads starten können! Testen Sie aber zunächst ihren Kode mit einem
MehrInstitut fu r Informatik
Technische Universita t Mu nchen Institut fu r Informatik Lehrstuhl fu r Bioinformatik Einfu hrung in die Programmierung fu r Bioinformatiker Prof. B. Rost, L. Richter WS 2014/15 Aufgabenblatt 11 19.01.2015
MehrRainer Oechsle. Parallele und verteilte. Anwendungen in Java. 4., neu bearbeitete Auflage. Mit 165 Listings, 5 Tabellen und 71 HANSER
Rainer Oechsle Parallele und verteilte Anwendungen in Java 4., neu bearbeitete Auflage Mit 165 Listings, 5 Tabellen und 71 Bildern HANSER Inhalt 1 Einleitung 15 1.1 Parallelität, Nebenläufigkeit und Verteilung
MehrSynchronisation in Java. Invisible Web
Synchronisation in Java Studienprojekt Invisible Web Tang Zhihong Synchronisation in Java Synchronisationsproblem Monitore Wait und notify PipedInputStream und PipedOutputStream Synchronisation von Collections
Mehr1 Klassen und Objekte
1 Klassen und Objekte Datentyp - Spezifikation des Typs von Datenobjekten Datenstruktur - logische Ordnung von Elementen eines Datentyps - zur (effizienten) Speicherung, Verwaltung, Zugriff - auf die Elemente
MehrLehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading
Leistungskurs C++ Multithreading Zeitplan 16.10. Vorlesung 23.10. Vorlesung, Gruppeneinteilung 30.10. Vorlesung, HA1 06.11. Vorlesung, HA2 13.11. Vorlesung entfällt wegen SVV 20.11. Präsentation Vorprojekt
MehrII. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )
Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:
MehrNebenläufige Programmierung in Java: Threads
Nebenläufige Programmierung in Java: Threads Wahlpflicht: Fortgeschrittene Programmierung in Java Jan Henke HAW Hamburg 10. Juni 2011 J. Henke (HAW) Threads 10. Juni 2011 1 / 18 Gliederung 1 Grundlagen
MehrEinstieg in die Informatik mit Java
1 / 27 Einstieg in die Informatik mit Java Klassen als Datenstrukturen Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 27 1 Überblick: Klassen als Datenstruktur 2 Vereinbarung
MehrEinstieg in die Informatik mit Java
1 / 34 Einstieg in die Informatik mit Java Klassen mit Instanzmethoden Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 34 1 Definition von Klassen 2 Methoden 3 Methoden
MehrProzesszustände (1a)
Prozesszustände (1a) NOT EXISTING DELETED CREATED Meta-Zustand (Theoretische Bedeutung) Prozesszustände Multiuser Umfeld (1c) Hintergrund-Prozess - der Prozess startet im Hintergrund - my-commandbin &
MehrAlgorithmen implementieren. Implementieren von Algorithmen
Algorithmen implementieren Implementieren von Algorithmen Um Algorithmen ablaufen zu lassen, muss man sie als Programm darstellen (d.h. implementieren) Wie stellt man die algorithmischen Strukturelemente
MehrImplementieren von Klassen
Implementieren von Klassen Felder, Methoden, Konstanten Dr. Beatrice Amrhein Überblick Felder/Mitglieder (Field, Member, Member-Variable) o Modifizierer Konstanten Methoden o Modifizierer 2 Felder und
MehrVererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.
Vererbung Gerd Bohlender Institut für Angewandte und Numerische Mathematik Vorlesung: Einstieg in die Informatik mit Java 23.5.07 G. Bohlender (IANM UNI Karlsruhe) Vererbung 23.5.07 1 / 22 Übersicht 1
MehrProzeßorientierter Simulator mit Java
Prozeßorientierter Simulator mit Java Stationen können in Java mit Objekten einer Klasse modelliert werden, ebenso Entitäten. Entitäten sind einfach Datenverbunde mit Attributen und Zustandsvariablen.
MehrUniversität Karlsruhe (TH)
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Das Java-Speichermodell Prof. Dr. Walter F. Tichy Dr. Victor Pankratius Ali Jannesari Geschichte des Speichermodells Kapitel 17 der Java-Sprachdefinition
MehrLehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading
Leistungskurs C++ Multithreading Threading mit Qt Plattformübergreifende Thread-Klasse Sehr einfach zu benutzen Leider etwas schlecht dokumentiert Leistungskurs C++ 2 QThread Plattformübergreifende Thread-Klasse
MehrPrinzipien der objektorientierten Programmierung (OOP)
Die Ziele der OOP sind: - bessere Warbarkeit - Wiederverwendbarkeit 1.) Datenkapselung Prinzipien der objektorientierten Programmierung (OOP) Komplexe Datenstrukturen (wie zb ein Stack) werden vom Anwendungsprogramm
MehrJavakurs für Fortgeschrittene
Javakurs für Fortgeschrittene Einheit 07: Nebenläufigkeit Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Heutige Agenda Einführung in die Nebenläufigkeit und Java Thread Konzept: Motivation
Mehr