Verteilte Systeme CS5001

Ähnliche Dokumente
Nebenläufige und verteilte Programme CS2301

Synchronisation in Java. Invisible Web

Verteilte Algorithmen TI5005

Monitore. Klicken bearbeiten

Einführung in die Programmierung Blockkurs Java

Parallele Prozesse. Prozeß wartet

Verteilte Systeme CS5001

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Programmieren I. Strategie zum Entwurf von Klassen. Beispiele. Design von Klassen. Dr. Klaus Höppner. Beispiel: Bibliothek

Verteilte Algorithmen TI5005

Programmierkurs Java

Einführung in die Programmierung

CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik)

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

5. Tutorium zu Programmieren

Objektorientierte Programmierung

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

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

Prof. Dr. Uwe Schmidt. 21. August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)

Programmiermethodik. Übung 13

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

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

5. Threads, Serverprozesse und Benachrichtigungen

Programmieren in Java

Übungen zu Softwaretechnik

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Musterlösungen zur Klausur Informatik 3

Java: Vererbung. Teil 3: super()

Themen. Web Service - Clients. Kommunikation zw. Web Services

WebService in Java SE und EE

Aufgabenblatt 8 Musterlösung

Universität Karlsruhe (TH)

Domänenmodell: Fadenkommunikation und -synchronisation

Tagesprogramm

Kapitel 4. Monitore und wechselseitiger Ausschluss

SEP 114. Design by Contract

Dokumentation des Projektes Tic Tac Toe

Algorithmen und Datenstrukturen

Rekursion. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Ausnahmebehandlung in Java

Java Kurs für Anfänger Einheit 5 Methoden

C# im Vergleich zu Java

2A Basistechniken: Weitere Aufgaben

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Technische Universität München SS 2006 Fakultät für Informatik 12. Oktober 2006 Prof. Dr. A. Knoll. Aufgabe 1 Transferfragen (Lösungsvorschlag)

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Arrays Fortgeschrittene Verwendung

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

IT in der Arztpraxis Technisches Handbuch zum Kodierassistenten

Der lokale und verteilte Fall

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Applet Firewall und Freigabe der Objekte

Client-Server-Beziehungen

Java 7. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Dezember 2011 JAV7

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Vorkurs C++ Programmierung

Distributed Computing Group

Programmieren in Java

Übersicht Programmablaufsteuerung

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

iphone-kontakte zu Exchange übertragen

Delegatesund Ereignisse

Einführung Verteilte Systeme - Java Threads I -

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Objektorientierte Programmierung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Studentische Lösung zum Übungsblatt Nr. 7

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

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

Objektorientierte Programmierung

Algorithmik II. a) Fügen Sie in einen anfangs leeren binären Baum die Schlüsselfolge 20, 28, 35, 31, 9, 4, 13, 17, 37, 25 ein.

Große Übung Praktische Informatik 1

Prinzipien Objektorientierter Programmierung

Innere Klassen in Java

Vorlesung Informatik II

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Gliederung. Monitor (eine auf ein Modul bezogene) Klasse

Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 {

-Virtuelle Jagdfliegerschule- Teamspeak Seite 1 von 6

DIRECTINFO 5.7 SICHERHEITSKONZEPTE FÜR BENUTZER, INFORMATIONEN UND FUNKTIONEN

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

1 Was ist das Mediencenter?

I Serverkalender in Thunderbird einrichten

Powermanager Server- Client- Installation

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Arrays von Objekten. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

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

Rechenzentrum der Ruhr-Universität Bochum. Integration von egroupware an der RUB in Outlook 2010 mit Funambol

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Klassendefinitionen verstehen

Mobile und Verteilte Datenbanken

Eine Anleitung, wie Sie Mozilla Thunderbird 2 installieren und konfigurieren können. Installation Erstkonfiguration... 4

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

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

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

Transkript:

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, 1975) Ein Monitor ist ein Modul / Objekt, in dem die von Prozessen gemeinsam genutzten Daten und ihre Zugriffsprozeduren (oder Methoden) zu einer Einheit zusammengeführt sind. Monitor = Definition als Klasse mit Synchronisation Kapselt Daten mit ihren synchronisierten Zugriffsmethoden Synchronisation: Gegenseitiger Ausschluss Garantiert exklusiven Zugriff (Vermeide race conditions) Java: synchronized / Lock Bedingungssynchronisation Garantiert Zugriff unter den notwendigen Bedingungen (conditional synchronisation) Java: wait/notify, Condition Monitore sind passive Konstrukte Monitor basiert auf gemeinsamen Speicher Aktive Einheiten (Prozesse) greifen auf passive Ressourcen zu, die ihre Zugriffe synchronisieren Seite 2

