Parsing Parallele Programmierung - PowerPoint PPT Presentation

1 / 37
About This Presentation
Title:

Parsing Parallele Programmierung

Description:

this is some text without spaces and ... Wie arbeitet ein Lexer. Erkennt Token Klassen ... Basierend auf dem aktuellen Input-Symbol oder Token (vom Lexer) ... – PowerPoint PPT presentation

Number of Views:109
Avg rating:3.0/5.0
Slides: 38
Provided by: michaell73
Category:

less

Transcript and Presenter's Notes

Title: Parsing Parallele Programmierung


1
ParsingParallele Programmierung
  • Grundlagen der Softwaretechnik für das
    Programmier Praktikum

Prof. Dr. Michael Leuschel Institut für
Informatik Universität Düsseldorf
2
Ein bisschen über Compilerbau
Hilft vielleicht bei der Analyse der
Benutzereingabe !
3
Klassicher CompilerÜbersicht
Source Program
Lexical Syntax Semantic
C o m p i l e r
Front End
Analysis
Back End
Synthesis
Machine Language
4
Natural Language Example
thisissometextwithoutspacesandpunctuationmarkswhic
hist hereforequitedifficulttoreadbyhumanslexicalan
alysiswillbre akthistextupintowordswhiletheparsing
phasewillextractthegr ammaticalstructureofthetext
this is some text without spaces and punctuation
marks which is therefore quite difficult to read
by humans lexical analysis will break this text
up into words while the parsing phase
will extract the grammatical structure of the text
This is some text without spaces and
punctuation-marks which is therefore quite
difficult to read by humans. Lexical-analysis
will break this text up into words while
the parsing-phase will extract the
grammatical-structure of the text.
5
if n 0 then return 0 else //recursive case
return nf(n-1)
Source Program
C o m p i l e r
Lex
if id(n) op() num(0) then return num(0) else
return id(n) op() id(f) lparen id(n) op(-)
num(1) rparen
Parse
Parse
Parsing Actions
...
Parse Tree
Machine Language
6
Wie arbeitet ein Lexer
  • Erkennt Token Klassen
  • Jede Klasse durch regulären Ausdruck (siehe
    "grep" Unix Kommando) beschrieben
  • Löscht Kommentare, Whitespace
  • Effiziente Übersetzung in Java/C Code
  • Lex für C, JLex, javacc für Java

7
Für MUD
  • Was sind die Tokens ?
  • Man braucht keine regulären Ausdrücke
  • Es kann nützlich sein Whitespace auszufiltern

8
Wie funktioniert ein Parser
  • Struktur einer Programmiersprache wird durch
    grammatikalische Regeln beschrieben
  • Anweisung ? Var Ausdruck
  • Anweisung ? if Ausdruck then Anweisung else
    Anweisung
  • Terminal Symbole , if, then, Var,
  • Nicht-Terminale Anweisung , Ausdruck,

9
Wie funktioniert ein Parser 2
  • Top-Down, Predictive Parsing
  • Jedes Nicht-Terminal Symbol wird eine Prozedur
  • Prozeduren entscheiden welche Grammatik-Regel
    angewendet werden muss
  • Basierend auf dem aktuellen Input-Symbol oder
    Token (vom Lexer)
  • Manchmal wird ein "lookahead" benutzt
  • Prozeduren konsumieren Eingabe und rufen sich
    gegenseitig auf

10
Wie funktioniert ein Parser 3
  • Beispiel
  • Anweisung ? Var Ausdruck
  • Anweisung ? if Ausdruck then Anweisung else
    Anweisung
  • void Anweisung() switch(tok)
  • case 'Var'
  • eat('Var') eat('') Ausdruck()
  • break
  • case 'if'
  • eat('if') Ausdruck()
  • eat('then') Anweisung()
  • eat('else') Anweisung()
  • break
  • default
  • raise_error('Anweisung','Var or if')

11
Für MUD
  • Es kann nützlich sein
  • Kleine Grammatik zu schreiben
  • Einfachen Parser von der Grammatik abzuleiten
  • Erlaubt flexible Eingabe
  • Erlaubt zB Eingaben zu kombinieren
  • "Gehe nach Norden dann nehme Tasche"

12
Für mehr Informationen
  • Buch (in der ULB)
  • Andrew W. Appel
  • Modern CompilerImplementation in Java
  • Cambridge University Press
  • Noch mehr Details
  • Aho, Sethi, Ullman
  • Compilers

13
Parallele Programme in Java
Hilft bei der Entwicklung des Servers
14
Was ist ein paralleles Programm?
A sequential program has a single thread of
control. A concurrent program has multiple
threads of control allowing it perform multiple
computations in parallel and to control multiple
external activities which occur at the same time.
15
Parallel Warum?
  • Performance gain from multiprocessing hardware
  • parallelism.
  • Increased application throughput
  • an I/O call need only block one thread.
  • Increased application responsiveness
  • high priority thread for user requests.
  • More appropriate structure
  • for programs which interact with the environment,
    control multiple activities and handle multiple
    events.

16
Threads vs Prozesse
17
threads in Java
A Thread class manages a single sequential thread
of control. Threads may be created and deleted
dynamically.
The Thread class executes instructions from its
method run(). The actual code executed depends on
the implementation provided for run() in a
derived class.
class MyThread extends Thread public void
run() //......
Thread x new MyThread()
18
thread life-cycle in Java
An overview of the life-cycle of a thread as
state transitions
new Thread()
start() causes the thread to call its run()
method.
start()
Alive
Created
stop(), or run() returns
stop()
Terminated
The predicate isAlive() can be used to test if a
thread has been started but not terminated. Once
terminated, it cannot be restarted (cf. mortals).
19
thread alive states in Java
Once started, an alive thread has a number of
substates
start()
Running
sleep()
suspend()
yield()
dispatch
suspend()
Runnable
Non-Runnable
resume()
stop(), or run() returns
wait() also makes a Thread Non-Runnable, and
notify() Runnable
20
Beispiel Threads in Java
  • class SimpleThread extends Thread
  • int myID
  • public SimpleThread (int ID)
  • myIDID
  • public void run()
  • int i
  • for(i0ilt100i)
  • System.out.print(myID)
  • if(Math.random()lt0.3) Thread.yield()
  • public static void main (String argv)
  • Thread t1 new SimpleThread(1)
  • t1.start()
  • Thread t2 new SimpleThread(2)
  • t2.start()

