3. 2. 3   Nebenläufige Prozesse

Ein wichtiges Problem, welches es bei der Programmierung nebenläufiger Prozesse zu lösen gilt, ist der gegenseitige Ausschluss. Jeder Prozess besteht aus einer Folge von Abschnitten (Arbeitsgängen), die nacheinander durchlaufen werden. Zwei Prozesse "P1" und "P2" sind nebenläufig, wenn ihre Prozessschritte jederzeit und unabhängig voneinander gestartet werden können. Greifen nun beide Prozesse während eines (kritischen) Abschnitts auf die gleiche Ressource zu, muss verhindert werden, dass einer der beiden Prozesse abstirbt. Im Allgemeinen bedient man sich so genannter Semaphore, die den gegenseitigen Ausschluss organisieren. Das Modell zeigt, dass der Maschinen-Baustein genau die Eigenschaften eines Semaphors hat.

Modell:    crit (DEMO)

Gegenseitiger Ausschluss

Beschreibung:
Das Modell erzeugt zwei Prozesse:
P1 mit den 4 Prozessschritten P1/1, P1/2, crit und P1/4
P2 mit den 3 Prozessschritten P2/1, crit und P2/3
Die einzelnen Prozessschritte werden durch Bearbeitungsschritte an Maschinen modelliert, der Prozesszustand wird durch je einen Job - "P1" bzw. "P2" - dargestellt. Die beiden Jobs bewegen sich auf Endlosschleife durch das System, was durch die Verzweigungen "P1-return" und "P2-return" erreicht wird. Die Verweildauer (Bearbeitungszeit) im kritischen Abschnitt beträgt für "P1" 3 Minuten und für "P2" 1:30 Minuten. Die übrigen Bearbeitungszeiten sind stochastisch.

Anmerkungen:
Bei dem Modell handelt es sich um ein so genanntes geschlossenes Warteschlangensystem, dass lediglich durch den eingestellten Zeithorizont von einer Stunde zum Ende kommt.

Am Gantt-Diagramm kann man deutlich erkennen, dass die kritischen (rot markiert) Prozessabschnitte beider Prozesse niemals gleichzeitig auftreten. Der Prozess, welcher den kritischen Abschnitt zuerst erreicht, setzt das Semaphor. Der nachfolgende Prozess wird suspendiert (gelb). Erst nachdem der erste Prozess den kritischen Abschnitt verlassen hat, wird der suspendierte Prozess aufgeweckt und kann seinerseits den kritischen Abschnitt betreten.

Gantt-Diagramm
Gantt-Diagramm: gegenseitigem Ausschluss im kritischen Abschnitt (rot markiert)

Das Modell des gegenseitigen Ausschlusses lässt sich sehr leicht in ein Synchronisationsmodell umwandeln. Zunächst wird die Kapazität der gemeinsamen Ressource auf 2 gesetzt, so dass sie nicht mehr kritisch ist (Ressource "crit" wird in "sync" umbenannt). Um sicher zu stellen, dass beide Prozesse an der Ressource "sync" aufeinander warten, werden zusätzlich zwei Bedarfs-Objekte angelegt.

 

Modell:    sync (DEMO)

Beschreibung:
Das Modell unterscheidet sich nur wenig vom Modell "crit". In der Technologie "P1" wurde ein Bedarfs-Objekt im Arbeitsgang "sync" eingefügt, das auf den Arbeitsgang "P2/1" der Technologie "P2" verweist. Analog wurde ein Bedarfs-Objekt in "P2" eingefügt, das auf den Arbeitsgang "P1/2" der Technologie "P1" verweist. Beide haben eine Bedarfsmenge 1. Die beiden Bedarfs-Objekte bewirken, dass der Arbeitsgang "sync2" erst beginnen kann, wenn "P1/2" beendet wurde bzw. "sync1" kann erst beginnen, wenn "P2/1" beendet wurde. Die Prozesse "P1" und "P2" warten an der gemeinsamen Ressource aufeinander.

Anmerkungen:
Vor dem Simulationsstart muss der Buchungswert von "P2/1" unbedingt auf 1 gesetzt werden (im Modell bereits eingetragen). Wären alle Buchungswerte auf 0 (Standard) gesetzt, käme es lediglich zum gegenseitigen Ausschluss, wie im Modell "crit". Der notwendige Arbeitsgang "P2/1" ist zwar beendet, hat aber den Buchungswert 0, so dass "sync1" nicht beginnen kann. Erst wenn der Prozess "P2" wieder an den Anfang zurückgekehrt ist, wird der Buchungswert auf 1 gesetzt und "sync1" kann beginnen. Da "sync2" aber den Buchungswert von "P1/2" inzwischen auf 0 gesetzt hat, muss der Prozess "P2" warten usw.
Die Synchronisation wird vor allem zur Abbildung von Montagevorgängen gebraucht.

Gantt-Diagramm

Gantt-Diagramm

Gantt-Diagramm: synchroner Abschnitt wird immer gemeinsam begonnen