Parallel Lua / CSP Tutorial - Nachrichtenbasierte Kommunizierende Prozesse (Stefan Bosse) [6.2024]

Übung 7 - Parallel Lua / CSP Tutorial - Nachrichtenbasierte Kommunizierende Prozesse

Übung 7 - Parallel Lua / CSP Tutorial - Nachrichtenbasierte Kommunizierende Prozesse
Vorbereitung und Verwendung
Channel
Der Alt Prozesskonstruktor
Kommunizierende Prozesse
Kommunizierende Dinierende Philosophen

Vorbereitung und Verwendung

Minimalanforderungen: lvm 1.1.15

  1. Der Programmcode kann in dem oberen Teilfenster eines Snippets verändert werden.
  2. Der Programmcode wird ausgeführt durch Drücken der Playtaste ▸ im unteren Teilfenster (Ausgabekonsole).
  3. Die Ausgabekonsole kann auf der rechten Seite gelöscht werden durch Drücken von ✗.
  4. Hin und wieder kann eine Aktualisierung des Ausgabefensters durch Drücken des Knopfes ↻ erforderlich sein.
  5. Bei parallelen Prozessen werden jeweils neue VM Instanzen in Threads gestartet. Wenn etwas schief läuft kann das Programm hängen und nicht terminieren (also der aktuelle Codeabschnitt). Der Abbruch kann versucht werden durch Drücken des Knopfes ◼.

Ein Beispiel

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Channel

Der Kommuniaktionskanal wurde bereits eingeführt. Hier noch einmal die Zusammenfassung:


Ein Beispiel: Verwendung eines Chennels in Par Prozessen

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Mit Kanälen können höhere und komplexere Kommunikationsprotokolle für die Prozesskommunikation eingesetzt werden.

Der Alt Prozesskonstruktor

Der Alt Prozesskonstruktor implemtiert einen mutualen Ausschluss auf möglicherweise parallelen Ereignissen, und führt eine Auswahl und Sequenzialisierung ein. So kann mit einem Alt Prozesse parallel auf das Eintreten von Ereignissen gewartet werden, prominent das Warten auf Daten in mehreren Kanälen.


Ein Beispiel: Verwendung eines Alt Prozesses in Par Prozessen

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Aufgabe. Welcher Wert wird ausgegeben? Was passiert wenn vor dem Alt Operator ein Wert in den Channel 2 geschrieben wird (also ch2:write("B"))?

Kommunizierende Prozesse

In dieser Aufgabe sollen mehrere Prozesse mit einem Verwaltungsprozess kommunizieren. Der Verwaltungsprozess verwaltet und verteilte geteilte Ressourcen ohne Deadlock Gefahr. Ein Beispiel ist nachfolgend die Implementierung eines Semaphor durch einen Prozess. Die anderen Prozesse fragen die Ressource über Kommunikationskanäle an, und bekommen die Antwort über einen Kommunikationskanal. Es gibt zwei Kanäle pro Prozess und Ressource:

  1. Anfrage (Request)
  2. Antwort (Reply)

#semchann


Mit Nachrichten kommunizierende Prozesse und zentraler Verwaltung einer Lock Ressource.

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Die auskommentierten Zeilen setmetatable(chreq, chreq.__class) müssen bei lvm version < 1.15 aktiviert werden.

Aufgabe. Implementiere anstelle eines Locks ein Semaphor Objekt. Teste die Ausführung mit drei Prozessen.

Kommunizierende Dinierende Philosophen

Aufgabe. Implementiere die Dinierenden Philosophen mit einem zentralen Verwaltungsprozess der die N Gabeln verwaltet. Die Anfrage von Gabeln erfolgt über Kommunikationskanäle. Der Alt Prozesskonstruktor muss vom Verwaltungsprozess verwendet werden um auf allen Anfragekanälen Nachrichten empfangen zu können.


Implementierung der Dinierenden Philosophen ohne Deadlock mittels Alt, Par, und Kommunikationskanälen für Anfrage und Bestätigung von Ressourcen (hier die Gabeln)

 ▸ 
 ◼ 
 ✗ 
 ↻ 
 ≡ 

Frage. Wie müssen die Gabeln angefragt werden damit kein Deadlock auftreten kann? Können die Gabeln sequenziell nacheinander angefragt werden? Wo wird Atomarität verletzt (siehe auch Test & Set Probleme).



Hilfe



Einreichung (Assignment #2024-90707 )



Prüfen



Bewerten (Lehrer)




Created by the NoteBook Compiler Ver. 1.27.2 (c) Dr. Stefan Bosse (Mon Jul 01 2024 09:32:02 GMT+0200 (CET))