05.11.2012 Aufrufe

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

3. Die Code-Morphing-Software - TU Bergakademie Freiberg

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. Hardwareunterstützung für <strong>Code</strong> <strong>Morphing</strong> <strong>Software</strong><br />

4.1 Ausnahmebehandlung<br />

In einem herkömmlichen Prozessor erfolgt die Ausnahmebehandlung durch Hardwaremechanismen. <strong>Die</strong>se ermöglichen<br />

es, Befehlsketten rückgängig zu machen und somit wieder einen gültigen Zustand im Prozessor herzustellen.<br />

Der Crusoe Prozessor verwendet zur Ausnahmebehandlung zwei Registersätze, welche bereits im Kapitel 2 erwähnt<br />

wurden. Man spricht von der sogenannten „Working Copy“ und von der „Shadow Copy“.<br />

Werden Atome ausgeführt, so wird stets die Working Copy verändert. Wird ein <strong>Code</strong>block vollständig ausgeführt, ohne<br />

dass eine Ausnahme aufgetreten ist, so wird im ersten Molekül des folgenden <strong>Code</strong>blocks das Commit Flag auf wahr<br />

gesetzt. <strong>Die</strong>s bewirkt eine Übertragung aller Werte aus der Working Copy in die Shadow Copy. Es wird also der letzte<br />

gültige Zustand des Prozessors gespeichert.<br />

<strong>Die</strong> Übertragung zwischen den Registern läuft dabei nahezu ohne Zeitverlust ab.<br />

Tritt während der Ausführung eine Exception auf, so sorgt ein Rollback Befehl für das Wiederherstellen der letzten<br />

gültigen Sicherheitskopie. Es werden also alle Werte der Shadow Copy in die Working Copy übertragen. Anschliessend<br />

werden die Befehle des <strong>Code</strong>blocks vom Interpreter In-Order ausgeführt. Dadurch kann die exakte Stelle der Exception<br />

ermittelt werden.<br />

Schwieriger ist es die Änderungen im Speicher zu verfolgen. Dafür ist der Gated Store Buffer zuständig. Sämtliche<br />

Speicher-Operationen werden werden zunächst in ihm ausgeführt. Bei einem Commit werden die Werte in den<br />

Hauptspeicher übertragen. Ein Rollback sorgt für das Leeren des Puffers.<br />

Je nachdem wie häufig ein Fehler auftritt wird der <strong>Code</strong> entweder vom Interpreter übernommen oder er wird neu<br />

übersetzt. <strong>Die</strong> Angaben beziehen sich auf [1], [3], [4].<br />

4.2 Alias Hardware<br />

Es ist klar, dass die Freiheit des Schedulers ausschlaggebend für die Performance des Prozessors ist. Je freier er die<br />

Gruppierung der Atome vornehmen kann, umso schneller kann das Programm ausgeführt werden. Dabei ist es wichtig,<br />

dass Speicheroperationen beim Vertauschen berücksichtigt werden. Allgemein ist es günstig load vor store Befehlen<br />

auszuführen, da nachfolgende Operationen nicht auf die Operanden warten müssen. Sollte allerdings ein load ein<br />

vorheriges store benötigen und diese Anweisungen vertauscht wurden sein, so muss dies bei der Ausführung bemerkt<br />

werden. [1]<br />

Hierfür ist die sogenannte Alias Hardware implementiert. Wird ein load Befehl vor einen store Befehl gesetzt, so wird er<br />

durch load-and-protect ersetzt. Dabei wird die Adresse, von welcher geladen wird sowie die Größe des zu ladenden<br />

Datenblocks im Alias-Buffer abgelegt. Der entsprechende store Befehl wird durch store-under-alias-mask ersetzt. <strong>Die</strong>ser<br />

16

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!