Information Technology Reference
In-Depth Information
Der freie Platz lässt sich sofort wieder füllen, indem der nächste sequentiell zu bearbeitende Befehl
gestartet und im Reorder-Buffer protokolliert wird. Im weiteren Verlauf kommt es zum Abschluss
der Ausführung der nun die Kopfposition innehabenden Subtraktion. Dabei werden über zwei Ports
die Ergebnisse der an Position 0 und 1 im Reorder-Buffer vermerkten Befehle beendet und die
Inhalte von r3 a sowie r4 b in die entsprechenden Arbeitsregister übertragen. Im letzten Schritt wird
schließlich das Ergebnis der Addition (möglicherweise zusammen mit dem bereits erzeugten
Ergebnis des and-Befehls) in die Arbeitsregister kopiert. - Abschließend sei angemerkt, dass ein
Bezug auf einen Operanden r1 a nicht zwangsläufig einen Zugriff auf das Renaming-Register zur
Folge hat. Falls dieses nämlich nicht mehr existiert, weil sein Inhalt mittlerweile in ein Arbeitsre-
gister übertragen wurde, wird natürlich direkt das entsprechende Arbeitsregister angesprochen.
History-Buffer
Eine Alternative zum Reorder-Buffer ist der sog. History-Buffer ( Ablaufpuffer ).
Hierbei werden die Befehle, statt in ihrer ursprünglichen Reihenfolge, zunächst
ungeordnet beendet. Bei einer Ausnahmeanforderung müssen daher alle Befehle,
die fälschlicherweise bereits vollständig ausgeführt wurden, in ihrer Wirkung auf
den sichtbaren Maschinenstatus rückgängig gemacht und so ein Zustand hergestellt
werden, als wären die Befehle in der ursprünglichen Reihenfolge beendet worden. -
Um dies zu erreichen, wird im History-Buffer protokolliert, auf welche Register
schreibend zugegriffen wurde und welcher Wert zuvor in dem entsprechenden
Register gespeichert war. Außerdem muss, ähnlich wie beim Reorder-Buffer,
bekannt sein, in welcher Reihenfolge die Befehle regulär im Programm codiert sind.
In Bild 3.40 ist die Funktionsweise des History-Buffers an einem Beispiel darge-
stellt (in Anlehnung an den MC88110 von Motorola [123]). Jeder Befehl wird bei
Ausführungsbeginn zunächst in den History-Buffer eingetragen, der ähnlich dem
Reorder-Buffer als Ringpuffer realisiert ist 1 . Die Reihenfolge, mit der die Befehle
bearbeitet werden, entspricht dabei den Positionen im History-Buffer. Sobald die
Ausführung eines Befehls abgeschlossen ist, wird dessen Ergebnis verzögerungsfrei
in den Registerspeicher übertragen. Befinden sich vorangehende Befehle noch in
Bearbeitung, ist außerdem der zuvor im jeweiligen Zielregister stehende Wert im
History-Buffer zu protokollieren.
Angenommen, die Division erfordert mehr Zeit zur Ausführung, als alle anderen
hier im History-Buffer eingetragenen Befehle insgesamt benötigen, dann wird
zuerst das Additionsergebnis 143 in r2 eingetragen und dabei der alte Registerinhalt
22 in den History-Buffer übertragen (a). Die nachfolgende Subtraktion überschreibt
r2 erneut und bewirkt das Sichern des Additionsergebnisses 143 im History-Buffer.
Mit dem and-Befehl wird in derselben Art und Weise verfahren. Die so ausgeführten
Befehle verbleiben schließlich im History-Buffer, bis die Division beendet ist.
Abhängig davon, ob die Division eine Ausnahmeanforderung stellt oder nicht, wird
mit den Einträgen des History-Buffers unterschiedlich verfahren. Falls keine Aus-
nahmeanforderung auftritt, werden alle bearbeiteten Befehle am Kopf des History-
Buffers gelöscht. Falls jedoch eine Ausnahmeanforderung gestellt wird, werden die
1. In der beschriebenen Anwendung kann man sich seine Wirkung als Fenster variabler Größe
vorstellen, das über das Programm wandert.
 
Search WWH ::




Custom Search