vs2.3

Werbung
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 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
- 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.
- 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 ü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 durch
- Verlust
- Duplizierung
- (Verstümmelung)
von Nachrichten
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 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 ProcessGroup,
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 from channel
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.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
- 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
...
send
...
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;
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 !
Herunterladen