![]() |
Prozesse |
Die Prozesse in Kahn Prozessnetzwerken
führen ihre Aufgabe in einer Endlosschleife aus. Versucht ein Prozess aus einem
leeren FIFO-Buffer Daten zu lesen, muß der Prozess an der Stelle warten bis
entsprechende Daten vorhanden sind, auch wenn an anderen FIFO-Buffern Daten für ihn bereitstehen.
Ein Prozess besitzt daher zwei wesentliche Zustände.
Entweder führt er seine Aufgabe aus oder er ist blockiert, weil er gerade
versucht Daten aus einem leeren FIFO-Buffer zu lesen. Man spricht in diesem Zusammenhang
auch von blockierendem Lesen. Es gibt keine Möglichkeit vor dem eigentlichen
Leseversuch zu überprüfen, ob ein FIFO-Buffer leer ist.
Abbildung 10
Kahn geht in seinen theoretischen Überlegungen von unendlich großen FIFO-Buffern
aus, daher kann es beim Senden bzw. Schreiben niemals zu einer Situation
kommen, in der der Prozess seine Daten nicht senden kann. Folglich kommt es dann auch
nicht zu einem Blockieren von Prozessen beim Senden bzw. Schreiben.
In der Praxis besitzen die FIFO-Buffer bedingt durch eine bestimme
Implementierung bzw. Simulation eine endliche Größe.
In diesem Fall kann es dann doch zu einem Blockieren beim Senden in einen FIFO-Buffer
kommen und zwar genau dann, wenn ein Prozess versucht in einen bereits vollen FIFO-Buffer zu schreiben.
Auf Grund der Tatsache das Prozesse geblockt sein können besteht die Möglichkeit,
dass bei einem Prozessnetzwerk ein Deadlock auftritt. Man spricht von einem
Deadlock, wenn alle Prozesse blockieren und somit das ganze Prozessnetzwerk
blockiert. Diese Situation kann nicht mehr von selbst aufgelöst werden und die Ausführung
des Prozessnetzwerks wird beendet.
Das Verhalten der Prozesse wurde bei Kahn ursprünglich in Form von Funktionen, geschrieben
in der Sprache Ada, spezifiziert. Für das Senden bzw. das Empfangen von Daten
an bzw. von einen anderen Prozess gab es die speziellen Kommandos Send und
Wait. In diesem Lernmodul wird das Verhalten der Prozesse in Teilschritte unterteilt.
Die einzelnen Teilschritte werden mit Hilfe von Java-Ausdrücken angegeben.
Die graphische Darstellung der Prozesse innerhalb des Lernmoduls ist ein Kreis (siehe Abbildung 10).
In der obersten Zeile innerhalb des Kreises wird der Prozessname angezeigt. In den Zeilen darunter
wird der Teilschritt angegeben, den der Prozess gerade aktuell bearbeitet.
Unterhalb der Teilschrittanzeige wird, falls der Prozess geblockt ist,
dies durch den String "BLOCKIERT" angezeigt.
Im den folgenden Unterkapiteln erfahren Sie mehr über die Teilschritte, mit denen Sie das Verhalten eines Prozesses definieren können. Es wird Ihnen weiter gezeigt, wie Sie einen Prozess erzeugen und dem aktuellen Prozessnetzwerk hinzufügen können, wie Sie einen Prozess wieder entfernen können und wie Sie Prozesse und FIFO-Buffer miteinander verbinden können.
zurück | weiter |