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

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4.4 Verweise auf Module<br />

void hello() {<br />

pr<strong>in</strong>tf ("Hello World!\n");<br />

}<br />

void foo() {<br />

hello();<br />

}<br />

void ma<strong>in</strong>() {<br />

hello();<br />

}<br />

(a) Quellcode<br />

ma<strong>in</strong> foo<br />

hello<br />

L::.rodata:dep_graph.o pr<strong>in</strong>tf<br />

(b) Abhängigkeitsgraph<br />

Abbildung 4.14: Abhängigkeitsgraph e<strong>in</strong>es e<strong>in</strong>fachen Beispiels<br />

L<strong>in</strong>ks ist der Quellcode e<strong>in</strong>es e<strong>in</strong>fachen Beispiels gegeben. Rechts daneben ist der automatisch erzeugte Abhängigkeitsgraph.<br />

Die Funktion foo wird <strong>in</strong> diesem e<strong>in</strong>fachen Beispiel nicht verwendet. Im Abhängigkeitsgraphen erkennt man das<br />

daran, dass ke<strong>in</strong>e Kante <strong>in</strong> den Knoten der Funktion foo führt. Die Funktion hello benötigt als e<strong>in</strong>ziges Zugriff auf<br />

die Datensektion (L::.rodata:dep_graph.o). Nicht zu erkennen ist, dass Funktion pr<strong>in</strong>tf aus e<strong>in</strong>er anderen<br />

Datei h<strong>in</strong>zugefügt wurde.<br />

• Möchte man e<strong>in</strong> Modul entfernen, so darf es nicht mehr referenziert werden. Demnach darf ke<strong>in</strong>e<br />

Kante <strong>in</strong> den entsprechenden Knoten führen. Hierbei ist zu beachten, dass diese anschaulich<br />

ausgedrückte Bed<strong>in</strong>gung notwendig, aber nur dann h<strong>in</strong>reichend ist, wenn neben den statischen<br />

Verweisen auch alle dynamischen Verweise erfasst s<strong>in</strong>d.<br />

• Der Vorgang des Austauschens kann als das “Umbiegen” aller Kanten vom alten Knoten zum<br />

neuen Knoten aufgefasst werden.<br />

Nach dem Verändern der Kanten sollen Module identifiziert werden, die nicht benötigt werden.<br />

Knoten, <strong>in</strong> die ke<strong>in</strong>e Kante führt, werden nicht referenziert und werden daher auch nicht benötigt.<br />

Entfernt man sie zusammen mit ihren ausgehenden Kanten, so können weitere Knoten entstehen,<br />

<strong>in</strong> die nun ke<strong>in</strong>e Kanten mehr führen. Durch dieses iterative Verfahren können alle Module<br />

gefunden werden, die nicht von e<strong>in</strong>er Initialkante aus erreichbar s<strong>in</strong>d und somit nicht mehr<br />

benötigt werden.<br />

Da sich mithilfe des Abhängigkeitsgraphen die Struktur der Software anschaulich darstellen lässt,<br />

dient er auch als Hilfsmittel für e<strong>in</strong>en Adm<strong>in</strong>istrator, wenn manuelle Entscheidungen getroffen werden<br />

sollen.<br />

4.4.4 Ergebnisse<br />

In diesem Abschnitt wurden die Verweise auf Module genauer betrachtet. Nach e<strong>in</strong>er Klassifikation <strong>in</strong><br />

statische und dynamische Verweise wurde festgestellt, dass statische Verweise leicht aufzuf<strong>in</strong>den und<br />

abzuändern s<strong>in</strong>d. Dynamisch entstehende Verweise h<strong>in</strong>gegen s<strong>in</strong>d ohne zusätzliche Informationen nur<br />

teilweise zu f<strong>in</strong>den und nicht immer anpassbar.<br />

Um sicherzustellen, dass alle Verweise identifiziert werden können, wurde für dynamische Verweise<br />

aus <strong>in</strong>direkter Nutzung e<strong>in</strong>e Methode auf der Basis e<strong>in</strong>er Datenflussanalyse vorgeschlagen. Für<br />

Funktionen wurde alternativ das positionserhaltende Austauschen vorgestellt, da hierdurch auf das<br />

Auff<strong>in</strong>den der Verweise verzichtet werden kann.<br />

73

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!