27.01.2014 Aufrufe

(SCI) - Technologie und Leistungsanalysen.pdf

(SCI) - Technologie und Leistungsanalysen.pdf

(SCI) - Technologie und Leistungsanalysen.pdf

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!