Verteilte Algorithmen TI5005

Größe: px
Ab Seite anzeigen:

Download "Verteilte Algorithmen TI5005"

Transkript

1 Verteilte Algorithmen TI5005 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Algorithmen in Prozessnetzen Pipes und Filter Notation: syntaktische Schleife

2 Pipes und Filter Datenfluss / Dataflow Programming Datenfluss Archtitekturstil: Das System wird als eine Kombination von Datentransformatoren angesehen. Die Komponenten (Datentransformatoren) interagieren ausschließlich über den Austausch von Daten Varianten sequentielle Batch-Systeme Eine Komponente beginnt ihre Arbeit, wenn die vorhergehenden ihre abgeschlossen haben Pipes und Filter Die Komponenten arbeiten inkrementell: Daten werden nach Verfügbarkeit inkrementell an die nachfolgenden Komponenten weiter geleitet Prozess-Kontrolle / Spreadsheet-Systeme Die Komponenten repräsentieren Daten sie werden von werden von einem Prozess überwacht, der nach jeder Änderung einer Komponente alle abhängigen Komponenten neu berechnet Seite 2

3 Pipes und Filter Datenfluss / Dataflow Programming Strukturen von Datenfluss-Systemen Linear (Pipeline) in Stufen (keine Zykel) Beschränkte Zykel Beliebig Pipeline Visuelle Programmierung Datenflusssysteme eignen sich gut zur visuellen Programmierung Funktionale Programmierung lineare, gestufte und beschränkt zyklischen Datenflusssysteme sind / entsprechen funktionalen Programme Beschränkte Zykel können dabei mit Rekursion ausgedrückt werden gestuft beschränkte Zykel Seite 3

4 Pipes und Filter Pipes und Filter: Variante des Datenfluss-Stils / -Musters Filter Verarbeitungseinheiten Transformieren die Daten ihrer Eingabeströme Geben sie auf ihren Ausgabeströmen wieder aus Varianten aktive Filter Filter ist aktiver Prozess / Thread: holt die Daten aus den Pipes und schreibt sie in Pipes passive / reaktive Filter (betrachten wir später etwas genauer) Push-Filter: wird von seinem Vorgänger getrieben pull-filter: wird von seinem Nachfolger getrieben Pipe Transportiert Daten ist (in der Regel) passiv synchronisiert die aktiven Komponenten (Filter, Quellen, Senken) Kann puffern: Puffer-Kapazität 0 : Synchrones Netz Puffer-Kapazität >0 oder unendlich: Asynchrones Netz Quellen / Senken Spezielle Verarbeitungseinheiten ohne Eingabe- oder Ausgabe-Ströme Seite 4

