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

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

Eingabe und Ausgabe in Java. Dr. Horst Treiblmaier Abteilung für Wirtschaftsinformatik WU Wien

Dr. Monika Meiler. Inhalt

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Parallele Prozesse. Prozeß wartet

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Kapitel 12. Programmierkurs. Allgemeine Konzepte Byte-Streams versus Character-Streams

Probeklausur: Programmierung WS04/05

Vorlesung Informatik II

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 4

Vorlesung Informatik II

Programmieren I. Dokumentation mit javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

Programmieren 2 Selbststudium Semesterwoche 6

1 Verkettete Liste (20 Punkte)

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Soll die Programm-Ausführung nicht beendet werden, muss der Fehler abgefangen werden. NumberFormatException

Java-Schulung Grundlagen

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

Java Einführung IO (Eingabe/Ausgabe)

Primitive Datentypen

Objektorientierte Programmierung Studiengang Medieninformatik

Einstieg in die Informatik mit Java

Programmieren in Java -Eingangstest-

Nebenläufigkeit mit Java

1 Klassen anlegen und Objekte erzeugen

System.out.println("TEXT");

Java - Programmierung - Prozedurale Programmierung 1

/** Main-Methode erzeugt einen neuen Editor zum Testen */ public static void main(string[] args) { new Editor();

Praktikum aus Softwareentwicklung 2, Stunde 5

1 Klassen anlegen und Objekte erzeugen

Java Einführung Exception Handling. Kapitel 17

Ausdrucksbäume in verschiedenen Darstellungen

Vorkurs Informatik WiSe 17/18

Tipps und Hinweise zum Bezug der Beitragssatzdatei V5.0

Klausur Software-Entwicklung September 00

Programmieren in Java

Problemstellung. Object1:Klasse1. Object2:Klasse2 att1: Klasse1 att2: 9. att1: att2: 17. Klasse1 att1 att2 Klasse2 att1 att2

Einführung in die Programmierung 1

Objektserialisierung

Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei

Parallele Prozesse Prozeß Parallele Prozesse verzahnte Prozesse Nebenläufige Prozesse: Threads Vorlesung Software-Entwicklung / Folie 131 Ziele:

boolean ispalindrome = word.equalsignorecase(reverse.tostring());

Nebenläufigkeit in Java. Prof. Dr. Margarita Esponda

Tutorial04: Swing: Erstellen eines JFrames mit einem JSplitPane

! 1. Unterklassen und Vererbung! 2. Abstrakte Klassen und Interfaces! 3. Modularität und Pakete! 4. Ausnahmen (Exceptions) II.4.

Programmieren I. Dokumentation mit Javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Aufgabe: Hinweise zu der Farbwahl der Texte/Wörter: Orange ist angegeben, wo etwas ergänzt werden soll.

Methoden und Klassen. Silke Trißl Wissensmanagement in der Bioinformatik

Java: Vererbung. Teil 3: super()

Martin Unold INFORMATIK. Geoinformatik und Vermessung

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Vorname: Nachname: Matrikelnummer: Klausur. Betriebssysteme

Institut für Informatik. Endterm Klausur zu Informatik I 20. Februar 2010

Name: Matrikelnr : Aufgabe 1: (ca. 8 Punkte )

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

Kapitel 15: Ausnahmen und

2.2 Prozesse in Java

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

Grundlagen der Objektorientierten Programmierung - IO-Tools

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

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

JAVA für Einsteiger. Streams und Dateien. eden market Autor: Norman Lahme

Probeklausur Informatik 2 Sommersemester 2013

Fragen zur OOP in Java

Programmieren I. Dateien: Allgemeines. Vorlesung 10. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Wintersemester 2010/2011

Silke Trißl, Prof. Ulf Leser Wissensmanagement in der Bioinformatik. Jede Applikation braucht eine Klasse mit einer main-methode

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Einführung in die Programmierung für Nebenfach Medieninformatik. Beat Rossmy, Michael Kirsch

Programmieren I. Fehlerbehandlung Exceptions. Heusch 2. Bd, 3 Ratz 10. Institut für Angewandte Informatik

Synchronisation in Java. Invisible Web

JAVA - Methoden - Rekursion

Distributed Computing Group

Funktionale und Objekt-Orientierte Programmierkonzepte

Silke Trißl Wissensmanagement in der Bioinformatik. Objektorientierte Programmierung (OOP) Vorstellung wie in der realen Welt: Farbe Hubraum Tank...

5. Threads, Serverprozesse und Benachrichtigungen

Große Übung Praktische Informatik 1

Informatik 1 - Translation Studies in Information Technology. Musterlösung zum Aufgabenblatt der ersten Pflichtübung im Wintersemester 16/17

Nebenläufigkeit mit Java

Kapitel 10. Programmierkurs. Grundlagen von Exceptions Behandlung von Exceptions

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

Grundlagen der Programmierung. Kapitel 10: Ein- und Ausgabe. Ziele dieses Kapitels. Das Problem. Datei

Grundlagen der Programmierung. Kapitel 11: Ein- und Ausgabe. Ziele dieses Kapitels. Das Problem. Datei

Grundlagen der Programmierung. Kapitel 11: Ein- und Ausgabe. Ziele dieses Kapitels. Das Problem. Datei

Konstruktoren, Packages und Scopes

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Institut für Programmierung und Reaktive Systeme 5. Dezember Programmieren I. 5. Übungsblatt

Aufgabe 1: Objekte, Klassen, Vererbung (15 Punkte)

Javakurs zu Informatik I. Henning Heitkötter

Java I Vorlesung Exceptions

Vorlesung Informatik II

Arbeitsblatt zu Methoden

Folienpaket 7 Themenschwerpunkte: Methoden in OOP /2016 Dr. Daniel Haase - Vorkurse Informatik V3/V4

Übung 1: Installation + Test von Eclipse. Übung 2: Hello World

Ausnahmebehandlung. Ausnahmen werfen (auslösen) Eigene Ausnahmen definieren. Ausnahmen abfangen. Ausnahmen definieren

Javakurs für Anfänger

Lesen und Schreiben von Dateien

ADT: Java Collections und ArrayList

Speicherstrukturen. Aufgabe 1-1: Fragen zu FAT (File Allocation Table) Aufgabe 1-2: Datensätze variabler Länge. Kind.java:

Transkript:

Hochschule Harz Versuch: fcopy Mit Java FB Automatisierung und Informatik Betriebssysteme Thema: Kopieren einer Datei unter der Kontrolle von Semaphoren Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore. Grundlagen Programmieren mit mehreren Threads ist eine Form der parallelen Programmierung - eine Art des Entwurfs und der Implementierung von parallelen Programmen. Traditionell hat eine parallele Anwendung mehrere nebeneinander ausführbare Prozesse. Im Betrieb werden diese Prozesse von einem Hauptprogramm erzeugt und zerstört. Die Prozesse müssen zusammenarbeiten und teilen Daten miteinander. Überblick Erstellen Sie ein Programm in Java zum Kopieren einer Datei in eine andere Datei. Dazu benutzen Sie das im ersten Labor entwickelten Klasse Buffer. Anders als im ersten Labor soll ein Erzeuger-Thread die Daten von der Datei lesen und in einen Puffer schreiben, falls dieser leer ist. Der Puffer wird durch einen Verbraucher-Thread geleert und in die Zieldatei geschrieben. Damit können beispielsweise unterschiedliche Anforderungen beim Lesen von einer (langsamen) Diskette und Schreiben auf eine (schnelle) Festplatte besser berücksichtigt werden, d.h. die Datei auf der Diskette wird sofort nach dem Füllen des Puffers wieder gelesen. Da die Klasse Buffer verwendet wird, wird das Lesen und Schreiben innerhalb einer Instanz durchgeführt. Tipp: Die Synchronisation soll mittels Semaphore realisiert werden. Folgender Ablauf soll realisiert werden: 1

Aufgabe Abbildung 1 Startbildschirm der Musterlösung Klassenübersicht: Klasse Labor2 (Methoden): private void copy(string source, String destination, int pause1, int pause2); o Kopiert mit Hilfe einer Instanz der Klasse Buffer eine Datei. o Dazu benötigt man noch zwei Threads. o Nach dem Kopieren soll die Zieldatei angezeigt werden. private void start(string file) o Starten mit Hilfe der Klasse Runtime die Zieldatei. public void ReadConsole() ; o Anzeige des Menüs. public static void main(string[] args); Klasse Buffer: Attribute: o Ein private byte-feld o FileInputStream src=null o FileOutputStream dest=null Konstruktor: o Parameter: int size o Aufgabe: Erstellen einer Instanz public void openfile4reading(string source) { o Öffnet eine Datei zum Lesen public void openfile4writing(string destination) { o Öffnet eine Datei zum Schreiben public int readbytes(); o liest einen Block in den internen Buffer. o Der Rückgabewert ist die Anzahl der gelesenen Bytes. public void writebytes(int n); o schreibt den internen Buffer in eine Datei. o Parameter: ein Public void close(); o Schließt eine oder beide Streams o Wird von einem try/catch-block umschlossen. 2

Klasse Param: Private Attribute o Semaphore o Pausen o??? o??? Klasse Erzeuger: Attribut: o Param param Konstruktor o Parameter in eine globale Variable speichern Methode run Methode delay o Parameter: int pause o Wartet Klasse Verbraucher: Attribut: o Param param Konstruktor o Parameter in eine globale Variable speichern Methode run Methode delay o Parameter: int pause o Wartet Arbeitsschritte: Eclipse-Projekt 1) Anlegen eines Eclipse-Projekt (siehe Unterlagen im Web, neben der Aufgabenstellung) 2) Anlegen einer Klasse Labor2 Kopieren der Vorlage für die Klasse Labor2 (Datei Labor2.txt). 3) Herunterladen der Datei labor2.jpg Kopieren ins im Hauptverzeichnis des Eclipse-Projektes. Klasse Buffer (1. Teil) 4) Klasse Buffer Anlegen einer Klasse Buffer. Kopieren der Vorlage (Datei Buffer.txt) Klasse Param 5) Attribute: Semaphore Pausen Buffer??? 3

