Einführung

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.

Prozess
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.

 
Einführung > Prozesse

zurück weiter

Startseite   Tutorials   Einführung