|
Kanal
Ref-Kanal
V-Aufgabe
∘
Strich
∘
nix
|
|
|
|
Senden:
A
V
S
a'
s'
∘
a
t
Empfangen:
S
V
A
V-Aufg:
sS
sA
rT
rS
nix
|
Senden:
A
V
S
a'
s'
∘
a
t
Empfangen:
S
V
A
V-Aufg:
sS
sA
rT
rS
nix
|
|
|
|
|
IAD sendAsyn | IAD sendTry |
|
|
Kanal
|
- Menge SN für Tupel aus (Sender, Nachricht).
Sender optional, Nachricht als Verweis.
- Menge EP für Tupel aus (Empfänger, Puffer).
Empfänger optional, Empfangspuffer als Verweis.
- Kanalpuffer für Nachrichten
-
Eine Nachricht liegt rum, obwohl sie zugestellt werden könnte.
Also beide Mengen enthalten ein Element.
-
Wenn Menge SN nicht leer, dann Menge EP leer.
|
Referenz-Kanal
|
- Menge SN für Tupel aus (Sender, Nachricht).
Sender optional, Nachricht als Verweis.
- Menge EP für Tupel aus (Empfänger, Puffer).
Empfänger optional, Empfangspuffer als Verweis.
-
Eine Nachricht liegt rum, obwohl sie zugestellt werden könnte.
Also beide Mengen enthalten ein Element.
-
Wenn Menge SN nicht leer, dann Menge EP leer.
|
|
Senden asynchron | Empfangen asynchron |
- Menge EP ist leer?
- Ja:
Beschreibung für Wertablage
- Nachricht in Kanalpuffer kopieren
- ( - ,Kopie) in Menge SN legen
- Nein:
- (E,P) aus Menge EP nehmen
- Nachricht in P kopieren
-
- E deblockieren falls vorhanden
|
- Menge SN ist leer?
- Ja:
-
- ( - ,Puffer) in Menge EP legen
- Nein:
- (S,N) aus Menge SN nehmen
- N in Puffer kopieren
- Kanalpuffer von N freigeben falls benutzt
- S deblockieren falls vorhanden
|
Senden synchron | Empfangen synchron |
- Menge EP ist leer?
- Ja:
Beschreibung für Referenzablage
- Aufrufer blockieren
- (Aufrufer,Nachr.) in Menge SN legen
- Nein:
- (E,P) aus Menge EP nehmen
- Nachricht in P kopieren
-
- E deblockieren falls vorhanden
|
- Menge SN ist leer?
- Ja:
- Aufrufer blockieren
- (Aufrufer,Puffer) in Menge EP legen
- Nein:
- (S,N) aus Menge SN nehmen
- N in Puffer kopieren
- Kanalpuffer von N freigeben falls benutzt
- S deblockieren falls vorhanden
|
Senden versuchend | Empfangen versuchend |
- Menge EP ist leer?
- Ja:
- Nein:
- (E,P) aus Menge EP nehmen
- Nachricht in P kopieren
-
- E deblockieren falls vorhanden
- Erfolg melden
|
- Menge SN ist leer?
- Ja:
- Nein:
- (S,N) aus Menge SN nehmen
- N in Puffer kopieren
- Kanalpuffer von N freigeben falls benutzt
- S deblockieren falls vorhanden
- Erfolg melden
|
Ungewöhnliche Kombinationen beim Senden...
|
Senden asynchron (Ref) |
Senden synchron (Wert) |
- Menge EP ist leer?
- Ja:
Beschreibung für Referenzablage
-
- ( - ,Nachr.) in Menge SN legen
- Nein:
- (E,P) aus Menge EP nehmen
- Nachricht in P kopieren
-
- E deblockieren falls vorhanden
|
- Menge EP ist leer?
- Ja:
Beschreibung für Wertablage
- Aufrufer blockieren
- Nachricht in Kanalpuffer kopieren
- (Aufrufer,Kopie) in Menge SN legen
- Nein:
- (E,P) aus Menge EP nehmen
- Nachricht in P kopieren
- E deblockieren falls vorhanden
|
V-Aufgabe: Kanal mit Puffer
|
- Menge NP für Tupel (Nachrichtenreferenz, Prozess).
Initial leer. Prozess darf
null sein.
- Menge ZP für Tupel (Zielreferenz, Prozess).
Initial leer. Prozess darf nicht
null sein.
- Pufferspeicher PS für Nachrichten, Größe begrenzt.
Initial leer.
-
Sowohl NP als auch ZP enthalten ein Element.
-
PS enthält eine Nachricht, die NP nicht referenziert.
|
Senden synchron | Empfangen versuchend |
- Nachricht zu groß? ⇒ Abbruch mit Fehler
- ZP enthält Element?
- Ja:
- Tupel (Zielreferenz, Prozess) aus ZP nehmen
- Nachricht in Zielbereich kopieren
- Prozess deblockieren
- Nein:
- Aufrufer blockieren
- (Nachrichtenreferenz, Aufrufer) in NP legen
|
- NP enthält Element?
- Ja:
- Tupel (Nachrichtenreferenz, Prozess) aus NP nehmen
- Nachricht in Zielbereich kopieren
- Prozess deblockieren, falls nicht
null
- Nachricht in PS freigeben, falls von dort
- Erfolg melden
- Nein:
|
Senden asynchron | Empfangen synchron |
- Nachricht zu groß? ⇒ Abbruch mit Fehler
- ZP enthält Element?
- Ja:
- Tupel (Zielreferenz, Prozess) aus ZP nehmen
- Nachricht in Zielbereich kopieren
- Prozess deblockieren
- Nein:
- Nicht genug Platz in PS? ⇒ Abbruch mit Fehler
- Nachricht in PS kopieren
- (Kopiereferenz, null) in NP legen
|
- NP enthält Element?
- Ja:
- Tupel (Nachrichtenreferenz, Prozess) aus NP nehmen
- Nachricht in Zielbereich kopieren
- Prozess deblockieren, falls nicht
null
- Nachricht in PS freigeben, falls von dort
- Nein:
- Aufrufer blockieren
- (Zielreferenz, Aufrufer) in ZP legen
|