Klasse Labor2, Methode copy 6) private void copy(string source, String destination, int pause1, int pause2) Erstellen einer Buffer-Instanz. Öffnen der beiden FileStreams. Erstellen einer Param-Instanz. Füllen der Attribute der Param-Instanz. Erstellen einer Erzeuger-Instanz. Erstellen einer Verbraucher-Instanz. Starten der beiden Threads Nach dem Kopieren soll die Zieldatei angezeigt werden. o Dazu wird die Methode start aufgerufen Klasse Labor2, Methode start 7) private void start(string destination) Anzeige der destination-datei durch das Programm mspaint.exe. Hinweis: try { Runtime.getRuntime().exec( Programm und Datei ); catch (IOException e1) { Klasse Erzeuger, Konstruktor 8) Konstruktor Erstellen einer Klasse Erzeuger Import-Anweisung: o import java.util.concurrent.semaphore; Kopieren der Vorlage (Datei Erzeuger.txt) Speichern des Parameters in eine globale Variable. Klasse Erzeuger, Methode delay 9) private void delay(int pause) Die Methode sleep aufrufen. Erwartet einen try/catch-block (siehe 1. Labor) Klasse Erzeuger, Methode run 10) public void run() WHILE-Schleife erstellen o Pause mittels der Methode delay o Ampel? o Lesen eines Blockes Nach der Schleife: o System.out.println("Ende Erzeuger"); 4

