2 3 Klassifizierung von Kommunikationsdiensten synonym Nachrichtensystemdienst message

  • Slides: 14
Download presentation
2. 3 Klassifizierung von Kommunikationsdiensten synonym: Nachrichtensystem/dienst (message service) Kommunikationssystem/dienst (communication service) Transportsystem/dienst (transport

2. 3 Klassifizierung von Kommunikationsdiensten synonym: Nachrichtensystem/dienst (message service) Kommunikationssystem/dienst (communication service) Transportsystem/dienst (transport service) Grundsätzliche semantische Gemeinsamkeit: Senden/Empfangen einer Nachricht beinhaltet Kopieren – zwei (oder mehr) disjunkte Prozesse/Prozessoren A, B (C, . . . ) kooperieren zum Zweck des Kopierens eines Wertes von A nach B (C, . . . )

Kommunikationsdienste variieren im Hinblick auf [2. 3. 1] Übertragungssemantik [2. 3. 2] Adressierung der

Kommunikationsdienste variieren im Hinblick auf [2. 3. 1] Übertragungssemantik [2. 3. 2] Adressierung der Kommunikationspartner [2. 3. 3] Konfigurierung von Prozessen und Kanälen [2. 3. 4] Disjunktives Warten Pseudocode für Senden und Empfangen: send mesval [ to destination ] Typ T Typ D<T> recv mesvar [ from source ] Typ T Typ S<T>

2. 3. 1 Übertragungssemantik Pufferung, Empfangsfolge, Flußsteuerung/Synchronisation, Zuverlässigkeit Pufferung: - keine - begrenzt -

2. 3. 1 Übertragungssemantik Pufferung, Empfangsfolge, Flußsteuerung/Synchronisation, Zuverlässigkeit Pufferung: - keine - begrenzt - unbegrenzt Empfangsfolge: - permutiertes Präfix der Sendefolge - Präfix der Sendefolge (reihenfolgetreu, FCFS; Puffertyp = Sequence<T> ) - Strom (stream): Puffertyp = T = Sequence<B>

 Flußsteuerung und Synchronisation: Empfangen: blockierend (blocking) bis Nachricht vorliegt, nichtblockierend (non-blocking), d. h.

Flußsteuerung und Synchronisation: Empfangen: blockierend (blocking) bis Nachricht vorliegt, nichtblockierend (non-blocking), d. h. - Leeroperation, evtl. mit Ausnahmemeldung, oder - nochmaliges Lesen einer zuvor empfangenen Nachricht Senden: blockierend bis Nachricht absendbar, nichtblockierend, d. h. - Leeroperation, evtl. mit Ausnahmemeldung, oder - Überschreiben einer zuvor gesendeten und noch nicht empfangenen Nachricht

Klassifikation von Blockaden: blockierendes recv ist beendet, wenn (alternativ) Bezeichner mesvar an das Nachrichtensystem

Klassifikation von Blockaden: blockierendes recv ist beendet, wenn (alternativ) Bezeichner mesvar an das Nachrichtensystem übergeben ist - asynchrones recv mesvar den empfangenen Wert enthält - synchrones recv blockierendes send ist beendet, wenn (alternativ) Ausdruck mesval an das Nachrichtensystem übergeben ist - asynchrones send Wert von mesval durch das Nachrichtensystem kopiert ist - synchrones send Empfänger die Kopie übernommen hat - quittiertes send

Im asynchronen Fall Benachrichtigung typischerweise durch Software-Unterbrechung (software interrupt, signal) Zuverlässigkeit: Empfangsfolge evtl. gefährdet

Im asynchronen Fall Benachrichtigung typischerweise durch Software-Unterbrechung (software interrupt, signal) Zuverlässigkeit: Empfangsfolge evtl. gefährdet durch - Verlust - Duplizierung - (Verstümmelung) von Nachrichten

2. 3. 2 Adressierung Beachte: Kommunikation ist nicht beschränkt auf das Szenario „ 2

2. 3. 2 Adressierung Beachte: Kommunikation ist nicht beschränkt auf das Szenario „ 2 miteinander verbundene Kommunikationspartner“ ohne Adressierung: send mesval recv mesvar [ from procvar ] produziert Nachricht (evtl. mit Absender) übernimmt Nachricht (und gegebenenfalls Absender) ! Nur ein Nachrichtentyp möglich, z. B. String

 prozeßbezogen: (typischerweise auch mit einem Nachrichtentyp) send mesval to procval recv mesvar from

prozeßbezogen: (typischerweise auch mit einem Nachrichtentyp) send mesval to procval recv mesvar from procval send mesval to procval recv mesvar [ from procvar ] Modell: jeder Prozeß verfügt über eigene mailbox send mesval [ to procvar ] recv mesvar from procval (Umkehrung des Modells – exotisch!)

 prozeßgruppenbezogen: (group communication, multicast) Es gibt einen Typ Process. Group, und Prozesse können

prozeßgruppenbezogen: (group communication, multicast) Es gibt einen Typ Process. Group, und Prozesse können einer Gruppe beitreten und sie verlassen: . . . groupval. enter(); . . . ; groupval. leave(); . . . send mesval to groupval recv mesvar [ from procvar ]

 kanalbezogen: Kanal als eigenständiges, explizit benennbares Pufferobjekt send mesval to channel recv mesvar

kanalbezogen: Kanal als eigenständiges, explizit benennbares Pufferobjekt send mesval to channel recv mesvar from channel. send(mesval); mesvar = channel. recv(); Port = formaler Kanalparameter eines Prozesses, häufig exklusiv entweder nur als Eingabe-Port für recv oder nur als Ausgabe-Port für send alternativ: Port = einem Prozeß fest zugeordneter Eingabekanal send mesval to proc. port recv mesvar from port

2. 3. 3 Konfigurierung = Einrichten von Prozessen und evtl. Kanälen sowie Binden, d.

2. 3. 3 Konfigurierung = Einrichten von Prozessen und evtl. Kanälen sowie Binden, d. h. Aktualisierung formaler Parameter vom Typ Prozeß, Kanal, Port, . . . Statisches Binden: • Hardware: • Software: durch „Strippenziehen“ zwischen Rechnern mittels Konfigurationssprache, z. B. Unix Shell für Pipelines: who | sort | lpr Adressierung kanalbezogen: Kanal = pipe Ports = stdin, stdout

Dynamisches Binden: Prozesse besorgen die Konfigurierung selbst - Wiederverwendbarkeit in anderen Kontexten begrenzt -

Dynamisches Binden: Prozesse besorgen die Konfigurierung selbst - Wiederverwendbarkeit in anderen Kontexten begrenzt - jederzeit dynamische Umkonfigurierung möglich Dynamische Erzeugung von Prozessen und Kanälen und Binden durch geeignetes Initialisieren Namensdienste erlauben das Auffinden von bereits vorhandenen Prozeß- bzw. Kanalobjekten

2. 3. 4 Disjunktives Warten Beispiel: Auftraggeber client Auftragnehmer . . . recv. .

2. 3. 4 Disjunktives Warten Beispiel: Auftraggeber client Auftragnehmer . . . recv. . . send. . . Unterauftragnehmer server request from client; ? subrequest to server; subresult from server; result to client; ?

Besser: nichtdeterministisch disjunktives Warten (auch „externe Auswahl“). . . select recv request from client;

Besser: nichtdeterministisch disjunktives Warten (auch „externe Auswahl“). . . select recv request from client; process request; | recv subresult from server; process subresult; | timeout t do cleanup end; . . . t = 0 wirkt wie ein otherwise/else-Konstrukt t = wirkt wie fehlende Timeout-Klausel ! Alternative: Threads verwenden !