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.2 Modularisierung<br />

4.2.5.1 Extraktion von Elementen aus Sektionen<br />

Ausgehend von den Symbolen werden Bereiche <strong>in</strong> den b<strong>in</strong>ären Daten identifiziert, die als Modul<br />

extrahiert werden. Das Symbol gibt die Position und die Länge der b<strong>in</strong>ären Daten an, die den Inhalt des<br />

Moduls bilden. Idealerweise handelt es sich dabei genau um e<strong>in</strong>e Funktion oder e<strong>in</strong> Datenelement. Das<br />

Symbol selbst ist die Schnittstelle des Moduls. Alle Relokationen, die auf die ausgewählten b<strong>in</strong>ären<br />

Daten wirken, werden als Abhängigkeiten <strong>in</strong>terpretiert.<br />

Das Beispiel aus Abbildung 4.5 soll so <strong>in</strong> drei Module aufgeteilt werden. Die Textsektion be<strong>in</strong>haltet<br />

zwei Symbole und lässt sich anhand dieser vollständig <strong>in</strong> die beiden Funktionen hello und foo<br />

aufteilen, wie <strong>in</strong> Abbildung 4.6 zu sehen ist.<br />

Abbildung 4.6: Teilen der Textsektion <strong>in</strong> zwei Module<br />

Die Textsektion wird hier entsprechend der Symbole hello und foo <strong>in</strong> zwei Module aufgeteilt. Die Funktion hello<br />

beg<strong>in</strong>nt am Anfang der Funktion und ist 10 (=0xa) Byte lang. Danach, an Position 0xa, beg<strong>in</strong>nt die Funktion foo, die<br />

sechs Byte lang ist und somit bis zum Ende der Sektion geht.<br />

Die Relokationen werden entsprechend dieser Unterteilung den beiden Modulen zugeordnet. Das Modul foo ist daher<br />

von Modul hello abhängig, das Modul hello ist abhängig von .data und puts.<br />

Die Datensektion be<strong>in</strong>haltet nur den Str<strong>in</strong>g für die Textausgabe und soll daher komplett als e<strong>in</strong> Modul<br />

verwendet werden. Hierbei stellt man fest, dass der Compiler ke<strong>in</strong> eigenes Symbol für den Textstr<strong>in</strong>g<br />

erzeugt hat. Es steht nur e<strong>in</strong> Sektionssymbol zur Verfügung, das ke<strong>in</strong>e Datenstruktur, sondern den<br />

Beg<strong>in</strong>n der Sektion beschreibt. Das Symbol enthält daher auch ke<strong>in</strong>e Größenangabe. Mit <strong>in</strong>haltlichem<br />

Wissen über das dargestellte Beispiel stellt das ke<strong>in</strong> Problem dar, da sich nur e<strong>in</strong> Datum <strong>in</strong> der Sektion<br />

bef<strong>in</strong>det. Für die Erstellung e<strong>in</strong>es automatischen Extraktionsalgorithmus s<strong>in</strong>d die Daten jedoch nicht<br />

ausreichend.<br />

Die Modularisierung der Anwendung ist nicht das ursprüngliche Ziel bei der Erstellung der Objektdateien.<br />

Informationen, welche im Quellcode noch vorhanden und für unseren Zweck notwendig s<strong>in</strong>d,<br />

können bei der Übersetzung <strong>in</strong> B<strong>in</strong>ärcode verloren gehen. Das Verhalten des Compilers muss daher<br />

genau betrachtet werden. Man muss feststellen, ob genügend Informationen erzeugt werden, um e<strong>in</strong>e<br />

Modularisierung nach dem vorgeschlagenen Verfahren durchzuführen. Betrachten wir zwei mögliche<br />

Optimierungen e<strong>in</strong>es Compilers, die das Extrahieren von Modulen auf die vorgestellte Art, erschweren<br />

oder sogar unmöglich machen.<br />

Compiler-Optimierung 1: geme<strong>in</strong>sames Symbol als Relokationsziel<br />

Die erste Optimierung wurde schon am obigen Beispiel aufgezeigt. Anstatt e<strong>in</strong> Symbol für den Str<strong>in</strong>g<br />

zu erzeugen, wird das Sektionssymbol verwendet, um die Daten zu referenzieren. Würde das Programm<br />

51

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!