next up previous contents
Nächste Seite: Eine Transitionssemantik Aufwärts: Erweiterungen von GOLOG Vorherige Seite: Erweiterungen von GOLOG   Inhalt

Nebenläufigkeit

GOLOG wird nun durch die Möglichkeit, nebenläufige Prozesse zu modellieren, zu ConGOLOG erweitert. Zunächst werden wir den Begriff Nebenläufigkeit in diesem Zusammenhang definieren [19]. Die Ausführung zweier nebenläufiger Prozesse ( \( \delta _{1}=a_{1}^{1},...,a_{N_{1}}^{1} \) und \( \delta _{2}=a_{1}^{2},...,a_{N_{2}}^{2} \)) wird als verschachtelte Sequenz der primitiven Aktionen der komplexen Aktionen angesehen, also zum Beispiel im vorliegenden Fall wäre ein möglicher Plan \( a_{1}^{1},a_{1}^{2},a_{2}^{2},a_{3}^{2},...,a_{N_{2}}^{2},a_{2}^{1},...,a^{1}_{N_{1}} \). Es ist immer nur eine primitive Aktion aktiv. Diese Auffassung kann bei kontinuierlichen Aktionen wie zum Beispiel das Abspielen eines Musikstücks zu Problemen führen. Durch Aufsplittung des Einzelbefehls in eine Start- und eine Stopp-Aktion kann dieser Nachteil umgangen werden.

Wir wollen an dieser Stelle blockierte Prozesse in GOLOG betrachten und den Unterschied zu ConGOLOG herausstellen:

Es ergeben sich folgende Änderungen bzw. Erweiterungen zu GOLOG:



\( \star \) if \( \phi \) then \( \delta _{1} \) else \( \delta _{2} \), synchronisierte Bedingung
\( \star \) while \( \phi \) do \( \delta \), synchronisierte Wiederholung
\( \star \) ( \( \delta _{1}\vert\vert\delta _{2} \)), nebenläufige Ausführung von \( \delta _{1} \) und \( \delta _{2} \)
\( \star \) ( \( \delta _{1}\rangle \rangle \delta _{2} \)), nebenläufige Ausführung,
    dabei hat \( \delta _{1} \) eine höhere Priorität als \( \delta _{2} \);
    \( \delta _{2} \) wird nur ausgeführt, wenn \( \delta _{1} \)fertig oder
    blockiert ist
\( \star \) \( \delta ^{\vert\vert} \), nebenläufige Iteration,
    vergleichbar mit nichtdeterm. Iteration,
    nur daß die einzelnen Iterationen ''gleichzeitig''
    und nicht sequentiell abgearbeitet werden.
\( \star \) < \( \phi \rightarrow \delta \)>, Interrupts,
    \( \delta \) wird nur ausgeführt, wenn es die Kontrolle
    von den höheren Ebenen erhält und \( \phi \) wahr
    ist; nach der Bearbeitung kann der Interrupt
    erneut ausgelöst werden.



Die oben genannte Synchronisation ist die elementare Ausführung der Testaktion \( \phi \) mit der ersten Aktion aus \( \delta \). Dieser Ansatz ist mit der atomaren test-and-set-Instruktion zur Programmierung von Semaphoren in nebenläufigen Systemen zu vergleichen [2].


next up previous contents
Nächste Seite: Eine Transitionssemantik Aufwärts: Erweiterungen von GOLOG Vorherige Seite: Erweiterungen von GOLOG   Inhalt

2001-01-04