Klasse Verbraucher, Konstruktor 11) Erstellen einer Klasse Verbraucher Import-Anweisung: o import java.util.concurrent.semaphore; Kopieren der Vorlage (Datei Verbraucher.txt) Konstruktor Speichern des Parameters in eine globale Variable. Klasse Verbraucher, Methode delay 12) private void delay(int pause) Die Methode sleep aufrufen. Erwartet einen try/catch-block (siehe 1. Labor) Klasse Verbraucher, Methode run 13) public void run() WHILE-Schleife erstellen o Pause mittels der Methode delay o Ampel? o Schreiben eines Blockes Nach der Schleife: o System.out.println("Ende Verbraucher"); 5

Bausteine - try-catch für Handles, Lese- und Schreibprozesse (zum Abfangen von Fehlern!) try { catch (IOExeception io) { System.out.println( IOException ) - try-catch für Semaphore try { catch (InterruptedException e) { System.out.println( InterruptedException e ) - Lese-Handle FileInputStream src = new FileInputStream(String der Quelladresse); - Schreib-Handle FileOutputStream dest = new FileOutputStream(String der Zieladresse); - Einlese-Funktion n = src.read(puffer); // n: Anzahl der gelesenen Bytes; bei EndOfFile -> n=-1 (!) - Schreibe-Methode dest.write(puffer, Start-Pos. im Array, Anzahl der zu schreibenden Bytes); - Pause Thread.sleep(Dauer); - Semaphore Semaphore sem = new Semaphore (Anzahl, true); sem.acquire(); sem.release(); 6

Semaphore Semaphore sind ab dem JDK 1, 5 in Java implementiert. Package: import java.util.concurrent.semaphore; Konstruktor: Semaphore(int permits, boolean fair); Methoden Down: public void acquire() throws InterruptedException; public void acquire(int permits) throws InterruptedException; Methoden Up: public void release() throws InterruptedException; public void release(int permits) throws InterruptedException; 7

Beispiel: // Erzeugt fünf Thread, die über ein Semaphore gesteuert werden. // Jeweils zwei Thread können gleichzeitig in den kritischen Bereich eintreten. public void test() { Semaphore sem; sem = new Semaphore(2,true), // Semaphore erzeugt mythread t1 = mythread(sem); mythread t2 = mythread(sem); mythread t3 = mythread(sem); mythread t4 = mythread(sem); mythread t5 = mythread(sem); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); try { t1.join(); t2.join(); t3.join(); t4.join(); t5.join(); catch (InterruptedException ei) { syso("ende"); // Threadklasse class mythread{ Semaphore sem; public mythread(semaphore sem) { this.sem = sem; public void run(){ while (true) { sem. acquire(); // some work sem.release(); // down // up 8