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.

2.2 Ansätze zur dynamischen Modifikation von Anwendungen<br />

zu beachten: Wird der Programmcode im Programmspeicher abgelegt, so müssen die Anweisungen<br />

vor der Verarbeitung zunächst <strong>in</strong> den Datenspeicher kopiert werden. Legt man das Programm h<strong>in</strong>gegen<br />

im Datenspeicher ab, so ist zu bedenken, dass dieser bei solchen Systemen oft deutlich knapper als<br />

Programmspeicher ausfällt. Allerd<strong>in</strong>gs hat man dann den Vorteil, dass die Veränderungen nicht am Programmspeicher<br />

vorgenommen werden müssen, dessen Beschreiben, im Gegensatz zum Datenspeicher,<br />

oft aufwendiger ist.<br />

Generelle Nachteile dieses Ansatzes wurden bereits genannt: der zusätzliche Speicherverbrauch<br />

und die reduzierte Ausführungsgeschw<strong>in</strong>digkeit. H<strong>in</strong>zu kommt noch, dass dieser Ansatz auf die<br />

Veränderung der Anwendung beschränkt ist. Grundlegende Systemkomponenten oder der Interpreter<br />

selbst können nicht verändert werden.<br />

2.2.2 Verändern des Speicherabbildes als Ganzes<br />

Will man nicht auf e<strong>in</strong>e Skriptsprache oder <strong>in</strong>terpretierten Zwischencode setzen, so kann man den<br />

B<strong>in</strong>ärcode auch direkt verändern oder austauschen. Im Bereich von kle<strong>in</strong>en Knoten gibt es dabei<br />

zunächst die Möglichkeit, das Speicherabbild e<strong>in</strong>es Knotens als e<strong>in</strong>e E<strong>in</strong>heit zu betrachten und durch<br />

e<strong>in</strong> neues zu ersetzen. Dieser Ansatz wird beispielsweise bei T<strong>in</strong>yOS [HSW + 00] angeboten. Dort gibt<br />

es mit Xnp [Cro03, JKB03] und Deluge [HC04] zwei ähnliche Systeme, die e<strong>in</strong> komplettes Speicherabbild<br />

übertragen und <strong>in</strong>stallieren. Vorteil dabei ist, dass auch grundlegende Teile des Betriebssystems<br />

verändert werden können. Nachteil ist, dass auch für kle<strong>in</strong>e Änderungen immer das gesamte Speicherabbild<br />

übertragen und neu geschrieben werden muss. Um die Menge der zu übertragenden Daten zu<br />

reduzieren, können auch nur die Änderungen übertragen werden, die zuvor aus e<strong>in</strong>em Vergleich des<br />

ursprünglichen und des neuen Abbildes extrahiert werden [RL03, JC04]. Meist muss dazu allerd<strong>in</strong>gs<br />

das ursprüngliche Abbild vorliegen. Da das Speicherabbild auf dem Sensorknoten oft <strong>in</strong> Flashspeicher<br />

geschrieben werden muss, gibt es auch Ansätze, die Änderungen so anzuordnen, dass möglichst wenige<br />

Seiten von Änderungen betroffen s<strong>in</strong>d [KP05a].<br />

Ke<strong>in</strong>es der genannten Systeme ist <strong>in</strong> der Lage den Zustand des Knotens über e<strong>in</strong>e Änderung h<strong>in</strong>weg<br />

zu erhalten. Bei allen Systemen ist e<strong>in</strong> Neustart des Sensorknotens nach der Veränderung vorgesehen.<br />

2.2.3 Austauschen von b<strong>in</strong>ären Programmmodulen<br />

Um den Zustand teilweise zu erhalten, bietet es sich an, nicht den gesamten Speicher als E<strong>in</strong>heit<br />

anzusehen, sondern kle<strong>in</strong>ere Programmmodule auszutauschen beziehungsweise zu verändern. Bei der<br />

Integration der Programmmodule <strong>in</strong> das bestehende System gibt es verschiedene Ansätze.<br />

2.2.3.1 Positionsunabhängiger Code und <strong>in</strong>direkte Adressierung<br />

Positionsunabhängiger Code (Position Independent Code, PIC) zeichnet sich dadurch aus, dass er ke<strong>in</strong>e<br />

festen Adressen enthält und somit an beliebige Positionen im Speicher geladen und verwendet werden<br />

kann. Sprünge <strong>in</strong>nerhalb des Codes werden durch relative Sprünge realisiert. Die Anb<strong>in</strong>dung an das<br />

existierende System kann zum Beispiel über e<strong>in</strong>e Tabelle mit E<strong>in</strong>sprungadressen realisiert werden.<br />

Im Code wird dann anstelle der Adresse nur der Index <strong>in</strong> die Tabelle verwendet. Allerd<strong>in</strong>gs muss die<br />

Tabelle an e<strong>in</strong>er festen Position stehen. Auch der Zugriff auf globale Variablen muss über e<strong>in</strong>e Tabelle<br />

erfolgen, da ihre relative Position ebenfalls nicht konstant ist.<br />

Positionsunabhängiger Code kommt häufig bei geme<strong>in</strong>sam genutzten Bibliotheken zum E<strong>in</strong>satz,<br />

da sie <strong>in</strong> mehreren Prozessen an verschiedene Adressen gebunden werden. E<strong>in</strong> anderes Beispiel ist<br />

13

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!