Nichtsequentielle Programmierung Klaus-Peter Löhr Freie Universität Berlin WS 2002/03.

Slides:



Advertisements
Ähnliche Präsentationen
Kapitel 11 Deadlocks RW-Systemarchitekur Kap. 11.
Advertisements

Beim Start eines Prozesses in Windows NT, 2000 wird a der Programmtext aus der exe-Datei ab der dort angegebenen Adresse gespeichert.
Einführung in JavaScript II
Vs61 6 Verteilte Datenverwaltung. vs62 Ziel:Zusammengehöriger Datenbestand soll über mehrere Stationen verteilt werden, z.B. Fragmentierung: in mehrere.
FU Berlin SS 2003 Klaus-Peter Löhr
4 Verteilte Algorithmen
Objektorientierter Entwurf
Einführung in Berechenbarkeit und Formale Sprachen
An Axiomatic Proof Technique for Parallel Programs
Terminierung und Deadlocks Enkhbat Daginaa Betreuerin Prof. Heike Wehrheim Totale Korrektheit.
HEINZ NIXDORF INSTITUT Universität Paderborn Fachbereich Mathematik/Informatik Algorithmische Probleme in Funknetzwerken IX Christian Schindelhauer
HEINZ NIXDORF INSTITUT Universität Paderborn Fachbereich Mathematik/Informatik Algorithmische Probleme in Funknetzwerken X Christian Schindelhauer
Sequenzdiagramm.
On a Buzzword: Hierachical Structure David Parnas.
Kapitel 10 Nebenläufigkeit und wechselseitiger Ausschluss
Nebenläufige Programmierung
Das Halteproblem. Gibt es einen Algorithmus, mit dem man für jedes beliebig vorgegebene Programm R und für jede beliebig vorgegebene Eingabe E entscheiden.
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
OpenMP Präsentation im Rahmen des Seminars
7 Verteilungsabstraktion
3.1.7 Korrektheit von Objekten Voraussetzung für die Diskussion der Korrektheit von nichtsequentiell benutzten abstrakten Objekten: Modellbasierte Spezifikation:
Vorl. 6: Single- und Multitasking Universität Bielefeld – Technische Fakultät AG Rechnernetze und verteilte Systeme Peter B. Ladkin
Christian Schindelhauer
Situationen Verteilte Anwendungen Wintersemester 06/07 © Wolfgang Schönfeld.
Programmierung 1 - Repetitorium
-LABORPRAKTIKUM- SOMMERSEMESTER 2005
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Einführung in die Programmierung Klassendefinition und Objekte
Einige Begriffe zum Anfang.... Transaktionsprozedur: Folge primitiver Operationen als Einheit der Konsistenz und der Robustheit. Transaktion (TA): Ausführung.
Tino Reindanz - FSU Jena Seminar Aktive Datenbanken – SS 2007 Folie 1 Seminar Aktive Datenbanken Rule Development Rule Development for Active Database.
Duo- und Quad Prozessor-Architektur
Effiziente Algorithmen
Sequenzdiagramme (1) Festlegen des Inter-Objekt-Verhaltens (Interaktionsstruktur, Verantwortlichkeiten) Sequenzdiagramm ist temporal orientiert zeigt.
Systeme 1 Kapitel 4 Prozesse WS 2009/10.
Sterne Teil 3 Manche Sterne „pendeln“ um
6.5 Lindas Tupelraum Interaktion von Prozessen über zentralen Umschlagplatz für alle zwischen Prozessen ausgetauschten Daten: Tupelraum (tuple space) (Carriero/Gelernter,
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss
WS 2012/13 Datenbanksysteme Mi 15:15 – 16:45 R Vorlesung #11 Transaktionsverwaltung.
Von Patrik, Yannik, Marc und Luca
2.4 Rekursion Klassifikation und Beispiele
Thread Synchronisation in JAVA
Zustandsübergangsdiagramme (1)
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Agenda für heute, 20. April, 2006 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Agenda für heute, 14. April, 2005 Wiederholte ProgrammausführungWiederholte Programmausführung Algorithmische Grundlagen Bedingungen zum Abbruch von Programmschleifen.
Kommandozeile und Batch-Dateien Molekulare Phylogenetik – Praktikum
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Stoppen der Eingabeaufforderung einer Abfrage j drücken Sie dann F5, oder klicken Sie auf Bildschirmpräsentation > Von Beginn an, um den Kurs zu starten.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
On-Demand™ Der “Markt” ist... Demo Modus: mit Hilfe von Grafiken, Sound (Sprache), Text und Animationen werden Lernsequenzen in Folge abgespielt - ähnlich.
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
2 Nebenläufige Prozesse. 2.1 Programmstruktur und Prozesse private Prozess = Anweisungen + Daten gemeinsame Aber:Wie verhält sich das Konstrukt „Prozess“
7. Formale Sprachen und Grammatiken
Synchronisation paralleler Transaktionen  AIFB SS Serialisierbarkeitsprinzip 4.3 Serialisierbarkeitsprinzip (2/13) Im folgenden wird ein vereinfachtes.
2.3 Implementierung von Prozessen
1.3 Verklemmungen Synchronisation löst Probleme – ist aber auch Gefahrenquelle: Prozeß wartet an Synchronisationspunkt – ist gesichert, daß er irgendwann.
Vs51 5 Verteilte Datenverwaltung. vs52 Situation:Zusammengehöriger Datenbestand ist über mehrere Stationen verteilt, z.B. Fragmentierung: in mehrere Fragmente.
5.1.2 Sequentielle Konsistenz
Vs Objektpufferung (caching) = dynamische, ad-hoc-Replikation einer Primärkopie: Zugriffswilliger beschafft sich temporär eine lokale Kopie cache.
Max Haustein, Karsten Otto
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
Abstrakte Klassen und das Interface-Konzept
Funktionen. Aufgabe : Eingabe zweier Zahlen ---> Minimum bestimmen Dann nochmals Eingabe zweier Zahlen ---> Minimum bestimmen.
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Multiprocessing mit OpenMPI Marius Albath. Vorlesung Betriebssysteme, Was ist OpenMPI Was ist OpenMPI OpenMPI Standard Setup OpenMPI Standard.
 Präsentation transkript:

Nichtsequentielle Programmierung Klaus-Peter Löhr Freie Universität Berlin WS 2002/03

Inhalt 1 Einführung 2 Nebenläufige Prozesse 3 Interaktion über Objekte 4 Interaktion über Nachrichten 5 Elemente der Parallelprogrammierung 6 Entwicklung nichtsequentieller Systeme

1 Einführung Zur Erinnerung:Fachterminologie Englisch/Deutsch siehe

1.1 Nichtsequentielle Programme und Prozesse Was?Warum?Wie? Sequentielle Programme versus Nichtsequentielle Programme

1.1.1 Was ist Nichtsequentialität? Aktion = Ausführung einer Programmanweisung, einer Maschineninstruktion, eines Mikroprogrammbefehls,..... je nach betrachteter Abstraktionsebene

Programmablauf besteht aus Aktionen und heißt sequentiell (sequential), wenn er aus einer Folge von zeitlich nicht überlappenden Aktionen besteht, parallel (parallel), wenn er nicht sequentiell ist

Achtung: ein und derselbe Ablauf kann auf einer Abstraktionsebene sequentiell, auf einer anderen parallel sein ! Beispiel 1: x = 3; y = 7; { x = x+1; y = 2*y; } z = x+y; beschreibt einen sequentiellen Ablauf von 5 Aktionen (genauer: Zuweisungen) - aber auf Hardware-Ebene könnten manche dieser Zuweisungen parallel ausgeführt werden!

Beispiel 2:Manche Programmiersprachen erlauben explizit parallele Abläufe, ohne sie vorzuschreiben, z.B. x = 3; y = 7; (x,y) = (x+1,2*y); z = x+y; aber auf Hardware-Ebene könnte das hier gezeigte multiple assignment auch wie x = x+1; y = 2*y; ausgeführt werden (oder in umgekehrter Reihenfolge!)

Terminologie: eine Programmiersprache heißt nichtsequentiell (nebenläufig, concurrent), [konkurrierend – falsche Übersetzung] wenn sie Konstrukte enthält, die explizit parallele Abläufe zulassen ein Programm oder Programmteil heißt nichtsequentiell, wenn es solche Konstrukte verwendet.

Typische Nebenläufigkeitskonstrukte identifizieren Programmteile als Prozesse: Def.:Ein Prozeß (process) ist ein Programmteil, der – sobald er gestartet wurde – unabhängig vom Rest des Programms ablaufen kann Ein Prozeß kann sequentiell oder nichtsequentiell sein. Häufig ist mit „Prozeß“ „sequentieller Prozeß“ gemeint.

 Nebenläufigkeitsanweisung (concurrent statement) Statement =..... | ConcurrentStatement. ConcurrentStatement = co Processes oc. Processes = Process { || Process }. Process = StatementSequence. z.B. x = 3; y = 7; co x = x+1; || y = 2*y; oc z = x+y;

Semantik: Die Prozesse einer Nebenläufigkeitsanweisung werden unabhängig voneinander ausgeführt. Die Nebenläufigkeitsanweisung ist beendet, wenn alle Prozesse beendet sind. x = 3; y = 7; co x = x+1; || y = 2*y; oc z = x+y;

 Gabelungsanweisung (fork statement) ForkStatement = fork Process. Process = Statement. z.B. x = 3; y = 7; fork x = x+1; y = 2*y; z = x+y;

Semantik: Die Gabelungsanweisung startet den angegebenen Prozeß. (Wann dieser beendet ist, ist nicht bekannt!) z.B. x = 3; y = 7; fork x = x+1; y = 2*y; ? z = x+y; ? Elternprozeß Kindprozeß

Bemerkung: Es wird grundsätzlich unterstellt, daß Prozeduren eintrittsinvariant implementiert sind; somit ist folgendes unproblematisch:... fork p(x+1); fork p(x+2); p(x+3);...

1.1.2 Warum nichtsequentielle Programmierung?  Effizienz durch schnellere parallele Ausführung – sofern entsprechende Hardware vorhanden

 Problemlösungsstruktur soll im Programm gut sichtbar sein („Problemorientierung statt Maschinenorientierung“)...; x = x+1; y = 2*y;... ?...; y = 2*y; x = x+1;... ?...; co x = x+1; || y = 2*y; oc...

 Systemarchitektur: Mehrprozeßbetrieb (multitasking) bei - Betriebssystemen, - Datenbanksystemen, - Echtzeitsystemen, motiviert durch Effizienzüberlegungen und konkurrierende Nutzung knapper Ressourcen

1.1.3 Wie wird nichtsequentiell programmiert? Zentrale Begriffe:  Prozeß  Interaktion zwischen Prozessen  Synchronisation von Prozessen

Prozeßbegriff „Prozeß“ ist ein schillernder Begriff – mit unterschiedlichsten Definitionen:  unabhängig ausführbarer Teil eines Programms  Programmablauf (!)  virtueller Prozessor (Betriebssystem!)  industrieller Prozeß (Prozeßrechner!) u.a.

Manchmal muß auch zwischen „Prozeß“ und „Inkarnation eines Prozesses“ unterschieden werden: process void p(int i) {.....} „Prozeß“... start p(x); start p(y); start p(x); erzeugt Inkarnation (Exemplar, instance) [Instanz – falsche Übersetzung] des Prozesses p oder aber auch „erzeugt Prozeß, der p ausführt“

Interaktion zwischen Prozessen z.B. über gemeinsame Variable: co... time = clock();... ||... write(time);... oc co... decrement(seats);... ||... increment(seats);... oc

Def.:Zwei Prozesse, die nebenläufig auf eine gemeinsame Variable x zugreifen, stehen miteinander in Konflikt (conflict, interference) bezüglich x, wenn mindestens einer der Prozesse x verändert. Konflikte sind meistens unerwünscht (  1.2) und werden durch Synchronisationsmaßnahmen unterbunden

Synchronisation Prozesse laufen grundsätzlich asynchron, d.h. unabhängig voneinander und mit nicht vorhersagbaren relativen Geschwindigkeiten Beispiel: co p(x); || q(y); oc r(z); Es bleibt offen, ob p oder q zuerst fertig ist. Und: „heute so, morgen so“! Die schließende Klammer oc synchronisiert die beiden Prozesse, bevor mit r fortgefahren wird

Alternative Formulierung mit Gabelungsanweisung: fork p(x); q p q(y); wait; r(z); r wait -Anweisung bewirkt Synchronisation des Elternprozesses mit einem Kindprozeß durch eventuelles Warten (auf die Beendigung des Kindprozesses)

1.2 Nichtdeterminismus Der Ablauf eines sequentiellen Programms ist immer deterministisch – d.h. gleiche Eingaben führen zu gleichen Zustandsfolgen – und das Ergebnis ist determiniert – d.h. gleiche Eingaben führen zu gleichen Ausgaben (sofern nicht explizit mit Zufallszahlen gearbeitet wird) Asynchronie führt in der Regel zu nichtdeterministischen Abläufen – möglicherweise aber trotzdem zu determinierten Ergebnissen.

1.2.1 Zeitschnitte dienen der Veranschaulichung nichtsequentieller, insbesondere nichtdeterministischer Abläufe: Prozeß 1Prozeß time = „10:59“.. time = „11:00“ time = clock();write(time); „11:00“ !.... time = „11:00“ „10:59“ !!

Prozeß 1Prozeß 2.. seats = 17 seats = 16 a = seats;b = seats; seats = 17 a = a-1;b = b-2; seats = 16 seats = a;seats = b; seats = 15 seats = 14 seats = 15 ! seats = 16 !!

Ergebnis determiniertnichtdeterminiert Ablauf deterministisch immer- nichtdeterministisch möglich meistens

1.2.2 Unteilbare Anweisungen verhalten sich so, als würden sie „zeitlos“ ausgeführt (oder auch: als würde sich während ihrer Ausführung der Programmzustand nicht ändern) (statt „unteilbar“ auch atomar, indivisible, atomic) (Beachte:in wurde stillschweigend vorausgesetzt, daß die dortigen Anweisungen unteilbar sind.)

Achtung! Annahmen über die Unteilbarkeit selbst einfachster Anweisungen sind häufig nicht gerechtfertigt. Sprachbeschreibungen sind häufig unpräzise in Bezug auf die Unteilbarkeit. Implementierungen können auf subtile Weise die Unteilbarkeit verletzen. Im Zweifelsfall konservative Betrachtungsweise: Das Lesen bzw. Schreiben einer Arbeitsspeicherzelle durch eine Maschineninstruktion ist unteilbar.

Beispiel – wenn Zeichenfelder keine Objekte sind: Prozeß 1Prozeß 2.. clock = „11:00“.. time = „10:59“ time = clock; //time[0]=clock[0]; time = „10:59“ //time[1]=clock[1]; time = „11:59“ write(time); „11:59“ ! //time[2]=clock[2]; time = „11:59“ //time[3]=clock[3]; time = „11:09“ //time[4]=clock[4]; time = „11:00“

Klassifikation von Variablen in höheren Programmiersprachen:  einfache Variable (simple variable): wird von der Hardware unteilbar gelesen/geschrieben  private Variable (private variable) eines Prozesses: wird nur von diesem Prozeß benutzt  gemeinsame Variable (shared variable) mehrerer Prozesse: nicht privat

Präzisierung der Unteilbarkeit (wenn wegen lückenhafter Beschreibung der Sprache und/oder ihrer Implementierung erforderlich):  Ein Ausdruck ist unteilbar, wenn seine Auswertung keine Nebenwirkungen hat und während der Auswertung höchstens eine – zudem einfache – gemeinsame Variable höchstens einmal gelesen wird.  Eine Zuweisung v = A ist unteilbar, wenn entweder – v privat und A unteilbar ist oder – v einfach ist und A sich nur auf private Variable bezieht

Angesichts oft ungesicherter Verhältnisse wünschenswertes Sprachkonstrukt: Klammerung mit AtomicExpression = AtomicStatement = Semantik: Während ein Prozeß einen atomaren Ausdruck auswertet bzw. eine atomare Anweisung ausführt, ruhen alle anderen Prozesse (Synchronisation!) (Aber:Die Praktikabilität von <> läßt zu wünschen übrig!  3.1)

Beispiele: co || oc void p(){ }... co p(a); || p(b); || p(c); oc...