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.4 Verweise auf Module<br />

Statisch gegebene Verweise Unter statisch gegebenen Verweisen versteht man solche Verweise, die<br />

schon vor der Laufzeit im Programmcode vorhanden s<strong>in</strong>d und deren Ziel somit zum Zeitpunkt<br />

des B<strong>in</strong>dens bereits fest steht. Beispiele s<strong>in</strong>d statische Funktionsaufrufe oder direkte Zugriffe auf<br />

globale Variablen. Normalerweise werden diese Verweise im Rahmen des B<strong>in</strong>dens aufgelöst,<br />

<strong>in</strong>dem der B<strong>in</strong>der die Zieladresse an die entsprechende Stelle e<strong>in</strong>fügt.<br />

Dynamisch entstehende Verweise Bei dynamisch entstehenden Verweisen steht entweder das genaue<br />

Ziel e<strong>in</strong>es Verweises erst zur Laufzeit fest oder der Verweis an sich wird erst zur Laufzeit<br />

erzeugt. E<strong>in</strong> Beispiel ist e<strong>in</strong> Funktionsaufruf mittels variablem Funktionszeiger. Die Zieladresse<br />

des Sprungs steht dabei nicht zum Zeitpunkt des B<strong>in</strong>dens fest, sondern wird aus e<strong>in</strong>er Speicherstelle<br />

entnommen. Analog können auch Verweise auf Daten <strong>in</strong>direkt erfolgen. E<strong>in</strong> anderes<br />

Beispiel ist die Rücksprungadresse bei e<strong>in</strong>em Funktionsaufruf, der als Verweis auf die aufrufende<br />

Funktion gewertet werden muss.<br />

4.4.2 Identifikation von Verweisen<br />

Das Erkennen und Auff<strong>in</strong>den der Verweise ist e<strong>in</strong>e wichtige Voraussetzung, um dynamisch Veränderungen<br />

vornehmen zu können. Das Identifizieren der statisch gegebenen Referenzen ist hierbei noch<br />

relativ e<strong>in</strong>fach, da sie durch Relokationen <strong>in</strong> der Relokationstabelle gekennzeichnet s<strong>in</strong>d.<br />

Anders sieht es bei Referenzen auf Code und Daten aus, die erst zur Laufzeit entstehen. Die vom<br />

Compiler generierten Informationen geben zwar Aufschluss über die Referenzen zum Startzeitpunkt<br />

des Programms, nicht jedoch, wie sie dann weiterverwendet werden. Wurde beispielsweise die Adresse<br />

e<strong>in</strong>er Funktion <strong>in</strong> e<strong>in</strong>e Variable gespeichert, kann sie weitergegeben werden und an e<strong>in</strong>er anderen Stelle<br />

als Zieladresse e<strong>in</strong>es Funktionsaufrufs dienen.<br />

Im Folgenden sollen verschiedene Arten von Verweisen vorgestellt werden. Besondere Beachtung<br />

f<strong>in</strong>det hierbei die Entstehung von dynamischen Verweisen. Dabei stehen Verweise auf Funktionen im<br />

Mittelpunkt, da der Austausch von Modulen <strong>in</strong> der Regel durch e<strong>in</strong>e gewünschte Veränderung der<br />

Funktionalität ausgelöst wird. Tabelle 4.1 gibt e<strong>in</strong>e kurze Aufstellung der möglichen Verweise auf e<strong>in</strong>e<br />

Funktion.<br />

Art des Verweises<br />

Beispiel<br />

Statischer Verweis Statischer Funktionsaufruf<br />

Indirekte Nutzung Funktionsaufruf mittels Funktionszeiger<br />

<strong>Dynamische</strong> Aktive Funktion Instruktionszeiger des Prozessors<br />

Verweise Funktion auf Aufrufpfad Rücksprungadresse auf dem Stack<br />

Sonstiges Errechnen der Zieladresse<br />

Tabelle 4.1: Verweise auf Code<br />

In den nächsten Abschnitten sollen Möglichkeiten aufgezeigt werden, wie man solche Verweise<br />

identifizieren kann und Probleme angesprochen werden, die das Erfassen oder Verändern solcher<br />

Verweise verh<strong>in</strong>dern. Es ist zu erwarten, dass es teilweise sehr aufwendig oder sogar unmöglich ist,<br />

alle dynamischen Referenzen auf e<strong>in</strong> Modul automatisch zu bestimmen und zu verändern. E<strong>in</strong> Ziel ist<br />

es daher auch, festzustellen, ob die betrachteten Verweise zuverlässig gefunden werden können und<br />

wie man die Entstehung solcher Verweise bei der Programmierung gegebenenfalls vermeidet.<br />

Besteht vor der Durchführung e<strong>in</strong>er Veränderung nicht die Garantie, dass man alle Verweise f<strong>in</strong>det,<br />

so kann die Operation nicht automatisch ausgeführt werden. Das System sollte dann H<strong>in</strong>weise geben,<br />

welche Programmstellen beziehungsweise Module die Probleme verursacht haben. Daraufh<strong>in</strong> ist e<strong>in</strong>e<br />

65

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!