21
Threads Interface
Since Java does not permit multiple inheritance,
we often implement the run() method in a class
not derived from Thread but from the interface
Runnable.
Thread x new Thread(new MyRun())
22
Probleme bei der Parallelen Programmierung
  • Interferenz
  • Thread/Prozess wird im "ungünstigen" Moment
    unterbrochen
  • Andere Thread/Prozess verändert gemeinsames
    Objekt/Daten
  • Deadlock
  • Threads/Prozesse warten alle aufeinander

23
Interferenz
class InterferenceThread extends Thread
static SharedCounter counter public
void run() int i for(i0ilt10i)
counter.inc() System.out.println("
count "counter.val()) public static void
main (String argv) counter new
SharedCounter() Thread t1 new
InterferenceThread(1) t1.start()
Thread t2 new InterferenceThread(2)
t2.start()
public class SharedCounter int value public
SharedCounter() value0 void
inc() int temp value valuetemp1
int val() return value
24
Interferenz
  • Fehler lässt sich oft nicht systematisch
    reproduzieren
  • zB taucht auf bestimmter Hardware nie auf
  • Interferenz schwer zu lokalisieren

25
Mutual Exclusion synchronized
  • Java erlaubt Methoden und Objekte als
    "synchronized" zu deklarieren
  • Jedes Objekt bekommt eine Verriegelung (lock)
  • Maximal ein Threadkann eine synchr.Methode
    ausführen

public class SharedCounter int value
synchronized void inc() int temp value
valuetemp1
26
Beispiel synchronized
public class SharedCounter int value
synchronized void inc() int temp value
valuetemp1
Thread 1
inc()
Thread 2
public class SharedCounter int value
synchronized void inc() int temp value
valuetemp1
Thread 1
Anmerkung inc() darf anderesynchronized Methode
n vomgleichen Objektaufrufen
inc()
Thread 2
27
Deadlock
public class SharedObj1 int synchronized
void m1() o2.m2()
Thread 1
m1()
public class SharedObj2 int synchronized
void m2() o1.m1()
Thread 2
m2()
28
Deadlock 2
public class SharedObj1 int synchronized
void m1() o2.m2()
Thread 1
m1()
public class SharedObj2 int synchronized
void m2() o1.m1()
Thread 2
m2()
29
Deadlock Lösungen
  • Gemainsame Ressourcen in der gleichen Reihenfolge
    beantragen

public class SharedObj1 int synchronized
void m1() o2.m2()
Thread 1
public class SharedObj2 int synchronized
void m2() ()
Thread 2
30
Deadlock Lösungen 2
  • Timeout
  • Nach bestimmter Zeit falls Ressource immer noch
    nicht verfügbar
  • alle Locks abgeben (Achtung livelock)
  • Banker Algorithmus
  • Prozess/Thread muss Maximum der verlangten
    Ressourcen angeben
  • Lock wird vergeben wenn dannach noch genügend
    Ressourcen vorhanden sind damit wenigstens ein
    Prozess terminieren kann
  • Deadlock Detection (und nicht Prevention
  • Wenn Deadlock entdeckt wird Prozesse killen

31
Potentielle Problemeder Parallele Programmierung
  • Interference (Race Conditions)
  • Deadlock
  • Fairness
  • Starvation (Verhungern)
  • Livelock

32
Buch
ConcurrencyState Models Java Programs Jeff
Magee Jeff Kramer WILEY
33
Client-Server MUD
  • Server
  • Daten
  • Logik Zugang zu Daten
  • Client
  • Grafische Oberfläche
  • Logik (SQL Aufrufe,)
  • Threads benötigt ?
  • Mutual Exclusion benötigt ?

34
Organisation
35
Themen für Treffen
  • Viertes Treffen (Woche vom 6. Juni)?
  • "schau" Aktion Wie können die verschiedenen
    Eigenschaften eines Raumes ermittelt werden?
  • Parsing der Benutzereingabe Wie funktioniert es?
    Wie wird/wurde es implementiert?
  • Fünftes Treffen (Woche vom 13. Juni)
  • XML Einlesen Wie lesen Sie die XML Dateien ein?
    Wie haben Sie das XML Format erweitert?
  • Client-Server Architektur Wie gedenken Sie die
    "Multi-User" Version zu verwirklichen?
  • Fehlerbehandlung

36
Verschiedenes
  • XML Parser
  • Für Text zwischen Tags
  • ltrequiresgtObjekt55lt/requiresgt
  • Child mit Namen "text"
  • nodes room.getChildNodes()
  • node nodes.item(i)
  • node.getNodeName().equals("text")
  • Node.toString() ? "Objekt55"

37
PP Organisation
  • Abgabe nächste Woche, Mittwoch 8. Juni, 1200
    Mittags
  • UML Klassendiagramm, Architektur,
  • In CVS in Projekt "Abgaben" einchecken
  • Abgabe 1. Prototyp
  • Woche vom 20. Juni
  • Vortrag während der Treffen
  • Endabgabe
  • Wahrscheinlich 13. Juli, 1000
Write a Comment
User Comments (0)
About PowerShow.com