14.01.2015 Aufrufe

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

Dynamische Adaption in heterogenen verteilten eingebetteten ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

4 Basisschicht e<strong>in</strong>es Verwalters<br />

Der Abgleich des Zustands kann nicht vollkommen automatisch vorgenommen werden. Hier ist<br />

immer externes beziehungsweise manuell erworbenes Wissen notwendig. Positiv wirkt sich jedoch aus,<br />

dass bei e<strong>in</strong>em Funktionsaufruf e<strong>in</strong>ige Register von der aufgerufenen Funktion benutzt werden und<br />

somit ke<strong>in</strong>en für die aufrufende Funktion relevanten Zustand enthalten. Der Zustand <strong>in</strong> den Registern<br />

ist somit kle<strong>in</strong>er und möglicherweise besser zu handhaben. Beim Abgleich des Stack<strong>in</strong>halts ist kaum<br />

automatische Unterstützung möglich. Es kann lediglich der Sonderfall automatisch identifiziert werden,<br />

dass außer lokalen Variablen ke<strong>in</strong>e anderen Zwischenergebnisse auf dem Stack abgelegt s<strong>in</strong>d.<br />

Als generelle Lösung bietet sich daher nur der schon im Rahmen der aktiven Funktionen vorgeschlagene<br />

Weg an: das Warten auf Beendigung der Funktion. Bei Funktionen auf dem Aufrufpfad lässt sich<br />

allerd<strong>in</strong>gs nicht sagen, wie lange man warten muss, bis die Funktion beendet ist. Je tiefer die Funktion<br />

sich auf dem Aufrufpfad bef<strong>in</strong>det, desto höher ist die Wahrsche<strong>in</strong>lichkeit e<strong>in</strong>er langen Wartezeit.<br />

4.4.2.5 Sonstige dynamisch entstehende Verweise<br />

Neben den dargestellten Möglichkeiten, wie Verweise auf Code entstehen können, kann man sich noch<br />

verschiedene andere Arten vorstellen. So könnte die Adresse e<strong>in</strong>er Funktion zum Beispiel mit Hilfe<br />

von Zeigerarithmetik aus e<strong>in</strong>er Basisadresse errechnet werden. Oder e<strong>in</strong>e Anwendung kann selbst den<br />

Aufrufstack analysieren, um Funktionsadressen zu extrahieren.<br />

Solche Verweise können nicht zuverlässig erkannt und somit auch nicht automatisch angepasst<br />

werden. Man muss daher die Anforderung an den Code stellen, dass Verweise, welche dynamisch entstehen<br />

und nicht durch die oben genannten Arten gefunden werden können, durch zusätzliches externes<br />

Wissen bekannt s<strong>in</strong>d. Alternativ kann man auch auf e<strong>in</strong> Regelwerk setzen, das die Entstehung solcher<br />

Verweise verh<strong>in</strong>dert, wie beispielsweise die oben schon erwähnten Misra-C Regeln. Im Allgeme<strong>in</strong>en<br />

stellt diese Forderung ke<strong>in</strong>e große E<strong>in</strong>schränkung dar. Um nachvollziehbare und leicht verständliche<br />

Programme zu schreiben, sollte man ohneh<strong>in</strong> auf komplexe Arten, dynamisch Verweise zu erstellen,<br />

verzichten.<br />

4.4.3 Abhängigkeitsgraph<br />

Die Verwaltung der Verweise wird von der Basisschicht mithilfe e<strong>in</strong>es Abhängigkeitsgraphen realisiert.<br />

Der Abhängigkeitsgraph wird im Rahmen e<strong>in</strong>er globalen Abhängigkeitsanalyse aus den Referenzen<br />

zwischen den Modulen erstellt. Dabei gehen <strong>in</strong> erster L<strong>in</strong>ie alle statischen Verweise e<strong>in</strong>. Ist e<strong>in</strong> Modul<br />

auf dem Gerät <strong>in</strong>stalliert, so werden auch dynamische Verweise berücksichtigt, um e<strong>in</strong> vollständiges<br />

Bild der Struktur zu erhalten. Für jedes Modul wird dabei festgestellt, welche anderen Module benötigt<br />

werden. Das Ergebnis kann man als gerichteten Graphen darstellen. Abbildung 4.14 zeigt e<strong>in</strong> e<strong>in</strong>faches<br />

Beispielprogramm mit se<strong>in</strong>em Abhängigkeitsgraphen. Die Knoten stellen die Module dar, e<strong>in</strong>e Kante<br />

beschreibt e<strong>in</strong>e Abhängigkeit. Zusätzlich müssen noch externe Abhängigkeiten modelliert werden.<br />

Diese werden als zusätzliche Kanten <strong>in</strong> den Graphen e<strong>in</strong>gefügt und haben ke<strong>in</strong>en Knoten als Quelle.<br />

Mit solchen Kanten werden beispielsweise der Startpunkt der Anwendung und E<strong>in</strong>sprungpunkte für<br />

Unterbrechungsbehandlungen gekennzeichnet. Ebenso können auch aktive Funktionen durch e<strong>in</strong>e<br />

externe Abhängigkeit markiert werden.<br />

Anhand des Abhängigkeitsgraphen lassen sich die Vorgänge und Bed<strong>in</strong>gungen der Basisoperationen<br />

anschaulich darstellen:<br />

• Bei der Installation wird gefordert, dass die <strong>in</strong>stallierten Module <strong>in</strong> sich abgeschlossen s<strong>in</strong>d.<br />

Am Abhängigkeitsgraphen bedeutet dies, dass ke<strong>in</strong>e Kante von den <strong>in</strong>stallierten Modulen zu<br />

nicht <strong>in</strong>stallierten Modulen geht. Werden neue Module h<strong>in</strong>zugefügt, so muss diese Bed<strong>in</strong>gung<br />

weiterh<strong>in</strong> gelten.<br />

72

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!