Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Objektorientierte Daten- und Zeitmodelle für die Echtzeit ...
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
6.4. KONTROLLFLUSS IN FUNKTIONALEN DATENNETZEN 145<br />
Nach Beendigung des Funktoraufrufs hat sowohl ËÂ als auch ËÃ den aktuellen Wert. Die<br />
Kontrolle kehrt zur Sequenz ËÂ zurück, <strong>die</strong> nun <strong>die</strong> laufende <strong>Daten</strong>anfrage mit einem internen<br />
Zugriff auf ihre Werteliste befriedigen kann. Wird später im Zyklus auch ËÃ angefordert, kann<br />
der Wert aufgr<strong>und</strong> des bereits erfolgten Aufrufs von ÂÃ sofort zurückgegeben werden.<br />
Durch ein Vertauschen einzelner Eingangs- oder Ausgangsdatensequenzen der Funktoren,<br />
kann sich zwar <strong>die</strong> Reihenfolge der Funktoraufrufe <strong>und</strong> <strong>Daten</strong>aktualisierungen verändern, es<br />
treten aber keine gr<strong>und</strong>sätzlich anderen Konstellationen als <strong>die</strong> zuvor beschriebenen auf.<br />
Es ist offensichtlich, daß Funktoren ohne Ausgangsdaten wie Ë mit <strong>die</strong>sem<br />
Aufrufmechanismus nicht direkt angesprochen werden können. Sie müssen entweder über ihre<br />
Eingangsdaten oder durch einen Agenten getriggert werden. Repräsentiert ein solcher Funktor<br />
einen unabhängigen Verbraucher, kann er auch selber aktiv sein.<br />
Funktoren, <strong>die</strong> wie À ein aktuelles Datum zusammen mit älteren Sequenzwerten der gleichen<br />
Sequenz verarbeiten: ËÀ À Ë <br />
, fügen sich dagegen ohne weiteres in den Mechanismus<br />
ein. Wird À durch seine Ausgangssequenz ËÀ aufgerufen, fordert À von der<br />
Eingangssequenz Ë einen neuen Wert an. Ë wird daraufhin aktualisiert <strong>und</strong> À kann sowohl<br />
auf den aktuellen als auch auf den vorherigen Wert zugreifen.<br />
Asynchrone Ablaufsteuerung<br />
In der anfragegetriebenen Modulsteuerung lassen sich <strong>die</strong> folgenden Relationen asynchron spezifizieren:<br />
Ø Ø , ×Ø <strong>und</strong> ÙÔ . Dabei ist <strong>für</strong> <strong>die</strong> Parallelisierung der verschiedenen<br />
Teilaufgaben des Moduls vor allem <strong>die</strong> Ø Ø -Relation von Bedeutung, da sie es ermöglicht,<br />
mehrere Eingangsdaten eines Funktors nebenläufig in eigenen Threads anzufordern <strong>und</strong> bereitzustellen.<br />
Bei der asynchronen ×Ø -Relation werden <strong>die</strong> von einem Funktor bestimmten<br />
Ausgangsdaten parallel <strong>und</strong> nicht nacheinander gesetzt. Da <strong>die</strong>s allerdings keine rechenintensive<br />
Aufgabe ist, soll an <strong>die</strong>ser Stelle auf <strong>die</strong> Parallelisierung verzichtet werden.<br />
Damit ein Funktor seine Eingangsdaten parallel bestimmen lassen kann, ist eine Zweiteilung<br />
der <strong>Daten</strong>zugriffe notwendig. In einem ersten Schritt werden <strong>die</strong> <strong>Daten</strong> angefordert, wo<strong>für</strong> <strong>die</strong><br />
Ø Ø -Methode asynchron gestartet wird. Die Konrolle kehrt sofort zum Funktor zurück, so<br />
daß <strong>die</strong>se Aktion <strong>für</strong> alle Eingangsdaten wiederholt werden kann. In einem zweiten Schritt<br />
muß nun auf <strong>die</strong> <strong>Daten</strong> gewartet werden. Eine einfache Möglichkeit, <strong>die</strong>s mit den vorgegebenen<br />
Mitteln zu realisieren, ist, unmittelbar nach der Initialisierung aller <strong>Daten</strong>anfragen, <strong>die</strong> Ø Ø -<br />
Methode beginnend beim ersten Eingangsdatum aufzurufen. Da dabei <strong>die</strong> Synchronisation der<br />
Eingangsdaten über <strong>die</strong> Ø Ø -Methode in Verbindung mit dem Eintragen der <strong>Daten</strong> in <strong>die</strong><br />
Sequenz, nicht jedoch über das Ende der Aktualisierungsanforderung ÐÐ erfolgt, bringt es<br />
keinen Vorteil, den Funktoraufruf in einem eigenen Thread zu starten, d.h. <strong>die</strong> ÙÔ -Relation<br />
asynchron zu spezifizieren. Abb. 6.39 zeigt einen möglichen Kontrollfluß, wobei hier nur <strong>die</strong><br />
Ø Ø -Methode asynchron aufgerufen wird.<br />
Auch hier können sich aufgr<strong>und</strong> unterschiedlicher Operatorlaufzeiten <strong>die</strong> verschiedenen<br />
Methodenaufrufe gegeneinander verschieben oder Aktionen zusammenfallen, <strong>die</strong> bei einer synchronen<br />
Ansteuerung streng sequentiell abgearbeitet werden. Um <strong>die</strong> Konsistenz der <strong>Daten</strong><br />
<strong>und</strong> der Programmsteuerung zu gewährleisten, stellt sich damit wiederum <strong>die</strong> Frage, nach dem<br />
Schutz einzelner Aktionen oder <strong>Daten</strong>bereiche gegen eine parallele Bearbeitung sowie der Garantie<br />
von Aufrufreihenfolgen, um bestehende Abhängigkeiten bei der <strong>Daten</strong>verarbeitung <strong>und</strong><br />
der Steuerung zu berücksichtigen.