3. Die Code-Morphing-Software - TU Bergakademie Freiberg
3. Die Code-Morphing-Software - TU Bergakademie Freiberg
3. Die Code-Morphing-Software - TU Bergakademie Freiberg
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