(SCI) - Technologie und Leistungsanalysen.pdf
(SCI) - Technologie und Leistungsanalysen.pdf
(SCI) - Technologie und Leistungsanalysen.pdf
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Ausgabe eines neg.<br />
Echos mit BUSY_D<br />
oder BUSY_A <strong>und</strong><br />
voller Puffer.<br />
Initialisierung<br />
SERVE_NA<br />
SERVE_A<br />
Alle Retry_B-<br />
Pakete wurden<br />
akzeptiert<br />
Alle Retry_A-<br />
Pakete wurden<br />
akzeptiert<br />
SERVE_B<br />
SERVE_NB<br />
Ausgabe eines neg.<br />
Echos mit BUSY_D<br />
oder BUSY_B <strong>und</strong><br />
voller Puffer.<br />
Bild 2.5.1: Zustandsübergänge des endlichen Automaten im <strong>SCI</strong>-Receive-Puffer.<br />
seiner Ausgaben ist in Tabelle 2.5.1 angegeben. Die Zustände, Übergänge <strong>und</strong><br />
Ausgaben des Automaten lassen sich auch algorithmisch mit Hilfe des folgenden<br />
Pseudokodes beschreiben:<br />
IF RequestOrResponseOrRetryArrived = TRUE {Ist ein Paket da?}<br />
IF state = SERVE_NA {Ist der Zustand = SERVE_NA?}<br />
IF inFifo = NOT FULL {Eingangspuffer ist nicht voll}<br />
IF PhaseField = NOTRY<br />
EchoPhaseField := DONE;<br />
ELSIF (PhaseField = DOTRY) OR (PhaseField = Retry_A)<br />
EchoPhaseField := DONE;<br />
ELSE {PhaseField = Retry_B}<br />
EchoPhaseField := BUSY_A; SetError;<br />
state := SERVE_A; {Nachfolgezustand einnehmen}<br />
END IF; {PhaseField = NOTRY}<br />
ELSE {inFifo is FULL}<br />
IF PhaseField = NOTRY<br />
EchoPhaseField := BUSY_D;<br />
ELSIF (PhaseField = DOTRY) OR (PhaseField = Retry_A)<br />
EchoPhaseField := BUSY_A;<br />
ELSE {PhaseField = Retry_B}<br />
EchoPhaseField := BUSY_A; SetError;<br />
END IF; {PhaseField = NOTRY}<br />
state := SERVE_A; {Nachfolgezustand einnehmen}<br />
END IF; {Eingangspuffer ist nicht voll}<br />
ELSIF state = SERVE_A<br />
IF inFifo = NOT FULL {Eingangspuffer ist nicht voll}<br />
IF PhaseField = NOTRY<br />
EchoPhaseField := BUSY_D;<br />
ELSIF (PhaseField = DOTRY) OR (PhaseField = Retry_A)<br />
EchoPhaseField := BUSY_B;<br />
ELSE {PhaseField = Retry_A}<br />
EchoPhaseField := DONE;<br />
END IF; {PhaseField = NOTRY}<br />
ELSE {inFifo is FULL}<br />
317