DE69737423T2 - Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor - Google Patents

Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor Download PDF

Info

Publication number
DE69737423T2
DE69737423T2 DE69737423T DE69737423T DE69737423T2 DE 69737423 T2 DE69737423 T2 DE 69737423T2 DE 69737423 T DE69737423 T DE 69737423T DE 69737423 T DE69737423 T DE 69737423T DE 69737423 T2 DE69737423 T2 DE 69737423T2
Authority
DE
Germany
Prior art keywords
memory
register
data
host
target
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69737423T
Other languages
English (en)
Other versions
DE69737423D1 (de
Inventor
Malcolm J. Menlo Park WING
Edmund J. San Jose KELLY
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intellectual Ventures Holding 81 LLC
Original Assignee
Transmeta Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Transmeta Inc filed Critical Transmeta Inc
Application granted granted Critical
Publication of DE69737423D1 publication Critical patent/DE69737423D1/de
Publication of DE69737423T2 publication Critical patent/DE69737423T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45554Instruction set architectures of guest OS and hypervisor or native processor differ, e.g. Bochs or VirtualPC on PowerPC MacOS
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)

Description

  • Gebiet der Erfindung
  • Diese Erfindung betrifft Computersysteme, und genauer einen verbesserten Mikroprozessor, der Verfahren und Vorrichtungen zum Speichern häufig benutzter Speicherdaten für einen schnelleren Zugriff in Registern benutzt.
  • Geschichte des Stands der Technik
  • Es gibt tausende von Anwendungsprogrammen, die an Computern laufen, welche um bestimmte Familien von Mikroprozessoren gestaltet sind. Die größte Anzahl der bestehenden Programme ist dazu bestimmt, an Computern (allgemein als "IBM-kompatible Personalcomputer" bezeichnet) zu laufen, die die Mikroprozessorfamilie „X86" (einschließlich Intel® 8088, Intel 8086, Intel 80186, Intel 80286, i386, i486, und weiter durch die verschiedenen Pentium®-Mikroprozessoren) verwenden, die von der Intel Corporation, Santa Clara, Kalifornien gestaltet und hergestellt wird. Es gibt viele andere Beispiele für Programme, die dazu bestimmt sind, an Computern zu laufen, die andere Familien von Prozessoren verwenden. Da es so viele Anwendungsprogramme gibt, die an diesen Computern laufen, besteht ein großer Markt für Mikroprozessoren, die zur Verwendung in derartigen Computern fähig sind, besonders Computern, die dazu bestimmt sind, X86-Programme zu verarbeiten. Der Mikroprozessormarkt ist nicht nur groß, sondern auch ziemlich lukrativ.
  • Obwohl der Markt für Mikroprozessoren, die fähig sind, große Zahlen von Anwendungsprogrammen auszuführen, groß und lukrativ ist, ist es ziemlich schwierig, einen neuen Konkurrenzmikroprozessor zu gestalten. Obgleich zum Beispiel die Prozessorfamilie X86 für eine Anzahl von Jahren besteht und diese Prozessoren in der Mehrheit der verkauften und verwendeten Computer enthalten sind, gibt es wenige erfolgreiche Konkurrenzmikroprozessoren, die fähig sind, X86-Programme auszuführen. Die Gründe dafür sind zahlreich.
  • Um erfolgreich zu sein, muss ein Mikroprozessor fähig sein, alle Programme (einschließlich Betriebssystemen und Vorläuferprogrammen), die für diese Prozessorfamilie bestimmt sind, so schnell wie bestehende Prozessoren auszuführen, ohne mehr als bestehende Prozessoren zu kosten. Zusätzlich muss ein neuer Mikroprozessor, um wirtschaftlich erfolgreich zu sein, zumindest eines dieser Dinge besser als bestehende Prozessoren tun, um Käufern einen Grund zu geben, den neuen Prozessor bestehenden Prozessoren vorzuziehen.
  • Es ist schwierig und teuer, einen Mikroprozessor dazu zu bringen, dass er so schnell wie Mikroprozessoren des Stands der Technik läuft. Prozessoren führen Befehle durch Basistätigkeiten wie Laden, Verschieben, Addieren, Speichern, und ähnliche Tätigkeiten niedriger Ebene durch und sprechen bei der Ausführung jeglichen Befehls, der durch ein Anwendungsprogramm geliefert wird, nur auf derartige Basisbefehle an. Zum Beispiel hat ein Prozessor, der dazu bestimmt ist, die Befehle eines Computers mit kompliziertem Befehlssatz (complicated instruction set computer, CISC) wie etwa eines X86, in dem Befehle den auszuführenden Prozess auf einer verhältnismäßig hohen Ebene bezeichnen, historisch einen Nurlesespeicher (ROM) enthalten, der sogenannte Mikrobefehle speichert. Jeder Mikrobefehl enthält eine Abfolge von Basisbefehlen, die, wenn sie nacheinander ausgeführt werden, das durch den CISC-Befehl der hohen Ebene befohlene Ergebnis herbeiführen. Typischerweise wird ein CISC-Befehl „addiere A zu B" decodiert, um ein Nachschlagen einer Adresse im ROM zu verursachen, an der ein Mikrobefehl zur Ausführung der Funktionen des Befehls „füge A zu B hinzu" gespeichert ist. Der Mikrobefehl wird geladen, und seine Basisbefehle werden hintereinander ausgeführt, um zu verursachen, dass der Befehl „addiere A zu B" ausgeführt wird. Bei einem derartigen CISC-Computer können die Basistätigkeiten in einem Mikrobefehl während der Programmausführung niemals verändert werden. Jeder CISC-Befehl kann nur durch Decodieren des Befehls, Ansprechen und Abrufen des Mikrobefehls, und Ausführen der Abfolge der Basistätigkeiten in der Reihenfolge, die im Mikrobefehl bereitgestellt ist, ausgeführt werden. Jedes Mal, wenn der Mikrobefehl ausgeführt wird, muss der gleichen Abfolge gefolgt werden.
  • Prozessoren des Stands der Technik zur Ausführung von X86-Anwendungen benutzen eine Anzahl von Techniken, um die schnellstmögliche Verarbeitung zu einem Preis bereitzustellen, der immer noch wirtschaftlich vernünftig ist. Jedweder neue Prozessor, der bekannte Hardwaretechniken ausführt, um die Geschwindigkeit, mit der ein Prozessor laufen kann, zu beschleunigen, muss den hohen Entwicklungsstand der Verarbeitungshardware erhöhen. Dies erfordert das Erhöhen der Kosten der Hardware.
  • Zum Beispiel weist ein superskalarer Mikroprozessor, der mehrere Verarbeitungskanäle verwendet, um zwei oder mehr Tätigkeiten auf einmal auszuführen, eine Anzahl von zusätzlichen Anforderungen auf. Auf der grundlegendsten Ebene könnte ein einfacher superskalarer Mikroprozessor jeden Anwendungsbefehl in die Mikrobefehle decodieren, die die Funktion des Anwendungsbefehls ausführen. Dann plant der einfache superskalare Mikroprozessor, dass zwei Mikrobefehle gemeinsam laufen, wenn die beiden Mikrobefehle nicht die gleichen Hardwarebetriebsmittel benötigen und die Ausführung eines Mikrobefehls nicht von den Ergebnissen von anderen Mikrobefehlen, die verarbeitet werden, abhängt.
  • Ein fortschrittlicherer superskalarer Mikroprozessor decodiert typischerweise jeden Anwendungsbefehl in eine Reihe von Basisbefehlen, so dass diese Basisbefehle neuangeordnet und in der leistungsfähigsten Ausführungsreihenfolge geplant werden können. Dies erfordert, dass jede einzelne Basistätigkeit angesprochen und abgerufen wird. Um die Neuanordnung zu bewerkstelligen, muss der Prozessor fähig sein, sicherzustellen, dass ein Basisbefehl, der Daten benötigt, die sich aus anderen Basisbefehlen ergeben, ausgeführt wird, nachdem jener andere Basisbefehl die benötigten Daten erzeugt. Ein derartiger superskalarer Mikroprozessor muss sicherstellen, dass zwei Basisbefehle, die gemeinsam ausgeführt werden, nicht beide die gleichen Hardwarebetriebsmittel benötigen. Ein derartiger Prozessor muss auch bedingte Verzweigungen auflösen, bevor die Auswirkungen von Verzweigungstätigkeiten fertiggestellt werden können.
  • Daher benötigen superskalare Mikroprozessoren eine umfangreiche Hardware, um die Beziehungen der Basisbefehle zueinander zu vergleichen und die Abfolge der Basisbefehle neuanzuordnen und zu planen, um jeden beliebigen Befehl auszuführen. Mit der Zunahme der Anzahl der Verarbeitungskanäle nehmen das Ausmaß und die Kosten der Hardware zur Bewerkstelligung dieser superskalaren Beschleunigungstechniken ungefähr quadratisch zu. Alle diese Hardwareanforderungen erhöhen die Komplexität und die Kosten des beteiligten Schaltsystems. Wie bei der Behandlung von Mikrobefehlen muss ein superskalarer Mikroprozessor jedes Mal, wenn ein Anwendungsbefehl ausgeführt wird, seine verhältnismäßig komplizierte Ansprech- und Abrufhardware benutzen, um jeden dieser Basisbefehle abzurufen, muss er diese Basisbefehle auf Basis der anderen Basisbefehle und der Hardwareverwendung neuanordnen und neuplanen, und muss er dann alle der neugeplanten Basisbefehle ausführen. Die Notwendigkeit, jeden Anwendungsbefehl jedes Mal, wenn er ausgeführt wird, durch die gesamte Hardwareabfolge laufen zu lassen, beschränkt die Geschwindigkeit, mit der ein superskalarer Prozessor zur Ausführung seiner Befehle fähig ist.
  • Obwohl diese verschiedenen Hardwaretechniken die Geschwindigkeit der Verarbeitung erhöhen, erhöht zudem die Komplexität, die mit der Bereitstellung derartiger Hardware verbunden ist, die Kosten eines solchen Mikroprozessors deutlich. Zum Beispiel verwendet der Prozessor i486 DX4 von Intel ungefähr 1,5 Millionen Transistoren. Das Hinzufügen der Hardware, die benötigt wird, um das Prüfen von Abhängigkeiten und das Planen zu bewerkstelligen, das nötig ist, um Befehle in einem grundlegenden superskalaren Mikroprozessor wie etwa dem Intel-Pentium® durch zwei Kanäle zu verarbeiten, erfordert die Verwendung von mehr als drei Millionen Transistoren. Das Hinzufügen der Hardware, um ein Neuanordnen unter Basisbefehlen, die von unterschiedlichen Zielbefehlen erlangt werden, zu gestatten, eine spekulative Ausführung bereitzustellen, eine Registerumbenennung zu gestatten, und eine Verzweigungsvorhersage bereitzustellen, erhöht die Anzahl der Transistoren im Intel-Pentium-ProTM-Mikroprozessor auf über sechs Millionen. Daher ist ersichtlich, dass jede Hardwarehinzufügung zur Erhöhung der Betriebsgeschwindigkeit die Anzahl der Transistoren in den Mikroprozessoren des neuesten Stands der Technik drastisch erhöht hat.
  • Selbst das Verwenden dieser bekannten Techniken kann möglicherweise keinen Mikroprozessor herstellen, der schneller als bestehende Mikroprozessoren ist, da Hersteller die meisten der bekannten wirtschaftlich machbaren Techniken verwenden, um den Betrieb bestehender Mikroprozessoren zu beschleunigen. Folglich ist das Gestalten eines schnelleren Mikroprozessors eine sehr schwierige und teure Aufgabe.
  • Das Verringern der Kosten eines Prozessors ist ebenfalls sehr schwierig. Wie oben erläutert sind Hardwaretechniken, die einen ausreichend fähigen Prozessor erzeugen, sehr teuer. Jemand, der einen neuen Prozessor gestaltet, muss die Einrichtungen zur Herstellung der Hardware erhalten. Derartige Einrichtungen sind sehr schwer zu erhalten, da Chiphersteller typischerweise kein Kapital für kleine Serien von Vorrichtungen aufwenden. Die Kapitalinvestition, die nötig ist, um eine Chipherstellungseinrichtung herzu stellen, ist so groß, dass sie außerhalb der Reichweite der meisten Firmen liegt.
  • Selbst wenn man fähig ist, einen neuen Prozessor zu gestalten, der alle der Anwendungsprogramme, die für eine Prozessorfamilie bestimmt sind, zumindest so schnell wie Konkurrenzprozessoren ausführt, enthält der Preis von Konkurrenzprozessoren einen ausreichenden Gewinn, dass jeglicher Mitbewerber sicherlich mit wesentlichen Preisnachlässen konfrontiert werden wird.
  • Obwohl das Gestalten eines Konkurrenzprozessors durch Erhöhen der Komplexität der Hardware sehr schwierig ist, war eine andere Weise, Anwendungsprogramme (Zielanwendungsprogramme) auszuführen, die für eine bestimme Mikroprozessorfamilie (Zielmikroprozessoren) bestimmt ist, den Zielmikroprozessor in Software an einem anderen schnelleren Mikroprozessor (Hostmikroprozessor) zu emulieren. Dies ist ein zunehmend billigeres Verfahren der Ausführung dieser Programme, da es nur die Hinzufügung irgendeiner Form von Emulationssoftware benötigt, die das Anwendungsprogramm befähigt, an einem schnelleren Mikroprozessor zu laufen. Die Emulatorsoftware verändert die Zielbefehle eines Anwendungsprogramms, das für die Zielprozessorfamilie geschrieben wurde, in Hostbefehle, die zur Ausführung durch den Hostmikroprozessor fähig sind. Diese veränderten Befehle werden dann unter Steuerung des Betriebssystems am schnelleren Hostmikroprozessor ausgeführt.
  • Es gab eine Anzahl von verschiedenen Gestaltungen, wodurch Zielanwendungen an Hostcomputern mit schnelleren Prozessoren als den Prozessoren der Zielcomputer ausgeführt werden können. Im Allgemeinen benutzen die Hostcomputer, die Zielprogramme unter Verwendung von Emulationssoftware ausführen, Mikroprozessoren mit reduziertem Befehlssatz (reduced instruction set computing, RISC), da RISC-Prozes soren theoretisch einfacher sind und folglich schneller als andere Arten von Prozessoren laufen können.
  • Doch obwohl RISC-Computersysteme, die Emulatorsoftware ausführen, häufig fähig sind, X86- (oder andere) Programme auszuführen, tun sie dies gewöhnlich mit einer Geschwindigkeit, die wesentlich langsamer als die Geschwindigkeit ist, mit der X86-Computersysteme des Stands der Technik das gleiche Programm ausführen. Überdies sind diese Emulatorprogramme häufig nicht fähig, alle oder eine große Anzahl der verfügbaren Zielprogramme auszuführen.
  • Die Gründe, warum Emulatorprogramme nicht fähig sind, Zielprogramme so schnell wie die Zielmikroprozessoren auszuführen, sind ziemlich kompliziert und erfordern ein gewisses Verständnis der verschiedenen Emulationstätigkeiten. 1 enthält eine Reihe von Diagrammen, die die unterschiedlichen Weisen darstellen, auf die mehrere unterschiedliche Arten von Mikroprozessoren Zielanwendungsprogramme ausführen.
  • In 1(a) ist ein typischer CISC-Mikroprozessor wie etwa ein Intel-X86-Mikroprozessor gezeigt, der ein Zielanwendungsprogramm ausführt, das dazu bestimmt ist, an diesem Zielprozessor ausgeführt zu werden. Wie ersichtlich ist, wird die Anwendung unter Verwendung eines CISC-Betriebssystems (wie etwa MS DOS, Windows 3.1, Windows NT, und OS/2, die mit X86-Computern verwendet werden), das dazu bestimmt ist, Schnittstellen bereitzustellen, durch die Zugriff zur Hardware des Computers erlangt werden kann, am CISC-Prozessor ausgeführt. Typischerweise sind die Befehle des Anwendungsprogramms gewählt, um die Vorrichtungen des Computers nur durch den Zugriff, der durch das Betriebssystem bereitgestellt wird, zu benutzen. Dadurch erledigt das Betriebssystem die Bedienungen, die Anwendungen einen Zugriff auf den Speicher und die verschiedenen Ein-/Ausgabe-Vorrichtungen des Computers gestatten. Der Zielcomputer enthält einen Speicher und Hardware, die das Betriebssystem erkennt; und ein Aufruf von einer Zielanwendung an das Betriebssystem verursacht, dass ein Betriebssystemgerätetreiber das Stattfinden einer erwarteten Tätigkeit mit einer definierten Vorrichtung des Zielcomputers verursacht. Die Befehle der Anwendung werden am Prozessor ausgeführt, wo sie zu Tätigkeiten (die in Mikrocode oder den primitiveren Tätigkeiten, aus denen der Mikrocode zusammengesetzt ist, verkörpert sind) verändert werden, zu deren Ausführung der Prozessor fähig ist. Wie oben beschrieben wurde, ruft der Befehl jedes Mal, wenn ein komplizierter Zielbefehl ausgeführt wird, das gleiche Unterprogramm auf, das als Mikrocode (oder als der gleiche Satz von Basistätigkeiten) gespeichert ist. Es wird immer das gleiche Unterprogramm ausgeführt. Wenn der Prozessor superskalar ist, können diese Basistätigkeiten zur Ausführung eines Zielbefehls häufig durch den Prozessor neuangeordnet werden, neugeplant werden, und unter Verwendung der verschiedenen Verarbeitungskanäle auf die oben beschriebene Weise ausgeführt werden; doch wird immer noch das Unterprogramm abgerufen und ausgeführt.
  • In 1(b) ist ein typischer RISC-Mikroprozessor wie etwa ein PowerPC-Mikroprozessor, der in einem Apple-Macintosh-Computer verwendet wird, dargestellt, der das gleiche Zielanwendungsprogramm ausführt, das zur Ausführung am CISC-Prozessor von 1(a) bestimmt ist. Wie ersichtlich ist, wird die Zielanwendung am Hostprozessor unter Verwendung zumindest eines teilweisen Zielbetriebssystems ausgeführt, um auf einen Teil der Aufrufe zu reagieren, die die Zielanwendung erzeugt. Typischerweise sind dies Aufrufe an die anwendungsartigen Abschnitte des Zielbetriebssystems, die verwendet werden, um graphische Schnittstellen an der Anzeige bereitzustellen, und an kurze Dienstprogramme, die im Allgemeinen anwendungsartig sind. Die Zielanwendung und diese Abschnitte des Zielbetriebssystems werden durch einen Softwareemulator wie etwa einen Soft PC® verändert, der die Befehle, die durch das Zielanwendungsprogramm und die anwendungsartigen Zielbetriebssystemprogramme geliefert werden, in Befehle bricht, zu deren Ausführung der Hostprozessor und sein Hostbetriebssystem fähig sind. Das Hostbetriebssystem stellt die Schnittstellen bereit, durch die der Zugriff auf den Speicher und die Ein-/Ausgabe-Hardware des RISC-Computers erlangt werden kann.
  • Doch der Host-RISC-Prozessor und die Hardwarevorrichtungen, die damit in einem Host-RISC-Computer verbunden sind, sind gewöhnlich ziemlich anders als die Vorrichtungen, die mit dem Prozessor verbunden sind, für den die Zielanwendung bestimmt war; und die verschiedenen Befehle, die durch das Zielanwendungsprogramm bereitgestellt werden, sind dazu bestimmt, beim Zugriff auf die verschiedenen Abschnitte des Zielcomputers mit den Gerätetreibern des Zielbetriebssystems zusammenzuwirken. Folglich muss das Emulationsprogramm, das die Befehle des Zielanwendungsprogramms zu Basishostbefehlen verändert, zu deren Benutzung das Hostbetriebssystem fähig ist, die Tätigkeiten, die dazu bestimmt sind, Hardwarevorrichtungen im Zielcomputer zu betreiben, irgendwie mit Tätigkeiten verknüpfen, zu deren Ausführung Hardwarevorrichtungen des Hostsystems fähig sind. Häufig erfordert dies, dass die Emulatorsoftware virtuelle Vorrichtungen erzeugt, die auf die Befehle der Zielanwendung reagieren, um Tätigkeiten auszuführen, zu deren Ausführung das Hostsystem unfähig ist, da die Zielvorrichtungen nicht jene des Hostcomputers sind. Manchmal muss der Emulator Verknüpfungen von diesen virtuellen Vorrichtungen durch das Hostbetriebssystem zu Hosthardwarevorrichtungen, die vorhanden sind, aber durch das Hostbetriebssystem auf eine andere Weise angesprochen werden, erzeugen.
  • Zielprogramme laufen aus einer Anzahl von Gründen verhältnismäßig langsam, wenn sie auf diese Weise ausgeführt werden. Erstens muss jeder Zielbefehl von einem Zielanwendungsprogramm und vom Zielbetriebssystem durch den Emulator zu den Hostbasisfunktionen verändert werden, die durch den Hostprozessor verwendet werden. Wenn die Zielanwendung für eine CISC-Maschine wie etwa einen X86 bestimmt ist, sind die Zielbefehle von wechselnder Länge und ziemlich kompliziert, so dass ihr Verändern zu Hostbasisbefehlen ziemlich umständlich ist. Die ursprünglichen Zielbefehle werden zuerst decodiert, und die Abfolge der Basishostbefehle, die die Zielbefehle aufbauen, wird bestimmt. Dann wird die Adresse (oder werden die Adressen) jeder Abfolge von Basishostbefehlen bestimmt, wird jede Abfolge der Basishostbefehle abgerufen, und werden diese Basishostbefehle der Reihe nach oder nicht der Reihe nach ausgeführt. Die große Anzahl der Extraschritte, die durch einen Emulator benötigt werden, um die Zielanwendungs- und Betriebssystembefehle zu Hostbefehlen, die durch den Hostprozessor verstanden werden, zu verändern, muss jedes Mal durchgeführt werden, wenn ein Befehl ausgeführt wird, und verlangsamt den Prozess der Emulation.
  • Zweitens enthalten viele Zielbefehle Bezugnahmen auf Tätigkeiten, die durch bestimmte Hardwarevorrichtungen durchgeführt werden, welche im Zielcomputer auf eine bestimmte Weise funktionieren, Hardware, die im Hostcomputer nicht verfügbar ist. Um die Tätigkeit auszuführen, muss die Emulationssoftware entweder durch das bestehende Hostbetriebssystem Softwareverbindungen zu den Hardwarevorrichtungen des Hostcomputers herstellen, oder muss die Emulatorsoftware eine virtuelle Hardwarevorrichtung liefern. Das Emulieren der Hardware eines anderen Computers in Software ist sehr schwierig. Die Emulationssoftware muss für jeden der Zielanwendungsaufrufe an das Hostbetriebssystem virtuelle Vorrichtungen erzeugen; und jede dieser virtuellen Vorrichtungen muss Aufrufe an die tatsächlichen Hostvorrichtungen bereitstellen. Das Emulieren einer Hardwarevorrichtung erfordert, dass dann, wenn ein Zielbefehl die Vorrichtung verwenden soll, der Code, der die virtuelle Vorrichtung darstellt, die durch diesen Befehl benötigt wird, aus dem Speicher abgerufen wird und ausgeführt wird, um die Vorrichtung auszuführen. Jedes dieser Verfahren zur Lösung der Probleme fügt der Ausführung der Abfolge von Befehlen eine andere Reihe von Tätigkeiten hinzu.
  • Die Anforderung, dass die Zielanwendung verschiedenste Ausnahmen vornimmt, die durch die Hardware des Zielcomputers und das Zielbetriebssystem ausgeführt werden, damit das Computersystem arbeitet, verkompliziert das Problem der Emulation. Wenn während des Betriebs eines Zielcomputers eine Zielausnahme vorgenommen wird, muss der Zustand des Computers zur Zeit der Ausnahme typischerweise durch Aufrufen einer Mikrocodeabfolge, um die Tätigkeit zu bewerkstelligen, gespeichert werden, muss das richtige Ausnahmebehandlungsprogramm abgerufen werden, muss die Ausnahme behandelt werden, und muss dann der richtige Punkt im Programm gefunden werden, um das Programm fortzusetzen. Manchmal erfordert dies, dass das Programm am Punkt der Vornahme der Ausnahme zum Zustand des Zielcomputers zurückkehrt, und zu anderen Zeiten wird eine Verzweigung, die durch das Ausnahmebehandlungsprogramm bereitgestellt wird, vorgenommen. In jedem Fall müssen die Hardware und die Software des Zielcomputers, die benötigt werden, um diese Tätigkeiten zu bewerkstelligen, im Prozess der Emulation irgendwie bereitgestellt werden. Da es für eine richtige Ausführung notwendig ist, dass zum Zeitpunkt einer jeglichen derartigen Ausnahme der richtige Zielzustand verfügbar ist, ist der Emulator gezwungen, diesen Zustand jederzeit genau im Auge zu behalten, damit er fähig ist, richtig auf diese Ausnahmen zu reagieren. Bei der herkömmlichen Technik erforderte dies das Ausführen jedes Befehls in der Reihenfolge, die durch die Zielanwendung bereitgestellt wurde, da nur auf diese Weise der richtige Zielzustand aufrechterhalten werden konnte.
  • Überdies mussten Emulatoren des Stands der Technik aus anderen Gründen stets die Reihenfolge der Ausführung der Zielanwendung beibehalten. Zielbefehle können von zwei Arten sein, solche die den Speicher betreffen, und solche, die eine speicherabgebildete Ein-/Ausgabe(E/A)-Vorrichtung betreffen. Ohne den Versuch, einen Befehl auszuführen, gibt es keine Weise, zu wissen, ob eine Tätigkeit den Speicher oder eine speicherabgebildete E/A-Vorrichtung betreffen soll. Wenn Befehle am Speicher tätig sind, ist ein Optimieren und Neuanordnen möglich und hilft es sehr bei der Beschleunigung des Betriebs eines Systems. Doch Tätigkeiten, die E/A-Vorrichtungen betreffen, müssen ohne die Beseitigung jeglicher Schritte in der genauen Reihenfolge, in der diese Tätigkeiten programmiert sind, ausgeführt werden, da sie ansonsten irgendeinen nachteiligen Einfluss auf den Betrieb der E/A-Vorrichtung aufweisen können. Zum Beispiel kann eine bestimmte E/A-Tätigkeit die Auswirkung aufweisen, dass ein E/A-Register gelöscht wird. Wenn die Tätigkeiten nicht der Reihe nach stattfinden, so dass ein Wert, der immer noch nötig ist, aus einem Register gelöscht wird, kann das Ergebnis der Tätigkeit anders als die durch den Zielbefehl befohlene Tätigkeit sein. Ohne ein Mittel, um den Speicher von einer speicherabgebildeten E/A zu unterscheiden, ist es nötig, alle Befehle so zu behandeln, als ob sie die speicherabgebildete E/A betreffen würden. Dies beschränkt die Natur der Optimierungen, die erzielbar sind, stark. Da Emulatoren des Stands der Technik sowohl Mittel, um die Natur des angesprochenen Speichers festzustellen, als auch Mittel, um sich von derartigen Fehlern zu erholen, fehlen, müssen sie der Reihe nach durch die Zielbefehle vorgehen, als ob jede Tätigkeit die speicherabgebildete E/A betreffen würde. Dies beschränkt die Möglichkeit der Optimierung der Hostbefehle sehr.
  • Ein anderes Problem, das die Fähigkeit von Emulatoren des Stands der Technik, den Hostcode zu optimieren, beschränkt, wird durch selbstmodifizierenden Code verursacht. Wenn ein Zielbefehl zu einer Abfolge von Hostbefehlen verändert wurde, die wiederum zurückschreiben, um den ursprünglichen Zielbefehl zu verändern, sind die Hostbefehle nicht länger gültig. Folglich muss der Emulator ständig prüfen, um zu bestimmen, ob eine Speicherung in den Zielcodebereich erfolgt. Alle diese Probleme machen diese Art von Emulation viel langsamer als das Ausführen einer Zielanwendung an einem Zielprozessor.
  • Ein anderes Beispiel der Art von Emulationssoftware, die in 1(b) gezeigt ist, ist in einem Artikel mit dem Titel „Talisman: Fast and Accurate Multicomputer Simulation", R. C. Bedichek, Laboratory for Computer Sciences, Massachusetts Institute of Technology, beschrieben. Dies ist ein vollständigeres Beispiel einer Übersetzung, indem es ein vollständiges Nachforschungssystem emulieren kann und das Nachforschungszielbetriebssystem ausführen kann. Talisman verwendet ein Host-UNIX-Betriebssystem.
  • In 1(c) ist ein anderes Beispiel einer Emulation gezeigt. In diesem Fall ist ein PowerPC-Mikroprozessor, der in einem Apple-Macintosh-Computer verwendet wird, dargestellt, der ein Zielanwendungsprogramm ausführt, das zur Ausführung an CSIC-Prozessoren der Familie Motorola 68000 bestimmt war, die in den ursprünglichen Macintosh-Computern verwendet wurden; diese Art von Anordnung wurde benötigt, um zu gestatten, dass Apple-Vorläuferprogramme an den Macintosh-Computern mit RISC-Prozessoren laufen. Wie ersichtlich ist, wird die Zielanwendung am Hostprozessor unter Verwendung zumindest eines teilweisen Zielbetriebssystems ausgeführt, um auf die anwendungsartigen Abschnitte des Zielbetriebssystems zu reagieren. Ein Softwareemulator bricht die Befehle, die durch das Zielanwendungsprogramm und die anwendungsartigen Zielbetriebssystemprogramme geliefert werden, in Befehle, zu deren Ausführung der Hostprozessor und sein Hostbetriebssystem fähig sind. Das Hostbetriebssystem stellt die Schnittstellen bereit, durch die der Zugriff auf den Speicher und Ein-/Ausgabe-Hardware des Hostcomputers erlangt werden kann.
  • Erneut sind der Host-RISC-Prozessor und die damit verbundenen Vorrichtungen im Host-RISC-Computer ziemlich anders als die Vorrichtungen, die mit dem Motorola-CISC-Prozessor verbunden sind; und sind die verschiedenen Zielbefehle dazu bestimmt, beim Zugriff auf die verschiedenen Abschnitte des Zielcomputers mit dem Ziel-CISC-Betriebssystem zusammenzuwirken. Folglich muss das Emulationsprogramm die Tätigkeiten, die dazu bestimmt sind, Hardwarevorrichtungen im Zielcomputer zu betreiben, mit Tätigkeiten verknüpfen, zu deren Ausführung die Hardwarevorrichtungen des Hostsystems fähig sind. Dies erfordert, dass der Emulator virtuelle Vorrichtungen in Software erzeugt, die auf die Befehle der Zielanwendung reagieren, und dass er Verknüpfungen von diesen virtuellen Vorrichtungen durch das Hostbetriebssystem zu Hosthardwarevorrichtungen erzeugt, die vorhanden sind, aber durch das Hostbetriebssystem auf eine andere Weise angesprochen werden.
  • Die Zielsoftware, die auf diese Weise ausgeführt wird, läuft aus den gleichen Gründen, aus denen die Emulation von 1(b) langsam läuft, verhältnismäßig langsam. Erstens muss jeder Zielbefehl von der Zielanwendung und vom Zielbetriebssystem durch Abrufen des Befehls verändert werden; und alle der Hostbasisfunktionen, die aus diesen Befehlen erlangt werden, müssen jedes Mal, wenn der Befehl ausgeführt wird, der Reihe nach ausgeführt werden. Zweitens muss die Emulationssoftware für jeden der Zielanwendungsaufrufe an das Hostbetriebssystem virtuelle Vorrichtungen erzeugen; und jede dieser virtuellen Vorrichtungen muss Aufrufe an die tatsächlichen Hostvorrichtungen bereitstellen. Drittens muss der Emulator alle Befehle so konservativ behandeln, wie er Befehle behandelt, die an speicherabgebildete E/A-Vorrichtungen gerichtet sind, oder Gefahr laufen, Ausnahmen zu erzeugen, von denen er sich nicht erholen kann. Schließlich muss der Emulator zu jeder Zeit den richtigen Zielzustand aufrechterhalten und müssen Speichertätigkeiten stets vorwärts prüfen, ob eine Speicherung in den Zielcodebereich erfolgt. Alle diese Anforderungen beseitigen die Fähigkeit des Emulators, eine bedeutende Optimierung des Codes, der am Hostprozessor ausgeführt wird, auszuführen, und machen diese Art von Emulation viel langsamer als das Ausführen der Zielanwendung an einem Zielprozessor. Emulationsgeschwindigkeiten von weniger als einem Viertel der Schnelligkeit von Prozessoren des Stands der Technik werden als sehr gut angesehen. Im Allgemeinen hat dies diese Art von Emulationssoftware auf Verwendungen verwiesen, bei denen die Fähigkeit der Ausführung von Anwendungen, die für einen anderen Prozessor bestimmt sind, nützlich, aber nicht hauptsächlich ist.
  • In 1(d) ist ein bestimmtes Verfahren der Emulation eines Zielanwendungsprogramms an einem Hostprozessor veranschaulicht, das für eine sehr begrenzte Reihe von Zielanwendungen eine verhältnismäßig gute Leistung bereitstellt. Die Zielanwendung liefert Befehle an einen Emulator, der diese Befehle zu Befehlen für den Hostprozessor und das Hostbetriebssystem verändert. Der Hostprozessor ist ein Alpha-RISC-Prozessor der Digital Equipment Corporation, und das Hostbetriebssystem ist Microsoft NT. Die einzigen Zielanwendungen, die durch dieses System ausgeführt werden können, sind 32-Bit-Anwendungen, die dazu bestimmt sind, durch einen Ziel-X86-Prozessor mit einem Windows-Win32skonformen Betriebssystem ausgeführt zu werden. Da das Host- und das Zielbetriebssystem beinahe identisch sind und dazu gestaltet sind, diese gleichen Befehle zu behandeln, kann die Emulatorsoftware die Befehle sehr leicht verändern. Überdies ist das Hostbetriebssystem bereits dazu gestaltet, auf die gleichen Aufrufe anzusprechen, die die Zielanwendung erzeugt, weshalb die Erzeugung von virtuellen Vorrichtungen beträchtlich verringert ist.
  • Obwohl dies technisch ein Emulationssystem ist, das eine Zielanwendung an einem Hostprozessor ausführt, ist es ein sehr besonderer Fall. Hier läuft die Emulationssoftware an einem Hostbetriebssystem, das bereits dazu gestaltet ist, ähnliche Anwendungen auszuführen. Dies gestattet, dass die Aufrufe von den Zielanwendungen einfacher zu den richtigen Einrichtungen des Hosts und des Hostbetriebssystems gerichtet werden. Noch wichtiger wird dieses System nur 32-Bit-Windows-Anwendungen ausführen, die vermutlich weniger als ein Prozent aller X86-Anwendungen ausmachen. Überdies wird dieses System Anwendungen an nur einem Betriebssystem, Windows NT, ausführen, während X86-Prozessoren Anwendungen ausführen, die für eine große Anzahl von Betriebssystemen bestimmt sind. Ein derartiges System könnte daher innerhalb der Begriffe, die früher in dieser Beschreibung ausgedrückt wurden, als nicht kompatibel angesehen werden. Daher kann ein Prozessor, der einen derartigen Emulator ausführt, nicht als ein Konkurrenz-X86-Prozessor betrachtet werden.
  • Ein anderes Verfahren der Emulation, wodurch Software verwendet werden kann, um Abschnitte von Anwendungen, die für einen ersten Befehlssatz geschrieben wurden, an einem Computer auszuführen, der einen unterschiedlichen Befehlssatz erkennt, ist in 1(e) veranschaulicht. Diese Form von Emulationssoftware wird typischerweise durch einen Programmierer verwendet, der möglicherweise eine Anwendung von einem Computersystem zu einem anderen portiert. Typischerweise ist die Zielanwendung für irgendeinen anderen Zielcomputer als die Hostmaschine, an der der Emulator ausgeführt wird, bestimmt. Die Emulatorsoftware analysiert die Zielbefehle, übersetzt diese Befehle in Befehle, die an der Hostmaschine ausgeführt werden können, und puffert diese Hostbefehle, damit sie wiederverwendet werden können. Diese dynamische Übersetzung und Pufferung gestattet, dass Abschnitte von Anwendungen sehr schnell ausgeführt werden. Diese Form von Emulator wird normalerweise mit Softwareüberwachungswerkzeugen verwendet, um ausführliche Informationen über das Verhalten eines Zielprogramms, das ausgeführt wird, bereitzustellen. Die Ausgabe eines Überwa chungswerkzeugs kann wiederum verwendet werden, um ein Analysatorprogramm zu betreiben, das die Überwachungsinformationen analysiert.
  • Um zu bestimmen, wie der Code tatsächlich funktioniert, läuft ein Emulator dieser Art, unter anderem, mit dem Hostbetriebssystem an der Hostmaschine, liefert er die virtuelle Hardware, die das Hostbetriebssystem nicht bereitstellt, und bildet er ansonsten die Tätigkeiten des Computers, für den die Anwendung bestimmt war, auf die Hardwarebetriebsmittel der Hostmaschine ab, um die Tätigkeiten des Programms, das ausgeführt wird, auszuführen. Diese Softwarevirtualisierung von Hardware und die Abbildung auf den Hostcomputer kann sehr langsam und unvollständig sein.
  • Da überdies häufig mehrere Hostbefehle erforderlich sind, um einen der Zielbefehle auszuführen, können Ausnahmen einschließlich Fehlern und Fallen, die ein Zielbetriebssystem-Ausnahmebehandlungsprogramm erfordern, erzeugt werden und den Host veranlassen, die Verarbeitung der Hostbefehle an einem Punkt einzustellen, der nicht mit Zielbefehlsgrenzen in Zusammenhang steht. Wenn dies geschieht, kann es unmöglich sein, die Ausnahme richtig zu behandeln, da der Zustand des Hostprozessors und des Speichers unrichtig ist. Wenn dies der Fall ist, muss der Emulator angehalten und erneut ausgeführt werden, um die Tätigkeiten, die die Ausnahme erzeugten, zu überwachen. Obwohl ein derartiger Emulator Abfolgen des Zielcodes sehr schnell ausführen kann, weist er daher kein Verfahren auf, um sich von diesen Ausnahmen zu erholen, weshalb er keinen bedeutenden Abschnitt einer Anwendung schnell ausführen kann.
  • Dies ist bei dieser Form von Emulator kein besonderes Problem, da die Funktionen, die durch die Emulatoren, Überwachungen, und die zugehörigen Analysatoren durchgeführt werden, auf das Erzeugen neuer Programme oder das Portieren alter Programme zu einer anderen Maschine gerichtet sind, weshalb die Geschwindigkeit, mit der die Emulatorsoftware läuft, selten entscheidend ist. Das heißt, ein Programmierer ist gewöhnlich nicht daran interessiert, wie schnell der Code, der durch einen Emulator erzeugt wird, an der Hostmaschine läuft, sondern daran, ob der Emulator einen Code erzeugt, der an der Maschine, für die er bestimmt ist, ausführbar ist, und der an dieser Maschine schnell laufen wird. Folglich stellt diese Art von Emulationssoftware kein Verfahren bereit, um Anwendungsprogramme, die in einem ersten Befehlssatz geschrieben sind, für andere als Programmierzwecke zum Lauf an einer anderen Art von Mikroprozessor auszuführen. Ein Beispiel für diese Art von Emulationssoftware ist in einem Artikel mit dem Titel „Shade: A Fast Instruction-Set Simulator für Execution Profiling", Cmelik und Keppel, beschrieben.
  • Es ist erwünscht, Konkurrenzmikroprozessoren bereitzustellen, die schneller und billiger als Mikroprozessoren des Stands der Technik sind, aber mit Zielanwendungsprogrammen, die für Mikroprozessoren des Stands der Technik bestimmt sind, welche jegliche für diese Mikroprozessoren verfügbaren Betriebssysteme ausführen, völlig kompatibel sind.
  • Genauer ist erwünscht, einen Hostprozessor bereitzustellen, der ein Schaltsystem zur Steigerung der Geschwindigkeit, mit der der Prozessor arbeitet, aufweist.
  • US-A-5,926,832 offenbart einen Speicherpuffer zur Verwendung mit mehreren Mikroprozessoren. Der Puffer beinhaltet einen Speicherdatenspeicher und einen Speicher für eine Speicheradresse, die den Speicherdaten entspricht. Es sind Mittel bereitgestellt, um die Übereinstimmung zwischen den Daten, die im Puffer gespeichert sind, und den Daten, die im Speicher gespeichert sind, sicherzustellen.
  • Kurzdarstellung der Erfindung
  • Es ist daher eine Aufgabe der vorliegenden Erfindung, den Betrieb eines Mikroprozessors mit einer Vorrichtung zur Beschleunigung der Ausführung von Programmen zu verbessern.
  • Die Erfindung erstreckt sich auf eine Speichersteuerung nach Anspruch 1; einen Mikroprozessor nach Anspruch 7; und ein Verfahren zum Steigern der Geschwindigkeit eines Prozessors nach Anspruch 9.
  • Diese und andere Aufgaben und Merkmale der Erfindung werden durch Bezugnahme auf die folgende ausführliche Beschreibung, die zusammen mit den Zeichnungen herangezogen wird, in denen gleiche Elemente über die mehreren Ansichten hinweg durch gleiche Bezeichnungen bezeichnet sind, besser verstanden werden.
  • Kurze Beschreibung der Zeichnungen
  • 1(a) bis (e) sind Diagramme, die die Weise des Betriebs von Mikroprozessoren veranschaulichen, die nach dem Stand der Technik gestaltet sind.
  • 2 ist ein Blockdiagramm eines Mikroprozessors, der nach der vorliegenden Erfindung gestaltet ist und eine Anwendung ausführt, die für einen anderen Mikroprozessor bestimmt ist.
  • 3 ist ein Diagramm, das einen Abschnitt des in 2 gezeigten Mikroprozessors veranschaulicht.
  • 4 ist ein Blockdiagramm, das eine Registerdatei veranschaulicht, die in einem Mikroprozessor verwendet wird, der nach der vorliegenden Erfindung gestaltet ist.
  • 5 ist ein Blockdiagramm, das einen torgesteuerten Speicherungspuffer veranschaulicht, der nach der vorliegenden Erfindung gestaltet ist.
  • 6(a) bis (c) veranschaulichen Befehle, die in verschiedenen Mikroprozessoren des Stands der Technik und in einem Mikroprozessor, der nach der vorliegenden Erfindung gestaltet ist, verwendet werden.
  • 7 veranschaulicht ein Verfahren, das durch einen Softwareabschnitt eines Mikroprozessors, der nach der vorliegenden Erfindung gestaltet ist, ausgeführt wird.
  • 8 veranschaulicht ein anderes Verfahren, das durch einen Softwareabschnitt eines Mikroprozessors, der nach der vorliegenden Erfindung gestaltet ist, ausgeführt wird.
  • 9 ist ein Blockdiagramm, das ein verbessertes Computersystem veranschaulicht.
  • 10 ist ein Blockdiagramm, das einen Abschnitt des in 3 gezeigten Mikroprozessors veranschaulicht.
  • 11 ist ein Blockdiagramm, das einen im Mikroprozessor von 3 gezeigten Lookaside-Übersetzungspuffer ausführlicher veranschaulicht.
  • 12 ist ein Blockdiagramm, das ein Speicherreplizierungsschaltsystem nach der vorliegenden Erfindung ausführlicher veranschaulicht.
  • Bezeichnungen und Benennungen
  • Einige Abschnitte der ausführlichen Beschreibungen, die folgen, werden in Form von symbolischen Darstellungen von Tätigkeiten an Datenbits in einem Computerspeicher geboten. Diese Beschreibungen und Darstellungen sind die Mittel, die durch Fachleute auf dem Gebiet der Datenverarbeitung verwendet werden, um das Wesen ihrer Arbeit anderen Fachleuten am leistungsfähigsten zu übermitteln. Die Tätigkeiten sind jene, die physische Handhabungen von physikalischen Größen benötigen. Gewöhnlich, aber nicht notwendigerweise, nehmen diese Größen die Form von elektrischen oder magnetischen Signalen an, die fähig sind, gespeichert, übertragen, kombiniert, verglichen und anderweitig behandelt zu werden. Es hat sich zeitweise, hauptsächlich aus Gründen der gebräuchlichen Verwendung, als bequem erwiesen, diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Ausdrücke, Zahlen, oder dergleichen zu bezeichnen. Es sollte jedoch im Gedächtnis behalten werden, dass alle diese und ähnliche Ausdrücke mit den passenden physikalischen Größen verbunden werden müssen und nur bequeme Bezeichnungen sind, die auf diese Größen angewendet werden.
  • Ferner werden die durchgeführten Bearbeitungen häufig mit Ausdrücken wie etwa „Addieren" oder „Vergleichen" bezeichnet, die üblicherweise mit geistigen Tätigkeiten verbunden sind, welche durch eine menschliche Bedienungsperson durchgeführt werden. In den meisten Fällen ist in jeglicher der hierin beschriebenen Tätigkeiten, die einen Teil der vorliegenden Erfindung bilden, keine derartige Fähigkeit einer menschlichen Bedienungsperson nötig oder erwünscht; die Tätigkeiten sind Maschinentätigkeiten. Nützliche Maschinen zur Durchführung der Tätigkeiten der vorliegenden Erfindung beinhalten Allzweck-Digitalcomputer oder andere ähnliche Vorrichtungen. In allen Fällen sollte die Unterscheidung zwischen den Verfahrenstätigkeiten beim Betreiben eines Computers und dem Verfahren der Berechnung selbst im Gedächtnis behalten werden. Die vorliegende Erfindung betrifft ein Verfahren und eine Vorrichtung zum Betreiben eines Computers beim Verarbeiten elektrischer oder anderer (z.B. mechanischer, chemischer) physikalischer Signale, um andere gewünschte physikalische Signale zu erzeugen.
  • Während der folgenden Beschreibung wird das Zielprogramm in manchen Fällen als ein Programm bezeichnet, das dazu bestimmt ist, an einem X86-Mikroprozessor ausgeführt zu werden, um beispielhafte Einzelheiten des Betriebs bereitzustellen, da die Mehrheit der Emulatoren X86-Anwendungen ausführt. Das Zielprogramm kann jedoch ein Programm sein, das dazu bestimmt ist, an jeder beliebigen Familie von Zielcomputern zu laufen. Dies beinhaltet virtuelle Zielcomputer wie etwa Pcode-Maschinen, Postscript-Maschinen, oder virtuelle Java-Maschinen.
  • Ausführliche Beschreibung
  • Die vorliegende Erfindung hilft, die Probleme des Stands der Technik zu überwinden und einen Mikroprozessor bereitzustellen, der schneller als Mikroprozessoren des Stands der Technik ist, fähig ist, die ganze Software für alle Betriebssysteme, die durch eine große Anzahl von Familien von Mikroprozessoren des Stands der Technik ausgeführt werden können, auszuführen, aber weniger teuer als Mikroprozessoren des Stands der Technik ist.
  • Anstatt einen Mikroprozessor mit einer komplizierteren Hardware zu verwenden, um seine Tätigkeit zu beschleunigen, ist die vorliegende Erfindung ein Teil einer Kombination, die einen verbesserten Hardwareverarbeitungsabschnitt (in dieser Beschreibung als „Formungshost" bezeichnet), der viel einfacher als Mikroprozessoren des Stands der Technik ist, und einen emulierenden Softwareabschnitt (in dieser Beschreibung als „Codeformungssoftware" bezeichnet) auf eine solche Weise beinhaltet, dass die beiden Abschnitte gemeinsam als ein Mikroprozessor mit mehr Fähigkeiten als jeder beliebige bekannte Konkurrenzmikroprozessor arbeiten. Genauer ist ein Formungshost ein Prozessor, der Hardwareverbesserungen beinhaltet, um dabei zu helfen, den Zustand eines Zielcomputers sofort greifbar zu haben, wenn eine Ausnahme oder ein Fehler auftritt, während eine Codefor mungssoftware Software ist, die die Befehle eines Zielprogramms in Formungshostbefehle für den Formungshost übersetzt und durch Ersetzen des Arbeitszustands mit dem richtigen Zielzustand, wenn dies nötig ist, auf Ausnahmen und Fehler reagiert, so dass es zu richtigen Neuübersetzungen kommt. Die Codeformungssoftware kann auch verschiedene Prozesse zur Verbesserung der Verarbeitungsgeschwindigkeit beinhalten. Anstatt Hardware bereitzustellen, um die Verarbeitungsgeschwindigkeit zu verbessern, wie dies alle der sehr schnellen Mikroprozessoren des Stands der Technik tun, gestattet der verbesserte Mikroprozessor, dass durch die Codeformungssoftware eine große Anzahl von Beschleunigungsverbesserungsschritten in wählbaren Stufen ausgeführt wird. Das Bereitstellen der Geschwindigkeitsverbesserungstechniken in der Codeformungssoftware gestattet, dass der Formungshost unter Verwendung viel weniger komplizierter Hardware ausgeführt wird, was schneller und wesentlich weniger teuer als die Hardware von Mikroprozessoren des Stands der Technik ist. Als ein Vergleich ist eine Ausführungsform, die die vorliegende Erfindung enthält und dazu bestimmt ist, alle verfügbaren X86-Anwendungen auszuführen, durch einen Formungshost ausgeführt, der ungefähr ein Viertel der Anzahl der Tore des Pentium-Pro-Mikroprozessors aufweist, aber X86-Anwendungen wesentlich schneller ausführt, als der Pentium-Pro-Mikroprozessor oder jeder beliebige andere bekannte Mikroprozessor, der zur Ausführung dieser Anwendungen fähig ist.
  • Die Codeformungssoftware benutzt bestimmte Techniken, die früher nur von Programmierern verwendet wurden, die neue Software gestalten oder neue Hardware emulieren. Der Formungshost beinhaltet Hardwareverbesserungen, die besonders dazu geeignet sind, zu gestatten, dass die Beschleunigungstechniken, die durch die Codeformungssoftware bereitgestellt werden, leistungsfähig benutzt werden. Diese Hardwareverbesserungen gestatten, dass die Codeformungssoftware Beschleunigungstechniken über einen weiteren Bereich von Befehlen ausführt. Diese Hardwareverbesserungen erlauben auch, dass durch die Codeformungssoftware zusätzliche Beschleunigungstechniken ausgeführt werden, die in Hardwareprozessoren nicht verfügbar sind und in jenen Prozessoren, außer zu einem unerschwinglichen Preis, nicht ausgeführt werden konnten. Diese Techniken erhöhen die Geschwindigkeit des Mikroprozessors, der die vorliegende Erfindung beinhaltet, verglichen mit den Geschwindigkeiten von Mikroprozessoren des Stands der Technik, die die Ausführung von nativen Befehlssätzen ausüben, deutlich.
  • Zum Beispiel gestattet die Codeformungssoftware in Kombination mit dem verbesserten Formungshost die Verwendung von Techniken, die die Neuanordnung und Neuplanung von Basisbefehlen, welche durch eine Abfolge von Zielbefehlen erzeugt werden, gestattet, ohne das Hinzufügen bedeutender Schaltsysteme zu erfordern. Durch das Gestatten der Neuanordnung und der Neuplanung einer Anzahl von Zielbefehlen gemeinsam können andere Optimierungstechniken verwendet werden, um die Anzahl der Prozessorschritte, die nötig sind, um eine Gruppe von Zielbefehlen auszuführen, auf weniger als jene zu verringern, die durch andere Mikroprozessoren, welche die Zielanwendungen ausführen werden, benötigt werden.
  • Die Codeformungssoftware in Kombination mit dem verbesserten Formungshost übersetzt Zielbefehle schnell in Befehle für den Formungshost und puffert diese Hostbefehle in einer Speicherdatenstruktur (in dieser Beschreibung als ein „Übersetzungspuffer" bezeichnet). Die Verwendung eines Übersetzungspuffers, um übersetzte Befehle zu halten, gestattet, dass Befehle abgerufen werden können, ohne jedes Mal, wenn jeder Zielbefehl ausgeführt wird, den langen Prozess des Bestimmens, welche Basisbefehle benötigt werden, um jeden Zielbefehl auszuführen, des Ansprechens jedes Basisbefehls, des Abrufens jedes Basisbefehls, des Optimierens der Abfolge von Basisbefehlen, des Zuteilens von Mitteln an jeden Basisbefehl, des Neuanordnens der Basisbe fehle, und des Ausführens jedes Schritts jeder Abfolge von beteiligten Basisbefehlen neu auszuführen. Sobald ein Zielbefehl übersetzt wurde, kann er ohne die Notwendigkeit für jeglichen dieser unzähligen Schritte aus dem Übersetzungspuffer abgerufen und ausgeführt werden.
  • Ein Hauptproblem von Emulationstechniken des Stands der Technik war die Unfähigkeit dieser Techniken, Ausnahmen, die während der Ausführung eines Zielprogramms erzeugt wurden, mit gutem Leistungsvermögen zu behandeln. Dies ist besonders für Ausnahmen zutreffend, die beim Ausführen der Zielanwendung erzeugt werden und auf das Zielbetriebssystem gerichtet sind, wobei zur Zeit jeder derartigen Ausnahme für die richtige Ausführung der Ausnahme und der Befehle, die folgen, der richtige Zielzustand verfügbar sein muss. Folglich ist der Emulator gezwungen, den Zielzustand zu jeder Zeit genau zu beobachten, und muss er ständig prüfen, um zu bestimmen, ob eine Speicherung in den Zielcodebereich erfolgt. Andere Ausnahmen erzeugen ähnliche Probleme. Zum Beispiel können durch den Emulator Ausnahmen erzeugt werden, um bestimmte Zieltätigkeiten festzustellen, die durch irgendeine bestimmte Hostfunktion ersetzt wurden. Im Besonderen können verschiedene Hardwaretätigkeiten eines Zielprozessors durch Softwaretätigkeiten ersetzt werden, die durch die Emulatorsoftware bereitgestellt werden. Zusätzlich kann auch der Hostprozessor, der die Hostbefehle, die von den Zielbefehlen erlangt werden, ausführt, Ausnahmen erzeugen. Alle diese Ausnahmen können entweder während des Versuchs, Zielbefehle durch den Emulator zu Hostbefehlen zu verändern, oder bei der Ausführung der Hostübersetzungen am Hostprozessor auftreten. Eine leistungsfähige Emulation muss irgendeine Weise bereitstellen, um sich leistungsfähig und auf eine solche Weise, dass die Ausnahme richtig behandelt werden kann, von diesem Ausnahmen zu erholen. Nichts des Stands der Technik tut dies für die gesamte Software, die emuliert werden könnte.
  • Um diese Beschränkungen des Stands der Technik zu überwinden, ist im verbesserten Formungshost eine Anzahl von Hardwareverbesserungen beinhaltet. Diese Verbesserungen beinhalten einen torgesteuerten Speicherungspuffer und eine große Anzahl von zusätzlichen Prozessorregistern. Einige der zusätzlichen Register gestatten die Verwendung einer Registerumbenennung, um das Problem von Befehlen, die die gleichen Hardwarebetriebsmittel benötigen, zu verringern. Die zusätzlichen Register gestatten auch die Unterhaltung eines Satzes von Host- oder Arbeitsregistern, um die Host- befehle zu verarbeiten, und eines Satzes von Zielregistern, um den offiziellen Zustand des Zielprozessors, für den die Zielanwendung geschaffen wurde, zu halten. Die Ziel- (oder Schatten-)register sind durch eine fest zugeordnete Schnittstelle, die eine als „Übergeben" bezeichnete Tätigkeit gestattet, um den Inhalt aller Arbeitsregister schnell zu offiziellen Zielregistern zu übertragen, und eine als „Rückführung" bezeichnete Tätigkeit gestattet, um den Inhalt aller offiziellen Zielregister zu ihren Arbeitsregisteräquivalenten zurück zu übertragen, mit ihren Arbeitsregisteräquivalenten verbunden. Der torgesteuerte Speicherungspuffer speichert Arbeitsspeicherzustandsveränderungen an einer „nichtübergebenen" Seite eines Hardwaretors" und Zustandsveränderungen des offiziellen Speichers an einer „übergebenen" Seite des Hardwaretors, an der diese übergebenen Speicherungen zum Hauptspeicher „ablaufen". Eine Übergabetätigkeit überträgt Speicherungen von der nicht-übergebenen Seite des Tors zur übergebenen Seite des Tors. Die zusätzlichen offiziellen Register und der torgesteuerte Speicherungspuffer gestatten, dass der Zustand des Speichers und der Zustand der Zielregister gemeinsam aktualisiert werden, sobald einer oder eine Gruppe von Zielbefehlen übersetzt und ohne Fehler ausgeführt wurde.
  • Diese Aktualisierungen werden durch die Codeformungssoftware so gewählt, dass sie an integralen Zielbefehlsgrenzen stattfinden. Daher werden, wenn die Basishostbefehle, die eine Übersetzung einer Reihe von Zielbefehlen bilden, durch den Hostprozessor ausgeführt werden, ohne Ausnahmen zu erzeugen, die Arbeitsspeicherspeicherungen und der Arbeitsregisterzustand, die durch diese Befehle erzeugt werden, zum offiziellen Speicher und zu den offiziellen Zielregistern übertragen. Auf diese Weise kann der ursprüngliche Zustand in den Zielregistern bei der letzten Aktualisierung (oder Übergabe) in die Arbeitsregister abgerufen werden und können nichtübergebene Speicherspeicherungen im torgesteuerten Speicherungspuffer verworfen werden, wenn bei der Verarbeitung des Hostbefehle eine Ausnahme an einem Punkt auftritt, der sich nicht an der Grenze eines oder eines Satzes von übersetzten Zielbefehlen befindet. Falls die erzeugte Ausnahme eine Zielausnahme ist, können dann die Zielbefehle, die die Zielausnahme verursachen, einer nach dem anderen neuübersetzt werden und in einer seriellen Abfolge ausgeführt werden, wie sie durch einen Zielmikroprozessor ausgeführt würden. Wenn jeder Zielbefehl ohne Fehler richtig ausgeführt wird, kann der Zustand der Zielregister aktualisiert werden; und können die Daten im Speicherungspuffer zum Speicher durchgelassen werden. Dann, wenn die Ausnahme beim Ausführen der Hostbefehle erneut auftritt, wird der richtige Zustand des Zielcomputers durch die Zielregister des Formungshosts und des Speichers gehalten; und kann die Tätigkeit ohne Verzögerung richtig behandelt werden. Jene neue Übersetzung, die durch dieses berichtigende Übersetzen erzeugt wird, kann zur zukünftigen Verwendung gepuffert werden, wie sie übersetzt ist, oder kann alternativ für ein einmaliges oder seltenes Ereignis wie etwa einen Seitenfehler verworfen werden. Dies gestattet, dass der Mikroprozessor, der durch die Kombination aus der Codeformungssoftware und dem Formungshost erzeugt wird, die Befehle schneller als Prozessoren ausführt, für die die Software ursprünglich geschrieben wurde.
  • Es sollte bemerkt werden, dass bei der Ausführung von Zielprogrammen unter Verwendung des Mikroprozessors, der die vorliegende Erfindung beinhaltet, viele unterschiedliche Arten von Ausnahmen auftreten können, die auf verschiedene Weisen behandelt werden. Zum Beispiel werden einige Ausnahmen durch die Zielsoftware verursacht, die eine Ausnahme erzeugt, welche ein Zielbetriebssystem-Ausnahmebehandlungsprogramm benutzt. Die Verwendung eines derartigen Ausnahmebehandlungsprogramms erfordert, dass die Codeformungssoftware Programme beinhaltet, um den gesamten Ausnahmebehandlungsprozess einschließlich jeglicher Hardware, die durch den Zielcomputer bereitgestellt wird, um den Prozess zu behandeln, zu emulieren. Dies erfordert, dass die Codeformungssoftware für das Speichern des Zustands des Zielprozessors sorgt, damit sie nach der Behandlung der Ausnahme richtig fortsetzen kann. Einige Ausnahmen wie ein Seitenfehler, die das Abrufen von Daten in eine neue Speicherseite erfordern, bevor der Prozess, der übersetzt wird, ausgeführt werden kann, erfordern eine Rückkehr zum Beginn des Prozesses der übersetzt wird, nachdem die Ausnahme behandelt wurde. Andere Ausnahmen führen eine bestimmte Tätigkeit in Software aus, wo diese Tätigkeit nicht durch die Hardware bereitgestellt ist. Diese erfordern, dass das Ausnahmebehandlungsprogramm die Tätigkeit zum nächsten Schritt in der Übersetzung zurückführt, nachdem die Ausnahme behandelt wurde. Jede dieser unterschiedlichen Arten von Ausnahmen kann durch den Mikroprozessor, der die vorliegende Erfindung beinhaltet, leistungsfähig behandelt werden.
  • Zusätzlich werden einige Ausnahmen durch Hosthardware erzeugt und stellen eine Vielfalt von Host- und Zielbedingungen fest. Einige Ausnahmen verhalten sich wie Ausnahmen an einem herkömmlichen Mikroprozessor, doch andere werden durch die Codeformungssoftware verwendet, um das Versagen verschiedener Spekulationen festzustellen. In diesen Fällen verursacht die Codeformungssoftware unter Verwendung der oben beschriebenen Zustandsspeicherungs- und -wiederherstellungsmechanismen, dass der Zielzustand zu seiner jüng sten offiziellen Version wiederhergestellt wird, und erzeugt und speichert sie eine neue Übersetzung (oder verwendet sie eine früher erzeugte und sichere Übersetzung erneut), die die gescheiterte Spekulation vermeidet. Diese Übersetzung wird dann ausgeführt.
  • Der Formungshost beinhaltet zusätzliche Hardwareausnahmenfeststellungsmechanismen, die in Verbindung mit dem oben beschriebenen Rückführungs- und Neuübersetzungsverfahren eine weitere Optimierung gestatten. Beispiele sind ein Mittel zur Unterscheidung des Speichers und der speicherabgebildeten E/A und ein Mittel zur Beseitigung von Speicherbezugnahmen durch Schützen von Adressen oder Adressbereichen, wodurch gestattet wird, dass Zielvariablen in Registern gehalten werden.
  • Falls Ausnahmen verwendet werden, um das Versagen anderer Spekulationen festzustellen, wie etwa, ob eine Tätigkeit den Speicher oder die speicherabgebildete E/A betrifft, wird die Wiedergewinnung durch die Erzeugung neuer Übersetzungen mit unterschiedlichen Speichertätigkeiten und unterschiedlichen Optimierungen bewerkstelligt.
  • 2 ist ein Diagramm einer Formungshosthardware, die als das gleiche Anwendungsprogramm, das am CISC-Prozessor von 1(a) ausgeführt wird, ausführend dargestellt ist. Wie ersichtlich ist, beinhaltet der Mikroprozessor den Codeformungssoftwareabschnitt und den verbesserten Hardwareformungshostabschnitt, die oben beschrieben wurden. Die Zielanwendung liefert die Zielbefehle zur Codeformungssoftware, damit sie in Hostbefehle übersetzt werden, zu deren Ausführung der Formungshost fähig ist. In der Zwischenzeit erhält das Zielbetriebssystem Aufrufe vom Zielanwendungsprogramm und überträgt sie diese zur Codeformungssoftware. In einer bevorzugten Ausführungsform des Mikroprozessors ist der Formungshost ein Sehr-Langes-Befehlswort(Very Long Instruction Word, VLIW)-Prozessor, der mit mehreren Verarbeitungskanälen gestaltet ist. Die gesamte Tätigkeit eines derartigen Prozessors ist in 6(c) näher veranschaulicht.
  • In 6(a) bis (c) sind Befehle veranschaulicht, die zur Verwendung mit jedem aus einem CISC-Prozessor, einem RISC-Prozessor, und einem VLIW-Prozessor geeignet sind. Wie ersichtlich ist, sind die CISC-Befehle von wechselnden Längen und können sie mehrere primitivere Tätigkeiten (z.B. Laden und Addieren) beinhalten. Die RISC-Befehle andererseits sind von gleicher Länge und sind im Wesentlichen Basistätigkeiten. Der veranschaulichte einzelne sehr lange Befehl für den VLIW-Prozessor beinhaltet jede der primitiveren Tätigkeiten (d.h., Laden, Speichern, Addieren ganzer Zahlen, Vergleichen, Multiplizieren mit Gleitkomma, und Verzweigen) der CISC- und RISC-Befehle. Wie in 6(c) ersichtlich ist, wird jeder der Basisbefehle, die zusammen ein einzelnes sehr langes Befehlswort aufbauen, parallel mit den anderen Basisbefehlen entweder zu einem von mehreren gesonderten Verarbeitungskanälen des VLIW-Prozessors oder zum Speicher geliefert, um parallel durch die Verarbeitungskanäle und den Speicher behandelt zu werden. Die Ergebnisse aller dieser parallelen Tätigkeiten werden in eine Registerdatei mit mehreren Ports übertragen.
  • Ein VLIW-Prozessor, der die Basis des Formungshosts darstellen kann, ist ein viel einfacherer Prozessor als die anderen oben beschriebenen Prozessoren. Er beinhaltet kein Schaltsystem, um die Abhängigkeiten von Punkten festzustellen oder Basisbefehle neuanzuordnen, zu optimieren, und neu zu planen. Dies wiederum gestattet eine schnellere Verarbeitung mit höheren Taktraten, als entweder mit den Prozessoren, für die die Zielanwendungsprogramme ursprünglich bestimmt waren, oder anderen Prozessoren, die Emulationsprogramme verwenden, um Zielanwendungsprogramme auszuführen, möglich ist. Doch der Prozessor ist nicht auf VLIW-Prozessoren beschränkt und kann ebenso gut mit jeder belie bigen Art von Prozessor wie etwa einem RSIC-Prozessor funktionieren.
  • Die Codeformungssoftware des Mikroprozessors, der in 2 gezeigt ist, beinhaltet einen Übersetzerabschnitt, der die Befehle der Zielanwendung decodiert, diese Zielbefehle in die Basishostbefehle umwandelt, die zur Ausführung durch den Formungshost fähig sind, die Tätigkeiten, die durch die Zielbefehle benötigt werden, optimiert, die Basisbefehle zu VLIW-Befehlen (einer Übersetzung) für den Formungshost neuanordnet und plant, und die Host-VLIW-Befehle ausführt. Die Tätigkeiten des Übersetzers sind in 7 veranschaulicht, die die Tätigkeit der Hauptschleife der Codeformungssoftware veranschaulicht.
  • Um die Tätigkeit des Mikroprozessors, der die Codeformungssoftware und die verbesserte Formungshosthardware beinhaltet, zu beschleunigen, beinhaltet die Codeformungssoftware einen wie in 2 veranschaulichten Übersetzungspuffer. Der Übersetzungspuffer einer Ausführungsform ist eine Softwaredatenstruktur, die in einem Speicher gespeichert werden kann; in einer besonderen Ausführungsform könnte auch ein Hardwarepufferspeicher benutzt werden. Der Übersetzungspuffer wird verwendet, um die Hostbefehle, die jede abgeschlossene Übersetzung der Zielbefehle verkörpern, zu speichern. Wie ersichtlich ist, wird die sich ergebende Hostübersetzung im Übersetzungspuffer gespeichert, sobald die einzelnen Zielbefehle übersetzt wurden und die sich ergebenden Hostbefehle optimiert, neuangeordnet, und neugeplant wurden. Die Hostbefehle, die die Übersetzung aufbauen, werden dann durch den Formungshost ausgeführt. Wenn die Hostbefehle ausgeführt werden, ohne eine Ausnahme zu erzeugen, kann die Übersetzung danach aufgerufen werden, wann immer die Tätigkeiten, die durch den Zielbefehl oder die -befehle verlangt werden, erforderlich sind.
  • Daher ist wie in 7 gezeigt eine typische Tätigkeit der Codeformungssoftware des Mikroprozessors, wenn dieser durch das Anwendungsprogramm die Adresse eines Zielbefehls geliefert wird, zuerst zu bestimmen, ob der Zielbefehl an der Zieladresse übersetzt wurde. Wenn der Zielbefehl nicht übersetzt wurde, werden er und nachfolgende Zielbefehle zu einer neuen Hostübersetzung abgerufen, decodiert, übersetzt, und dann (möglicherweise) optimiert, neuangeordnet und neugeplant, und durch den Übersetzer im Übersetzungspuffer gespeichert. Wie später ersichtlich sein wird, gibt es verschiedene Grade der Optimierung, die möglich sind. Der Ausdruck „Optimierung" wird in dieser Beschreibung häufig generisch verwendet, um auf jene Techniken zu verweisen, durch die die Verarbeitung beschleunigt wird. Zum Beispiel ist die Neuanordnung eine Form der Optimierung, die eine schnellere Verarbeitung gestattet und im Ausdruck beinhaltet ist. Viele der Optimierungen, die möglich sind, wurden innerhalb des Stands der Technik von Kompiliereroptimierungen beschrieben, und einige Optimierungen, die beim Stand der Technik schwierig durchzuführen waren, wie „Superblöcke", stammen aus der VLIW-Forschung. Die Steuerung wird dann zur Übersetzung übertragen, um zu verursachen, dass die Ausführung durch die verbesserte Formungshostsoftware fortgesetzt wird.
  • Wenn der bestimmten Zielbefehlsabfolge bei der Ausführung der Anwendung das nächste Mal begegnet wird, wird dann die Hostübersetzung im Übersetzungspuffer gefunden werden und ohne die Notwendigkeit des Übersetzens, Optimierens, Neuanordnens oder Neuplanens sofort ausgeführt werden. Bei Verwendung der nachstehend beschriebenen fortschrittlichen Techniken wurde geschätzt, dass die Übersetzung für einen Zielbefehl (sobald er vollständig übersetzt wurde) im Übersetzungspuffer stets bis auf ein Mal für jeweils etwa eine Million Ausführungen der Übersetzung gefunden werden wird. Folglich können nach einer ersten Übersetzung alle Schritte, die für die Übersetzung benötigt werden, wie etwa Decodieren, Abrufen der Basisbefehle, Optimieren der Basisbefehle, Neuplanen in einer Hostübersetzung, und Speichern im Übersetzungspuffer aus der benötigten Verarbeitung beseitigt werden. Da der Prozessor, für den die Zielbefehle geschrieben wurden, jeden Befehl jedes Mal, wenn der Befehl ausgeführt wird, decodieren, abrufen, neuanordnen, und neuplanen muss, verringert dies die Arbeit, die zum Ausführen der Zielbefehle benötigt wird, drastisch und erhöht es die Geschwindigkeit des verbesserten Mikroprozessors.
  • Durch das Beseitigen aller dieser Schritte, die bei der Ausführung einer Zielanwendung durch Prozessoren des Stands der Technik benötigt werden, überwindet der Mikroprozessor, der die vorliegende Erfindung beinhaltet, Probleme des Stands der Technik, die derartige Tätigkeiten bei jeder vernünftigen Geschwindigkeit unmöglich machten. Zum Beispiel wurden einige der Techniken des verbesserten Mikroprozessors in den oben beschriebenen Emulatoren verwendet, welche verwendet wurden, um Anwendungen zu anderen Systemen zu portieren. Doch einige dieser Emulatoren verfügten über keine Weise, um mehr als kurze Abschnitte von Anwendungen auszuführen, da bei der Verarbeitung übersetzter Befehle Ausnahmen, die Aufrufe an verschiedene Systemausnahmebehandlungsprogramme erzeugten, an Punkten bei der Tätigkeit erzeugt wurden, an denen der Zustand des Hostprozessors keinen Bezug zum Zustand eines Zielprozessors, der die gleichen Befehle verarbeitete, aufwies. Dadurch war der Zustand des Zielprozessors an dem Punkt, an dem eine derartige Ausnahme erzeugt wurde, nicht bekannt. Daher konnte der richtige Zustand der Zielmaschine nicht bestimmt werden; und musste die Tätigkeit angehalten, neugestartet, und der richtige Zustand ermittelt werden, bevor die Ausnahme bedient und die Ausführung fortgesetzt werden konnte. Dies machte das Ausführen eines Anwendungsprogramms mit der Hostgeschwindigkeit unmöglich.
  • Die Formungshostsoftware beinhaltet eine Anzahl von Verbesserungen, die dieses Problem überwinden. Diese Verbesserungen sind jeweils in 3, 4, und 5 veranschaulicht. Um den richtigen Zustand der Register zur Zeit des Auftretens eines Fehlers zu bestimmen, wird durch die verbesserte Hardware ein Satz von offiziellen Zielregistern bereitgestellt, um den Zustand der Register des Zielprozessors, für den die ursprüngliche Anwendung bestimmt war, zu halten. Diese Zielregister können in jeder der Gleitkommaeinheiten, jeglichen Ganzzahleinheiten, und jeglichen anderen Ausführungseinheiten beinhaltet sein. Diese offiziellen Register wurden dem Formungshost zusammen mit einer erhöhten Anzahl von normalen Arbeitsregistern hinzugefügt, damit eine Anzahl von Optimierungen einschließlich einer Registerumbenennung ausgeführt werden kann. Eine Ausführungsform der verbesserten Hardware beinhaltet vierundsechzig Arbeitsregister in der Ganzzahleinheit und zweiunddreißig Arbeitsregister in der Gleitkommaeinheit. Die Ausführungsform beinhaltet auch einen verbesserten Satz von Zielregistern, der alle der häufig veränderten Register des Zielprozessors enthält, die nötig sind, um den Zustand dieses Prozessors bereitzustellen; diese beinhalten Bedingungssteuerregister und andere Register, die zur Steuerung des simulierten Systems nötig sind.
  • Es sollte bemerkt werden, dass eine übersetzte Befehlsabfolge abhängig von der Art der verbesserten Verarbeitungssoftware, die durch den Formungshost verwendet wird, Basistätigkeiten beinhalten kann, die mehrere Zielbefehle von der ursprünglichen Anwendung bilden. Zum Beispiel kann ein VLIW-Mikroprozessor fähig sein, mehrere von entweder CISC- oder RISC-Befehlen auf einmal auszuführen, wie in 6(a) bis (c) veranschaulicht ist. Doch der Zustand der Zielregister der Formungshosthardware wird nicht verändert, von welcher Art auch immer der Formungshost ist, außer an einer integralen Zielbefehlsgrenze; und dann werden alle Register aktualisiert. Wenn der Mikroprozessor einen Ziel befehl oder -befehle ausführt, die in eine Reihe von Basisbefehlen übersetzt wurden, welche möglicherweise zu einer Hostübersetzung neuangeordnet und neugeplant worden sind, halten daher die offiziellen Zielregister dann, wenn der Prozessor mit der Ausführung der übersetzten Befehlsabfolge beginnt, die Werte, die durch die Register des Zielprozessors, für den die Anwendung bestimmt war, gehalten würden, wenn der erste Zielbefehl angesprochen wurde. Nachdem der Formungshost mit der Ausführung der übersetzten Befehle begonnen hat, halten die Arbeitsregister jedoch Werte, die durch die Basistätigkeiten der übersetzten Befehle, welche bis zu diesem Punkt ausgeführt wurden, bestimmt werden. Obwohl einige dieser Arbeitsregister Werte halten können, die mit jenen in den offiziellen Zielregistern identisch sind, können daher andere der Arbeitsregister Werte halten, die für den Zielprozessor bedeutungslos sind. Dies trifft besonders in einer Ausführungsform zu, die viel mehr Register bereitstellt, als dies eine bestimmte Zielmaschine tut, um fortschrittliche Beschleunigungstechniken zu gestatten. Sobald die übersetzten Hostbefehle beginnen, sind die Werte in den Arbeitsregistern das, was der Zustand dieser Register aufgrund der Bestimmung dieser übersetzten Hostbefehle zu sein hat. Wenn ein Satz von übersetzten Hostbefehlen ausgeführt wird, ohne eine Ausnahme zu erzeugen, werden die neuen Arbeitsregisterwerte, die am Ende des Satzes von Befehlen bestimmt werden, gemeinsam zu den offiziellen Zielregistern (die möglicherweise ein Zielbefehlszeigerregister beinhalten) übertragen. In der vorliegenden Ausführungsform des Prozessors findet diese Übertragung außerhalb der Ausführung der Hostbefehle in einer zusätzlichen Pipelinestufe statt, so dass sie die Tätigkeit des Formungshosts nicht verlangsamt.
  • In einer ähnlichen Weise wird ein torgesteuerter Speicherungspuffer wie der in 5 veranschaulichte in der Hardware des verbesserten Mikroprozessors benutzt, um die Übertragung von Daten zum Speicher zu steuern. Der torge steuerte Speicherungspuffer beinhaltet eine Anzahl von Elementen, wovon jedes die Adresse und Daten für eine Speicherspeicherungstätigkeit halten kann. Diese Elemente können durch jede beliebige einer Anzahl von unterschiedlichen Hardwareanordnungen (z.B. First-In-First-Out-Puffer) ausgeführt werden; die veranschaulichte Ausführungsform ist unter Benutzung eines Direktzugriffsspeichers und dreier fest zugeordneter Arbeitsregister ausgeführt. Die drei Register speichern jeweils einen Zeiger zum Anfang der Schlange von Speicherspeicherungen, einen Zeiger zum Tor, und einen Zeiger zum Ende der Schlange der Speicherspeicherungen. Speicherspeicherungen, die zwischen dem Anfang der Schlange und dem Tor positioniert sind, sind bereits dem Speicher übergeben, während jene, die zwischen dem Tor der Schlange und dem Ende positioniert sind, noch nicht dem Speicher übergeben sind. Speicherspeicherungen, die während der Ausführung von Hostübersetzungen erzeugt werden, werden durch die Ganzzahleinheit in der Reihenfolge, in der sie während der Ausführung der Hostbefehle durch den Formungshost erzeugt werden, in den Speicherungspuffer gestellt, dürfen aber nicht in den Speicher geschrieben werden, bis in einem Hostbefehl einer Übergabetätigkeit begegnet wird. Daher werden die Speicherungstätigkeiten während der Ausführung der Übersetzungen in die Schlange gestellt. Sofern dies die ersten Speicherungen sind, so dass sich im torgesteuerten Speicherungspuffer keine anderen Speicherungen befinden, werden sowohl der Anfangs- als auch der Endzeiger auf die gleiche Position zeigen. Wenn jede Speicherung ausgeführt wird, wird sie in die nächste Position in der Schlange gestellt und der Endpunkt auf die nächste Position (in der Figur aufwärts) erhöht. Dies dauert an, bis ein Übergabebefehl ausgeführt wird. Dies wird normalerweise passieren, wenn die Übersetzung eines Satzes von Zielbefehlen abgeschlossen wurde, ohne eine Ausnahme oder eine Fehlerausstiegsbedingung zu erzeugen. Wenn eine Übersetzung durch den Formungshost ohne Fehler ausgeführt wurde, werden die Speicherspeicherungen im Speicherungspuffer, die wäh rend der Ausführung erzeugt wurden, gemeinsam durch das Tor des Speicherungspuffers verschoben (übergeben) und anschließend in den Speicher geschrieben. In der veranschaulichten Ausführungsform wird dies durch Kopieren des Werts im Register, das den Endzeiger hält, in das Register, das den Torzeiger hält, bewerkstelligt.
  • Daher ist ersichtlich, dass sowohl die Übertragung des Registerzustands von Arbeitsregistern zu offiziellen Zielregistern als auch die Übertragung von Arbeitsspeicherspeicherungen zum offiziellen Speicher als Reaktion auf ausdrückliche Übergabetätigkeiten gemeinsam und nur an Grenzen zwischen integralen Zielbefehlen stattfindet.
  • Dies gestattet dem Mikroprozessor, sich ohne jegliche bedeutende Verzögerung von Zielausnahmen zu erholen, die während der Ausführung durch den verbesserten Formungshost auftreten. Wenn während der Ausführung eines jeglichen übersetzten Befehls oder von Befehlen eine Zielausnahme erzeugt wird, wird diese Ausnahme durch die Formungshosthardware oder -software festgestellt. Als Reaktion auf die Feststellung der Zielausnahme kann die Codeformungssoftware verursachen, dass die Werte, die in den offiziellen Registern bewahrt werden, in die Arbeitsregister zurückgestellt werden, und jegliche nichtübergebene Speicherspeicherungen im torgesteuerten Speicherungspuffer verworfen werden (eine Tätigkeit, die als „Rückführung" bezeichnet wird). Die Speicherspeicherungen im torgesteuerten Speicherungspuffer von 5 können durch Kopieren der Werte im Register, das den Torzeiger hält, in das Register, das den Endzeiger hält, verworfen werden.
  • Das Stellen der Werte von den Zielregistern in die Arbeitsregister kann die Adresse des ersten der Zielbefehle, die ausgeführt wurden, als die Ausnahme auftrat, in das Arbeitsbefehlszeigerregister stellen. Beginnend mit diesem offiziellen Zustand des Zielprozessors in den Arbeitsregis tern werden die Zielbefehle, die ausgeführt wurden, als die Ausnahme auftrat, ohne jegliche Neuanordnung oder andere Optimierung in serieller Reihenfolge neuübersetzt. Nachdem jeder Zielbefehl neu decodiert und in eine neue Hostübersetzung übersetzt wurde, wird der übersetzte Hostbefehl, der die Zielbefehle darstellt, durch den Formungshost ausgeführt und verursacht, oder verursacht nicht, das Auftreten einer Ausnahme (wenn der Formungshost ein anderer als ein VLIW-Prozessor ist, wird jede der Basistätigkeiten der Hostübersetzung der Reihe nach ausgeführt. Wenn keine Ausnahme auftritt, wenn die Hostübersetzung ausgeführt wird, wird die nächste Basisfunktion ausgeführt). Dies dauert an, bis eine Ausnahme erneut auftritt oder der einzelne Zielbefehl übersetzt und ausgeführt wurde. In einer Ausführungsform wird der Zustand der Arbeitsregister zu den Zielregistern übertragen und werden jegliche Daten im torgesteuerten Speicherungspuffer übergeben, so dass sie zum Speicher übertragen werden können, wenn eine Übersetzung eines Zielbefehls ohne eine Ausnahme ausgeführt wurde. Doch wenn eine Ausnahme während der Ausführung einer Übersetzung erneut auftritt, hat sich der Zustand der Zielregister und des Speichers nicht verändert, sondern ist er mit dem Zustand, der in einem Zielcomputer erzeugt wird, wenn die Ausnahme auftritt, identisch. Folglich wird, wenn die Zielausnahme erzeugt wird, die Ausnahme durch das Zielbetriebssystem richtig behandelt werden.
  • In der gleichen Weise zeigt der Zielbefehlszeiger auf den nächsten der Zielbefehle, sobald ein erster Zielbefehl der Reihe von Befehlen, deren Übersetzung eine Ausnahme erzeugt hat, ohne Erzeugung einer Ausnahme ausgeführt wurde. Dieser zweite Zielbefehl wird in der gleichen Weise wie der erste decodiert und ohne Optimierung oder Neuanordnung neuübersetzt. Da jede der Hostübersetzungen eines einzelnen Zielbefehls durch den Formungshost verarbeitet wird, wird jegliche erzeugte Ausnahme auftreten, wenn der Zustand der Zielregister und des Speichers mit dem Zustand identisch ist, der im Zielcomputer auftreten würde. Folglich kann die Ausnahme sofort und richtig behandelt werden. Diese neuen Übersetzungen können als die richtigen Übersetzungen für diese Abfolge von Befehlen in der Zielanwendung im Übersetzungspuffer gespeichert werden und abgerufen werden, wann immer die Ausführungen neu ausgeführt werden.
  • Andere Ausführungsformen zur Bewerkstelligung des gleichen Ergebnisses wie der torgesteuerte Speicherungspuffer von 5 können Anordnungen beinhalten, um Speicherungen direkt zum Speicher zu übertragen, während Daten aufgezeichnet werden, die ausreichen, um den Zustand des Zielcomputers wiederherzustellen, falls die Ausführung einer Übersetzung zu einer Ausnahme oder einem Fehler führt, die bzw. der eine Rückführung erforderlich macht. In einem solchen Fall würde die Auswirkung jeglicher Speicherspeicherungen, die während der Übersetzung und der Ausführung stattfanden, umgekehrt werden müssen und der Speicherzustand, der am Beginn der Übersetzung bestand, wiederhergestellt werden müssen; während Arbeitsregister auf die oben besprochene Weise Daten erhalten müssten, die in den offiziellen Zielregistern gehalten werden. Eine Ausführungsform, um dies zu bewerkstelligen, unterhält einen gesonderten Zielspeicher, um den ursprünglichen Speicherzustand zu halten, der dann benutzt wird, um den überschriebenen Speicher zu ersetzen, wenn eine Rückführung stattfindet. Eine andere Ausführungsform zum Bewerkstelligen einer Speicherrückführung zeichnet jede Speicherung und die ersetzten Speicherdaten auf, wenn sie stattfinden, und kehrt dann den Speicherungsprozess um, wenn eine Rückführung benötigt wird.
  • Die Codeformungssoftware stellt eine zusätzliche Tätigkeit bereit, die die Geschwindigkeit der Verarbeitung von Programmen, die übersetzt werden, stark steigert. Zusätzlich zum einfachen Übersetzen der Befehle, dem Optimieren, Neuanordnen, Neuplanen, Puffern, und Ausführen jeder Über setzung, damit sie erneut ausgeführt werden kann, wann immer dieser Satz von Befehlen ausgeführt werden muss, verknüpft der Übersetzer auch die verschiedenen Übersetzungen, um in fast allen Fällen eine Rückkehr zur Hauptschleife des Übersetzungsprozesses zu beseitigen. 8 veranschaulicht die Schritte, die durch den Übersetzerabschnitt der Codeformungssoftware ausgeführt werden, um diesen Verknüpfungsprozess zu bewerkstelligen. Fachleute werden verstehen, dass diese Verknüpfungstätigkeit die Rückkehr zur Hauptschleife für die meisten Übersetzungen von Befehlen im Wesentlichen beseitigt, was diesen Steuerungsaufwand beseitigt.
  • Nehmen wir zu Beispielszwecken an, dass das Zielprogramm, das ausgeführt wird, aus X86-Befehlen besteht. Wenn eine Übersetzung einer Abfolge von Zielbefehlen stattfindet und die Basishostbefehle neuangeordnet und neugeplant werden, können am Ende jeder Hostübersetzung zwei Basisbefehle auftreten. Der erste ist ein Basisbefehl, der den Wert des Befehlszeigers für den Zielprozessor (oder sein Äquivalent) aktualisiert; dieser Befehl wird verwendet, um die richtige Adresse des nächsten Zielbefehls in das Zielbefehlszeigerregister zu stellen. Diesem Basisbefehl folgt ein Verzweigungsbefehl, der die Adresse von jedem von zwei möglichen Zielen für die Verzweigung enthält. Die Weise, auf die der Basisbefehl, der dem Verzweigungsbefehl vorausgeht, den Wert des Befehlszeigers für den Zielprozessor aktualisieren kann, ist, den Bedingungscode für die Verzweigung in den Bedingungscoderegistern zu prüfen und dann zu bestimmen, ob eine der beiden Verzweigungsadressen, die durch die Bedingung, welche die Verzweigung steuert, angegeben sind, im Übersetzungspuffer gespeichert ist. Das erste Mal, wenn die Abfolge von Zielbefehlen übersetzt wird, halten die beiden Verzweigungsziele des Hostbefehls beide die gleiche Hostprozessoradresse für die Hauptschleife der Übersetzersoftware.
  • Wenn die Hostübersetzung abgeschlossen, im Übersetzungspuffer gespeichert, und zum ersten Mal ausgeführt wurde, wird der Befehlszeiger im Zielbefehlszeigerregister aktualisiert (wie es der Rest der Zielregister wird); und zweigt die Tätigkeit zur Hauptschleife zurück. In der Hauptschleife schlägt die Übersetzersoftware den Anweisungszeiger zum nächsten Zielbefehl im Zielbefehlszeigerregister nach. Dann wird die nächste Zielbefehlsabfolge angesprochen. Sofern diese Abfolge von Zielbefehlen noch nicht übersetzt wurde und sich daher im Übersetzungspuffer keine Übersetzung befindet, wird der nächste Satz von Zielbefehlen aus dem Speicher abgerufen, decodiert, übersetzt, optimiert, neuangeordnet, neugeplant, im Übersetzungspuffer gepuffert, und ausgeführt. Da der zweite Satz von Zielbefehlen dem ersten Satz von Zielbefehlen folgt, wird der Basisverzweigungsbefehl am Ende der Hostübersetzung des ersten Satzes von Zielbefehlen automatisch aktualisiert, um die Adresse der Hostübersetzung des zweiten Satzes von Zielbefehlen als die Verzweigungsdresse für die bestimmte Bedingung, die die Verzweigung steuert, zu übersetzen.
  • Wenn dann der zweite übersetzte Hostbefehl zum ersten übersetzten Hostbefehl zurücklaufen würde, würde die Verzweigungstätigkeit am Ende der zweiten Übersetzung die Hauptschleifenadresse und die X86-Adresse der ersten Obersetzung als die beiden möglichen Ziele für die Verzweigung beinhalten. Die Aktualisierungsbefehlszeiger-Basistätigkeit, die der Verzweigung vorausgeht, prüft die Bedingung und bestimmt, dass der Lauf zur ersten Übersetzung zurück unternommen werden soll, und aktualisiert den Zielbefehlszeiger auf die X86-Adresse der ersten Übersetzung. Dies verursacht, dass der Übersetzer im Übersetzungspuffer nachsieht, um zu sehen, ob die gesuchte X86-Adresse dort erscheint. Die Adresse der ersten Übersetzung wird gefunden, und ihr Wert im Hostspeicherplatz ersetzt die X86-Adresse in der Verzweigung am Ende des zweiten übersetzten Hostbefehls. Dann wird der zweite übersetzte Hostbefehl gepuffert und ausgeführt. Dies verursacht, dass die Schleife ausgeführt wird, bis die Bedingung, die die Verzweigung von der ersten Übersetzung zur zweiten Übersetzung verursacht, versagt, und die Verzweigung nimmt den Weg zur Hauptschleife zurück. Wenn dies geschieht, zweigt der erste übersetzte Hostbefehl zur Hauptschleife zurück ab, wo im Übersetzungspuffer nach dem nächsten Satz von Zielbefehlen, der durch den Zielbefehlszeiger bezeichnet wird, gesucht wird, die Hostübersetzung aus dem Puffer abgerufen wird; oder die Suche im Übersetzungspuffer fehlschlägt, und die Zielbefehle aus dem Speicher abgerufen und übersetzt werden. Wenn dieser übersetzte Zielbefehl im Übersetzungspuffer gepuffert ist, ersetzt seine Adresse die Hauptschleifenadresse im Verzweigungsbefehl, der die Schleife beendete.
  • Auf diese Weise werden die verschiedenen übersetzten Hostbefehle miteinander verkettet, so dass die Notwendigkeit, dem langen Weg durch die Übersetzerhauptschleife zu folgen, nur auftritt, wo keine Verknüpfung vorhanden ist. Letztendlich werden die Hauptschleifenbezüge in den Verzweigungsbefehlen der Hostbefehle beinahe vollständig beseitigt. Wenn dieser Zustand erreicht ist, wird die Zeit, die nötig ist, um Zielbefehle abzurufen, Zielbefehle zu decodieren, die Basisbefehle, die die Zielbefehle aufbauen, abzurufen, diese Basistätigkeiten zu optimieren, die Basistätigkeiten neuanzuordnen, und diese Basistätigkeiten neu zu planen, bevor jeglicher Hostbefehl ausgeführt wird, beseitigt. Daher wird im Gegensatz zu allen Mikroprozessoren des Stands der Technik, die jeden dieser Schritte jedes Mal vornehmen müssen, wenn jedwede Anwendungsbefehlsabfolge ausgeführt wird, die Arbeit, die benötigt wird, um jeden beliebigen Satz von Zielbefehlen unter Verwendung des verbesserten Mikroprozessors auszuführen, nachdem die erste Übersetzung stattgefunden hat, drastisch verringert. Diese Arbeit wird weiter verringert, da jeder Satz von übersetzten Hostbefehlen mit den anderen Sätzen von übersetzten Hostbefehlen verknüpft ist. Tatsächlich wird geschätzt, dass während der Ausführung einer Anwendung in weniger als einer Übersetzungsausführung von einer Million eine Übersetzung benötigt werden wird.
  • Fachleute werden erkennen, dass die Ausführung des Mikroprozessors einen großen Übersetzungspuffer benötigt, da jeder Satz von Befehlen, der übersetzt ist, gepuffert wird, damit er nicht erneut übersetzt werden muss. Übersetzer, die dazu bestimmt sind, mit Anwendungen zu funktionieren, die für andere Systeme programmiert sind, werden sich in ihrem Bedarf an einem unterstützenden Pufferspeicher unterscheiden. Doch eine Ausführungsform des Mikroprozessors, die dazu gestaltet ist, X86-Programme auszuführen, benutzt einen Übersetzungspuffer von zwei Megabyte Direktzugriffsspeicher.
  • Zwei zusätzliche Hardwareverbesserungen helfen, die Geschwindigkeit, mit der Anwendungen durch den Mikroprozessor, der die vorliegende Erfindung beinhaltet, verarbeitet werden können, zu erhöhen. Die erste davon ist ein Abnormal/Normal(A/N)-Schutzbit, das mit jeder Adressenübersetzung in einem Lookaside-Übersetzungspuffer (Translation Lookaside Buffer, TLB) (siehe 3) gespeichert wird, in dem das Nachschlagen der physikalischen Adresse von Zielbefehlen zuerst bewerkstelligt wird. Zielspeichertätigkeiten in Übersetzungen können von zwei Arten sein, jenen, die am Speicher tätig sind (normal), oder jenen, die an einer speicherabgebildeten E/A-Vorrichtung tätig sind (abnormal).
  • Ein normaler Zugriff, der den Speicher betrifft, wird normal abgeschlossen. Wenn Befehle am Speicher tätig sind, ist die Optimierung und Neuanordnung dieser Befehle passend und hilft sehr bei der Beschleunigung der Tätigkeit jedes beliebigen Systems, das den Mikroprozessor, der die vorliegende Erfindung beinhaltet, verwendet. Andererseits müssen die Tätigkeiten eines abnormalen Zugriffs, der eine E/A- Vorrichtung betrifft, häufig ohne die Beseitigung jeglicher Schritte in der genauen Reihenfolge ausgeführt werden, in der diese Tätigkeiten programmiert sind, da sie ansonsten irgendeinen nachteiligen Einfluss auf die E/A-Vorrichtung aufweisen können. Zum Beispiel kann eine bestimmte E/A-Tätigkeit die Auswirkung aufweisen, dass ein E/A-Register gelöscht wird; wenn die Basistätigkeiten nicht der Reihe nach stattfinden, kann das Ergebnis der Tätigkeiten anders als die durch den Zielbefehl befohlene Tätigkeit sein. Ohne ein Mittel, um den Speicher von einer speicherabgebildeten E/A zu unterscheiden, ist es nötig, den gesamten Speicher mit den konservativen Annahmen zu behandeln, die verwendet werden, um Befehle zu übersetzen, welche eine speicherabgebildete E/A betreffen. Dies beschränkt die Natur der Optimierungen, die erzielbar sind, stark. Da Emulatoren des Stands der Technik sowohl Mittel, um einen Fehler der Spekulation über die Natur des angesprochenen Speichers festzustellen, als auch Mittel, um sich von derartigen Fehlern zu erholen, fehlten, war ihre Leistung beschränkt.
  • In einer Ausführungsform des Mikroprozessors, die in 11 veranschaulicht ist, ist das A/N-Bit ein Bit, das im Lookaside-Übersetzungspuffer gesetzt werden kann, um entweder eine Speicherseite oder eine speicherabgebildete E/A anzugeben. Der Lookaside-Übersetzungspuffer speichert Seitentabelleneinträge für Speicherzugriffe. Jeder derartige Eintrag beinhaltet eine virtuelle Adresse, auf die zugegriffen wird, und die physikalische Adresse, an der auf die gesuchten Daten zugegriffen werden kann, wie auch andere Informationen hinsichtlich des Eintrags. In der vorliegenden Erfindung ist das A/N-Bit ein Teil jener anderen Informationen und gibt es an, ob die physikalische Adresse eine Speicheradresse oder eine speicherabgebildete E/A-Adresse ist. Eine derartige Übersetzung einer Tätigkeit, die den Speicher betrifft, als ob sie eine Speichertätigkeit wäre, ist tatsächlich eine Spekulation, dass die Tätigkeit eine solche ist, die den Speicher betrifft. In einer Ausführungsform wird dann, wenn die Codeformungssoftware zuerst versucht, eine Übersetzung auszuführen, die einen Zugriff entweder auf den Speicher oder auf eine speicherabgebildete E/A-Vorrichtung erfordert, tatsächlich angenommen, dass der Zugriff ein Speicherzugriff ist. In einer anderen Ausführungsform könnte die Software annehmen, dass der Zielbefehl einen E/A-Zugriff benötigt. Sofern ein Zugriff auf diese Adresse nicht früher bewerkstelligt wurde, wird im Lookaside-Übersetzungspuffer kein Eintrag vorhanden sein; und der Zugriff wird im Lookaside-Übersetzungspuffer fehlschlagen. Dieser Fehlschlag verursacht, dass die Software ein Seitentabellennachschlagen vornimmt und eine Speicherstelle des Lookaside-Übersetzungspuffers mit dem Seitentabelleneintrag füllt, um die richtige physikalische Adressenübersetzung für die virtuelle Adresse bereitzustellen. Während sie dies bewerkstelligt, verursacht die Software, dass das A/N-Bit für die physikalische Adresse in den Lookaside-Übersetzungspuffer eingegeben wird. Dann findet ein anderer Versuch statt, den Zugriff auszuführen, bei dem nochmals angenommen wird, dass der Zugriff auf eine Speicheradresse erfolgt. Während der Zugriff versucht wird, wird der Zielspeicherbezug geprüft, indem die angenommene Zugriffsart (normal oder abnormal) mit dem A/N-Schutzbit, das sich nun im TLB-Seitentabelleneintrag befindet, verglichen wird. Wenn die Zugriffsart nicht mit dem A/N-Schutz übereinstimmt, tritt eine Ausnahme auf. Wenn die Tätigkeit tatsächlich den Speicher betrifft, wurden die oben beschriebenen Optimierungs-, Neuanordnungs- und Neuplanungstechniken während der Übersetzung richtig angewendet. Wenn der Vergleich mit dem A/N-Bit im TLB zeigt, dass die Tätigkeit jedoch eine E/A-Vorrichtung betrifft, verursacht die Ausführung, dass eine Ausnahme vorgenommen wird; und erzeugt der Übersetzer einen Zielbefehl nach dem anderen eine neue Übersetzung ohne jegliches Optimieren, Neuanordnen, oder Neuplanen. In der gleichen Weise verursacht die Ausführung, dass eine Ausnahme vorgenommen wird, wenn eine Übersetzung für eine Tätigkeit, die tatsächlich den Speicher betrifft, unrichtig eine E/A-Tätigkeit annimmt, und werden die Zielbefehle unter Verwendung der Optimierungs-, Neuanordnungs-, und Neuplanungstechniken neuübersetzt. Auf diese Weise kann der Prozessor das Leistungsvermögen über das, was herkömmlich möglich war, hinaus verbessern.
  • Fachleute werden erkennen, dass die Technik, die das A/N-Bit verwendet, um zu bestimmen, ob hinsichtlich dessen, ob ein Zugriff auf einen Speicher oder eine speicherabgebildete E/A-Vorrichtung erfolgt, ein Fehler der Spekulation aufgetreten ist, auch für Spekulationen hinsichtlich anderer Eigenschaften von speicherabgebildeten Adressen verwendet werden kann. Zum Beispiel könnten unter Verwendung eines derartigen Normal/Abnormal-Bits unterschiedliche Arten von Speicher unterschieden werden. Durch Fachleute werden andere ähnliche Verwendungen bei der Unterscheidung von Speichereigenschaften gefunden werden.
  • Eine der häufigsten Spekulationen, die durch den verbesserten Mikroprozessor ausgeführt wird, ist, dass in einer Übersetzung keine Zielausnahmen auftreten werden. Dies gestattet eine bedeutende Optimierung gegenüber dem Stand der Technik. Erstens muss der Zielzustand nicht an jeder Zielbefehlsgrenze aktualisiert werden, sondern nur an Zielbefehlsgrenzen, die an Übersetzungsgrenzen auftreten. Dies beseitigt Befehle, die nötig sind, um den Zielzustand an jeder Zielbefehlsgrenze zu speichern. Optimierungen, die beim Planen und Entfernen redundanter Tätigkeiten früher unmöglich gewesen wären, werden ebenfalls möglich gemacht.
  • Der verbesserte Mikroprozessor ist bewundernswert geeignet, den passenden Übersetzungsprozess zu wählen. Nach dem oben beschriebenen Übersetzungsverfahren kann ein Satz von Befehlen zuerst so übersetzt werden, als ob er den Speicher betreffen würde. Wenn dann die optimierten, neuangeordneten, und neugeplanten Hostbefehle ausgeführt werden, kann durch den Zustand des A/N-Bits, das im Lookaside-Übersetzungspuffer bereitgestellt ist, herausgefunden werden, dass sich die Adresse auf eine E/A-Vorrichtung bezieht. Der Vergleich des A/N-Bits und der übersetzten Befehlsadresse, die zeigt, dass eine Tätigkeit eine E/A-Tätigkeit ist, erzeugt eine Fehlerausnahme, die verursacht, dass ein softwareeingeleiteter Rückführungsvorgang stattfindet, was verursacht, dass jegliche nichtübergebenen Speicherspeicherungen verworfen werden und die Werte in den Zielregistern in die Arbeitsregister zurückgestellt werden. Dann beginnt die Übersetzung noch einmal einen Zielbefehl nach dem anderen ohne Optimierung, Neuanordnung, oder Neuplanung. Diese Neuübersetzung ist die passende Hostübersetzung für eine E/A-Vorrichtung.
  • Auf eine ähnliche Weise ist es möglich, dass eine Speichertätigkeit unrichtig als eine E/A-Tätigkeit übersetzt wird. Der erzeugte Fehler kann verwendet werden, um ihre richtige Neuübersetzung zu verursachen, bei der sie optimiert, neuangeordnet, und neugeplant werden kann, um eine schnellere Tätigkeit bereitzustellen.
  • Emulatoren des Stands der Technik haben auch mit dem gekämpft, was allgemein als selbstmodifizierender Code bezeichnet wird. Sollte ein Zielprogramm in den Speicher schreiben, der Zielbefehle enthält, wird dies verursachen, dass Übersetzungen, die für diese Zielbefehle bestehen, „alt" und nicht länger gültig werden. Es ist nötig, diese Speicherungen festzustellen, da sie dynamisch auftreten. Beim Stand der Technik wurde diese Feststellung mit Sonderbefehlen für jede Speicherung bewerkstelligt. Dieses Problem weist einen größeren Umfang auf, als Programme, die sich selbst modifizieren. Jeder beliebige Mittler, der in den Speicher schreiben kann, wie etwa ein zweiter Prozessor oder eine DMA-Vorrichtung, kann dieses Problem ebenfalls verursachen.
  • Die vorliegende Erfindung behandelt dieses Problem durch eine andere Verbesserung am Formungshost. Ein Übersetzungsbit (T-Bit), das ebenfalls im Lookaside-Übersetzungspuffer gespeichert werden kann, wird verwendet, um Zielspeicherseiten anzugeben, für die Übersetzungen vorhanden sind. Das T-Bit gibt daher möglicherweise an, dass bestimmte Seiten des Zielspeichers Zielbefehle enthalten, für die Übersetzungen vorhanden sind, die alt werden würden, wenn diese Zielbefehle überschrieben werden sollten. Wenn ein Versuch unternommen wird, in diese geschützten Seiten im Speicher zu schreiben, wird das Vorhandensein des Übersetzungsbits eine Ausnahme erzeugen, die dann, wenn sie durch die Codeformungssoftware behandelt wird, verursachen kann, dass die entsprechende(n) Übersetzung(en) ungültig gemacht werden oder aus dem Übersetzungspuffer entfernt werden. Das T-Bit kann auch verwendet werden, um andere Zielseiten zu kennzeichnen, deren Übersetzung sich möglicherweise darauf verlässt, nicht geschrieben zu werden.
  • Dies kann unter Bezugnahme auf 3 verstanden werden, die die allgemeinen funktionellen Elemente des Mikroprozessors, der die Erfindung beinhaltet, in Blockdiagrammform veranschaulicht. Wenn der Formungshost ein Zielprogramm ausführt, führt er tatsächlich den Übersetzerabschnitt der Codeformungssoftware aus, der die einzigen ursprünglichen unübersetzten Hostbefehle beinhaltet, die wirksam am Formungshost laufen. Rechts in der Figur ist der Speicher veranschaulicht, der in einen Hostabschnitt, der im Wesentlichen den Übersetzer und den Übersetzungspuffer beinhaltet, und einen Zielabschnitt, der die Zielbefehle und Daten einschließlich des Zielbetriebssystems beinhaltet, geteilt ist. Die Formungshosthardware beginnt das Ausführen des Übersetzers durch Abrufen von Hostbefehlen aus dem Speicher und Stellen dieser Befehle in einen Befehlspuffer. Die Übersetzerbefehle erzeugen einen Abruf der ersten Zielbefehle, die im Zielabschnitt des Speichers gespeichert sind. Das Ausführen eines Zielabrufs verursacht, dass die Ganz zahleinheit im offiziellen Zielbefehlszeigerregister nach einer ersten Adresse eines Zielbefehls sucht. Dann wird im Lookaside-Übersetzungspuffer der Speicherverwaltungseinheit auf die erste Adresse zugegriffen. Die Speicherverwaltungseinheit beinhaltet Hardware zur Seitenauslagerung und stellt Speicherabbildungseinrichtungen für den TLB bereit. Sofern der TLB richtig abgebildet ist, so dass er Nachschlagedaten für die richtige Seite des Zielspeichers enthält, wird der Zielbefehlszeigerwert in die physikalische Adresse des Zielbefehls übersetzt. An diesem Punkt wird der Zustand des Bits (T-Bits), das angibt, ob für den Zielbefehl eine Übersetzung bewerkstelligt wurde, festgestellt; doch ist der Zugriff eine Lesetätigkeit und wird keine T-Bit-Ausnahme stattfinden. Der Zustand des A/N-Bits, das angibt, ob der Zugriff auf den Speicher oder eine speicherabgebildete E/A erfolgt, wird ebenfalls festgestellt. Sofern das letztgenannte Bit eine Speicherstelle angibt, wird im Zielspeicher auf den Zielbefehl zugegriffen, da keine Übersetzung vorhanden ist. Der Zielbefehl und die nachfolgenden Zielbefehle werden als Daten zu den Formungshostberechnungseinheiten übertragen und unter Steuerung der Übersetzerbefehle, die im Befehlspuffer gespeichert sind, übersetzt. Die Übersetzerbefehle benutzen Neuanordnungs-, Optimierungs-, und Neuplanungstechniken, als ob der Zielbefehl den Speicher betreffen würde. Die sich ergebende Übersetzung, die eine Abfolge von Hostbefehlen enthält, wird dann im Übersetzungspuffer im Hostspeicher gespeichert. Die Übersetzung wird über den torgesteuerten Speicherungspuffer direkt zum Übersetzungspuffer im Hostspeicher übertragen. Sobald die Übersetzung im Hostspeicher gespeichert wurde, verzweigt der Übersetzer zur Übersetzung, die dann ausgeführt wird. Die Ausführung (und nachfolgende Ausführungen) werden bestimmen, ob die Übersetzung hinsichtlich Ausnahmen und des Speichers richtige Annahmen getroffen hat. Vor dem Ausführen der Übersetzung wird das T-Bit für die Zielseite(n), die die Zielbefehle enthält (enthalten), die übersetzt wurden, gesetzt.
  • Diese Angabe warnt, dass der Befehl übersetzt wurde; und dass ein Versuch, wenn es zu einem Versuch, an die Zieladresse zu schreiben, kommt, eine Ausnahme erzeugt, die verursacht, dass die Übersetzung möglicherweise ungültig gemacht oder entfernt wird.
  • Wenn versucht wird, auf Zielseiten zu schreiben, die durch ein T-Bit gekennzeichnet sind, kommt es zu einer Ausnahme und wird das Schreiben abgebrochen. Dem Schreiben wird eine Fortsetzung gestattet werden, nachdem die Reaktion auf die Ausnahme sicherstellt, dass die Übersetzungen, die mit der Zielspeicheradresse, an die geschrieben werden soll, verbunden sind, entweder als ungültig gekennzeichnet sind oder auf andere Weise vor einer Verwendung geschützt sind, bis sie passend aktualisiert wurden. Einige Schreibtätigkeiten werden tatsächlich keine Handlung erfordern, da keine gültigen Übersetzungen betroffen sein werden. Andere Schreibtätigkeiten werden erfordern, dass eine oder mehrere Übersetzungen, die mit dem angesprochenen Zielspeicher verbunden sind, passend gekennzeichnet oder entfernt werden. 11 veranschaulicht eine Ausführungsform eines Lookaside-Übersetzungspuffers, der mit jedem Eintrag Speicherstellen beinhaltet, um eine T-Bit-Angabe zu halten.
  • Eine zusätzliche Hardwareverbesserung am Formungshost ist eine Schaltung, die benutzt wird, um Daten, die normalerweise im Speicher gespeichert sind, aber bei der Ausführung einer Tätigkeit sehr oft verwendet werden, zu gestatten, in einem Ausführungseinheitsregister nachgebildet (oder "repliziert") zu werden, um die Zeit, die benötigt wird, um die Daten aus dem Speicher abzurufen oder die Daten dort zu speichern, zu beseitigen. Zum Beispiel müssen die Daten, wenn Daten im Speicher während der Ausführung einer Codeabfolge häufig wiederverwendet werden, typischerweise jedes Mal, wenn die Daten verwendet werden, aus dem Speicher abgerufen und in ein Register in einer Ausführungseinheit geladen werden. Um die Zeit, die durch derartige häufige Speicherzugriffe benötigt wird, zu verringern, können die Daten nach der vorliegenden Erfindung stattdessen am Beginn der Codeabfolge ein Mal aus dem Speicher in ein Ausführungseinheitsregister geladen werden, und kann das Register dazu bestimmt werden, während des Zeitraums, für den die Codeabfolge andauert, anstelle des Speicherplatzes zu arbeiten. Sobald dies bewerkstelligt wurde, wird jede der Ladetätigkeiten, die normalerweise das Laden von der bestimmten Speicheradresse in ein Register umfassen würde, stattdessen eine einfache Kopiertätigkeit von Register zu Register, die mit einer viel schnelleren Geschwindigkeit abläuft; und können selbst diese Kopiertätigkeiten häufig durch eine weitere Optimierung beseitigt werden.
  • In der gleichen Weise erfordert die Ausführung einer Codeabfolge häufig, dass Daten während der Ausführung einer Codeabfolge häufig an eine Speicheradresse geschrieben werden. Um die Zeit, die durch derartige häufige Speicherspeicherungen an die gleiche Adresse benötigt wird, zu verringern, können die Daten nach der vorliegenden Erfindung jedes Mal, wenn sie an die Speicheradresse geschrieben werden sollen, zu einem Ausführungseinheitsregister übertragen werden, das dazu bestimmt ist, während des Zeitraums, für den die Codeabfolge andauert, anstelle des Speicherplatzes zu arbeiten. Sobald ein Ausführungseinheitsregister bestimmt wurde, erfordert jede Veränderung an den Daten nur eine einfache Übertragungstätigkeit von Register zu Register, die viel schneller als das Speichern an einer Speicheradresse abläuft.
  • Die vorliegende Erfindung stellt eine einzigartige Anordnung bereit, um diese Replizierungstätigkeiten zu bewerkstelligen. In einer Ausführungsform, die in 10 veranschaulicht ist, ist der Formungshost dazu gestaltet, auf einen Befehl „Halten und Schützen" in Bezug auf eine bestimmte Speicheradresse, die in einer Codeabfolge häufig verwendet werden soll, zu reagieren. Der Formungshost teilt ein Arbeitsregister 111 in einer Ausführungseinheit 110 zu, um die Speicherdaten zu halten, und speichert die Speicheradresse in einem besonderen Register 112 der Speichersteuerungseinheit. Das Arbeitsregister 111 kann eines aus einer Anzahl von Registern (z.B. acht der Arbeitsregister, die in 4 veranschaulicht sind) in einer Ausführungseinheit sein, die für einen derartigen Zweck zugeteilt werden können.
  • Wenn die Erfindung verwendet wird, um Ladungen von einer Speicheradresse zur Ausführungseinheit zu beseitigen, werden die Daten an der Speicheradresse zuerst in das Register 111 geladen und wird die Speicheradresse in das Register 112 gestellt. Danach wird die Codeabfolge unter Verwendung der Daten im Register 111 mit einer beschleunigten Geschwindigkeit ausgeführt. Während dieses Zeitraums wird jede Tätigkeit, die normalerweise eine Ladung von der Speicheradresse, die im Register 112 gehalten wird, erfordern würde, stattdessen durch Kopieren der Daten vom Register 111 bewerkstelligt. Dies dauert an, bis die Codeabfolge abgeschlossen ist (oder auf irgendeine andere Weise endet), und der Schutz des Speicherplatzes entfernt wird.
  • In der gleichen Weise kann ein ähnlicher Replizierungsprozess ausgeführt werden, um eine Codeabfolge, die ständig Daten von einer Ausführungseinheit 110 an der gleichen Speicheradresse speichert, zu beschleunigen. Ein Befehl „Laden und Schützen" verursacht, dass die Speicheradresse in das Register 112 gestellt wird und die Daten, die normalerweise an dieser Speicheradresse gespeichert würden, stattdessen zum Arbeitsregister 111 übertragen werden. Zum Beispiel wird der Prozess des Speicherns in einer Berechnung, in der eine Schleifenausführung normalerweise eine Reihe von Daten an der gleichen Speicheradresse speichern würde, durch Zuteilen eines Registers 111, um die Daten zu halten, und Halten der Speicheradresse in einem Register 112 zu einer Übertragung von Register zu Register in der Ausführungseinheit. Diese Tätigkeit dauert ebenfalls an, bis die Codeabfolge abgeschlossen ist (oder auf irgendeine andere Weise endet), der Speicher aktualisiert wird, und der Schutz des Speicherplatzes entfernt wird.
  • Obwohl jede dieser Replizierungstechniken die Geschwindigkeit der Ausführung einiger Codeabfolgen stark steigert, verursachen diese Tätigkeiten, durch die Speicherzugriffe beseitigt werden, eine bedeutende Anzahl von Problemen. Dies trifft besonders zu, wo ein wesentlicher Abschnitt der Hostprozessortätigkeiten die Übersetzung von Befehlen zwischen einem Zielbefehlssatz und dem Hostbefehlssatz betrifft. Alle diese Probleme stehen mit der Notwendigkeit in Zusammenhang, sicherzustellen, dass Daten, die bei der Ausführung eines Befehls verwendet werden sollen, zu der Zeit, zu der sie verwendet werden sollen, gültig sind.
  • Es gibt eine Anzahl von Fällen, in denen sich Daten, die an einer Speicheradresse gespeichert sind, und Daten, die in einem Ausführungseinheitsregister gespeichert sind, unterscheiden, so dass in jedem bestimmten Augenblick die einen oder die anderen ungültig sind. Wenn zum Beispiel ein Arbeitsregister 111 verwendet wird, um Daten zu halten, die während einer Codeabfolge normalerweise häufig vom Speicherplatz zu Registern geladen würden, kann ein Befehl an die Speicheradresse schreiben, bevor die Codeabfolge, die die Daten im Ausführungseinheitsregister verwendet, abgeschlossen ist. In einem solchen Fall werden die Daten im Ausführungseinheitsregister, die durch die Codeabfolge benutzt werden, alt sein und müssen sie aktualisiert werden.
  • Als anderes Beispiel kann, wenn ein Arbeitsregister verwendet wird, um Daten zu halten, die während einer Codeabfolge normalerweise häufig an einer Speicheradresse gespeichert würden, ein Befehl versuchen, an die Speicheradresse zu schreiben, bevor die Codeabfolge, die das Ausführungsein heitsregister anstatt des Speichers verwendet, abgeschlossen ist. Wenn der Hostprozessor in einer Betriebsart arbeitet, in der Daten an der Speicheradresse normalerweise nur am Ende der Codeabfolge aktualisiert werden (einer Rückschreibe-Betriebsart), werden die Daten im Ausführungseinheitsregister alt sein und müssen sie durch Daten, die an die Speicheradresse geschrieben wurden, aktualisiert werden. Natürlich werden das Register und der Speicher übereinstimmen, wenn der Hostprozessor in einer Betriebsart arbeitet, in der Daten an der Speicheradresse normalerweise jedes Mal aktualisiert werden, wenn sie in das Ausführungseinheitsregister geschrieben werden (einer DurchschreibeBetriebsart).
  • Als noch ein anderes Beispiel kann, wenn ein Arbeitsregister verwendet wird, um Daten zu halten, die während einer Codeabfolge normalerweise häufig an einer Speicheradresse gespeichert würden, ein Befehl versuchen, Daten von der Speicheradresse zu lesen, bevor die Codeabfolge, die Daten zum Register 111 überträgt, abgeschlossen ist. Wenn der Hostprozessor in einer Betriebsart arbeitet, in der Daten an der Speicheradresse normalerweise nur am Ende der Codeabfolge aktualisiert werden (einer Rückschreibe-Betriebsart), werden die Daten im Speicher alt sein und müssen sie durch Daten vom Ausführungseinheitsregister aktualisiert werden, bevor die Lesetätigkeit gestattet wird. Wie beim obigen Beispiel werden das Register und der Speicher übereinstimmen, wenn der Hostprozessor in einer Betriebsart arbeitet, in der Daten an der Speicheradresse normalerweise jedes Mal aktualisiert werden, wenn sie in das Ausführungseinheitsregister geschrieben werden (einer Durchschreibe-Betriebsart).
  • Eine andere Möglichkeit, durch die Daten, die im Speicher und in Replizierungsregistern gehalten werden, nicht übereinstimmend werden können, besteht, da der Mikroprozessor, der durch die Kombination aus dem Formungshost und der Codeformungssoftware gebildet ist, dazu geeignet ist, Hostbefehle neuanzuordnen und neu zu planen, um die Ausführung zu beschleunigen. Wie in den verschiedenen Beispielen von Codeabfolgen, die nachstehend bereitgestellt sind, ersichtlich sein wird, können die Daten im Ausführungseinheitsregister zu anderen Registern kopiert werden und kann ein Prozess des Neuanordnens und Neuplanens von Befehlen stattfinden, sobald Speicherdaten in einem Ausführungseinheitsregister repliziert wurden, um bei der Ausführung einer Codeabfolge verwendet zu werden. Wenn das Neuanordnen und Neuplanen stattgefunden hat, ist es für einen Befehl in der Codeabfolge möglich, an die Speicheradresse, die repliziert wird, zu schreiben, so dass die Daten im Ausführungseinheitsregister vor der weiteren Verwendung aktualisiert werden müssen. Doch wenn die nun alten Daten im Ausführungseinheitsregister 111 bereits zu zusätzlichen Registern kopiert wurden und die Codeabfolge der Befehle, die diese Register verwendet, geändert wurde, können bei der Ausführung der Codeabfolge alte Daten in Registern, zu denen diese Daten kopiert wurden, benutzt werden. Daher kann eine Nichtübereinstimmung zweiter Ordnung auftreten.
  • Um sicherzugehen, dass Ladungen von der und Speicherungen an die Speicheradresse, die geschützt wird, nicht stattfinden, ohne zu verifizieren, dass die Daten an der Speicheradresse und im Register 111 nach der Lade- oder Speichertätigkeit übereinstimmen, ist ein Vergleicher 113 in der Speichersteuerungseinheit mit dem Adressenregister 112 verbunden. Der Vergleicher 113 erhält die Adressen von Ladungen vom Speicher und Speicherungen an den torgesteuerten Speicherungspuffer, die während Übersetzungen zum Speicher gerichtet sind. Wenn sich eine Speicheradresse entweder für eine Ladung oder eine Speicherung mit einer Adresse im Register 112 (oder, abhängig von der Ausführung, zusätzlichen Registern) vergleichen lässt, kann abhängig von der Betriebsart eine Ausnahme erzeugt werden. Die Codeformungssoftware reagiert durch Sicherstellen, dass die Speicheradresse und das Ausführungseinheitsregister 111 die gleichen richtigen Daten halten, auf die Ausnahme. Dies gestattet, dass die oben beschriebenen Nichtübereinstimmungen korrigiert werden.
  • Die Weise, auf die die Codeformungssoftware reagiert, hängt von der bestimmten Ausnahme ab. Wenn die Daten nicht die gleichen sind, wird die Übersetzung in einer Ausführungsform zurückgeführt und ohne jegliche „replizierten" Daten in einem Ausführungseinheitsregister neu ausgeführt. Eine derartige Lösung gestattet die Korrektur von Nichtübereinstimmungen, die sowohl zwischen dem Speicher und dem Ausführungseinheitsregister als auch zwischen dem Speicher und anderen Registern, die die Daten vom Ausführungseinheitsregister 111 kopiert haben, bevor die Codeabfolge neuangeordnet oder neugeplant wurde, auftreten. Andere mögliche Verfahren zur Korrektur des Problems sind das Aktualisieren des Ausführungseinheitsregisters mit den neuesten Speicherdaten oder des Speichers mit den neuesten Ladedaten.
  • Während des Zeitraums, in dem eine Speicheradresse repliziert ist, um Ladungen von dieser Speicheradresse zu beseitigen, sucht der Vergleicher nach Versuchen, an die Speicheradresse zu schreiben, da die Daten im Ausführungseinheitsregister 111 alt werden können, wenn die neuen Daten an die Speicheradresse geschrieben werden. In einem solchen Fall stellt der Vergleicher 113 den Versuch, an die geschützte Speicheradresse zu schreiben, fest, und erzeugt er eine Ausnahme wenn ein derartiger Versuch stattfindet. Die Ausnahme verursacht entweder, dass die Daten im Speicher zum Register 111 geschrieben werden, um das Register zu aktualisieren, bevor die Registerdaten weiter verwendet werden können, oder verursacht eine Rückführung und eine Ausführung von Code, der kein Ausführungseinheitsregister verwendet, um eine Replizierungsoptimierung zu bewerkstelligen. Dies kann eine Neuübersetzung des Zielcodes umfassen.
  • Während des Zeitraums, in dem eine Speicheradresse repliziert ist, um aufeinanderfolgende Speicherungstätigkeiten unter Verwendung eines Registers 111 zur Vertretung der Speicheradresse zu gestatten, kann die Erzeugung einer Ausnahme für eine Speicherung an der Speicheradresse durch einen Befehl, der das Schaltsystem in eine Betriebsart (Durchschreibe-Betriebsart) stellt, in der Speicherungen vom Register 111 an der Speicheradresse ohne Replizierungsprüfung stattfinden können, außer Kraft gesetzt werden, wodurch die wiederholte Speicherung vom Register im Speicher an der geschützten Adresse gestattet wird.
  • Alternativ kann das Schaltsystem während eines Zeitraums, in dem eine Speicheradresse repliziert ist, um Speicherungstätigkeiten unter Verwendung eines Registers 111 zur Vertretung der Speicheradresse zu gestatten, in eine Betriebsart (Rückschreibe-Betriebsart) gestellt werden, in der die Daten an der Speicherstelle nicht aktualisiert werden, bis die Codeabfolge abgeschlossen oder auf eine andere Weise beendet wurde. In einer derartigen Betriebsart kann eine Schreibtätigkeit durch einen Befehl an die Speicheradresse erfordern, dass die Daten, die im Ausführungseinheitsregister gehalten werden, aktualisiert werden, um mit den neuen Daten übereinzustimmen. Andererseits wird in einer derartigen Betriebsart ein Versuch, die Speicheradresse zu lesen, erfordern, dass eine Ausnahme erzeugt wird, so dass die Daten, die im Speicherplatz gehalten werden, aktualisiert werden können, um mit den neuen Daten im Ausführungseinheitsregister übereinzustimmen, bevor sie gelesen werden.
  • 12 veranschaulicht ein Replizierungsschaltsystem, das eine Ausführungsform eines Vergleichers 120 zum Feststellen und Steuern von Lade- und Speicherungstätigkeiten an einem geschützten Speicherplatz nach der vorliegenden Erfindung beinhaltet. Der Vergleicher 120 beinhaltet mehrere Spei cherstellen 122 (wovon nur eine veranschaulicht ist) wie etwa einen inhaltsadressierbaren Speicher für Einträge von Speicheradressen, die geschützt werden sollen. Zum Beispiel kann es acht Stellen für Einträge geben. Jeder Eintrag beinhaltet eine ausreichende Anzahl von Bitpositionen (z.B. 32), um eine physikalische Adresse für die Speicherstelle zu speichern, eine Bytemaske, und verschiedene Attributbits. Unter den Attributbits sind jene, die die Größe des geschützten Speichers angeben, und angeben, ob die Speicheradresse normal oder abnormal ist. Es sollte bemerkt werden, dass die Stellen für Einträge im Vergleicher 120 einem in 10 gezeigten Register 112 gleichwertig sind, so dass der Vergleicher 120 den Zweck sowohl des Registers 112 als auch des Vergleichers 113 von 10 erfüllt.
  • Das Replizierungsschaltsystem beinhaltet auch ein Replizierungsaktivierungsregister 124, ein Register 125, um das Replizierungsfreigaberegister zu beschatten, ein Replizierungsfehlerregister 126, ein Register 127, das eine Angabe (z.B. ein einzelnes Bit) speichert, dass das Replizierungsschaltsystem aktiviert ist, und ein Register 128, das ein Betriebsartbit speichert.
  • Im Betrieb wird eine physikalische Adresse, die geschützt werden soll, zusammen mit einer Bytemaske, deren Bits angeben, welche Bytes der Stelle geschützt sind, an einer der Speicherstellen für Einträge gespeichert. Eine derartige physikalische Adresse kann 64 Bits von Daten ansprechen, so dass jedes Bit der Bytemaske ein Byte der Daten an der Adresse angibt. Der bestimmte Eintrag, der geschützt ist, wird durch Stellen eines bestimmten Bits des Hardwareaktivierungsregisters 124 angegeben. Das Register 125 beschattet die Werte im Register 124 an Übergabepunkten während der Übersetzung, um zu gestatten, dass während der Übersetzung Rückführungen stattfinden. In der gezeigten Ausführungsform sind das Aktivierungsregister 24 und das Beschattungsaktivierungsregister physikalisch als Attributbits der Speicherstellen 122 verteilt.
  • Wenn das Replizieren wie durch das Register 127 angegeben aktiviert ist, hält der Vergleicher abhängig vom Zustand, in den die Betriebsart wie durch das Register 128 angegeben gestellt ist, eine physikalische Speicheradresse und eine Bytemaske und verwendet er diese, um Adressen von Speicherungen zum Speicher oder sowohl Ladungen als auch Speicherungen zu prüfen. Wenn die Betriebsart auf einen Durchschreibezustand gestellt ist, wird der Speicher fortlaufend vom Ausführungsregister, das Daten für die geschützte Speicheradresse hält, aktualisiert, so dass Ladungen von dieser Speicheradresse zu anderen Adressen stets aktuell sind und nicht geprüft werden müssen. Doch Speicherungen an der Speicheradresse können die Daten im Ausführungseinheitsregister 112 ungültig machen, weshalb diese Speicherungen geprüft werden müssen. Wenn eine Speicherung an eine geschützte Adresse erfolgt und deren Bytemaske zeigt, dass Daten an einem geschützten Byte an der Speicheradresse, die im Vergleicher 120 gehalten wird, gespeichert werden, erzeugt der Vergleicher in der Durchschreibe-Betriebsart eine Replizierungsausnahme, um Speicherungen zu prüfen.
  • Wenn die Betriebsart andererseits auf einen Zurückschreibezustand gestellt ist, wird die Speicheradresse nur aktualisiert, wenn die Replizierungshardware freigegeben wird, oder wenn Ausnahmen auftreten. Folglich können die Daten an der Speicheradresse alt sein, weshalb sowohl Ladungen als auch Speicherungen geprüft werden müssen, wenn die Replizierungshardware aktiviert wird. Um dies zu bewerkstelligen, erzeugt der Vergleicher eine Ausnahme, wenn entweder eine Ladung oder eine Speicherung an eine geschützte Adresse erfolgt und ihre Bytemaske zeigt, dass an einem geschützten Byte an der Speicheradresse, die im Vergleicher 120 gehalten wird, ein Zugriff auf Daten erfolgt.
  • Eine Ausnahme, die in einer der Betriebsarten erzeugt wurde, stellt ein entsprechendes Bit im Replizierungsfehlerregister 126, um die Adresse, die die Ausnahme verursacht, zu bezeichnen. Abhängig vom bestimmten Ausnahmebehandlungsprogramm der Codeformungssoftware kann die bestimmte Ausnahme, die erzeugt wurde, eine Reparatur oder eine Rückführung vornehmen, um das Problem zu korrigieren. Eine Reparatur des Problems verursacht, dass die aktuellsten Daten in die bestimmten betroffenen Bytes des Ausführungseinheitsdatenregisters und der Speicheradresse gestellt werden. Eine Rückführung verursacht, dass der Zustand der Register durch den Zustand, der in den Zielregistern gehalten wird, ersetzt wird; dies beinhaltet den Zustand des Aktivierungsregisters 124, der zum Zustand, der im Register 125 gehalten wird, zurückgeführt wird.
  • Die Verwendung von Replizierungsfeststellungshardware, um Optimierungen zu gestatten, die Ladungen und Speicherungen beseitigen, und um abhängig von den beseitigten Ladungen und Speicherungen auch die Neuanordnung oder Neuplanung von Tätigkeiten zu gestatten, wurde beschrieben. Die Neuanordnung ermöglicht eine bessere Planung von Tätigkeiten in einer Maschine mit parallelen Ausführungsbetriebsmitteln, wie etwa einer superskalaren oder einer VLIW-Maschine.
  • Das Verfahren kann auch verwendet werden, um die sichere Neuanordnung von Tätigkeiten abhängig von Ladungen oder Speicherungen zu gestatten, ohne die Lade- oder Speicherungstätigkeiten zu beseitigen. Dies verbessert das Planungsleistungsverhalten und ist für einen Code nützlich, bei dem es keine Wiederholung von Lade- oder Speicherungstätigkeiten gibt.
  • Fachleute werden erkennen, dass der Mikroprozessor in einer Schaltung mit typischen Computerelementen verbunden sein kann, um einen Computer wie den in 9 veranschaulichten zu bilden. Wie ersichtlich ist, wird der Mikroprozessor bei einer Verwendung in einem modernen X86-Computer von einem Prozessorbus zum Speicher und zum Bussteuerungsschaltsystem begleitet. Der Speicher und das Bussteuerungsschaltsystem sind dazu eingerichtet, einen Zugriff auf den Hauptspeicher wie auch auf den Pufferspeicher, der mit dem Mikroprozessor benutzt werden kann, bereitzustellen. Der Speicher und das Bussteuerungsschaltsystem stellen auch einen Zugriff auf einen Bus wie eine PCI oder einen anderen lokalen Bus bereit, durch den auf E/A-Vorrichtungen zugegriffen werden kann. Das spezifische Computersystem wird vom Schaltsystem abhängen, das mit einem typischen Mikroprozessor, den der vorliegende Mikroprozessor ersetzt, benutzt wird.
  • Um den Betrieb des Prozessors und die Weise, auf die die Beschleunigung der Ausführung auftritt, zu veranschaulichen, wird an diesem Punkt die Übersetzung eines kleinen Beispiels eines X86-Zielcodes in Hostbasisbefehle geboten. Das Beispiel veranschaulicht die Übersetzung von X86-Zielbefehlen in Formungshostbefehle einschließlich verschiedener beispielhafter Schritte des Optimierens, Neuanordnens, und Neuplanens durch den Mikroprozessor, der die Erfindung beinhaltet. Durch Verfolgen des veranschaulichten Prozesses werden Fachleuten die wesentlichen Unterschiede zwischen den Tätigkeiten, die erforderlich sind, um die ursprünglichen Befehle unter Verwendung des Zielprozessors auszuführen, und den Tätigkeiten, die erforderlich sind, um die Übersetzung am Hostprozessor auszuführen, offensichtlich werden.
  • Der ursprüngliche Befehl, der im Sprachenquellcode C veranschaulicht ist, beschreibt eine sehr kurze Schleifentätigkeit. Im Wesentlichen wird, während einige Variablen „n", die nach jeder Schleife verringert werden, größer als „0" bleiben, ein Wert „c" an einer Adresse gespeichert, die durch einen Zeiger „*s" angegeben ist, der nach jeder Schleife erhöht wird.
  • Ursprünglicher C-Code
    Figure 00620001
  • Anmerkung: [...] gibt einen Adressenausdruck für einen Operand an. Im obigen Beispiel wird die Adresse für einen Speicheroperand aus den Inhalten eines Registers, die zu einer durch das Ox-Präfix angegebenen hexadezimalen Konstanten hinzugefügt werden, gebildet. Zielregister sind mit dem Präfix angegeben, z.B. ist %ecx das Register ecx. Das Ziel einer Tätigkeit befindet sich links.
  • Figure 00620002
  • In diesem ersten Abschnitt des Beispiels wird jeder der einzelnen X86-Assembliersprachenbefehle zum Ausführen der Ausführung der Tätigkeit, die durch die C-Sprachen-Angabe definiert ist, durch die Assembliersprache mnemonisch für die Tätigkeit aufgelistet, worauf die Parameter, die an der bestimmten Basistätigkeit beteiligt sind, folgen. Für jeden Befehl wird in einem Kommentar auch eine Erklärung der Tätigkeit bereitgestellt. Auch wenn die Reihenfolge der Ausführung durch den Zielprozessor von der gezeigten abgeändert werden kann, muss jeder dieser Assembliersprachenbefehle jedes Mal ausgeführt werden, wenn die Schleife bei der Ausführung der Ziel-C-Sprachen-Befehle ausgeführt wird. Wenn die Schleife einhundert Mal ausgeführt wird, muss daher jeder oben gezeigte Befehl einhundert Mal ausgeführt werden.
  • Zeigt jeden oben gezeigten X86-Befehl gefolgt von den Hostbefehlen, die nötig sind, um den X86-Befehl auszuführen.
  • Figure 00630001
  • Figure 00640001
  • Das nächste Beispiel veranschaulicht die gleichen Zielbasisbefehle, die die C-Sprachen-Befehle ausführen. Im Anschluss an jeden Basiszielbefehl sind jedoch Basishostbefehle aufgelistet, die benötigt werden, um die gleiche Tätigkeit in einer bestimmten Ausführungsform des Mikroprozessors zu bewerkstelligen, in der der Formungshost ein VLIW-Prozessor ist, der auf die hierin beschriebene Weise gestaltet ist. Es sollte bemerkt werden, dass die Hostregister, die durch offizielle Zielregister beschattet werden, durch ein „R" gefolgt von der Bezeichnung des X86-Registers bezeichnet werden, so dass, zum Beispiel, Reax das Arbeitsregister ist, das mit dem offiziellen Zielregister EAX verbunden ist.
  • Fügt Hostbefehle hinzu, die nötig sind, um X86-Adressberechnungen und obere und untere Segmentgrenzenprüfungen durchzuführen.
  • Figure 00640002
  • Figure 00650001
  • Figure 00660001
  • Das nächste Beispiel veranschaulicht für jeden der Basiszielbefehle die Hinzufügung von Hostbasisbefehlen, durch die Adressen, die für die Zieltätigkeit benötigt werden, durch die Codeformungssoftware erzeugt werden können. Es sollte bemerkt werden, dass Hostadressenerzeugungsbefehle nur in einer Ausführungsform eines Mikroprozessors benötigt werden, in der eine Codeformungssoftware anstelle von Adressenerzeugungshardware zur Adressenerzeugung verwendet wird. In einem Zielprozessor wie etwa einem X86-Prozessor werden diese Adressen unter Verwendung von Adressenerzeugungshardware erzeugt. Wann immer in einer derartigen Ausführungsform eine Adressenerzeugung stattfindet, wird die Berechnung bewerkstelligt; und es werden auch Hostbasisbefehle hinzugefügt, um die Adressenwerte zu prüfen, um zu bestimmen, dass die berechneten Adressen innerhalb der passenden X86-Segmentgrenzen liegen.
  • Fügt Befehle hinzu, um den Ziel-X86-Befehlszeiger „eip" und die Übergabebefehle, die die besondere Formungshosthardware verwenden, um den X86-Zustand zu aktualisieren, zu behalten.
  • Figure 00660002
  • Figure 00670001
  • Figure 00680001
  • Dieses Beispiel veranschaulicht die Hinzufügung von zwei Schritten zu jedem Satz von Basishostbefehlen, um die offiziellen Zielregister nach der Ausführung der Hostbefehle, welche nötig sind, um jeden Basiszielbefehl auszuführen, zu aktualisieren, und um die nichtübergebenen Werte im torgesteuerten Speicherungspuffer zum Speicher zu übergeben. Wie ersichtlich ist, wird in jedem Fall die Länge des Zielbefehls zum Wert im Arbeitsbefehlszeigerregister (Reip) hinzugefügt. Dann wird ein Übergabebefehl ausgeführt. In einer Ausführungsform kopiert der Übergabebefehl den gegenwärtigen Wert jedes Arbeitsregisters, das beschattet wird, in sein zugehöriges offizielles Zielregister, und verschiebt er einen Zeigerwert, der die Position des Tors des torgesteuerten Speicherungspuffers bezeichnet, von unmittelbar vor den nichtübergebenen Speicherungen zu unmittelbar hinter diesen Speicherungen, so dass diese in den Speicher gestellt werden.
  • Man wird verstehen, dass die Liste der Befehle, die oben als letztes veranschaulicht ist, alle Befehle sind, die nötig sind, um eine Hostübersetzung der ursprünglichen Zielassembliersprachenbefehle zu bilden. Wenn die Übersetzung an diesem Punkt anhalten sollte, wäre die Anzahl der Basishostbefehle viel größer als die Anzahl der Zielbefehle (wahrscheinlich sechs Mal so viele Befehle), und könnte die Ausführung länger als die Ausführung an einem Zielprozessor dauern. Doch an diesem Punkt hat noch keine Neuanordnung, Optimierung, oder Neuplanung stattgefunden.
  • Wenn ein Befehl nur einmal ausgeführt werden soll, kann es sein, dass die Zeit, die benötigt wird, um eine weitere Neuanordnung oder eine andere Optimierung zu bewerkstelligen, größer als die Zeit zur Ausführung der Übersetzung, wie sie an diesem Punkt besteht, ist. Falls dies der Fall ist, beendet eine Ausführungsform des Mikroprozessors die Übersetzung an diesem Punkt, speichert sie die Übersetzung, und führt sie diese dann aus, um zu bestimmen, ob Ausnahmen oder Fehler auftreten. In dieser Ausführungsform finden Schritte einer Neuanordnung und einer anderen Optimierung nur statt, wenn bestimmt wird, dass die bestimmte Übersetzung eine Anzahl von Malen ausgeführt werden wird oder anderweitig optimiert werden sollte. Dies kann zum Beispiel bewerkstelligt werden, indem in jede Übersetzung Hostbefehle gestellt werden, welche die Anzahl von Malen, die eine Übersetzung ausgeführt wird, zählen und eine Ausnahme (oder eine Verzweigung) erzeugen, wenn ein bestimmter Wert erreicht ist. Die Ausnahme (oder die Verzweigung) überträgt die Tätigkeit zur Codeformungssoftware, die dann einige oder alle der folgenden Optimierungen und jegliche zusätzlichen Optimierungen, die für diese Übersetzung als nütz lich bestimmt wurden, ausführt. Ein zweites Verfahren zur Bestimmung, dass Übersetzungen eine Anzahl von Malen ausgeführt werden und eine Optimierung benötigen, ist, die Ausführung der Übersetzung mit einer bestimmten Frequenz oder auf irgendeiner statistischen Basis zu unterbrechen und jegliche Übersetzung, die zu dieser Zeit ausgeführt wird, zu optimieren. Dies würde letztendlich dafür sorgen, dass die Befehle, die am häufigsten ausgeführt werden, optimiert würden. Eine andere Lösung wäre, jeden von bestimmten besonderen Arten von Hostbefehlen wie etwa jene, die Schleifen erzeugen oder anderweitig wahrscheinlich am häufigsten ausgeführt werden, zu optimieren.
  • Optimierung
  • Nimmt 32-Bit flachen Adressenraum an, der die Beseitigung von Segmentbasishinzufügungen und einigen Grenzenprüfungen gestattet.
  • Figure 00710001
  • Figure 00720001
  • Dieses Beispiel veranschaulicht eine erste Stufe der Optimierung, die unter Benutzung des verbesserten Mikroprozessors ausgeführt werden kann. Diese Stufe der Optimierung nimmt wie viele andere der Tätigkeiten der Codeformungssoftware ein optimistisches Ergebnis an. Die besondere Optimierung nimmt an, dass ein Zielanwendungsprogramm, das als ein 32-Bit-Programm für ein Flachspeichermodell geschrieben wurde, welches durch die Prozessorfamilie X86 bereitgestellt wird, als ein derartiges Programm weiterbestehen wird. Es wird bemerkt werden, dass eine derartige Annahme für die Familie X86 speziell ist und nicht notwendigerweise mit anderen Familien von Prozessoren, die emuliert werden, angenommen würde. Wenn diese Annahme getroffen wird, werden in X86-Anwendungen alle Segmente auf den gleichen Adressenraum abgebildet. Dies gestattet, dass jene Basishostbefehle, die durch den X86-Segmentierungsprozess benötigt werden, beseitigt werden. Wie ersichtlich ist, werden die Segmentwerte zuerst auf Null gesetzt. Dann wird die Basis für Daten auf Null gesetzt und die Grenze auf den maximalen verfügbaren Speicher gesetzt. Dann wird in jedem Satz von Basishostbefehlen zur Ausführung eines Zielbasisbefehls sowohl die Prüfung hinsichtlich des Segmentbasiswerts als auch die Berechnung der Segmentbasisadresse, die durch die Segmentierung benötigt wird, beseitigt. Dies verringert die auszuführende Schleife für jeden Zielbasisbefehl, der eine Adressierungsfunktion benötigt, um zwei Hostbasisbefehle. An diesem Punkt ist die Hostbefehlsprüfung hinsichtlich der oberen Speichergrenze nach wie vor vorhanden.
  • Es sollte bemerkt werden, dass diese Optimierung die erwähnte Spekulation erfordert, dass die Anwendung ein 32-Bit-Flachspeichermodell benutzt. Wenn dies nicht zutrifft, wird der Fehler entdeckt werden, wenn die Hauptschleife den Bestimmungsort von Steuerungsübertragungen auflöst und feststellt, dass die Quellenannahmen nicht den Bestimmungsortannahmen entsprechen. Dann wird eine neue Übersetzung nötig sein. Diese Technik ist sehr allgemein und kann auf eine Vielfalt von Segmentierungen und andere „betriebsartgemäße" Fälle angewendet werden, in denen sich die "Betriebsart" selten verändert, wie etwa der Fehlersuche, der Systemmanagementbetriebsart, oder der „echten" Betriebsart.
  • Es wird angenommen, dass adressierte Daten keine Bytes außerhalb von Computerspeichergrenzen beinhalten, was nur an nicht ausgerichteten Seitenübergangsspeicherbezügen an der oberen Speichergrenze auftreten kann, und durch Sonderfallsoftware oder -hardware behandelt werden kann.
  • Figure 00730001
  • Figure 00740001
  • Figure 00750001
  • Das obige Beispiel veranschaulicht eine nächste Stufe der Optimierung, in der eine spekulative Übersetzung die obere Speichergrenzenprüfung beseitigt, die nur für nicht ausgerichtete Seitenübergangsspeicherbezüge an der Spitze des Speicheradressenraums nötig ist. Ein Versagen dieser Annahme wird entweder durch einen Hardware- oder einen Softwareausrichtungs-Fixup festgestellt. Dies verringert die Übersetzung für jeden Zielbasisbefehl, der eine Adressierung benötigt, um einen anderen Hostbasisbefehl. Diese Optimierung erfordert sowohl die vorher angeführte Annahme, dass die Anwendung ein 32-Bit-Flachspeichermodell verwendet, als auch die Spekulation, dass der Befehl ausgerichtet ist. Wenn dies nicht beides zutrifft, wird die Übersetzung scheitern, wenn sie ausgeführt wird, und wird eine neue Übersetzung nötig sein.
  • Stelle redundante Adressenberechungen fest und beseitige sie. Das Beispiel zeigt den Code nach dem Beseitigen der redundanten Tätigkeiten.
  • Figure 00750002
  • Figure 00760001
  • Dieses Beispiel veranschaulicht eine nächste Optimierung, in der gemeinsame Hostausdrücke beseitigt werden. Genauer wird beim Übersetzen des zweiten Zielbasisbefehls ein Wert im Arbeitsregister Rebp (das Arbeitsregister, das das Stapelbasispunktregister eines X86-Prozessors darstellt) zu einem Versatzwert 0 × 8 addiert und in ein Hostarbeitsregister R2 gestellt. Man wird bemerken, dass die gleiche Tätigkeit beim Neuübersetzen des Zielbasisbefehls Fünf im vorhergehenden Beispiel stattgefunden hat, außer dass das Ergebnis der Addition in das Arbeitsregister R5 gestellt wurde. Folglich ist der Wert, der in das Arbeitsregister R5 gestellt werden soll, bereits im Arbeitsregister R2 vorhanden, wenn der Hostbasisbefehl Fünf im Begriff steht, aufzutreten. Daher kann der Hostadditionsbefehl aus der Übersetzung des Zielbasisbefehls Fünf beseitigt werden; und kann de Wert im Arbeitsregister R2 in das Arbeitsregister R5 kopiert werden. In der gleichen Weise kann ein Hostbefehl, der einen Wert im Arbeitsregister Rebp zu einem Versatzwert 0 × 10 addiert, in der Übersetzung des Zielbasisbefehls Acht beseitigt werden, da der Schritt bereits in der Übersetzung des Zielbasisbefehls Sechs bewerkstelligt wurde und sich das Ergebnis im Register R7 befindet. Es sollte bemerkt werden, dass diese Optimierung nicht von einer Spekulation abhängt und folglich nicht einem Versagen und einer Neuübersetzung unterliegt.
  • Es wird angenommen, dass in der Übersetzung keine Zielausnahmen auftreten werden, weshalb das Aktualisieren von eip und dem Zielzustand verzögert wird.
  • Figure 00770001
  • Figure 00780001
  • Das obige Beispiel veranschaulicht eine Optimierung, die spekuliert, dass die Übersetzung der Basiszielbefehle, die die gesamte Übersetzung aufbauen, ohne Erzeugung einer Ausnahme bewerkstelligt werden kann. Wenn dies zutrifft, besteht keine Notwendigkeit, die offiziellen Zielregister zu aktualisieren oder die nicht übergebenen Speicherungen im Speicherungspuffer am Ende der Abfolge von Hostbasisbefehlen, die einen einzelnen Zielbasisbefehl ausführt, zu übergeben. Wenn die Spekulation gilt, müssen die offiziellen Zielregister nur am Ende der Abfolge von Zielbasisbe fehlen aktualisiert werden und müssen die Speicherungen nur einmal zu dieser Zeit übergeben werden. Dies gestattet die Beseitigung von zwei Basishostbefehlen zur Ausführung jedes Basiszielbefehls. Sie werden durch einen einzelnen Hostbasisbefehl ersetzt, der die offiziellen Zielregister aktualisiert und die nicht übergebenen Speicherungen dem Speicher übergibt.
  • Wie man verstehen wird, ist dies eine andere spekulative Tätigkeit, die ebenfalls sehr wahrscheinlich mit einer richtigen Spekulation verbunden ist. Dieser Schritt bietet gegenüber allen Emulationstechniken des Stands der Technik einen sehr großen Vorteil, wenn die Spekulation zutrifft. Er gestattet, dass alle der Basishostbefehle, die die gesamte Abfolge von Zielbasisbefehlen ausführen, in eine Abfolge gruppiert werden, in der alle der einzelnen Hostbasisbefehle gemeinsam optimiert werden können. Dies weist den Vorteil auf, dass es gestattet, dass eine große Anzahl von Tätigkeiten parallel an einem Formungshost ausgeführt wird, der die Techniken des sehr langen Befehlsworts ausnutzt. Er gestattet auch, dass eine größere Anzahl von anderen Optimierungen vorgenommen wird, da mehr Wahlmöglichkeiten für derartige Optimierungen bestehen. Doch erneut halten die offiziellen Zielregister und der Speicher den offiziellen Zielzustand, der am Beginn der Abfolge von Zielbasisbefehlen bestand, wenn sich die Spekulation als unrichtig erweist und bei der Ausführung der Schleife eine Ausnahme vorgenommen wird, da keine Übergabe stattfindet, bis die Abfolge der Hostbefehle tatsächlich ausgeführt ist. Alles, was nötig ist, um sich von einer Ausnahme zu erholen, ist, die nichtübergebenen Speicherungen zu verwerfen, die offiziellen Register in die Arbeitsregister zurückzuführen, und die Übersetzung der Zielbasisbefehle am Beginn der Abfolge neu zu beginnen. Diese Neuübersetzung erzeugt eine Übersetzung eines Zielbefehls nach dem anderen, und der offizielle Zustand wird aktualisiert, nachdem die Hostabfolge, die jeden Zielbasisbefehl darstellt, übersetzt worden ist. Diese Übersetzung wird dann ausgeführt. Wenn die Ausnahme an dieser Neuübersetzung auftritt, ist der richtige Zielzustand sofort in den offiziellen Zielregistern und im Speicher verfügbar, um die Ausnahme auszuführen. Zusammengefasst:
    Figure 00800001
  • Die Anmerkung „Live Out" bezieht sich auf die Notwendigkeit, Reax und Recx vor der Übergabe tatsächlich richtig zu erhalten. Andernfalls könnte eine weitere Optimierung möglich sein.
  • Die obige Zusammenfassung veranschaulicht die Abfolge von Hostbasisbefehlen, die an diesem Punkt im Optimierungsprozess verbleiben. Obwohl dieses Beispiel die Erhaltung des Zielbefehlszeigers (EIP) in der Reihe zeigt, ist es möglich, den Zeiger EIP für Verzweigungen aus der Reihe zur Zeit der Übersetzung zu erhalten, was die Aktualisierungsabfolge für den Zeiger EIP daraus und aus anschließenden Schritten des Beispiels entfernen würde.
  • Umbenennen zur Verringerung von Registerbetriebsmittelabhängigkeiten. Dies wird gestatten, dass die anschließende Planung leistungsfähiger ist. Von diesem Punkt an wird der ursprüngliche Ziel-X86-Code weggelassen, da die Beziehung zwischen einzelnen Ziel-X86-Befehlen und Hostbefehlen zunehmend verschwommen wird.
  • Figure 00810001
  • Dieses Beispiel veranschaulicht einen nächsten Schritt der Optimierung, der normalerweise als „Registerumbenennung" bezeichnet wird, und in dem Tätigkeiten, die Arbeitsregister erfordern, welche für mehr als eine Tätigkeit in der Abfolge der Hostbasisbefehle verwendet werden, geändert werden, um ein anderes unbenutztes Arbeitsregister zu benutzen, um die Möglichkeit zu beseitigen, dass zwei Hostbefehle die gleiche Hardware benötigen werden. Daher verwendet zum Beispiel der zweite Hostbasisbefehl in zwei obigen Beispielen ein Arbeitsregister Recx, das ein offizielles Zielregister ECX darstellt. Der zehnte Hostbasisbefehl verwendet ebenfalls das Arbeitsregister Recx. Durch das Ändern der Tätigkeit im zweiten Hostbasisbefehl, damit der Wert, auf den durch die Adresse in R0 gezeigt wird, im Arbeitsregister R1 anstatt im Register Recx gespeichert wird, verwenden die beiden Hostbefehle nicht beide das gleiche Register. In der gleichen Weise benutzen der vierte, fünfte, und sechste Hostbasisbefehl im früheren Beispiel alle das Arbeitsregister Reax; durch das Ändern des vierten Hostbasisbefehls, um das vorher nicht verwendete Arbeitsregister R3 anstatt das Arbeitsregister Reax zu benutzen, und des sechsten Basisbefehls, um das vorher nicht verwendete Arbeitsregister R4 anstatt des Registers Reax zu benutzen, werden diese Hardwareabhängigkeiten beseitigt.
  • Nach dem Planungsprozess, der die Basishosttätigkeiten als mehrere Tätigkeiten organisiert, die an der Host-VLIW-Hardware parallel ausgeführt werden können. Jede Zeile zeigt die parallelen Tätigkeiten, die die VLIW-Maschine ausführt, und das „&" gibt die Parallelität an.
  • Figure 00820001
  • Das obige Beispiel veranschaulicht die Planung der Hostbasisbefehle zur Ausführung am Formungshost. In diesem Beispiel wird angenommen, dass der Formungshost ein VLIW-Prozessor ist, der zusätzlich zu den Hardwareverbesserungen, die für das Zusammenwirken mit der Codeformungssoftware bereitgestellt sind, unter anderen Verarbeitungseinheiten auch zwei arithmetisch-logische Einheiten (ALU) beinhaltet. Die erste Zeile veranschaulicht zwei einzelne Addierbefehle, die so geplant wurden, dass sie gemeinsam am Formungshost ausgeführt werden. Wie ersichtlich ist, handelt es sich dabei um den dritten und den achten Basishostbefehl im Beispiel gerade vor der obigen Zusammenfassung. Die zweite Zeile beinhaltet einen NOP-Befehl (keine Tätigkeit, aber gehe zum nächsten Befehl) und einen anderen Addierbefehl. Der NDP-Befehl veranschaulicht, dass selbst nach dem Stattfinden irgendeiner Planungsoptimierung nicht immer zwei Befehle vorhanden sind, die gemeinsam ausgeführt werden können. In jedem Fall veranschaulicht dieses Bei spiel, dass an diesem Punkt nur neun Sätze von Basishostbefehlen verblieben sind, um die ursprünglichen zehn Zielbefehle auszuführen.
  • Hostverzweigungsziele und kettengespeicherte Übersetzungen werden aufgelöst.
  • Figure 00830001
  • Dieses Beispiel veranschaulicht im Wesentlichen den gleichen Satz von Hostbasisbefehlen, außer dass die Befehle nun im Übersetzungspuffer gespeichert wurden und ein- oder mehrmals ausgeführt wurden, da der letzte Sprungbefehl (jg) nun zu einer Sprungadresse zeigt, die durch das Verketten mit einer anderen Abfolge von übersetzten Befehlen geliefert wird. Der Verkettungsprozess nimmt die Abfolge der Befehle aus der Übersetzerhauptschleife, so dass die Übersetzung der Abfolge abgeschlossen wurde.
  • Fortgeschrittene Optimierungen, Rückwärtscodebewegung:
  • Dieses und nachfolgende Beispiele beginnen mit dem Code vor dem Planen. Diese Optimierung hängt zuerst von der Feststellung ab, dass der Code eine Schleife ist. Dann können unveränderliche Tätigkeiten aus dem Schleifenkörper verschoben werden und einmal ausgeführt werden, bevor in den Schleifenkörper eingetreten wird.
  • Figure 00840001
  • Das obige Beispiel veranschaulicht einen fortgeschrittenen Optimierungsschritt, der gewöhnlich nur mit Abfolgen verwendet wird, die eine große Anzahl von Malen wiederholt werden sollen. Der Prozess stellt zuerst Übersetzungen fest, die Schleifen bilden, und überprüft die einzelnen Basishostbefehle, um zu bestimmen, welche Befehle im Schleifenkörper konstante Ergebnisse erzeugen. Diese Befehle werden aus der Schleife entfernt und nur einmal ausgeführt, um einen Wert in ein Register zu stellen; von diesem Punkt an wird anstelle einer Neuausführung des Befehls der Wert im Register verwendet.
  • Plane den Schleifenkörper nach der Rückwärtscodebewegung.
  • Zu Beispielszwecken ist nur der Code im Schleifenkörper geplant gezeigt.
  • Figure 00850001
  • Wenn diese sich nicht wiederholenden Befehle aus der Schleife entfernt werden und die Abfolge zur Ausführung geplant wird, erscheinen die geplanten Befehle wie im letzten obigen Beispiel. Es ist ersichtlich, dass die anfänglichen Befehle nur einmal während der ersten Iteration der Schleife ausgeführt werden und danach nur die Hostbasisbefehle, die in den gezeigten sieben Taktintervallen verbleiben, während der Schleife ausgeführt werden. Dadurch wurde die Ausführungszeit von den zehn Befehlen, die nötig sind, um die Basiszielbefehle auszuführen, auf sieben Befehlsintervalle verringert.
  • Wie ersichtlich ist, sind die Schritte, die aus der Schleife entfernt wurden, Adressenerzeugungsschritte. Daher muss die Adressenerzeugung im verbesserten Mikroprozessor nur einmal pro Schleifenaufruf vorgenommen werden, das heißt, muss die Adressenerzeugung nur einmal vorgenommen werden. Andererseits muss die Adressenerzeugungshardware des X86-Zielprozessors diese Adressen jedes Mal erzeugen, wenn die Schleife ausgeführt wird. Wenn eine Schleife einhundert Mal ausgeführt wird, erzeugt der verbesserte Mikroprozessor die Adressen nur einmal, während ein Zielprozessor jede Adresse einhundert Mal erzeugen würde.
  • Nach der Rückwärtscodebewegung:
    Figure 00860001
  • Registerzuteilung:
  • Dies zeigt die Verwendung einer Registerreplizierungsfeststellungshardware des Formungshosts, die gestattet, das Variablen sicher vom Speicher in Register verschoben werden. Der Ausgangspunkt ist der Code nach der „Rückwärtscodebewegung". Dies zeigt die Optimierung, die Ladungen beseitigen kann.
  • Zuerst werden die Ladungen durchgeführt. Die Adresse wird durch die Replizierungshardware geschützt, so dass eine „Replizierungs" ausnahme erzeugt wird, falls eine Speicherung an die Adresse stattfindet. Die Ladungen im Schleifenkörper werden dann durch Kopien ersetzt. Nach dem Hauptkörper der Schleife wird die Replizierungshardware freigegeben.
  • Figure 00870001
  • Dieses Beispiel veranschaulicht eine noch fortgeschrittenere Optimierung, die durch den Mikroprozessor, der die vorliegende Erfindung beinhaltet, ausgeführt werden kann. Unter erneuter Bezugnahme auf das zweite Beispiel vor diesem Beispiel wird bemerkt werden, dass die ersten drei Addierbefehle mit Berechnungsadressen am Stapel verbunden waren. Diese Adressen ändern sich während der Ausführung der Abfolge von Hostbefehlen nicht. Folglich können die Werte, die an diesen Adressen gespeichert sind, aus dem Speicher abgerufen werden und in Register geladen werden, wo sie sofort zur Ausführung verfügbar sind. Wie ersichtlich ist, erfolgt dies in den Hostbasisbefehlen Sechs, Acht, und Zehn. In Befehl Sieben, Neun und Elf wird jede der Speicheradressen durch eine besondere Hostreplizierungshardware als geschützt gekennzeichnet, und werden die Register als Replizierungen für diese Speicheradressen angegeben, so dass jeglicher Versuch, die Daten zu ändern, eine Ausnahme erzeugen wird. An diesem Punkt wird jede der Ladetätigkeiten, die das Verschieben von Daten von diesen Stapelspeicheradressen umfasst, eine einfache Kopiertätigkeit von Register zu Register, die viel schneller als das Laden von einer Speicheradresse abläuft. Es sollte bemerkt werden, dass der Schutz von jeder der Speicheradressen entfernt werden muss, sobald die Schleife bis n = 0 ausgeführt wurde, damit die Replizierungsregister anderweitig benutzt werden können.
  • Kopienverbreitung:
  • Nach dem Verwenden der Replizierungshardware, um Ladungen im Schleifenkörper in Kopien zu verwandeln, gestattet die Kopienverbreitung die Beseitigung einiger Kopien.
  • Figure 00880001
  • Figure 00890001
  • Dieses Beispiel veranschaulicht die nächste Stufe der Optimierung, in der erkannt wird, dass die meisten der Kopierbefehle, die in der Optimierung, welche im letzten Beispiel veranschaulicht wurde, die Ladebefehle ersetzten, unnötig sind und beseitigt werden können. Das heißt, wenn eine Kopiertätigkeit von Register zu Register stattfindet, waren die Daten vor der Tätigkeit im Register vorhanden, aus dem die Daten kopiert wurden. Wenn dies der Fall ist, kann statt in dem Register, in das sie kopiert werden, im ersten Register auf die Daten zugegriffen werden und kann die Kopiertätigkeit beseitigt werden. Wie ersichtlich ist, beseitigt dies den ersten, zweiten, fünften, und neunten Basishostbefehl, die in der Schleife des letzten Beispiels gezeigt sind. Zusätzlich werden auch die Register, die in anderen der Hostbasisbefehle verwendet werden, geändert, um die richtigen Register für die Daten widerzuspiegeln. Wenn zum Beispiel der erste und der zweite Kopierbefehl beseitigt ist, muss daher der dritte Speicherungsbefehl die Daten vom Arbeitsregister Rc, wo sie vorhanden sind (anstatt im Register 1), kopieren und die Daten an die Adresse stellen, die im Arbeitsregister Rs angegeben ist, wo die Adresse vorhanden ist (anstatt im Register R3).
  • Ein Beispiel, das die Planung nur des Schleifenkörpers veranschaulicht.
  • Figure 00900001
  • Die geplanten Hostbefehle sind im obigen Beispiel veranschaulicht. Man wird bemerken, dass die Abfolge derart ist, dass weniger Takte benötigt werden, um die Schleife auszuführen, als für die Ausführung des Basiszielbefehls, der ursprünglich vom Quellcode decodiert wurde. Daher ist abgesehen von all den anderen bewerkstelligten Beschleunigungen die gesamte Anzahl der kombinierten Tätigkeiten, die auszuführen sind, einfach geringer als die Tätigkeiten, die nötig sind, um den ursprünglichen Zielcode auszuführen.
  • Speichere die Beseitigung durch Verwendung der Replizierungshardware.
  • Figure 00910001
  • Die letzte Optimierung, die in diesem Beispiel gezeigt ist, ist die Verwendung der Replizierungshardware, um Speicherungen zu beseitigen. Dies beseitigt die Speicherungen aus dem Schleifenkörper und führt sie nur im Schleifenepilog durch. Dies verringert die Anzahl der Hostbefehle im Schleifenkörper verglichen mit den ursprünglichen zehn Zielbefehlen auf drei.
  • Obwohl die Erfindung im Zusammenhang mit der Emulation von X86-Prozessoren beschrieben wurde, sollte sich verstehen, dass die Erfindung ebenso gut für Programme, die für andere Prozessorarchitekturen bestimmt sind, und Programme, die an virtuellen Maschinen ausgeführt werden, wie etwa P-Code-, Postscript-, und Java-Programme, gilt.

Claims (15)

  1. Speichersteuerung zur Verwendung in einem Mikroprozessor, der eine Ausführungseinheit (110) beinhaltet, die mehrere Register aufweist, wobei die Speichersteuerung Folgendes umfasst: ein Mittel zum Speichern von Speicherdaten, die durch die Ausführungseinheit (110) während der Ausführung einer Codeabfolge häufig benutzt werden, in einem ersten Register (111) der Ausführungseinheit des Mikroprozessors, ein Mittel zum Speichern einer Speicheradresse von Speicherdaten, die im ersten Register (111) gespeichert sind, in einem zweiten Register (112, 122) der Ausführungseinheit, ein Mittel (113, 120) zum Feststellen eines Zugriffs, der während der Ausführung der Codeabfolge auf die Speicheradresse versucht wird, und ein Mittel (113, 120) zum Sicherstellen, dass die Daten, die im ersten Register (111) und an der Speicheradresse gespeichert sind, übereinstimmend bleiben.
  2. Speichersteuerung nach Anspruch 1, wobei das Mittel zum Feststellen eines Zugriffs, der während der Ausführung der Codeabfolge auf die Speicheradresse versucht wird, einen Vergleicher (113, 120) zum Vergleichen der Zugriffsadresse mit der Speicheradresse im zweiten Register (112, 122) und zum Erzeugen einer Ausnahme als Reaktion auf einen Vergleich umfasst.
  3. Speichersteuerung nach Anspruch 2, wobei das Mittel zum Sicherstellen, dass die Daten, die im ersten Register (111) und an der Speicheradresse gespeichert sind, übereinstimmend bleiben, ferner ein Mittel umfasst, das auf die Ausnahme, die durch den Vergleicher erzeugt wird, reagiert, um alte Daten durch gültige Daten, die geschrieben werden, zu ersetzen.
  4. Speichersteuerung nach Anspruch 2, wobei das Mittel zum Sicherstellen, dass die Daten, die im ersten Register und an der Speicheradresse gespeichert sind, übereinstimmend bleiben, ein Mittel umfasst, das auf die Ausnahme, die durch den Vergleicher (113, 120) erzeugt wird, reagiert, um Speicherdaten im ersten Register (111), die durch die Verarbeitungseinheit während einer Codeabfolge häufig benutzt werden, in eine neue Codeabfolge rückzuübersetzen, ohne sie zu speichern, und die neue Codeabfolge auszuführen.
  5. Speichersteuerung nach Anspruch 3 oder Anspruch 4, wobei das Mittel, das auf die Ausnahme reagiert, auf eine Ausnahme reagiert, die während eines Schreibzugriffs auf eine Speicheradresse vorgenommen wird, um Daten, die im ersten Register (111) gespeichert sind, durch Daten, die an die Speicheradresse geschrieben werden, zu aktualisieren.
  6. Speichersteuerung nach Anspruch 3 oder Anspruch 4, wobei das Mittel, das auf die Ausnahme reagiert, auf eine Ausnahme reagiert, die während eines Lesezugriffs auf eine Speicheradresse vorgenommen wird, um Daten, die an der Speicheradresse gespeichert sind, durch Daten, die im ersten Register (111) gespeichert sind, zu aktualisieren.
  7. Mikroprozessor, umfassend: eine Ausführungseinheit (110), die mehrere Register aufweist, einen Hostprozessor, der fähig ist, einen ersten Befehlssatz auszuführen, eine Codeformungssoftware, um Programme, die für einen Zielprozessor geschrieben sind, der einen zweiten unterschiedlichen Befehlssatz aufweist, zur Ausführung durch den Hostprozessor in Befehle des ersten Befehlssatzes zu übersetzen, und eine Speichersteuerung nach einem der vorhergehenden Ansprüche.
  8. Mikroprozessor nach Anspruch 7, wobei der Verarbeitungsrechner einen Speicher zum Speichern von Zielbefehlen von einem Programm, das übersetzt wird, beinhaltet.
  9. Verfahren zum Steigern der Geschwindigkeit eines Mikroprozessors, der eine Ausführungseinheit (110) beinhaltet, die mehrere Register aufweist, wobei das Verfahren die folgenden Schritte umfasst: Stellen von Speicherdaten, auf die während der Ausführung einer Codeabfolge häufig durch die Ausführungseinheit (110) zugegriffen werden soll, in ein erstes Register (111) der Ausführungseinheit (110), Speichern einer Speicheradresse der Speicherdaten im ersten Register (111) der Ausführungseinheit in einem zweiten Register (112, 122) der Ausführungseinheit (110), Feststellen eines Zugriffs, der während der Ausführung der Codeabfolge auf die Speicheradresse versucht wird, und Behalten der Daten im ersten Register (111) und an der Speicheradresse während der Ausführung der Codeabfolge in einem übereinstimmenden und gültigen Zustand.
  10. Verfahren nach Anspruch 9, wobei die Schritte des Feststellens eines Zugriffs, der während der Ausführung der Codeabfolge auf die Speicheradresse versucht wird, das Vergleichen einer Zugriffsadresse mit der Speicheradresse im zweiten Register (112, 122) und das Erzeugen einer Ausnahme als Reaktion auf einen Vergleich umfassen.
  11. Verfahren nach Anspruch 10, wobei der Schritt des Behaltens der Daten im ersten Register und an der Speicheradresse während der Ausführung der Codeabfolge in einem übereinstimmenden und gültigen Zustand ferner das Reagieren auf die durch einen Vergleich erzeugte Ausnahme durch Ersetzen alter Daten durch gültige Daten, die geschrieben werden, umfasst.
  12. Verfahren nach Anspruch 10, wobei der Schritt des Behaltens der Daten im ersten Register und an der Speicheradresse während der Ausführung der Codeabfolge in einem übereinstimmenden und gültigen Zustand ferner das Reagieren auf die durch einen Vergleich erzeugte Ausnahme durch Rückübersetzen der Speicherdaten im ersten Register, die durch die Verarbeitungseinheit während einer Codeabfolge häufig benutzt werden, in eine neue Codeabfolge, ohne sie zu speichern, und Ausführen der neuen Codeabfolge umfasst.
  13. Verfahren nach einem der Ansprüche 10 bis 12, wobei der Schritt des Erzeugens einer Ausnahme für einen Versuch, die Speicheradresse zu schreiben, vorgenommen wird, wenn die Daten im ersten Register (111) während der Ausführung der Codeabfolge in ein anderes Register kopiert werden; und wobei der Schritt des Behaltens der Daten im ersten Register (111) und im Speicher während der Ausführung der Codeabfolge in einem übereinstimmenden und gültigen Zustand das Aktualisieren der Daten im ersten Register (111) durch Daten, die an die Speicheradresse geschrieben werden, umfasst.
  14. Verfahren nach einem der Ansprüche 10 bis 13, wobei die Schritte des Erzeugens einer Ausnahme als Reaktion auf einen Vergleich das Erzeugen einer Ausnahme für einen Versuch, die Speicheradresse zu lesen, wenn wäh rend der Ausführung der Codeabfolge Daten in das erste Register (111) kopiert werden, umfassen; und wobei der Schritt des Behaltens der Daten im ersten Register (111) und im Speicher während der Ausführung der Codeabfolge in einem übereinstimmenden und gültigen Zustand das Aktualisieren der Daten an der Speicheradresse durch Daten im ersten Register (111) umfasst.
  15. Speichersteuerung nach Anspruch 2, wobei die Speichersteuerung dazu betriebsfähig ist, die Erzeugung von Ausnahmen während eines Zeitraums, in dem unter Verwendung des ersten Registers (111) aufeinanderfolgende Speichertätigkeiten durchgeführt werden, durch einen Befehl außer Kraft zu setzen, der die Steuerung in eine Betriebsart stellt, die wiederholte Speicherungen vom ersten Register (111) an die Speicheradresse gestattet.
DE69737423T 1996-09-26 1997-09-22 Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor Expired - Lifetime DE69737423T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US08/721,698 US5926832A (en) 1996-09-26 1996-09-26 Method and apparatus for aliasing memory data in an advanced microprocessor
US721698 1996-09-26
PCT/US1997/016911 WO1998013740A2 (en) 1996-09-26 1997-09-22 Method and apparatus for aliasing memory data in an advanced microprocessor

Publications (2)

Publication Number Publication Date
DE69737423D1 DE69737423D1 (de) 2007-04-12
DE69737423T2 true DE69737423T2 (de) 2007-11-08

Family

ID=24898953

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69737423T Expired - Lifetime DE69737423T2 (de) 1996-09-26 1997-09-22 Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor

Country Status (9)

Country Link
US (1) US5926832A (de)
EP (1) EP1008050B1 (de)
JP (1) JP3753743B2 (de)
KR (1) KR100385426B1 (de)
CN (1) CN1141647C (de)
AT (1) ATE355558T1 (de)
CA (1) CA2262928C (de)
DE (1) DE69737423T2 (de)
WO (1) WO1998013740A2 (de)

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6199152B1 (en) * 1996-08-22 2001-03-06 Transmeta Corporation Translated memory protection apparatus for an advanced microprocessor
JP3320358B2 (ja) * 1998-06-18 2002-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイル方法、例外処理方法、及びコンピュータ
US6205537B1 (en) 1998-07-16 2001-03-20 University Of Rochester Mechanism for dynamically adapting the complexity of a microprocessor
US6289445B2 (en) * 1998-07-21 2001-09-11 Lsi Logic Corporation Circuit and method for initiating exception routines using implicit exception checking
US6298477B1 (en) * 1998-10-30 2001-10-02 Sun Microsystems, Inc. Method and apparatus for selecting ways to compile at runtime
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US20050149694A1 (en) * 1998-12-08 2005-07-07 Mukesh Patel Java hardware accelerator using microcode engine
US7779236B1 (en) * 1998-12-31 2010-08-17 Stmicroelectronics, Inc. Symbolic store-load bypass
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US20020046305A1 (en) * 1999-02-17 2002-04-18 Babaian Boris A. Method for effective binary translation between different instruction sets using emulated supervisor flag and multiple page tables
US7254806B1 (en) 1999-08-30 2007-08-07 Ati International Srl Detecting reordered side-effects
US6470493B1 (en) * 1999-09-30 2002-10-22 Compaq Information Technologies Group, L.P. Computer method and apparatus for safe instrumentation of reverse executable program modules
US6415379B1 (en) * 1999-10-13 2002-07-02 Transmeta Corporation Method and apparatus for maintaining context while executing translated instructions
JP5220974B2 (ja) 1999-10-14 2013-06-26 ブルアーク ユーケー リミテッド ハードウェア実行又はオペレーティングシステム機能の加速のための装置及び方法
US6748589B1 (en) * 1999-10-20 2004-06-08 Transmeta Corporation Method for increasing the speed of speculative execution
US6751583B1 (en) 1999-10-29 2004-06-15 Vast Systems Technology Corporation Hardware and software co-simulation including simulating a target processor using binary translation
US7085914B1 (en) * 2000-01-27 2006-08-01 International Business Machines Corporation Methods for renaming stack references to processor registers
US6671664B1 (en) * 2000-02-22 2003-12-30 Hewlett-Packard Development Copany, L.P. Management of uncommitted register values during random program generation
US7389208B1 (en) * 2000-06-30 2008-06-17 Accord Solutions, Inc. System and method for dynamic knowledge construction
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
GB2367653B (en) 2000-10-05 2004-10-20 Advanced Risc Mach Ltd Restarting translated instructions
GB2367654B (en) 2000-10-05 2004-10-27 Advanced Risc Mach Ltd Storing stack operands in registers
EP1197847A3 (de) * 2000-10-10 2003-05-21 Nazomi Communications Inc. Java-Hardwarebeschleuniger mit Mikrokodemaschine
GB2369464B (en) 2000-11-27 2005-01-05 Advanced Risc Mach Ltd A data processing apparatus and method for saving return state
US7076771B2 (en) 2000-12-01 2006-07-11 Arm Limited Instruction interpretation within a data processing system
US6779087B2 (en) * 2001-04-06 2004-08-17 Sun Microsystems, Inc. Method and apparatus for checkpointing to facilitate reliable execution
US6820194B1 (en) * 2001-04-10 2004-11-16 Mindspeed Technologies, Inc. Method for reducing power when fetching instructions in a processor and related apparatus
US6772315B1 (en) 2001-05-24 2004-08-03 Rambus Inc Translation lookaside buffer extended to provide physical and main-memory addresses
GB2376097B (en) 2001-05-31 2005-04-06 Advanced Risc Mach Ltd Configuration control within data processing systems
GB2376100B (en) * 2001-05-31 2005-03-09 Advanced Risc Mach Ltd Data processing using multiple instruction sets
GB2376098B (en) * 2001-05-31 2004-11-24 Advanced Risc Mach Ltd Unhandled operation handling in multiple instruction set systems
GB2376099B (en) * 2001-05-31 2005-11-16 Advanced Risc Mach Ltd Program instruction interpretation
JP3804823B2 (ja) * 2001-07-03 2006-08-02 日本電気株式会社 障害回復機能を備えたキャッシュシステムとそのキャッシュ制御方法
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7266811B2 (en) * 2001-09-05 2007-09-04 Conexant Systems, Inc. Methods, systems, and computer program products for translating machine code associated with a first processor for execution on a second processor
US20030093775A1 (en) * 2001-11-14 2003-05-15 Ronald Hilton Processing of self-modifying code under emulation
US7131118B2 (en) * 2002-07-25 2006-10-31 Arm Limited Write-through caching a JAVA® local variable within a register of a register bank
US7457822B1 (en) 2002-11-01 2008-11-25 Bluearc Uk Limited Apparatus and method for hardware-based file system
US8041735B1 (en) 2002-11-01 2011-10-18 Bluearc Uk Limited Distributed file system and method
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
JP2005032018A (ja) * 2003-07-04 2005-02-03 Semiconductor Energy Lab Co Ltd 遺伝的アルゴリズムを用いたマイクロプロセッサ
US8539063B1 (en) 2003-08-29 2013-09-17 Mcafee, Inc. Method and system for containment of networked application client software by explicit human input
US20050091459A1 (en) * 2003-10-23 2005-04-28 Nhon Quach Flexible mechanism for enforcing coherency among caching structures
US7840968B1 (en) 2003-12-17 2010-11-23 Mcafee, Inc. Method and system for containment of usage of language interfaces
GB2412192B (en) * 2004-03-18 2007-08-29 Advanced Risc Mach Ltd Function calling mechanism
US7802080B2 (en) 2004-03-24 2010-09-21 Arm Limited Null exception handling
US7930526B2 (en) 2004-03-24 2011-04-19 Arm Limited Compare and branch mechanism
US7856661B1 (en) 2005-07-14 2010-12-21 Mcafee, Inc. Classification of software on networked systems
US7546421B2 (en) * 2005-08-08 2009-06-09 Intel Corporation Interconnect transaction translation technique
US7721075B2 (en) * 2006-01-23 2010-05-18 Mips Technologies, Inc. Conditional branch execution in a processor having a write-tie instruction and a data mover engine that associates register addresses with memory addresses
US7721073B2 (en) * 2006-01-23 2010-05-18 Mips Technologies, Inc. Conditional branch execution in a processor having a data mover engine that associates register addresses with memory addresses
US7721074B2 (en) * 2006-01-23 2010-05-18 Mips Technologies, Inc. Conditional branch execution in a processor having a read-tie instruction and a data mover engine that associates register addresses with memory addresses
US7757269B1 (en) 2006-02-02 2010-07-13 Mcafee, Inc. Enforcing alignment of approved changes and deployed changes in the software change life-cycle
US7895573B1 (en) 2006-03-27 2011-02-22 Mcafee, Inc. Execution environment file inventory
US8555404B1 (en) 2006-05-18 2013-10-08 Mcafee, Inc. Connectivity-based authorization
US9424154B2 (en) 2007-01-10 2016-08-23 Mcafee, Inc. Method of and system for computer system state checks
US8332929B1 (en) 2007-01-10 2012-12-11 Mcafee, Inc. Method and apparatus for process enforced configuration management
US8701189B2 (en) 2008-01-31 2014-04-15 Mcafee, Inc. Method of and system for computer system denial-of-service protection
US8615502B2 (en) 2008-04-18 2013-12-24 Mcafee, Inc. Method of and system for reverse mapping vnode pointers
US10621092B2 (en) 2008-11-24 2020-04-14 Intel Corporation Merging level cache and data cache units having indicator bits related to speculative execution
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8532975B2 (en) * 2009-06-12 2013-09-10 Cadence Design Systems, Inc. System and method implementing a simulation acceleration capture buffer
US8381284B2 (en) 2009-08-21 2013-02-19 Mcafee, Inc. System and method for enforcing security policies in a virtual environment
US8364461B2 (en) * 2009-11-09 2013-01-29 International Business Machines Corporation Reusing invalidated traces in a system emulator
US9552497B2 (en) 2009-11-10 2017-01-24 Mcafee, Inc. System and method for preventing data loss using virtual machine wrapped applications
US8775153B2 (en) 2009-12-23 2014-07-08 Intel Corporation Transitioning from source instruction set architecture (ISA) code to translated code in a partial emulation environment
US8938800B2 (en) 2010-07-28 2015-01-20 Mcafee, Inc. System and method for network level protection against malicious software
US8925101B2 (en) 2010-07-28 2014-12-30 Mcafee, Inc. System and method for local protection against malicious software
US8549003B1 (en) 2010-09-12 2013-10-01 Mcafee, Inc. System and method for clustering host inventories
US9075993B2 (en) 2011-01-24 2015-07-07 Mcafee, Inc. System and method for selectively grouping and managing program files
US9112830B2 (en) 2011-02-23 2015-08-18 Mcafee, Inc. System and method for interlocking a host and a gateway
US9594881B2 (en) 2011-09-09 2017-03-14 Mcafee, Inc. System and method for passive threat detection using virtual memory inspection
WO2013048468A1 (en) 2011-09-30 2013-04-04 Intel Corporation Instruction and logic to perform dynamic binary translation
US8694738B2 (en) 2011-10-11 2014-04-08 Mcafee, Inc. System and method for critical address space protection in a hypervisor environment
US9069586B2 (en) 2011-10-13 2015-06-30 Mcafee, Inc. System and method for kernel rootkit protection in a hypervisor environment
US8973144B2 (en) 2011-10-13 2015-03-03 Mcafee, Inc. System and method for kernel rootkit protection in a hypervisor environment
US8713668B2 (en) 2011-10-17 2014-04-29 Mcafee, Inc. System and method for redirected firewall discovery in a network environment
US8800024B2 (en) 2011-10-17 2014-08-05 Mcafee, Inc. System and method for host-initiated firewall discovery in a network environment
US20130132061A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Just-in-time static translation system for emulated computing environments
US8739272B1 (en) 2012-04-02 2014-05-27 Mcafee, Inc. System and method for interlocking a host and a gateway
US8977916B2 (en) * 2012-12-04 2015-03-10 Texas Instruments Incorporated Using data watchpoints to detect unitialized memory reads
US8973146B2 (en) 2012-12-27 2015-03-03 Mcafee, Inc. Herd based scan avoidance system in a network environment
US9171159B2 (en) 2013-02-28 2015-10-27 Intel Corporation Performing security operations using binary translation
US9405551B2 (en) 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
US9891936B2 (en) 2013-09-27 2018-02-13 Intel Corporation Method and apparatus for page-level monitoring
CN105580023B (zh) 2013-10-24 2019-08-16 迈克菲股份有限公司 网络环境中的代理辅助的恶意应用阻止
US9575897B2 (en) 2015-07-09 2017-02-21 Centipede Semi Ltd. Processor with efficient processing of recurring load instructions from nearby memory addresses
US10185561B2 (en) 2015-07-09 2019-01-22 Centipede Semi Ltd. Processor with efficient memory access
CN107710153B (zh) * 2015-07-09 2022-03-01 森蒂彼得塞米有限公司 具有有效的存储器访问的处理器
US10423354B2 (en) * 2015-09-23 2019-09-24 Advanced Micro Devices, Inc. Selective data copying between memory modules
US9721048B1 (en) * 2015-09-24 2017-08-01 Cadence Design Systems, Inc. Multiprocessing subsystem with FIFO/buffer modes for flexible input/output processing in an emulation system
US10216496B2 (en) * 2016-09-27 2019-02-26 International Business Machines Corporation Dynamic alias checking with transactional memory
US20220155746A1 (en) * 2019-04-16 2022-05-19 Mitsubishi Electric Corporation Program creation support device, program creation support method, and storage medium
CN112199669B (zh) * 2020-09-25 2022-05-17 杭州安恒信息技术股份有限公司 一种检测rop攻击的方法和装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5582356A (en) * 1978-12-15 1980-06-21 Toshiba Corp Pre-fetch control system
JPS6054048A (ja) * 1983-09-02 1985-03-28 Nec Corp 情報処理装置
US5097409A (en) * 1988-06-30 1992-03-17 Wang Laboratories, Inc. Multi-processor system with cache memories
US4928225A (en) * 1988-08-25 1990-05-22 Edgcore Technology, Inc. Coherent cache structures and methods
US5197144A (en) * 1990-02-26 1993-03-23 Motorola, Inc. Data processor for reloading deferred pushes in a copy-back data cache
JPH03255535A (ja) * 1990-03-05 1991-11-14 Nec Corp 中央処理装置
US5247648A (en) * 1990-04-12 1993-09-21 Sun Microsystems, Inc. Maintaining data coherency between a central cache, an I/O cache and a memory
DE69127936T2 (de) * 1990-06-29 1998-05-07 Digital Equipment Corp Busprotokoll für Prozessor mit write-back cache
JPH04246728A (ja) * 1991-02-01 1992-09-02 Toshiba Corp 情報処理装置
US5428786A (en) * 1991-03-07 1995-06-27 Digital Equipment Corporation Branch resolution via backward symbolic execution
US5507030A (en) * 1991-03-07 1996-04-09 Digitial Equipment Corporation Successive translation, execution and interpretation of computer program having code at unknown locations due to execution transfer instructions having computed destination addresses
US5438668A (en) * 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
DE69311330T2 (de) * 1992-03-31 1997-09-25 Seiko Epson Corp., Tokio/Tokyo Befehlsablauffolgeplanung von einem risc-superskalarprozessor
US5623628A (en) * 1994-03-02 1997-04-22 Intel Corporation Computer system and method for maintaining memory consistency in a pipelined, non-blocking caching bus request queue
JP2685713B2 (ja) * 1994-04-11 1997-12-03 株式会社日立製作所 データ処理装置

Also Published As

Publication number Publication date
EP1008050B1 (de) 2007-02-28
KR100385426B1 (ko) 2003-05-27
CN1241272A (zh) 2000-01-12
KR20000048630A (ko) 2000-07-25
US5926832A (en) 1999-07-20
CA2262928C (en) 2001-01-30
EP1008050A4 (de) 2001-08-16
EP1008050A2 (de) 2000-06-14
ATE355558T1 (de) 2006-03-15
JP3753743B2 (ja) 2006-03-08
JP2001504957A (ja) 2001-04-10
CN1141647C (zh) 2004-03-10
WO1998013740A2 (en) 1998-04-02
WO1998013740A3 (en) 1998-07-02
DE69737423D1 (de) 2007-04-12

Similar Documents

Publication Publication Date Title
DE69737423T2 (de) Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor
US8055877B1 (en) Translated memory protection apparatus for an advanced microprocessor
EP1002271B1 (de) Speichersteuerung zur erkennung eines spekulationsfehlers einer addressierten komponente
US6031992A (en) Combining hardware and software to provide an improved microprocessor
US6011908A (en) Gated store buffer for an advanced microprocessor
DE60308201T2 (de) Datenverarbeitungssystem mit externen und internen anweisungssätzen
US5958061A (en) Host microprocessor with apparatus for temporarily holding target processor state
DE69131637T2 (de) Registerhaltige Datenbearbeitung in einem Prozessor mit reduziertem Befehlssatz
DE69629383T2 (de) Superskalarer mikroprozessor mit risc86 befehlssatz
CA2283776C (en) Combining hardware and software to provide an improved microprocessor
DE19506435C2 (de) Verfahren und Einrichtung zum Vermeiden von Rückschreibkonflikten zwischen einen gemeinsamen Rückschreibpfad verwendenden Ausführungseinheiten
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE69727177T2 (de) Emulation von asynchronen Signalen mit Verzweigungsmechanismus
DE112017001716T5 (de) Speicherkopierbefehle, prozessoren, verfahren und systeme
DE102018002525A1 (de) Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor
DE69903554T2 (de) Prozessor konfiguriert zur selektiven freigabe von physikalischen registern beim befehlsausführungsabschluss
KR100421687B1 (ko) 개선된 마이크로프로세서를 위한 변환 메모리 보호 장치
DE3740762A1 (de) Datenverarbeitungssystem mit einer externen schnittstelle
EP0998707B1 (de) Gastrechner-mikroprozessor mit vorrichtung zum zeitweisen anhalten des prozessorzustandes eines zielrechners
DE3878513T2 (de) Vorrichtung und verfahren zur synchronisation von arithmetischen exceptionen in parallelen pipeline-ausfuehrungseinheiten.
DE68928013T2 (de) Adressierung eines Mikrobefehlsspeichers aus verschiedenen Quellen

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: INTELLECTUAL VENTURE FUNDING LLC, CARSON CITY,, US