5 Pipes und Filter Mergesort als Pipes und Filter Mergesort (Foliensatz 3) ist ein gestuftes Datenfluss-System in der Pipes-und-Filter-Variante mit aktiven Knoten channel in1, in2, out; in1 Merge = process { var v1, v2; v1 = in1.receive in2 v2 = in2.receive do { case (v1!= EOS and v2!= EOS) > case { v1 <= v2 > out.send(v1); v1 = in1.receive; v2 <= v1 > out.send(v2); v2 = in2.receive; case (v1!= EOS and v2 == EOS) > out.send(v1); v1 = in1.receive; case (v1 == EOS and v2!= EOS) > out.send(v2); v2 = in2.receive; out.send(eos) Seite 5 out

6 Pipes und Filter Beispiel Char-to-Line Transformation eines Zeichenstroms in einen Zeilenstrom channel input( char ), output( char[ 0..MAXLINE ] ); process CharToLine: char[] line; int i=0; do true : receive input( line[i] ) > { do line[i]!= CR && i < MAXLINE 1 > { i++; receive input( line[i] ); od send output(line[0..i 1]); i = 0; od Seite 6 Zeichen Zeilen

7 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 7

8 Monitor Beispiel Puffer 3 Zustände: leer / nicht voll, nicht leer / voll Lesen: nur wenn nicht leer Schreiben: nur wenn nicht voll put Produzenten aktiv get Monitor Puffer passiv Konsumenten aktiv put : erwarte nicht voll while (!(count < SIZE)) wait(); Zustand count ~ Zahl der Elemente get: erwarte nicht leer leer ~ count > 0 nicht leer, nicht voll <count<size ~0 voll ~ SIZE Vorbedingungen put : nur wenn nicht voll => erwarte nicht voll get: nur wenn nicht leer while (! (count > 0)) wait(); + put : Benachrichtigen bei Modifikation von nicht leer count++; notifyall(); get: Benachrichtigen bei Modifikation von nicht voll count--; notifyall(); => erwarte nicht leer Seite 8

9 Monitor Beispiel Puffer Puffer mit einem Ablageplatz Lesen: nur wenn nicht leer Schreiben: nur wenn nicht voll class Buffer { var item : Int = -999 var empty : Boolean = true def put(x: Int) = synchronized { while (!empty) { wait empty = false item = x notifyall() object ProducerConsumer extends App { val buffer = new Buffer val producers = Array.tabulate(5){ i => new Thread(new Producer(i, buffer)) val consumers = Array.fill(5){ new Thread(new Consumer(buffer)) producers.foreach(_.start) consumers.foreach(_.start) producers.foreach(_.join) println("producers finished") Thread.sleep(100) System.exit(0) In diesem Beispiel wird nur eine Bedingungsvariable verwendet. def get() : Int = synchronized { while (empty) { wait empty=true notifyall() item class Producer(id: Int, buffer : Buffer) extends Runnable { val items = List(1,2,3,4,5); override def run() { items.foreach( item => { buffer.put(10*id + item) Thread.sleep(500) ) class Consumer(buffer : Buffer) extends Runnable { override def run() { while (true) { val item = buffer.get println(s"consume $item") Seite 9

10 Vom Monitor zum Server: Puffer als aktiver Monitor aktiver Puffer : Server als Nachrichten-verarbeitender aktiver Prozess: Server Produzenten und Konsumenten: Clients Wollen / können keinen gemeinsamen Speicher, oder Nutzen als Clients den aktiven Puffer als Server Produzent Konsument passiver Puffer Produzent passive Ressource aktive Nutzer: Monitor-Programm aktiver Puffer Konsument aktive Ressource aktive Nutzer: -Programm Seite 10

11 Vom Monitor zum Server: Puffer als aktiver Monitor 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?? wait Produzent notify Konsument passiver Puffer?? Produzent aktiver Puffer?? Seite 11 Konsument

12 Vom Monitor zum Server: Puffer als aktiver Monitor Strategie der Umwandlung passiv => aktiv: synchronisierter Aufruf => Nachrichtenart, Empfang, Senden einer Antwort wait => Server Speichert Auftrag bis er ausführbar ist notify => Verarbeitung des gespeicherten Auftrags, Client-Benachrichtigung Verarbeite Nachrichten: Put-Nachricht sende OK-Antwort Get-Nachricht sende Daten-Antwort public class Buffer<TokenType> { TokenType place; boolean empty = true; synchronized void put(tokentype t) throws InterruptedException { while (! empty ) wait(); place = t; empty = false; notify(); synchronized TokenType get() throws InterruptedException { while ( empty ) wait(); empty = true; 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 12

13 Vom Monitor zum Server: Puffer als aktiver Monitor process BufferServer { channel in[0..n-1]; Queue[Int,Int]pendingPuts; Token place; channel out[0..n-1] Queue[Int] pendinggets; boolean empty = true; proc processpendingget() { if (! pendinggets.empty) { sender = pendinggets.remove() out[sender].send(place) empty = true; processpendingput(); do for i = 0 to n-1 true: in[i].receive(msg) -> case msg { Put(item) => if (!empty) { pendingputs.enqueue(msg, sender) else { place = msg.item; send OK to sender; empty = false; processpendingget(); proc processpendingput() { if (! pendingputs.empty) { (v, sender) = pendinggets.remove() out[sender].send(ok) place = v empty = false; processpendingget(); Get() => if (empty) { pendinggets.enqueue(sender) else { send Data(place) to sender; empty = true; processpendingput(); Notation mit syntaktischer for-schleife aktiver Puffer, Pseudocode Seite 13

14 Ressourcen-Allokation (Resource Allocation) Allokations-Monitor verwaltet eine Kollektion von Ressourcen beliebiger Art Nutzer fordern eine Ressource an, warten bis ihnen eine zugeteilt wird, nutzen sie, geben sie zurück. monitor Allocator { var avail = // nr available units var units = // units cond free // Condition variable def acquire(): Unit { if avail = 0 ~> free.wait avail > 0 ~> avail = avail-1 fi return removeone(units) def release(u: Unit) { units.insert(u) avail = avail+1 free.signal Seite 14

15 Ressourcen-Allokation (Resource Allocation) Allokations-Server portin request[0..n-1] potout reply[0..n-1] // attach n request-channels // attach n reply channels process Allocator { var avail = // nr available units var units = // units var pending : Queue<Msg>; Client do request[0].receive(acquiremsg) ~> if avail > 0 ~> avail = avail-1 reply[0].send(removeone(units)) avail = 0 ~> pending.add(0) Client... Server request[0].receive(releasemsg(u: Unit)) ~> if pending.size = 0 ~> avail = avail+1 units.insert(u) pending.size > 0 ~> reply[pending.remove()].send(u) Client aktiver Allocator, Pseudocode, kontrollorientierte Notation mit unidirektionalen Kanälen und Ports. Notation mit Elipse (Auslassungspünktchen) request[1].receive(acquiremsg) ~> if avail > 0 ~> avail = avail-1 reply[0].send(removeone(units)) avail = 0 ~> pending.add(1)... od Seite 15

16 Ressourcen-Allokation (Resource Allocation) Allokations-Server mit syntaktischer Schleife portin request[0..n-1] potout reply[0..n-1] // attach n request-channels // attach n reply channels process Allocator { var avail = // nr available units var units = // units var pending : Queue<Msg>; do for i = 0 to n-1 do request[i].receive(acquiremsg) ~> if avail > 0 ~> avail = avail-1 reply[i].send(removeone(units)) avail = 0 ~> pending.add(i) aktiver Allocator, Pseudocode, kontrollorientierte Notation mit unidirektionalen Kanälen und Ports. Notation mit syntaktischer for-schleife request[i].receive(releasemsg(u: Unit)) ~> if pending.size = 0 ~> avail = avail+1 units.insert(u) pending.size > 0 ~> reply[pending.remove()].send(u) od od Seite 16

17 Leser-Schreiber Leser-Schreiber Shared-Memory- / Monitor- Synchronisation Eine Ressource wird mit teilweise nicht exklusiven gegenseitigem Ausschluss genutzt. Leser dürfen gleichzeitig nutzen Schreiben müssen exklusiven Zutritt bekommen. Dies wird im shared memory Fall mit einer Zugangs-Kontrolle und einem Zugriffsprotokoll geregelt: startread / StartWrite : blockierende Monitor-Aufrufe read / write: unsynchronisierte eventuell überlappende Methoden der Ressource stopread / StopWrite: Monitor-Aufrufe mit notify 2. read Leser 1.startRead 3.stopRead 1. startwrite Schreiber ZugangsKontrolle (Monitor) 3. stopwrite 2. write Seite 17 Ressource

18 Leser-Schreiber Leser-Schreiber mit aktiver Zugangskontrolle Die kritischen Aktionen sind die zum Teil erlaubten gleichzeitigen Zugriffe auf die Ressource. Deren Kontrolle soll von einer aktiven Komponente übernommen werden. Die gleichzeitige Nutzung kann durch durch die Threads der Kunden (passive Ressource) ausgeführt werden Leser 3.stopRead 1. startwrite Schreiber 1.startRead 2. read read ZugangsKontrolle passive Ressource write 3. stopwrite 2. write Szenario 1 : aktive Kunden, passive Ressource, aktive Zugangs-Kontrolle. Interaktionen nur durch Nachrichten und Methodenaufrufe. Seite 18

19 Leser-Schreiber Leser-Schreiber mit aktiver Zugangskontrolle Die kritischen Aktionen sind die zum Teil erlaubten gleichzeitigen Zugriffe auf die Ressource. Deren Kontrolle soll von einer aktiven oder reaktiven Komponente übernommen werden. Die gleichzeitige Nutzung kann durch Threads der Ressource (aktive Ressource) ausgeführt werden Beispielsweise mit Threads der Ressource in einem Executor 2. read Leser 1.startRead 3.stopRead 1. startwrite Schreiber Executor ZugangsKontrolle Ressource 3. stopwrite 2. write Szenario 2: aktive Kunden, aktive Zugangskontrolle, aktive Ressource (Threadpool + aktive Bearbeitung der Nachrichten), aktiver Monitor zur Zugangs-Kontrolle. Interaktionen nur durch Nachrichten. Seite 19

20 Vom Monitor zum Server: 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 20

21 Vom Monitor zum Server: Bemerkung Natürlich kann man es sich auch einfach machen und im Server die Verwaltung der Warteschlangen Synchronisationsmechanismen überlassen. Der Server enthält dann einfach den Monitor und startet für jede Anfrage einen Thread der auf dem Monitor operiert. Beispiel PufferServer: abstract class BufferServer extends Thread { val in: MultiInport[Msg] val out: List[OutPort[Msg]] object BufferMonitor { var item : Int = -999 var empty : Boolean = true val executor: ExecutorService = Executors.newCachedThreadPool() implicit val execcontext = ExecutionContext.fromExecutorService(executor) def put(x: Int) = synchronized { while (!empty) { wait empty = false item = x notifyall() override def run(): Unit = { while (! in.eof) { val (p, msg): (Int, Msg) = in.receive msg match { case GetMsg => Future { val v = BufferMonitor.get() out(p).send(valmsg(v)) Der def get() : Int = synchronized { while (empty) { wait empty=true notifyall() item case PutMsg(v) => Future { BufferMonitor.put(v) out(p).send(okmsg) out.foreach(_.close) Seite 21 Code eines Futures wird von einem Thread im Threadpool des Exceutors ausgeführt.

22 Notation Syntaktische Schleife Die syntaktische for-scheife wird nicht zur Laufzeit abgearbeitet. Es ist eine Text-verkürzende Notation, die durch eine Expansion des Programmcodes vor der Laufzeit ausgeführt wird. Die Schleife darf nicht zur Laufzeit abgewickelt werden: do Der Schleifenkörper ist keine Anweisungsfolge! for i = 0 to n-1 do Als Anweisungsfolge interpretiert würde die erste receive-anweisung eventuell blockieren und alle andere receive-anweisungen würden ignoriert werden. request[i].receive(...) ~> od Gemeint ist eine do-schleife mit einer Reihe nicht-deterministischer von receiveanweisungen, von denen eine (eine der ausführbaren) ausgewählt wird. od do for i = 0 to n-1 do request[0].receive(...) ~> request[1].receive(...) ~> Zur Laufzeit existiert die for-schleife nicht.... request[n-1].receive(...) ~> od od Seite 22

23 Notation Syntaktische Schleife: Implementierung Syntaktische Schleife ist Sprachelement des Pseudocodes Implementierung durch den Programmierer bei der Umsetzung Pseudocode ~> Code Syntaktische Schleife ist Sprachelement der Programmiersprache Expansion durch Makroprozessor Syntaktische Schleife wird durch äquivalentes dynamisches Sprachelement ersetzt Implementierung durch der Programmierer bei der Umsetzung Pseudocode ~> Code: Einsatz eines dynamischen Sprachkonstrukts Compile-Zeit-Konstante do for i = 0 to n-1 do request[i].receive(...) ~>... od od do Programmierer / Makroprozessor Pseudocode / Code do for i = 0 to n-1 do request[i].receive(...) ~>... od od request[0].receive(...) ~>... request[n-1].receive(...) ~>... od Code? äquivalentes Laufzeit-Konstrukt? Programmierer Pseudocode Seite 23

24 Notation Syntaktische Schleife: Implementierung durch äquivalente dynamische Sprachelemente Notwendiges Konstrukt: Nichtdeterministisches Empfangen aus einer von n Quellen, mit Identifikation der Quelle Mögliche Konstrukte Empfang über Ports, denen jeweils beliebig viele Kanäle zugeordnet sein können, die Nachrichten müssen ihre Quelle identifizieren semi-dynamische Lösung, wenn die Bindung Port-Kanal zu beginn der Laufzeit fixiert wird. Empfangsoperation mit einer Menge an Kanälen als Argumenten und eine empfangsbereitem Kanal als Resultat Seite 24 (source, msg) = minport.receive() readychannel = receive(channelset)

25 Notation Syntaktische Schleife: Implementierung mit Multiport class MultiInport[T](inports: List[InPort[T]]) extends InPort[(Int,T)] { object Buffer { var item : T = _ var port : Int = -1 var empty : Boolean = true (source, msg) = minport.receive() def put(p: Int, x: T) = synchronized { while (!empty) { wait empty = false item = x port = p notifyall() val receivers = Range(0, inports.length).map( i => new Thread { override def run() : Unit = { while(! inports(i).eof) { try { Buffer.put(i, inports(i).receive) catch { case e: NoSuchElementException => ) def get() : (Int, T) = synchronized { while (empty) { wait empty=true notifyall() (port, item) receivers.foreach(_.start()) Erlaubt den Datenempfang von irgendeinem Port. Maximal einfache Implementierung: aktive Lösung mit einem Thread pro einfachem Port. def receive: (Int,T) = { return Buffer.get def eof: Boolean = inports.filter(_.eof).length == inports.length Passive Lösungen sind auch möglich aber deutlich aufwendiger. Seite 25

26 Notation Buffer-Server mit Multiport - Implementierung abstract class Buffer extends Thread { val in: MultiInport[Msg] val out: List[OutPort[Msg]] var place: Int = -99 var empty: Boolean = true var pendingputs: Queue[(Int,Int)] = Queue() // contains (sender, value) pairs var pendinggets: Queue[Int] = Queue() // contains senders override def run(): Unit = { while (! in.eof) { val (p, msg): (Int, Msg) = in.receive msg match { case GetMsg => if(!empty) { out(p).send(valmsg(place)) empty = true processpendingputs() else { pendinggets.enqueue(p) case PutMsg(v) => if(empty) { place = v out(p).send(okmsg) empty = false processpendinggets() else { pendingputs.enqueue((p,v)) out.foreach(_.close) def processpendinggets(): Unit = { if (!pendinggets.isempty ) { val sender: Int = pendinggets.dequeue() out(sender).send(valmsg(place)) empty = true; processpendingputs(); def processpendingputs(): Unit = { if (!pendingputs.isempty) { val (sender, v) = pendingputs.dequeue() out(sender).send(okmsg) place = v empty = false; processpendinggets(); Seite 26

27 Notation Buffer-Server mit Multiport - Implementierung: Prozessnetz object Buffer_App extends App { val c1a = new ChannelWithEndPoints[Msg] val c1b = new ChannelWithEndPoints[Msg] val c2a = new ChannelWithEndPoints[Msg] val c2b = new ChannelWithEndPoints[Msg] val c3a = new ChannelWithEndPoints[Msg] val c3b = new ChannelWithEndPoints[Msg] // // // // // // p1-> b b -> p1 p2 -> b b -> p2 b -> c c -> b c1a c3a p1 c1b object p1 extends Producer { val out: OutPort[Msg] = c1a.datasink val in: InPort[Msg] = c1b.datasource val data: List[Int] = List(1,3,5,7,9) b p2 object p2 extends Producer { val out: OutPort[Msg] = c2a.datasink val in: InPort[Msg] = c2b.datasource val data: List[Int] = List(2,4,6,8,0) c2a c2b object b extends Buffer { val in = new MultiInport(List(c1a.dataSource, c2a.datasource, c3b.datasource)) val out = List(c1b.dataSink, c2b.datasink, c3a.datasink) object c extends Consumer { val in: InPort[Msg] = c3a.datasource val out: OutPort[Msg] = c3b.datasink b.start() c.start() p1.start() p2.start() Seite 27 c c3b

Nebenläufige und verteilte Programme CS2301

Nebenläufige und verteilte Programme CS2301 Nebenläufige und verteilte Programme CS2301 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Netze mit aktiven und reaktiven Knoten Produzent Konsument: aktiv / passiv / reaktiv

Mehr

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

CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik) Prof. Dr. Th. Letschert CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik) Vorlesung 7 Th Letschert FH Gießen-Friedberg Ressourcen Verwaltung passive Ressourcen aktive Ressourcen

Mehr

5. Threads, Serverprozesse und Benachrichtigungen

5. Threads, Serverprozesse und Benachrichtigungen 5. Threads, Serverprozesse und Benachrichtigungen Threads allgemein Threads in Android: Handler und Messages Services: Local, Remote, Binding Benachrichtigungen Entwicklung mobiler Anwendungen Europäische

Mehr

Verteilte Systeme CS5001

Verteilte Systeme CS5001 Verteilte Systeme CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Verteilte Programme und Anwendungen I - Verteilte Programme Verteilte Algorithmen und verteilte Programme Programm

Mehr

Synchronisation in Java. Invisible Web

Synchronisation 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

Mehr

Das Monitorkonzept Brinch-Hansen

Das 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

Mehr

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

Zur 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

Mehr

Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation

Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation 09.05.15 1 Literatur [6-1] http://php.net/manual/de/book.sockets.php [6-2] http://de.wikipedia.org/wiki/socket_(software) [6-3] http://php.net/manual/de/book.network.php

Mehr

Grundlagen zur nebenläufigen Programmierung in Java

Grundlagen zur nebenläufigen Programmierung in Java Grundlagen zur nebenläufigen Programmierung in Java Karlsruher Entwicklertag 2013 5. Juni 2013 Referent: Christian Kumpe Inhalt des Vortrags Was zeigt dieser Vortrag? Ein einfaches Beispiel mit allerlei

Mehr

Multithreading ab Java 5: Die neuen Concurrency APIs

Multithreading ab Java 5: Die neuen Concurrency APIs Multithreading ab Java 5: Die neuen Concurrency APIs Java Concurrency Spezifiziert in JSR166 Ab Java 5 fester Bestandteil von Java Durch zusätzliche Library auch vor Java 5 vorhanden backport-util-concurrent

Mehr

Variablen manipulieren per JDI

Variablen manipulieren per JDI Variablen manipulieren per JDI Zusammenfassung Jede moderne Java IDE verfügt über eine mächtige und dennoch meist einfach zu bedienende Benutzeroberfläche die das finden von Fehlern in lokalen oder entfernt

Mehr

Betriebssysteme Theorie

Betriebssysteme 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

Mehr

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

Rechnerarchitektur und Betriebssysteme (CS201): Semaphor, Monitor, Deadlocks, Re-Entrance Rechnerarchitektur und Betriebssysteme (CS201): Semaphor, Monitor, Deadlocks, Re-Entrance 5. November 2013 Prof. Dr. Christian Tschudin Departement Mathematik und Informatik, Universität Basel Repetition

Mehr

Android Processes & Services

Android Processes & Services Android Processes & Services Jürg Luthiger University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Ziele heute Arbeitsblatt 4 besprechen (inkl. Repetition)

Mehr

Algorithmen und Programmierung IV: Nichtsequentielle Programmierung. Robert Tolksdorf. Freie Universität Berlin

Algorithmen und Programmierung IV: Nichtsequentielle Programmierung. Robert Tolksdorf. Freie Universität Berlin Algorithmen und Programmierung IV: Nichtsequentielle Programmierung Robert Tolksdorf Freie Universität Berlin Überblick Überblick Sperrsynchronisation Sperrsynchronisation in Datenbanken Bedingungssynchronisation

Mehr

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik www.munz-udo.de

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik www.munz-udo.de Aufgaben: Ein Ausgabe Ein Rechner verwaltet nicht nur Daten, die während der Laufzeit des Programms erzeugt werden. Die meisten Programme greifen auf ältere Datenbestände zurück oder erzeugen für einen

Mehr

6. Tutorium zu Softwaretechnik I

6. Tutorium zu Softwaretechnik I 6. Tutorium zu Softwaretechnik I Parallelität und Testen Michael Hoff 01.07.2014 INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum

Mehr

Vorlesung 7. Multithreading in Java 5: Die neuen Concurrency APIs

Vorlesung 7. Multithreading in Java 5: Die neuen Concurrency APIs Vorlesung 7 Multithreading in Java 5: Die neuen Concurrency APIs 1 Die neuen Pakete ÜBERSICHT DER VORLESUNG java.util.concurrent Standardimplementierungen oftmals benötigter Hilfsmittel in nebenläufigen

Mehr

Assertions (Zusicherungen)

Assertions (Zusicherungen) April 10, 2005 Oberseminar Software-Entwicklung Inhalt 1. Einführung (Motivation, Tony Hoare, Programmverifikation) 2. Design by Contract (Idee, Eiffel) 3. Praxis: Programming by Contract for Python 4.

Mehr

Verteilte Systeme CS5001

Verteilte Systeme CS5001 CS5001 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Einführung Administratives Unterlagen Verwendbar: Master of Science (Informatik) Wahlpflichtfach (Theorie-Pool) Unterlagen Folien:

Mehr

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

leave: 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)

Mehr

Rapid I/O Toolkit. http://projects.spamt.net/riot. Alexander Bernauer alex@copton.net 08.12.08

Rapid I/O Toolkit. http://projects.spamt.net/riot. Alexander Bernauer alex@copton.net 08.12.08 Rapid I/O Toolkit http://projects.spamt.net/riot Alexander Bernauer alex@copton.net 08.12.08 Inhalt Motivation Architektur Beispiel I/O Features Ausblick Motivation Problemstellung Vorgaben Datenverarbeitung

Mehr

Kapitel 4. Monitore und wechselseitiger Ausschluss

Kapitel 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

Mehr

Client-Server-Beziehungen

Client-Server-Beziehungen Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server

Mehr

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

TCP/IP Programmierung. C# TimeServer Java6 TimeClient TCP/IP Programmierung C# TimeServer Java6 TimeClient Stand 19.10.11 21:24:32 Seite 1 von 16 Inhaltsverzeichnis Erläuterung...3 Software...3 C#TimeServer...4 Klasse ServerThread...6 Starten und Beenden...7

Mehr

Java-Schulung Grundlagen

Java-Schulung Grundlagen Java-Schulung Grundlagen Java 2 Standard Edition JDK 5 / 6 31.05.2008 Marcel Wieczorek 1 Themenübersicht Basiswissen Objektorientierung Datentypen Fehlerbehandlung Sonstiges Einführung Klassen, Strings

Mehr

Sprachbeschreibung und Erweiterung

Sprachbeschreibung und Erweiterung Sprachbeschreibung und Erweiterung Worte, Sprachen, reguläre Ausdrücke, Automaten, BNF, Grammatik, Syntax- Diagramme, Spracherweiterungen do, for, break, switch Formale Beschreibung von Programmiersprachen

Mehr

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

CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik) Prof. Dr. Th. Letschert CS2101 Nebenläufige und Verteilte Programme Bachelor of Science (Informatik) Vorlesung 4 Th Letschert FH Gießen-Friedberg Nebenläufige und verteilte Programme 2 : Thread-Pools Motivation:

Mehr

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean 01.11.05 1 Noch für heute: 01.11.05 3 primitie Datentypen in JAVA Primitie Datentypen Pseudocode Name Speichergröße Wertgrenzen boolean 1 Byte false true char 2 Byte 0 65535 byte 1 Byte 128 127 short 2

Mehr

2015-06-11 Tagesprogramm

2015-06-11 Tagesprogramm 1 2015-06-11 Tagesprogramm Design-by-Contract 2 Vertragspartner Anbieter (Server) bietet Leistungen (Services) an Kunde (Client) nimmt von Anbietern angebotene Leistungen in Anspruch Details der Inanspruchnahme

Mehr

Business Process Execution Language. Christian Vollmer Oliver Garbe

Business Process Execution Language. Christian Vollmer <christian.vollmer@udo.edu> Oliver Garbe <oliver.garbe@udo.edu> Business Process Execution Language Christian Vollmer Oliver Garbe Aufbau Was ist BPEL? Wofür ist BPEL gut? Wie funktioniert BPEL? Wie sieht BPEL aus?

Mehr

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

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen Seite 8 A UFGABE 11 INTERP ROZEßKOMMUNIKATION Das folgende Petrinetz zeigt zwei verkoppelte Prozesse P1 und P2. Die Transitionen a und b beschreiben Aktionen von P1, die Transitionen c und d Aktionen von

Mehr

Beispiel droidremoteppt

Beispiel droidremoteppt Arthur Zaczek Nov 2014 1 Beispiel droidremoteppt 1.1 Beschreibung Powerpoint soll mit ein Android Handy über Bluetooth gesteuert werden Folien wechseln (Vor/Zurück) Folien am Handy darstellen Am Handy

Mehr

Objektorientierte Programmierung

Objektorientierte Programmierung Universität der Bundeswehr Fakultät für Informatik Institut 2 Priv.-Doz. Dr. Lothar Schmitz FT 2006 Zusatzaufgaben Lösungsvorschlag Objektorientierte Programmierung Lösung 22 (Java und UML-Klassendiagramm)

Mehr

Transmission Control Protocol (TCP)

Transmission Control Protocol (TCP) Transmission Control Protocol (TCP) Verbindungsorientiertes Protokoll, zuverlässig, paketvermittelt stream-orientiert bidirektional gehört zur Transportschicht, OSI-Layer 4 spezifiziert in RFC 793 Mobile

Mehr

Codegeneratoren mit Xtend2. 11.04.2012, A. Arnold

Codegeneratoren mit Xtend2. 11.04.2012, A. Arnold Codegeneratoren mit Xtend2 11.04.2012, A. Arnold Copyright 2012 anderscore GmbH Inhalt 1. Was ist Xtend2? 2. Xtend2 Konzepte 3. Hands On! 3 4 8 20 2 Was ist Xtend2? Funktionale, objektorientierte Sprache

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung Übersicht 3.1 Modell Konto 3.2 Modell Konto - Erläuterungen 3.3 Benutzer Ein- und Ausgabe mit Dialogfenster I 3.4 Benutzer Ein- und Ausgabe mit Dialogfenster II 3.5 Klassen- und Objekteigenschaften des

Mehr

Geschäftsprozessmodellierung essmodellierung mit BPEL

Geschäftsprozessmodellierung essmodellierung mit BPEL Geschäftsprozessmodellierung essmodellierung mit BPEL Autor: Stefan Berntheisel Datum: 8. Januar 2010 Stefan Berntheisel Hochschule RheinMain Fachseminar WS 09/10 Agenda Grundlagen Business Process Execution

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Modellierung verteilter Systeme (Grundlagen der Programm- und Systementwicklung II)

Modellierung verteilter Systeme (Grundlagen der Programm- und Systementwicklung II) Modellierung verteilter Systeme (Grundlagen der Programm- und Systementwicklung II) 05 -Kommunizierende Prozesse PD Dr. Bernhard Schätz Lehrstuhl für Software und Systems Engineering, Fakultät für Informatik

Mehr

Java Batch Der Standard für's Stapeln

Java Batch Der Standard für's Stapeln Java Batch Der Standard für's Stapeln Berlin Expert Days 18.09.2015 Dirk Weil, GEDOPLAN GmbH Dirk Weil GEDOPLAN GmbH, Bielefeld GEDOPLAN IT Consulting Konzeption und Realisierung von IT-Lösungen GEDOPLAN

Mehr

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

Mutual Exclusion und Synchronisation. Peter Puschner Institut für Technische Informatik peter@vmars.tuwien.ac.at 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

Mehr

Kontrollstrukturen - Universität Köln

Kontrollstrukturen - Universität Köln Kontrollstrukturen - Universität Köln Mario Manno Kontrollstrukturen - Universität Köln p. 1 Was sind Sprachen Auszeichnungssprachen HTML, XML Programmiersprachen ASM, Basic, C, C++, Haskell, Java, Pascal,

Mehr

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume.

Bäume. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 10: Collections 4. Inhalt. Bäume. Einführung. Bäume. Universität Osnabrück 1 Bäume 3 - Objektorientierte Programmierung in Java Vorlesung 10: Collections 4 Einführung Bäume sind verallgemeinerte Listenstrukturen Lineare Liste Jedes Element hat höchstens

Mehr

Thorben Meier 25.01.2012

Thorben Meier 25.01.2012 F# Thorben Meier 25.01.2012 1 Einleitung F# ist eine Multi-Paradigmen-Programmiersprache, die neben funktionalen auch imperative und objektorientierte Sprachelemente enthält. Ihre größten Einflüsse kommen

Mehr

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

Prof. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen

Mehr

1. Der Einstieg in Java

1. Der Einstieg in Java 1. Der Einstieg in Java Was heißt Programmieren? 1. Der Einstieg in Java Lernziele: Am Ende dieses Kapitels sollen Sie wissen, aus welchen Bestandteilen ein Java-Programm besteht, Java-Programme übersetzen

Mehr

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

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Einführung in Java PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005 Gliederung 1. Was ist Java / Geschichte von Java 2. Prinzip der Plattformunabhängigkeit 3. Wie kommt man vom Quellcode zum Programm

Mehr

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen

HEUTE. Datenstrukturen im Computer. Datenstrukturen. Rekursion. Feedback Evaluation. abstrakte Datenstrukturen 9.2.5 HUT 9.2.5 3 atenstrukturen im omputer atenstrukturen ie beiden fundamentalen atenstrukturen in der Praxis sind rray und Liste Rekursion Feedback valuation rray Zugriff: schnell Umordnung: langsam

Mehr

Programmiermethodik. Übung 13

Programmiermethodik. Übung 13 Programmiermethodik Übung 13 Sommersemester 2010 Fachgebiet Software Engineering andreas.scharf@cs.uni-kassel.de Agenda Vorstellung Musterlösung HA9 Mancala Showroom Client/Server Kommunikation in Java

Mehr

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe... php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick...2 2.Parameterübergabe...7 3.Zugriff auf mysql Daten...11 Verteilte Systeme: php.sxw Prof.

Mehr

Beispiel 19. December 4, 2009

Beispiel 19. December 4, 2009 Beispiel 9 December 4, 2009 Computermathematik (für Informatik) 4. Übungsblatt (Musterlösung) 2. 2. 2009 Die heutigen Übungen sollen mit dem Computeralgebrasystem Sage gelöst werden. Die Lösung der Beispiele

Mehr

Überblick. Lineares Suchen

Überblick. Lineares Suchen Komplexität Was ist das? Die Komplexität eines Algorithmus sei hierbei die Abschätzung des Aufwandes seiner Realisierung bzw. Berechnung auf einem Computer. Sie wird daher auch rechnerische Komplexität

Mehr

Prinzipien Objektorientierter Programmierung

Prinzipien Objektorientierter Programmierung Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................

Mehr

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel FB Physikalische Technik Musterlösungen Teil 4 Aufgabe 1 package teil4; import javax.swing.*; public class Ei { int haltung, ident; String

Mehr

Einführung in ActionScript

Einführung in ActionScript Fachbereich Mathematik und Informatik Softwareprojekt: Spieleprogrammierung Einführung in ActionScript Do, Hoang Viet(do@mi.fu-berlin.de) Freie Universität Berlin, SoSe 2012 Agenda Allgemeine Einführung

Mehr

CORBA. Systemprogrammierung WS 2006-2007

CORBA. Systemprogrammierung WS 2006-2007 CORBA Systemprogrammierung WS 2006-2007 Teilnehmer: Bahareh Akherattalab Babak Akherattalab Inhaltsverzeichnis: Verteilte Systeme Vergleich zwischen lokale und verteilte Systeme Verteilte Anwendungen CORBA

Mehr

Technische Informatik II

Technische Informatik II Institut für Technische Informatik und Kommunikationsnetze Technische Informatik II Übung 1: Prozesse und Threads Aufgabe 1: Prozesse und Threads a) Wie verhält sich eine Applikation die aus mehreren Prozessen

Mehr

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

Gierhardt. 1 import javakara. JavaKaraProgram ; 3 public class Playit1 extends JavaKaraProgram. 4 { // Anfang von Playit1. 6 void gehezumbaum ( ) 7 { Informatik: Einführung in Java Gierhardt Play it again, Kara! (Lsg.) 1. Kara soll ein Kleeblatt finden, das sich in der gleichen Zeile (oder Spalte) befindet wie er selbst. Zwischen ihm und dem Kleeblatt

Mehr

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems

13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13 Java 4 - Entwurfsmuster am Beispiel des Rucksackproblems 13.1 Modellierung des Rucksackproblems 13.2 Lösung mit Greedy-Algorithmus 13.3 Lösung mit Backtracking 13.4 Lösung mit Dynamischer Programmierung

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Hadoop. Simon Prewo. Simon Prewo

Hadoop. Simon Prewo. Simon Prewo Hadoop Simon Prewo Simon Prewo 1 Warum Hadoop? SQL: DB2, Oracle Hadoop? Innerhalb der letzten zwei Jahre hat sich die Datenmenge ca. verzehnfacht Die Klassiker wie DB2, Oracle usw. sind anders konzeptioniert

Mehr

Dr. Monika Meiler. Inhalt

Dr. Monika Meiler. Inhalt Inhalt 16 Rechnerkommunikation verteilte Systeme... 16-2 16.1 Netzwerktechnologie... 16-2 16.1.1 Adressen... 16-2 16.1.2 s und s... 16-3 16.2 Server/Client-Programmierung... 16-4 16.2.1 Aufbau einer Server/Client-Verbindung...

Mehr

Projektaufgabe Peer-To-Peer Chat Programm

Projektaufgabe Peer-To-Peer Chat Programm Projektaufgabe Peer-To-Peer Chat Programm Betreuer: Dipl. Ing. Thomas Kehrt kehrt@cs.tu-dortmund.de September 10, 2014 1 Einführung Im Rahmen des Vorkurses wird für fortgeschrittene Studenten eine Projektarbeit

Mehr

Übungen zur Android Entwicklung

Übungen zur Android Entwicklung Übungen zur Android Entwicklung Aufgabe 1 Hello World Entwickeln Sie eine Hello World Android Applikation und laden diese auf den Emulator. Leiten Sie hierfür die Klasse android.app.activity ab und entwerfen

Mehr

Reactive Programming. Funktionale Programmierung. Christoph Knabe FB VI 10.12.2014

Reactive Programming. Funktionale Programmierung. Christoph Knabe FB VI 10.12.2014 Reactive Programming Funktionale Programmierung Christoph Knabe FB VI 10.12.2014 Inhalt Reactive Programming Was ist Reactive Programming Geschichte der asynchronen Programmierung Wo bleibt die Zeit? Wartefreies

Mehr

So (un)sicher ist Mac OS Teamwork: Xcode und CocoaPods. Xtext. GWT Asynchrone Requests richtig handeln. Graphendatenbanken. Die wichtigsten HTML5-APIs

So (un)sicher ist Mac OS Teamwork: Xcode und CocoaPods. Xtext. GWT Asynchrone Requests richtig handeln. Graphendatenbanken. Die wichtigsten HTML5-APIs Alle Infos zur JAX ab S. 39 Deutschland 6,50 Österreich 7,00 Schweiz sfr 13,40 www.entwickler-magazin.de Juli /August 4.2011 März/April 2.2013 0QFO(- t 41. t (SBQIFOEBUFOCBOLFO t 7JSUVBMJTJFSVOH t )5.-

Mehr

Message Oriented Middleware am Beispiel von XMLBlaster

Message Oriented Middleware am Beispiel von XMLBlaster Message Oriented Middleware am Beispiel von XMLBlaster Vortrag im Seminar XML und intelligente Systeme an der Universität Bielefeld WS 2005/2006 Vortragender: Frederic Siepmann fsiepman@techfak.uni bielefeld.de

Mehr

2. Interaktive Web Seiten. action in Formularen. Formular. Superglobale Variablen $ POST, $ GET und $ REQUEST. GET und POST

2. Interaktive Web Seiten. action in Formularen. Formular. Superglobale Variablen $ POST, $ GET und $ REQUEST. GET und POST 2. Interaktive Web Seiten GET und POST Die Übertragungsmethoden GET und POST sind im http Protokoll definiert: POST: gibt an, dass sich weitere Daten im Körper der übertragenen Nachricht befinden: z.b.

Mehr

boost::asio-bibliothek 238

boost::asio-bibliothek 238 boost::asio-bibliothek 238 Die von Christopher M. Kohlhoff seit 2003 entwickelte Bibliothek bietet eine für C++ geeignete Schnittstelle auf Basis der BSD-Sockets. Das bedeutet, dass prinzipiell auch alle

Mehr

Prüfung Software Engineering II (IB)

Prüfung Software Engineering II (IB) Hochschule für angewandte Wissenschaften München Fakultät für Informatik und Mathematik Studiengruppe IB 4 A Sommersemester 2015 Prüfung Software Engineering II (IB) Datum : 20.07.2015, 12:30 Uhr Bearbeitungszeit

Mehr

Prozesse und Scheduling

Prozesse und Scheduling Betriebssysteme für Wirtschaftsinformatiker SS04 KLAUSUR Vorbereitung mit Lösungen / Blatt 1 Prozesse und Scheduling Aufgabe 1 : Scheduling Gegeben seien die folgenden Prozesse und die Längen des jeweiligen

Mehr

Test-Driven Design: Ein einfaches Beispiel

Test-Driven Design: Ein einfaches Beispiel Test-Driven Design: Ein einfaches Beispiel Martin Wirsing in Zusammenarbeit mit Moritz Hammer und Axel Rauschmayer SS 06 2 Ziele Veranschaulichung der Technik des Test-Driven Design am Beispiel eines Programms

Mehr

Programmierprojekt. Anne0e Bieniusa Sommersemester 2014

Programmierprojekt. Anne0e Bieniusa Sommersemester 2014 Programmierprojekt Anne0e Bieniusa Sommersemester 2014 Phasen der So;ware- Entwicklung Planungsphase DefiniConsphase Entwurfsphase ImplemenCerungsphase Testphase Wasserfall- Modell Einführungs- und Wartungsphase

Mehr

11: Echtzeitbetriebssystem ucos-ii

11: Echtzeitbetriebssystem ucos-ii 11: Echtzeitbetriebssystem ucos-ii Sie lernen anhand aufeinander aufbauender Übungen, welche Möglichkeiten ein Echtzeitbetriebssystem wie das ucosii bietet und wie sich damit MC-Applikationen realisieren

Mehr

13. Tutorium zu Programmieren

13. Tutorium zu Programmieren 13. Tutorium zu Programmieren Dennis Ewert Gruppe 6 Universität Karlsruhe Institut für Programmstrukturen und Datenorganisation (IPD) Lehrstuhl Programmierparadigmen WS 2008/2009 c 2009 by IPD Snelting

Mehr

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000

Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 Prüfungszeuch im Fach Objektorientierte Programmierung WS 2000 A. Beschreibung der Projektarbeit. Welche Aufgabe haben Sie im Rahmen der Projektarbeit gelöst? 2. Mit welchen Tools bzw. Programmen (Anwendung,

Mehr

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java Präsentation zur Diplomarbeit von Übersicht Java 2 Enterprise Edition Java Servlets JavaServer Pages Enterprise JavaBeans Framework

Mehr

Parallelverarbeitung mit Ruby

Parallelverarbeitung mit Ruby Fachhochschule Wiesbaden - Fachbereich DCSM Parallelverarbeitung mit Ruby Prozess-Ebene Multithreading 04.12.2008 2003, 2008 H. Werntges, FB Design Informatik Medien (DCSM), FH Wiesbaden 1 Fachhochschule

Mehr

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

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {... PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:

Mehr

Smartphone Entwicklung mit Android und Java

Smartphone Entwicklung mit Android und Java Smartphone Entwicklung mit Android und Java predic8 GmbH Moltkestr. 40 53173 Bonn Tel: (0228)5552576-0 www.predic8.de info@predic8.de Was ist Android Offene Plattform für mobile Geräte Software Kompletter

Mehr

Grundlagen der Informatik Ausnahmebehandlung & Threads

Grundlagen der Informatik Ausnahmebehandlung & Threads Grundlagen der Informatik Ausnahmebehandlung & Threads Prof. Dr. Bernhard Schiefer (basierend auf Unterlagen von Prof. Dr. Duque-Antón) bernhard.schiefer@fh-kl.de http://www.fh-kl.de/~schiefer Inhalt Ausnahmebehandlung

Mehr

Ausarbeitung des Interpreter Referats

Ausarbeitung des Interpreter Referats Ausarbeitung des Interpreter Referats Gliederung 1. Programmiersprache 1.2. Syntax 1.2.1. Konkrete Syntax 1.2.2. Abstrakter Syntax Baum (Abstrakte Syntax) 2. Parser 2.1. Syntaktische Struktur einer Sprache

Mehr

J2EEKurs. Enterprise JavaBeans Einführung. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany, 10.-14.10.2005. Universität Freiburg, Germany

J2EEKurs. Enterprise JavaBeans Einführung. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany, 10.-14.10.2005. Universität Freiburg, Germany Enterprise JavaBeans Einführung Universität Freiburg, Germany Sommercampus, Freiburg, Germany, 10.-14.10.2005 Inhalt Allgemeines Motivation Rollen Aufbau einer EJB Arten von Beans Enterprise JavaBeans

Mehr

Inhaltsverzeichnis XII

Inhaltsverzeichnis XII 1 Einführung... 1 1.1 Computersysteme... 1 1.1.1 Einführung... 2 1.1.2 Aufgabe von Betriebssystemen... 3 1.1.3 Grundlegende Hardwaremodelle... 3 1.1.4 CPU-Registersatz... 7 1.1.5 Multicore-Prozessoren

Mehr

Grundlagen der Programmierung Prof. H. Mössenböck. 11. Objektorientierung

Grundlagen der Programmierung Prof. H. Mössenböck. 11. Objektorientierung Grundlagen der Programmierung Prof. H. Mössenböck 11. Objektorientierung Klasse = Daten + Methoden Beispiel: Positionsklasse class Position { private int x; private int y; void goleft() { x = x - 1; void

Mehr

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung

Mehr

HEUTE. Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: Was ist Effizienz? vollständige Induktion

HEUTE. Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: Was ist Effizienz? vollständige Induktion 17.11.04 1 HEUTE 17.11.04 3 Effizienzbeispiel: bekannte Version (Übung 04.11.04) Mathematik: was ist Effizienz? vollständige Induktion JAVA: Arrays die for -Schleife die Sprunganweisungen break und continue

Mehr

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v)

Der linke Teilbaum von v enthält nur Schlüssel < key(v) und der rechte Teilbaum enthält nur Schlüssel > key(v) Ein Baum T mit Knotengraden 2, dessen Knoten Schlüssel aus einer total geordneten Menge speichern, ist ein binärer Suchbaum (BST), wenn für jeden inneren Knoten v von T die Suchbaumeigenschaft gilt: Der

Mehr

Steffen Heinzl Markus Mathes. Middleware in Java

Steffen Heinzl Markus Mathes. Middleware in Java Steffen Heinzl Markus Mathes Middleware in Java Leitfaden zum Entwurf verteilter Anwendungen - Implementierung von verteilten Systemen über JMS - Verteilte Objekte über RMI und CORBA Mit 50 Abbildungen

Mehr

Software Engineering Übung 5 Verträge, Aufwand- und Risikoschätzung

Software Engineering Übung 5 Verträge, Aufwand- und Risikoschätzung software evolution & architecture lab Software Engineering Übung 5 Verträge, Aufwand- und Risikoschätzung 1 Informationen 1.1 Daten Ausgabe Di 10.11.2009 Abgabe So 22.11.2009 bis 23:59 Uhr Besprechung

Mehr

4. Thread- und Netzwerk- Programmierung

4. Thread- und Netzwerk- Programmierung 4. Thread- und Netzwerk- Programmierung 4.1 Ziel dieses Kapitels 4.2 Prozeß versus Thread 4.3 Thread-Programmierung 4.4 TCP/IP Grundlagen 4.5 TCP Programmierung 3. TCP/IP und Threads 3-1 4.1 Ziel dieses

Mehr

Kurs 1575, Musterlösung zur Winter Klausur 2002/03

Kurs 1575, Musterlösung zur Winter Klausur 2002/03 1 0 Kurs 1575, Musterlösung zur Klausur im Wintersemester 2002/03 1 Kurs 1575, Musterlösung zur Winter Klausur 2002/03 Aufgabe 1: Warteschlange Wer kennt das Problem nicht? Sie wollen noch schnell im Supermarkt

Mehr

Betriebssysteme (BS) Interprozesskommunikation. Überblick. Abstraktionen und Systemstruktur. Kommunikation und Synchronisation

Betriebssysteme (BS) Interprozesskommunikation. Überblick. Abstraktionen und Systemstruktur. Kommunikation und Synchronisation Betriebssysteme (BS) alias Betriebssystembau (BSB) Interprozesskommunikation Abstraktionen und Systemstruktur Überblick Kommunikation und Synchronisation IPC über gemeinsamen Speicher Semaphor, Monitor,

Mehr

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

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014) Anleitung Ein einfaches RMI-Beispiel (ab Java.0) c Y. Pfeifer (Juni 014) 1 Ein einfaches RMI-Beispiel Vorgehensweise: 1. Java Projekt anlegen. Zwei Packages server & client erstellen Auf der Server-Seite

Mehr

www.heimetli.ch Heimetli Software AG HSWModule ... Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5.

www.heimetli.ch Heimetli Software AG HSWModule ... Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5. www.heimetli.ch. Heimetli Software AG HSWModule........ Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5. August 2005 Inhaltsverzeichnis Was ist HSWModule?... 1 Installation...

Mehr

Java für Computerlinguisten

Java für Computerlinguisten Java für Computerlinguisten 2. Objektorientierte Programmierung Christian Scheible Institut für Maschinelle Sprachverarbeitung 28. Juli 2009 Christian Scheible Java für Computerlinguisten 28. Juli 2009

Mehr

User Level Device Driver am Beispiel von TCP

User Level Device Driver am Beispiel von TCP September 17, 2004 Einleitung Motivation für Userlevel Device Driver Probleme von Userlevel Device Driver Motivation für Userlevel Device Driver Modularität, leichterer Austausch/Erneuerung von Komponenten.

Mehr