160 likes | 288 Views
2.3 Klassifizierung von Kommunikationsdiensten. synonym: Nachrichtensystem/dienst (message service) Kommunikationssystem/dienst (communication service) Transportsystem/dienst (transport service). Grundsätzliche semantische Gemeinsamkeit:
E N D
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, ...) vs2.3
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 MsgExpr [ to Destination ] Typ T Typ D<T> recvMsgVar [ from Source ] Typ T Typ S<T> vs2.3
2.3.1 Übertragungssemantik Pufferung, Empfangsfolge, Flußsteuerung/Synchronisation, Zuverlässigkeit • Pufferung: - keine - begrenzt - unbegrenzt • Empfangsfolge: - Präfix der Sendefolge (reihenfolgetreu, FCFS; Puffertyp = Sequence<T> ) - permutiertes Präfix der Sendefolge - Strom (stream): Puffertyp = T = Sequence<B> vs2.3
Flußsteuerung und Synchronisation: Empfangen mit recv: blockierend(blocking) bis neue Nachricht vorliegt, nichtblockierend(non-blocking), d.h. wenn keine neue Nachricht: - Leeroperation, evtl. mit späterer Unterbrechung, wenn Nachricht eingetroffen (signal), oder - nochmaliges Lesen einer zuvor empfangenen Nachricht Senden mit send: blockierend bis Nachricht absendbar, nichtblockierend, d.h. - Leeroperation, evtl. mit Ausnahmemeldung, oder - Überschreiben einer zuvor gesendeten und noch nicht empfangenen Nachricht vs2.3
Synchrone vs. asynchrone Übertragung: asynchrone Übertragung: send ist beendet, sobald der Wert von MsgExpr an das Nachrichtensystem übergeben ist synchrone Übertragung: send ist beendet,sobald die Nachricht durch recv übernommen wurde vs2.3
Zuverlässigkeit: Empfangsfolge der Nachrichten evtl. gefährdet durch - Duplizierung - Verlust - Verstümmelung: wird mittels Prüfcode erkannt und als Verlust betrachtet vs2.3
2.3.2 Adressierung Beachte: Kommunikation ist nicht beschränkt auf das Szenario „2 miteinander verbundene Kommunikationspartner“ 4 Varianten: ohne Adressierung prozessbezogen prozessgruppenbezogen kanalbezogen vs2.3
ohne Adressierung: sendMsgExprrecvMsgVar[fromProcVar] produziert Nachricht übernimmt Nachricht (evtl. mit Absender) (und gegebenenfalls Absender) ! Generische Operationen, z.B. mit Nachrichtentyp Sequence<Byte> vs2.3
prozeßbezogen: (typischerweise auch generisch) send MsgExprtoProcExprrecvMsgVarfromProcExpr sendMsgExprtoProcExprrecvMsgVar[fromProcVar] (Modell hier: jeder Prozeß verfügt über eigene mailbox) send MsgExpr[to ProcVar]recv MsgVar from ProcExpr (Umkehrung des obigen Modells – eher akademisch!) vs2.3
prozeßgruppenbezogen(group communication, auch „Rundsendung“, multicast): Es gibt einen Typ ProcessGroup, und Prozesse können einer Gruppe beitreten und sie verlassen: ... group.enter(); ... ; group.leave(); ... Damit dann send msg to group recv var [from procvar ] vs2.3
kanalbezogen/portbezogen Kanal als eigenständiges, explizit benennbares Pufferobjekt, meist unidirektional („Simplex-Kanal“): sendMsgExprtoChanExprrecvMsgVarfromChanExpr channel.send(msg); msg = channel.recv(); Wichtiger Begriff in Zusammenhang mit Kanälen: Port - mit verschiedenen Bedeutungen: vs2.3
Port = formaler Kanalparameter eines Prozesses, häufig exklusiv entweder nur als Eingabe-Port fürrecv oder nur als Ausgabe-Port fürsend (Beispiel: Unix-stdin/stdout über 0 bzw. 1) alternativ: Port = einem Prozeß fest zugeordneter Kanal: send msg to proc.port4 recv var from port4 alternativ: Port = der „Eingang“ oder der „Ausgang“ eines Kanals, sozusagen „eine Hälfte“ eines Kanals vs2.3
2.3.3 Konfigurierung • bedeutet Einrichten von Prozessen und evtl. Kanälen sowie Binden, • d.h. Aktualisierung formaler Parameter vom Typ Prozeß, Kanal, Port • Statisches Binden: • Hardware: durch „Strippenziehen“ zwischen Rechnern • Software: mittels Konfigurationssprache, • z.B. Unix Shell für Pipelines: • who | sort | lpr • Adressierung kanalbezogen: Kanal = pipe • Ports = stdin, stdout vs2.3
Dynamisches Binden: • Prozesse besorgen die Konfigurierung selbst • - Wiederverwendbarkeit in anderen Kontexten begrenzt • + jederzeit dynamische Umkonfigurierung möglich • Dynamische Erzeugung von Prozessen und Kanälen, dabei Binden durch geeignetes Initialisieren Namensdienste erlauben das Auffinden von bereits vorhandenen Prozess- bzw. Kanalobjekten vs2.3
2.3.4 Disjunktives Warten Beispiel: Unter- auftrag- nehmer Auftrag- geber Auftrag- nehmer client server for(;;) { ..... recv request from client; ..... send subrequest to server; ..... recv subresult from server;..... ? send result to client; ..... } vs2.3
Besser: nichtdeterministisch disjunktives Warten for(;;) { ... select recv request from client; process request; | recv subresult from server; process subresult; | timeout t do cleanupendselect; ... } t = 0 wirkt wie ein otherwise/else-Konstrukt t = wirkt wie fehlende Timeout-Klausel ! Alternative: Threads verwenden ! vs2.3