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 />

tion bestimmen. Um unbekannte zukünftige Versionen zu unterstützen, kann es s<strong>in</strong>nvoll se<strong>in</strong>, dennoch<br />

zusätzlichen Speicherplatz h<strong>in</strong>ter der Funktion zu allozieren. Dadurch erhöht sich die Wahrsche<strong>in</strong>lichkeit,<br />

dass e<strong>in</strong>e veränderte Funktion an den Platz der alten Funktion geschrieben werden kann [QL91].<br />

Der zusätzliche Speicherplatz bleibt jedoch ungenutzt, bis er von e<strong>in</strong>er neuen Funktion belegt wird.<br />

Daher ist dieser Ansatz nur geeignet, wenn man mit großer Sicherheit davon ausgehen kann, dass die<br />

Funktion <strong>in</strong> Zukunft durch e<strong>in</strong>e größere ausgetauscht wird.<br />

Lösungsansatz: Weiterleitung<br />

Passt das veränderte Modul nicht an die ursprüngliche Position, so kann e<strong>in</strong>e Weiterleitung e<strong>in</strong>gerichtet<br />

werden. E<strong>in</strong>e Weiterleitung besteht im Wesentlichen aus e<strong>in</strong>em Sprungbefehl, der den Kontrollfluss auf<br />

die neue Adresse der Funktion umleitet. Die veränderte Funktion kann dann an e<strong>in</strong>er beliebigen anderen<br />

Adresse abgelegt werden. Hat das Modul mehrere E<strong>in</strong>sprungpunkte, so muss für jeden möglichen<br />

E<strong>in</strong>sprungpunkt e<strong>in</strong>e Weiterleitung an der ursprünglichen Adresse abgelegt werden.<br />

Wird e<strong>in</strong> Modul zu e<strong>in</strong>em späteren Zeitpunkt erneut ausgetauscht und wiederum an e<strong>in</strong>er anderen<br />

Position abgelegt, so kann die ursprüngliche Weiterleitung angepasst werden. Zusätzlich s<strong>in</strong>d dieselben<br />

Punkte zu beachten wie bei e<strong>in</strong>em normalen Austausch. Dies kann dazu führen, dass e<strong>in</strong>e zweite<br />

Weiterleitung e<strong>in</strong>gerichtet werden muss.<br />

Der Nachteil bei der Verwendung von Weiterleitungen ist, dass e<strong>in</strong> Funktionsaufruf dadurch e<strong>in</strong>e<br />

zusätzliche Indirektionsstufe durchlaufen muss. Dies kostet zusätzliche CPU-Zyklen. Außerdem<br />

führt e<strong>in</strong>e ausgiebige Nutzung dieses Ansatzes zu e<strong>in</strong>er starken Fragmentierung des vorhandenen<br />

Programmspeichers, da an vielen Orten Weiterleitungen e<strong>in</strong>gerichtet werden. Diese benötigen zwar<br />

nicht viel Platz, müssen jedoch an e<strong>in</strong>er festen Position im Speicher stehen. Dem gegenüber steht<br />

der Vorteil, dass ke<strong>in</strong>e Verweise angepasst werden müssen und somit auch das Suchen der Verweise<br />

entfallen kann.<br />

4.4.2.3 <strong>Dynamische</strong> Verweise bei aktiven Funktionen<br />

Bei der Suche nach Verweisen auf Funktionen ist auch der aktuelle Systemzustand zu berücksichtigen.<br />

So muss zum Beispiel das Verändern e<strong>in</strong>er Funktion, die gerade ausgeführt wird, speziell betrachtet<br />

werden, da hier der Instruktionszeiger des Prozessors auf die Funktion verweist. Genauer gesagt,<br />

wird die Funktion von e<strong>in</strong>er Änderungsoperation unterbrochen, wie <strong>in</strong> Abbildung 4.12 dargestellt ist.<br />

Dabei wird <strong>in</strong> den Verwaltungsstrukturen des Systems die Rücksprungadresse vermerkt, an der die<br />

Funktion später fortgesetzt werden soll. Ist nun diese Funktion von der Änderung betroffen, so muss<br />

man sicherstellen, dass die Rücksprungadresse gültig bleibt oder dass sie entsprechend angepasst wird.<br />

Ansonsten s<strong>in</strong>d die Folgen nicht vorhersehbar und e<strong>in</strong>e konsistente Programmausführung ist nicht<br />

gewährleistet.<br />

E<strong>in</strong>e Garantie oder Anpassung ist unmöglich ohne genaues Wissen über Aufbau und Ablauf der<br />

Funktion vor und nach der Änderung. Der gespeicherte Zustand zum Zeitpunkt der Unterbrechung<br />

muss auch zu der veränderten Funktion passen. Das schließt die Stack- und Registerbelegung mit e<strong>in</strong>.<br />

Da der Code im Normalfall jedoch nicht manuell erzeugt, sondern durch e<strong>in</strong>en Compiler erstellt wird,<br />

ist das notwendige Wissen nicht vorhanden. Daraus folgt die Forderung, dass e<strong>in</strong>e Funktion nicht aktiv<br />

se<strong>in</strong> darf, wenn sie ausgetauscht oder entfernt werden soll.<br />

Als aktive Funktion gilt nicht nur die Funktion, die durch die Änderungsoperation unterbrochen<br />

wurde, sondern alle Funktionen, die im System unterbrochen wurden und zu e<strong>in</strong>em späteren Zeitpunkt<br />

fortgesetzt werden könnten. Sie entstehen <strong>in</strong>sbesondere durch Aktivitätsträger, die zum Beispiel durch<br />

Verdrängung unterbrochen werden.<br />

68

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!