passiver Monitor: Beispiel Puffer Gegenseitiger Ausschluss Gleichzeitiger Zugriff nicht erlaubt Bedingungssynchronisation Kein Ablegen in vollen Puffer, kein Entnehmen aus leerem Puffer monitor Buffer { Token place; boolean public class Buffer<TokenType> { TokenType place; boolean synchronized void put(tokentype t) throws InterruptedException { while (! empty ) wait(); place = t; notify(); // one call must not interfere with other calls // Pre: empty void put(token t) { place = t; // one call must not interfere with other calls // Pre: not empty Token get() { return place; synchronized TokenType get() throws InterruptedException { while ( empty ) wait(); notify(); return place; shared state Puffer: Konzept shared state Puffer: Implementierung Seite 3

passiver Monitor: Beispiel Puffer public class Main { static enum Token { PING, PONG ; static Buffer<Token> buffer = new Buffer<>(); public static void main(string[] args) { new Thread(new Runnable(){ // Producer public void run() { while (true) { try { buffer.put(token.ping); Thread.sleep(1000); System.out.println(buffer.get()); catch (InterruptedException e) { ).start(); passiver shared state Puffer: Produzent und Konsument als Nutzer new Thread(new Runnable(){ // Consumer public void run() { while (true) { try { buffer.put(token.pong); Thread.sleep(1000); System.out.println(buffer.get()); catch (InterruptedException e) { ).start(); Seite 4

aktiver statt passiver Monitor: Kommunikation statt Synchronisation Gemeinsamer Zustand ist nicht möglich Die Prozesse können nicht auf eine gemeinsame Ressource zugreifen. Die gemeinsame Ressource muss darum einen Server umgewandelt werden mit eigenem Kntrollfluss der die Aufträge als Nachrichten entgegen nimmt und bearbeitet. Aktiver statt passiver Monitor: Kommunikation statt Synchronisation Prozesse ohne gemeinsamen Zustand haben nur Synchronisationsanweisungen sind nicht mehr notwendig, da es keine gemeinsamen Ressourcen gibt: Gegenseitiger Ausschluss ist kein Thema mehr Die korrekte Reihenfolge der Verarbeitung muss aber weiterhin gewährleistet sein: Bedingungssynchronisation ist weiterhin ein Thema Produzent Konsument passiver Puffer Produzent Seite 5 aktiver Puffer Konsument

Aktiver Puffer Puffer als aktiver Monitor : Nachrichten-verarbeitender Prozess Strategie der Umwandlung passiv => aktiv: synchronisierter Aufruf => Nachrichtenart, Empfang Senden einer Antwort wait => Speichern der Nachricht notify => Verarbeitung gespeicherter Nachrichten Verarbeite Nachrichten: Put-Nachricht sende OK-Antwort Get-Nachricht sende Daten-Antwort public class Buffer<TokenType> { TokenType place; boolean synchronized void put(tokentype t) throws InterruptedException { while (! empty ) wait(); place = t; notify(); synchronized TokenType get() throws InterruptedException { while ( empty ) wait(); notify(); return place; Put-Nachricht mit ihrem Sender wird in WS gespeichert verzögerte Get-Nachricht verarbeiten Get-Nachricht mit Sender wird in WS gespeichert verzögerte Put-Nachricht verarbeiten Seite 6

Aktiver Puffer Puffer als aktiver Monitor : Nachrichten-verarbeitender Prozess (Pseudocode) process Buffer { Queue<PutMsg> pendingputs; Queue<GetMsg> pendinggets; Token place; boolean void processpendingget() { if (! pendinggets.empty) { getmsg, sender = pendinggets.remove() send DataMsg(place) to sender processpendingput(); void process(msg msg, sender) { case msg { PutMsg(item) => if (!empty) { pendingputs.enqueue(msg, sender) else { place = msg.item; send OK to sender; processpendingget(); void processpendingput() { if (! pendingputs.empty) { putmsg, sender = pendinggets.remove() send OKMsg to sender place = putmsg.item processpendingget(); GetMsg(item) => if (empty) { pendinggets.enqueue(msg, sender) else { send Data(place) to sender; processpendingput(); do (forever) { reveive msg from sender process(msg, sender) Seite 7

Aktiver Puffer Puffer als aktiver Monitor Daten-Puffer NachrichtenPuffer put get Produzent Puffer Produzent Konsument Seite 8 Puffer Konsument

aktiver Monitor: Zusammenfassung Monitor aktiver Monitor ~> Server-Prozess Monitor-Nutzer ~> Client-Prozesse passiver => aktiver Monitor Klasse => Prozess Aufruf einer Monitor-Prozedur => Empfang einer Nachricht Körper einer Monitor-Prozedur => Verarbeitung der Nachricht, Ergebnis an den Sender Umsetzung Gegenseitiger Ausschluss völlig unproblematisch: Ein sequenzieller Serverprozess => streng sequenzieller Zugriff auf die Ressource Umsetzung Bedingungssynchronisation Der Serverprozess kann nicht (in wait) blockiert werden wait ~> Speichern der Nachricht / ausbleibende Antwort blockiert Client notify ~> Gelegenheit gespeicherte Nachrichten zu verarbeiten Seite 9