[go: up one dir, main page]

DE69820027T2 - Vorrichtung zur ausführung virtueller maschinenbefehle - Google Patents

Vorrichtung zur ausführung virtueller maschinenbefehle Download PDF

Info

Publication number
DE69820027T2
DE69820027T2 DE69820027T DE69820027T DE69820027T2 DE 69820027 T2 DE69820027 T2 DE 69820027T2 DE 69820027 T DE69820027 T DE 69820027T DE 69820027 T DE69820027 T DE 69820027T DE 69820027 T2 DE69820027 T2 DE 69820027T2
Authority
DE
Germany
Prior art keywords
command
native
commands
virtual machine
processor
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
DE69820027T
Other languages
English (en)
Other versions
DE69820027D1 (de
Inventor
Menasshe Menno LINDWER
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.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
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 Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Application granted granted Critical
Publication of DE69820027D1 publication Critical patent/DE69820027D1/de
Publication of DE69820027T2 publication Critical patent/DE69820027T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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 OR CALCULATING; 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

  • Die Erfindung betrifft eine Verarbeitungseinrichtung zum Ausführen virtueller Maschinenbefehle; wobei die Verarbeitungseinrichtung umfasst: einen Befehlsspeicher zum Speichern von Befehlen einschließlich zumindest einem der virtuellen Maschinenbefehle; einen Mikrocontroller mit einem Prozessor, der einen zuvor bestimmten Mikrocontrollerkern zum Ausführen nativer Befehle aus einem zuvor bestimmten Satz von mikrocontrollerspezifischen Befehlen umfasst; wobei die nativen Befehle sich von den virtuellen Maschinenbefehlen unterscheiden; und einen Vorprozessor mit: einem Umsetzer zum Umsetzen zumindest eines virtuellen Maschinenbefehls, der aus dem Befehlsspeicher abgerufen worden ist, in zumindest einen nativen Befehl; und einem Zuführmittel, um native Befehle dem Mikrocontrollerkern zur Ausführung zuzuführen.
  • Die Erfindung betrifft weiter einen Vorprozessor zur Verwendung mit einem Mikrocontroller mit einem Prozessor, der einen zuvor bestimmten Mikrocontrollerkern zum Ausführen nativer Befehle aus einem zuvor bestimmten Satz von mikrocontrollerspezifischen Befehlen umfasst;
    welcher Vorprozessor umfasst: einen Umsetzer zum Umsetzen zumindest einen virtuellen Maschinenbefehls, der aus einem Befehlsspeicher abgerufen worden ist, in zumindest einen nativen Befehl; wobei die nativen Befehle sich von den virtuellen Maschinenbefehlen unterscheiden; und einem Zuführmittel, um native Befehle dem Mikrocontrollerkern zur Ausführung zuzuführen.
  • Zunehmend werden Quellenprogramme in Befehlen einer virtuellen Maschine ausgedrückt (in sie kompiliert) statt in nativen Befehlen eines Mikrocontrollers, auf dem das Programm auszuführen ist. Ein Hauptgrund für die Verwendung einer virtuellen Maschine ist die Portabilität von Programmen zwischen unterschiedlichen Maschinen (Plattformen). Ein in virtuellen Maschinenbefehlen der virtuellen Maschine ausgedrücktes Programm kann relativ einfach auf mehreren konkreten Maschinen ausgeführt werden, bei Verwendung geeigneter Interpreter, die auf diesen Maschinen arbeiten. Derzeit ist eine treibende Kraft, portable Programme zu verwenden, Java, wobei Java-Programme (als Applets bezeichnet) über Internet ausgetauscht werden und auf unterschiedlichen nativen Maschinen unter Verwendung von Prozessoren mit unterschiedlichen Befehlssätzen ausgeführt werden können. Mit Hilfe eines Compilers werden Java-Applets in Java-Bytecodes (JBCs) ausgedrückt, die die Befehle der Java Virtual Machine (JVM) bilden. Für eingebettete Anwendungen ist eine weitere treibende Kraft, virtuelle Maschinen zu verwenden, der Bedarf an kompaktem Code. Da der Umfang von Software kontinuierlich zunimmt, werden Softwarekompressionstechniken, die wegen gewisser Anfangskosten bisher nicht interessant waren, jetzt möglich. Eine solcher Techniken ist, eine geeignete virtuelle Maschine für eine spezielle eingebettete Anwendung zu wählen, sodass das Programm in den virtuellen Maschinenbefehlen kompakter ausgedrückt werden kann als in den nativen Befehlen. Ein Beispiel für eine solche virtuelle Maschine ist eine Stapelmaschine, die für ihre kompakte Darstellung bekannt ist. Eine spezielle virtuelle Maschine für eine eingebettete Anwendung kann definiert werden, indem zuerst das Quellenprogramm in virtuellen Maschinenbefehlen einer gewählten virtuellen Maschine, wie z. B. a Stapelmaschine, ausgedrückt wird und indem zusätzlich Sequenzen aus virtuellen Maschinenbefehlen, die häufig in dem kompilierten Code auftreten, durch neu definierte zusätzliche virtuelle Maschinenbefehle ersetzt werden, wobei z. B. ein einziger neuer Befehl eine Sequenz aus vier vorhandenen Befehlen ersetzt.
  • Herkömmlicherweise werden Programme, die in virtuellen Maschinenbefehlen ausgedrückt sind, mit Hilfe von Softwareinterpretation ausgeführt. Der Prozessor (CPU) führt ein spezielles Interpreter-Programm aus, wobei der Prozessor in einer Schleife einen virtuellen Maschinenbefehl abruft, ihn in eine Sequenz aus nativen Befehle des Mikrocontrollerkerns des Prozessors decodiert und jeden nativen Befehl ausführt. Diese Technik ist langsam und erfordert ein zusätzliches Interpreter-Programm, das relativ groß sein kann. Zur Erhöhung der Ausführungsgeschwindigkeit wird die sogenannte Just-In-Time-(JIT)-Kompiliertechnik verwendet. Kurz vor dem Starten der Ausführung eines in virtuellen Maschinenbefehlen ausgedrückten Softwaremoduls, wird das Modul in nativen Code kompiliert (ausgedrückt in nativen Maschinenbefehlen). Auf diese Weise muss das Modul zusätzlich zu dem Code für den Compiler zweimal gespeichert werden. Die zusätzlichen Speicheranforderungen der Softwareinterpretation sind für eingebettete Systeme unerwünscht. Stattdessen wird vorgezogen, einen Hardware-Interpreter zu verwenden. Ein Hardware-Interpreter ist an sich in Form eines Prolog-Vorprozessors für den abstrakten Befehlssatz von Warren bekannt. In dem Beitrag "A Prolog pre-processor for Warren's abstract instruc tion set" von B. Knödler und W. Rosenstiel, Microprocessing and Microprogramming 18 (1986) S. 71–81, wird ein Vorprozessor zum Interpretieren von Programmen beschrieben, die in der Prolog-Programmiersprache zum Laufen auf einem 68000-Prozessor von Motorola (MC68000) geschrieben sind. Zum Übersetzen des Prolog-Quellenprogramms in Befehle, die von Herrn Warren definiert worden sind und die im Allgemeinen zum Ausführen von Prolog-Programmen verwendet werden, wird ein Compiler verwendet. Der Satz Warren-Befehle bildet eine virtuelle Maschine, die zum Ausführen von Prolog-Programmen entworfen sind. Die Sequenz aus Warren-Befehlen, die sich aus der Kompilation ergibt, wird von dem MC68000 mit Hilfe des Vorprozessors ausgeführt. Nach dem Einschalten führt der MC68000 zuerst einen Bootvorgang aus, indem er native MC68000-Befehle ausführt. Am Ende des Bootvorgangs ist der MC68000 bereit, um die Ausführung eines Prolog-Programms zu initiieren. Dieses wird durch Springen zu einem zuvor bestimmten Adressenbereich gestartet. Der Vorprozessor ist eine speicherabgebildete Einrichtung, die auf diesen Bereich abgebildet ist. Wenn der Vorprozessor adressiert wird, liest er einen Warren-Befehl (des übersetzten Prolog-Programms) aus seinem eigenen RAM, synthetisiert adaptiv eine Sequenz aus MC68000-Befehlen und Konstanten und sendet diese direkt zur CPU zur Ausführung. Die MC68000-Befehle für jeden Warren-Befehl sind im ROM des Vorprozessors gespeichert. Im Allgemeinen übersetzt der Vorprozessor einen Warren-Befehl in eine Sequenz aus MC68000-Befehlen. Der Vorprozessor enthält seinen eigenen RAM-Controller und ROM-Controller, die die Adressen für den RAM und ROM des Vorprozessors generieren. Der RAM-Controller verwaltet den RAM-Befehlszeiger. Jede aufeinander folgende Leseoperation des MC68000 führt dazu, dass der Vorprozessor den nächsten Befehl (und optionale Konstanten) der Sequenz zur CPU sendet. Wenn die Sequenz abgeschlossen ist, führt eine nächste Lese-Operation dazu, dass der erste Befehl der Sequenz dem nächsten Warren-Befehl des zur CPU gesendeten Programms entspricht. Nach einer Unterbrechung führt eine wiederholte Lese-Operation der CPU zum erneuten Senden des letzten Befehls (and optionaler Konstanten).
  • EP-A2-772122 offenbart das Übersetzen von CISC-Befehlscode in RISC-Befehlscode, wobei die CISC-Granularität bei der Unterbrechungsbehandlung erhalten bleibt. EP-A2-263288 offenbart Emulationsausführung von Quellenbefehlen mit Gleitkomma. US-A04524415 offenbart einen Datenprozessor als virtuelle Maschine, der einen fehlerhaften Befehl ausschließen kann, während die Fehlerursache behoben wird. EP-A2-355961 offenbart einen Mikroprozessor, der als zwei virtuelle Prozessoren konfiguriert ist, die gesonderte Programmcontroller und eine gemeinsame Speicher- und Ausführungseinheit haben und als zweistufige Pipeline angeordnet sind.
  • Der Erfindung liegt als Aufgabe zugrunde, eine Prozessoreinrichtung der dargelegten Art zu verschaffen, die zur Verwendung mit einem Mikrocontroller geeignet ist, der mehr als einen Befehl gleichzeitig enthält.
  • Zur Lösung dieser Aufgabe ist der Prozessor von einen Typ, der nach dem Auftreten einer zuvor bestimmten Bedingung, wie z. B. einer Unterbrechung, Wiederzuführung bis zu einem zuvor bestimmten Maximum von n nativen Befehlen anfordert, mit n > 1; und umfasst das Zuführmittel Mittel, um, in Reaktion darauf, dass der Prozessor die Wiederzuführung einer Anzahl nativer Befehle anfordert, die angeforderten nativen Befehle erneut zuzuführen. Der Erfinder hat erkannt, dass moderne Prozessoren mehrere native Befehle gleichzeitig umfassen können, wobei die Ausführung des Befehls noch nicht begonnen worden ist oder noch nicht abgeschlossen ist, und dass es zum Erhöhen der Leistungsfähigkeit wünschenswert ist, die Fähigkeit des Prozessors, mehr als einen Befehl zu enthalten, auszunutzen. Der Erfinder hat die Erkenntnis gewonnen, dass zum Umgang mit der Situation, in der der Prozessor zumindest einige der bereits geladenen Befehle wegwirft und in einem späteren Stadium Wiederzuführung mehrerer Befehle anfordert (z. B. beim Auftreten bestimmter Bedingungen, wie z. B. einer Unterbrechung), ein Wiederzuführungmechanismus zu Wiederzuführung der angeforderten nativen Befehle zum Prozessor benötigt wird.
  • Die Erfindung ist gemäß Anspruch 1 definiert.
  • Gemäß der in dem abhängigen Anspruch 2 definierten Maßnahme umfasst der Vorprozessor einen Zuführspeicher, wie z. B. einen FIFO, zum Speichern von zuletzt zugeführten Befehlen und zur Wiederzuführung aus dem Zuführspeicher, wobei eine einfache und effektive Weise der Wiederzuführung der Befehle verschafft wird. Angesichts der Tatsache, dass im Allgemeinen ein virtueller Maschinenbefehl in eine Sequenz aus mehr als einem nativen Befehl umgewandelt wird, kann der erste erneut zuzuführende native Befehl ein beliebiger Befehl der Sequenz sein. Außerdem kann der native Befehl einem früheren virtuellen Maschinenbefehl entsprechen als dem derzeitigen. Schließlich kann die Sequenzlänge für unterschiedliche virtuelle Maschinenbefehle unterschiedlich sein. Verwendung des Zuführspeichers ermöglicht es, in einfacher Weise native Befehle aus dem Speicher erneut zuzuführen, statt virtuelle Maschinenbefehle und die entsprechenden nativen Befehle wieder aufzufinden.
  • Gemäß der in dem abhängigen Anspruch 3 definierten Maßnahme können Befehle, die aktiv in der Pipeline des Mikrocontrollers verarbeitet werden, erneut zugeführt werden. Dies macht den Vorprozessor besonders zur Verwendung in Kombination mit einem RISC-Prozessor geeignet, der gewöhnlich eine Pipeline-Architektur hat.
  • Gemäß der in dem abhängigen Anspruch 4 definierten Maßnahme können in dem Befehlscache des Prozessors gespeicherte Befehle erneut zugeführt werden. Dies macht den Vorprozessor zur Verwendung in Kombination mit modernen Prozessoren, wie z. B. RISC-Prozessoren geeignet, die gewöhnlich einen Befehlscache aufweisen.
  • Gemäß der in dem abhängigen Anspruch 5 definierten Maßnahme können im Cache gespeicherte oder in der Pipeline verarbeitete Befehle erneut zugeführt werden.
  • Gemäß der in dem abhängigen Anspruch 6 definierten Maßnahme ist der Zuführspeicher imstande, zusätzlich zu Befehlen, die eventuell erneut zugeführt werden müssen, auch Befehle zu speichern, die zum ersten Mal zugeführt werden müssen. Auf diese Weise kann der Vorprozessor vorab native Befehle erzeugen, bevor der native Befehl tatsächlich angefordert wird, wobei mögliche Verzögerungen beim Zuführen eines erstmalig angeforderten Befehls zum Prozessor vermieden werden. Außerdem erlaubt dies die Verwendung nur eines einzigen Zuführmechanismus, der für das Zuführen von erstmalig angeforderten Befehlen und das erneute Zuführen von Befehlen sorgt.
  • Die in dem abhängigen Anspruch 7 definierte Maßnahme zeigt eine einfache und effektive Weise, um erstmaliges Zuführen und Wiederzuführen zu vereinigen. Die Befehle, die bereits zugeführt sind, und der (die) noch zuzuführenden Befehle) werden hintereinander in dem Zuführspeicher, wie z. B. einem FIFO, gespeichert. Logisch behält der Vorprozessor einen Zeiger bei, der eine Speicherstelle in dem Zuführspeicher anzeigt, die den Befehl enthält, von dem erwartet wird, dass er als nächster angefordert wird (d. h. den ersten Befehl, der noch nicht zuvor angefordert worden ist). In der Praxis kann diese Speicherstelle immer an einer festen Position des Zuführspeichers lokalisiert sein, sodass kein gesonderte Zeiger beibehalten zu werden braucht. Der Vorprozessor umfasst einen Zähler, der eine Adresse des nativen Befehls anzeigt, von dem erwartet wird, dass er vom Prozessor als nächster zum erstmaligen Zuführen angefordert wird. Normalerweise wird jedes Mal, das ein nativer Befehl erstmalig zugeführt wird, der Zähler erhöht. Der Prozessor zeigt (unter Verwendung eines Befehlszeigers) eine Adresse des Befehls an, der als nächster vom Prozessor benötigt wird. Dies kann eine Anforderung für eine erstmalige Zuführung oder eine Wiederzuführung eines Befehls sein. Der Vorprozessor vergleicht die angeforderte Adresse mit der im Zähler gespeicherten Adresse. Anhand des Offset wird der Befehl im Zuführspeicher lokalisiert. Der Zähler kann beispielsweise die Adresse des Befehls speichern, von dem erwartet wird, dass er als nächster angefordert wird, wobei diese um eins höher ist als die Adresse des zuletzt zugeführten Befehls. Wenn der Prozessor tatsächlich diesen neuen Befehl anfordert, ist der Offset gleich null. Wenn der Logikzeiger auf die Stelle des neuen Befehls weist, wird der an dieser Stelle gespeicherte Befehl dem Prozessor zugeführt. Wenn der Prozessor Wiederzuführung des vorhergehenden Befehls anfordert, kann der Offset eins oder minus eins sein (in Einheiten eines Befehls gezählt, was in Einheiten von Bytes für einen 32-Bit-Befehl 4 sein kann). Durch Subtrahieren (oder Zuführen) des Offset von dem Zeiger aus wird der angeforderte Befehl lokalisiert. Es versteht sich auch, dass der Zähler und der Logikzeiger nicht die genaue Adresse/Stelle des Befehls zu speichern brauchen, von dem erwartet wird, dass er als nächster angefordert wird. Beispielsweise kann der Logikzeiger auch den letzten zugeführten Befehl anzeigen.
  • Die in dem abhängigen Anspruch 8 definierte Maßnahme zeigt eine alternative Anordnung, bei der kein zusätzlicher Zuführspeicher benötigt wird. Stattdessen speichert der Vorprozessor Zustandsinformationen, die ein erneutes Erzeugen der von dem Prozessor zur Wiederzuführung angeforderten Befehle ermöglichen. Als Beispiel können, statt Zuführbefehle in einem Zuführspeicher zu speichern, auch Zeiger, die Befehle oder Informationen anzeigen, die zum anfänglichen Erzeugen der Befehle verwendet worden sind, in einem Speicher gespeichert werden.
  • Bei der in dem abhängigen Anspruch 9 definierten Maßnahme ist ein Teil des Zustands in dem Befehlszeiger des Mikrocontrollers gespeichert, was die Kosten des Vorprozessors verringern kann.
  • Bei der in dem abhängigen Anspruch 10 definierten Maßnahme umfasst der Vorprozessor für zumindest einen virtuellen Maschinenbefehl eine entsprechende Übersetzungstabelle, um den virtuellen Maschinenbefehl in eine Sequenz aus nativen Befehlen zu übersetzen. Die Übersetzungstabelle kann beispielsweise im ROM gespeichert sein. Der niedrigstwertige Teil des Befehlszeigers des Prozessors wird verwendet, um anzuzeigen, welcher der nativen Befehle in der Tabelle benötigt wird (d. h. der niedrigstwertige Teil des Befehlsszeigers wirkt als Übersetzungstabellenoffsetindikator). Im normalen Betrieb erhöht der Prozessor den Befehlszeiger automatisch. Vorteilhafterweise braucht der Vorprozessor keinen eigenen Zähler zu speichern und diesen Zähler zu erhöhen, um den als nächsten zu lesenden erwarteten nativen Befehl anzuzeigen. Wenn der Prozessor eine Wiederzuführung anfordert, wird der Prozessor automatisch den Befehlszeiger auf einen vorhergehenden Wert setzen. Auf diese Weise kann auch automatisch für Wiederzuführung gesorgt werden.
  • Die in dem abhängigen Anspruch 11 definierte Maßnahme verschafft eine wirksame Möglichkeit, um zusätzlich zu dem Übersetzungstabellenoffset auch die Übersetzungstabelle zu bestimmen, in der der angeforderte native Befehl lokalisiert ist. Ein zuvor bestimmter weiterer Teil des Befehlsszeigers umfasst einen virtuellen Maschinenbefehlszeiger, der einen virtuellen Maschinenbefehl in dem Befehlsspeicher anzeigt. Dieser virtuelle Maschinenbefehlszeiger kann als Programmzähler einer virtuellen Maschine angesehen werden, der jedes Mal erhöht werden muss, wenn ein neuer virtueller Maschinenbefehl benötigt wird. Der Vorprozessor ruft den durch den virtuellen Maschinenbefehlszeiger angezeigten virtuellen Maschinenbefehl aus dem Befehlsspeicher ab und lokalisiert anhand des abgerufenen virtuellen Maschinenbefehls die Übersetzungstabelle. Der niedrigstwertige Teil des Befehlsszeigers des Prozessors wird dann in der Übersetzungstabelle als Offset verwendet. Immer wenn eine zu einem einzigen virtuellen Maschinenbefehl gehörende Sequenz aus nativen Befehlen abgeschlossen worden ist, kann der virtuelle Maschinenbefehlszeiger gesetzt werden, um den nächsten virtuellen Maschinenbefehl anzuzeigen, beispielsweise indem als letzter nativer Befehl in der Sequenz ein expliziter Sprung verwendet wird, der den virtuellen Maschinenbefehlszeiger auf den Sollwert setzt und den Übersetzungsoffsetteil des Befehlsszeigers zurücksetzt oder durch Verwenden eines oder mehrerer NOP-Befehle (NOP: no operation, Nulloperation), sodass schließlich ein Überlauf des Übersetzungsoffsetteils dazu führt, dass der Prozessor den virtuellen Maschinenbefehlszeiger erhöht. Es versteht sich, dass nicht gefordert wird, dass jede Anforderung aus dem Prozessor für einen Befehl zum Abrufen eines virtuellen Maschinenbefehls aus dem Befehlsspeicher führt. Vorteilhafterweise umfasst der Vorprozessor einen Cache zum Speichern bereits aus dem Befehlsspeicher abgerufener oder abgerufen zu werden erwarteter virtueller Maschinenbefehle.
  • Vorteilhafterweise enthält die Übersetzungstabelle als Alternative zu einem vollständigen nativen Befehl ein natives Befehlsgerippe für zumindest native Befehle mit variablen Teilen. Das Gerippe umfasst zuvor bestimmte feste Teile des nativen Befehls, wie z. B. den Operationscode, während variable Elemente des Befehls, wie z. B. bestimmte Ope randen, adaptiv geladen werden, beispielsweise aus Parametern des entsprechenden virtuellen Maschinenbefehls.
  • Die in dem abhängigen Anspruch 12 definierte Maßnahme verschafft eine Alternative für die Verwendung des virtuelle Maschinenbefehlszeigers. Bei dieser Ausführungsform ist die Übersetzungstabelle in mehrere Subtabellen unterteilt, wobei zumindest eine der Subtabellen eine Sequenz aus nativen Befehlen oder nativen Befehlsgerippen umfasst. Eine Subtabelle kann, aber muss nicht einer vollständigen Sequenz aus nativen Befehlen entsprechen, die einem einzigen virtuellen Befehl entsprechen. In der Praxis kann vorgezogen werden, eine Subtabellengröße von nur 4 oder 8 nativen Befehlen zu wählen, was weniger als die maximale Sequenz nativer Befehle für einen virtuellen Maschinenbefehl sein kann. Der Übersetzungstabellenoffsetindikator zeigt einen Offset in einer der Subtabellen an. Ein zuvor bestimmter weiterer Teil des Befehlsszeigers umfasst einen Subtabellenindikator. Der Vorprozessor nutzt den Wert des Subtabellenindikators, um die tatsächlich beteiligte Subtabelle zu lokalisieren. Vorzugsweise wird im Normalbetrieb der Subtabellenindikator jedes Mal, wenn ein nativer Befehl aus einer nächsten Subtabelle abgerufen wird, um eine Einheit erhöht (unabhängig davon, ob die Subtabelle sich auf den gleichen oder verschiedene virtuelle Maschinenbefehle bezieht). Der Vorprozessor kann Zeiger zu der (den) verwandten Subtabelle(n) für die zuletzt verwendeten Subtabellenindikatoren speichern. Insbesondere für relativ kleine Subtabellen kann eine Sequenz aus nativen Befehlen, die sich auf einen einzigen virtuellen Maschinenbefehl beziehen, durch NOP-Befehle ergänzt werden, um dafür zusorgen, dass die Sequenz an einer Subtabellengrenze endet (Beseitigen der Verwendung von Sprungoperationen, um den Wert des Subtabellenindikatorteils des Befehlsszeigers zu korrigieren). Die meisten Prozessoren können eine Nulloperation bedeutend schneller ausführen als eine Sprungoperation.
  • Die in dem abhängigen Anspruch 13 definierte Maßnahme sorgt dafür, dass keine Blockade-Situation auftreten kann, bei der der Prozessor einen Befehl angefordert hat und den Bus blockiert, bis der Befehl abgegeben worden ist, während der Vorprozessor zuerst einen (virtuellen Maschinen-)Befehl aus dem Befehlsspeicher über den gleichen Bus erhalten muss, bevor er den nativen Befehl abgeben kann.
  • Der erfindungsgemäße Vorprozessor ist in Anspruch 14 definiert.
  • Ausführungsbeispiele der Erfindung sind in der Zeichnung dargestellt und werden im Folgenden näher beschrieben. Es zeigen:
  • 1 vier mögliche Architekturen für das Anordnen des Vorprozessors in der Verarbeitungseinrichtung;
  • 2 eine Übersetzungstabelle zum Übersetzen eines virtuellen Maschinenbefehls in eine Sequenz aus nativen Befehlen;
  • 3 ein Blockschaltbild einer Ausführungsform der Verarbeitungseinrichtung, in der ein Zuführspeicher zur Wiederzuführung von Befehlen verwendet wird;
  • 4 eine uniforme Weise der Zuführung und Wiederzuführung von Befehlen;
  • 5 die Verwendung des Befehlszeigers des Prozessors als Index in die Übersetzungstabelle; und
  • 6 eine alternative Verwendung des Befehlsszeigers.
  • 1 veranschaulicht vier mögliche Architekturen für das Anordnen des Vorprozessors in der Verarbeitungseinrichtung 100. Drei Hauptbestandteile der Verarbeitungseinrichtung 100 sind der Mikrocontroller 110, der Befehlsspeicher 120 und der Vorprozessor 130. In allen Figuren umfasst der Mikrocontroller 110 den Befehlsspeicher 120 und den Vorprozessor 130. Die Verarbeitungseinrichtung 100 wird nicht explizit dargestellt. Durch Kombinieren aller Hauptelemente im Mikrocontroller 110, der vorzugsweise eine Einzelchip-Anordnung ist, kann optimales Leistungsvermögen erreicht werden. Es versteht sich, dass auf Wunsch der Befehlsspeicher 120 und/oder der Vorprozessor 130 außerhalb des Mikrocontrollers 110 lokalisiert werden können, wo der Mikrocontrollerbus 140 außerhalb des Mikrocontrollers 110 verläuft und beispielsweise an einen externen Bus wie z. B. PCI gekoppelt ist.
  • Der Befehlsspeicher 120 enthält virtuelle Maschinenbefehle, wie z. B. Befehle für eine Stapelmaschine. Ein Beispiel für solche virtuellen Maschinenbefehle sind Java-Bytecodes. Der Mikrocontroller 110 umfasst einen Prozessor 112 mit einem zuvor bestimmten Mikrocontrollerkern 114, als native Maschine bezeichnet, zum Ausführen nativer Befehle aus einem zuvor bestimmten Satz von mikrocontrollerspezifischen Befehle. Ein Beispiel für einen zum Ausführen eingebetteter Software geeigneten Mikrocontroller ist ein RISC-Mikrocontroller, wie z. B. die Mikroprozessorreihe MIPS PR3001. Die nativen Befehle des Mikrocontrollerskerns 114 unterscheiden sich von den virtuellen Maschinenbefehlen der virtuellen Maschine. An sich ist der Mikrocontroller 110 nicht imstande, im Befehlsspeicher 120 gespeicherte virtuelle Maschinenbefehle direkt auszuführen. In Reaktion darauf, dass der Prozessor 110 einen Befehl anfordert, gibt der Vorprozessor 130 den nativen Befehl aus. Um den nativen Befehl erzeugen zu können, kann der Vorprozessor 130 unter Verwendung von Abrufmitteln 134 einen virtuellen Maschinenbefehl aus dem Befehlsspeicher 120 abrufen. Der Vorprozessor 130 umfasst einen Umsetzer 132 zum Umsetzen eines aus dem Befehlsspeicher 120 abgerufenen virtuellen Maschinenbefehls in zumindest einen nativen Befehl. Im Allgemeinen wird ein virtueller Maschinenbefehl in eine Sequenz aus nativen Befehlen umgewandelt. Der Vorprozessor 130 umfasst weiter ein Zuführmittel 136, um dem Mikrocontrollerkern native Befehle der Sequenz zur Ausführung zuzuführen. Bei Ausführen eines virtuellen Maschinenprogamms führt der Mikrocontroller 110 praktisch ein vom Vorprozessor 130 generiertes natives Programm aus. Wo normalerweise ein Befehlszeiger des Mikrocontrollers 110 den nächsten Befehl in dem Befehlsspeicher 120 anzeigt, den der Mikroprozessor 110 benötigt, um ihn als nächsten auszuführen, zeigt jetzt der Befehlszeiger dem Vorprozessor 130 an, dass ein nächster nativer Befehl benötigt wird (oder eine Wiederzuführung eines vorhergehenden Befehls). Logisch verwaltet der Vorprozessor 130 einen unabhängigen virtuellen Maschinenbefehlszeiger, der den derzeitigen (oder nächsten) virtuellen Maschinenbefehl in dem Befehlsspeicher 120 anzeigt. Der Mikrocontroller hat keine (explizite) Kenntnis des virtuellen Maschinenbefehls oder des virtuellen Maschinenbefehlszeigers.
  • Der Prozessor 112 ist von einem Typ, der nach dem Auftreten einer zuvor bestimmten Bedingung Wiederzuführung von bis zu einem zuvor bestimmten Maximum von n nativen Befehlen anfordert, mit n > 1. Eine derartige Bedingung kann eine Unterbrechung sein, die bewirkt, dass der Prozessor bereits in dem Prozessor vorhandene Befehle verwirft. Ein Prozessor 112 mit eine k-stufigen Pipeline wird normalerweise gleichzeitig an k Befehlen arbeiten. Das Auftreten der Bedingung kann zum Verwerfen aller k Befehle führen. Ein weiterer Grund zum Verwerfen von mehr als einem Befehl liegt vor, wenn der Prozessor einen Befehlscache 116 zum Speichern von bis zu h Befehlen umfasst. Das Auftreten der Bedingung kann zum Verwerfen aller h Befehle in dem Cache 116 führen. In einem späteren Stadium kann der Prozessor 112 zur Ausführung des virtuellen Maschinenprogramms zurückkehren und Wiederzuführung von mehr als einem Befehl anfordern. Hierzu umfasst das Zuführmittel 136 Mittel, um, in Reaktion darauf, dass der Prozessor 112 die Wiederzuführung einer Anzahl nativer Befehle anfordert, die angeforderten nativen Befehle erneut zuzuführen.
  • Es versteht sich, dass der Befehlsspeicher 120 auch native Befehle enthalten kann. Solche nativen Befehle können beispielsweise zum Initialisieren des Systems verwendet werden oder um zu erlauben, gewisse Softwaremodule, wie z. B. Treiber oder spezielle Teile der eingebetteten Softwareanwendung, für optimales Leistungsvermögen in native Befehle zu kompilieren. Eine Unterscheidung zwischen nativen Befehlen und virtuellen Maschinenbefehlen im Befehlsspeicher 120 kann hinsichtlich der Adresse des Befehls vorgenommen werden, wo ein zuvor bestimmter Adressenbereich für virtuelle Maschinenbefehle zur Verfügung gestellt wird. Andere Alternativen enthalten Verwendung eines speziellen Bit für jeden Befehl, das anzeigt, ob der Befehl ein nativer Befehl oder ein virtueller Maschinenbefehl ist; oder Verwendung eines speziellen Registers, das den derzeitigen Typ des Befehls anzeigt, bei dem der Inhalt des Registers jedes Mal, wenn eine Typänderung auftritt, geändert werden muss. Der Vorprozessor 130 sorgt dafür, dass native Befehle vom Befehlsspeicher 120 unverändert zum Prozessor 112 weitergeleitet werden.
  • In 1A sind die Hauptbestandteile der Verarbeitungseinrichtung über einen allgemeinen Peripherie-Bus 140, wie z. B. den PI-Bus (PI: peripheral interconnect), miteinander verbunden. Der Vorprozessor 130 ist ein Peripheriegerät auf dem Bus. Der Vorprozessor 130 kann als speicherabgebildetes Peripheriegerät wirken, wo ein zuvor bestimmter Adressenbereich dem Vorprozessor zugewiesen wird. In Reaktion darauf, dass der Prozessor 110 auf dem Bus 140 eine Anforderung für einen Befehl mit einer Adresse in diesem Bereich ausgibt, gibt der Vorprozessor 130 den nativen Befehl auf dem Bus 140 aus. Nötigenfalls ruft der Vorprozessor 130 einen virtuellen Maschinenbefehl aus dem Befehlsspeicher 120 über den Bus 140 ab.
  • In 1B und 1C liegt der Vorprozessor 130 zwischen dem Mikrocontroller 110 und dem Befehlsspeicher 120. Falls der Vorprozessor 130 zwischen nativen und virtuellen Maschinenbefehle unterscheiden muss, können diese Konfigurationen die Ausführung von in dem Befehlsspeicher 120 gespeicherten nativen Befehlen verzögern. Der Deutlichkeit halber werden nicht alle in 1A gezeigten Elemente in 1B, 1C und 1D wiederholt.
  • In 1D ist der Vorprozessor 130 im Mikrocontroller 110 eingebettet. Der Vorprozessor 130 liegt vorzugsweise zwischen einem Befehlscache 116 des Mikrocontrollers 110 und dem Kern 114. Diese Konfiguration berücksichtigt optimales Leistungsvermögen, aber erfordert, im Unterschied zu den Konfigurationen von 1A, 1B und 1C Ände rungen am Mikrocontroller 110 und als solcher kann der Vorprozessor 130 nicht für verschiedene Mikrocontrollertypen als Standardentwurf verwendet werden.
  • Der Umsetzer 132 wird zum Umsetzen eines virtuellen Maschinenbefehls, der aus dem Befehlsspeicher 120 abgerufen wurde, in zumindest einen nativen Befehl verwendet. Als Beispiel fhat der Java-Bytecode (ein virtueller Maschinenbefehl) für Ganzzahladdition (0x60) das Addieren der zwei oberen Elemente des Stapels, Entfernen der zwei oberen Elemente vom Stapel und Schieben der Summe auf den Stapel zur Folge. Dieser virtuelle Maschinenbefehl kann in die folgende Sequenz aus Befehlen (native Befehle) für einen MIPS-Prozessor (eine 32-Bit-Maschine) umgewandelt werden, wobei $tosp ein Register ist, das auf die erste leere Stelle des Stapels weist (über der Stapelspitze):
    lw $a0, 4 ($tosp) /* das obere Element des Stapels in Register $a0 laden
    lw $a1, 8 ($tosp) /* das zweite Element des Stapels in $a1 laden
    add $a0, $a1, $a0 /* $a0 und $a1 addieren, Summe in $a0 platzieren
    addi $tosp, $tosp, 4 /* den Stapel um ein Element erniedrigen
    sw $a0, 4 ($tosp) /* die Summe in der neuen Stapelspitze speichern
  • Vorzugsweise umfasst der Umsetzer 132 eine Tabelle zum Umsetzen eines virtuellen Maschinenbefehls in eine Sequenz aus nativen Befehlen. Es kann eine eindimensionale Tabelle verwendet werden, bei der jede Zelle der Tabelle eine Sequenz aus nativen Befehlen für einen einzigen entsprechenden virtuellen Maschinenbefehl umfasst. Die Zellennummer kann dem Wert des entsprechenden virtuellen Maschinenbefehls entsprechen. Als Beispiel kann die Sequenz aus nativen Befehlen für die Java-Ganzzahladdition (0x60) in Zelle 96 (= 0x60 in Hexadezimal-Schreibweise) lokalisiert sein. Da die Länge der Sequenz aus nativen Befehlen für die verschiedenen virtuellen Befehle erheblich variieren kann, sind die Sequenzen vorzugsweise in einer eindimensionalen Tabelle ohne explizite Zellen lokalisiert, wo die Sequenzen einander unmittelbar folgen. Eine derartige Übersetzungstabelle 200 wird in 2 gezeigt, wo die impliziten Zellengrenzen mit gestrichelten Linien angedeutet werden. Um eine Sequenz für einen virtuellen Maschinenbefehl lokalisieren zu können, kann eine Code-Indextabelle 210 verwendet werden, die für jeden virtuellen Maschinenbefehl (VMI 1 bis VMI N) den Anfangspunkt der entsprechenden Sequenz in der Übersetzungstabelle 200 anzeigt. Für die Zelle der Übersetzungstabelle 200, die VMI 3 entspricht, wird die zugehörige Sequenz 220 aus nativen Befehlen NI 1 bis NI M gezeigt.
  • Ein weiteres Beispiel für eine Umsetzung wird für den Java-Bytecode bipush n (zur Vorzeichenerweiterung von Byte n und zum Platzieren des Ergebnisses auf der Spitze des Stapels verwendet) gegeben. Dieser virtuelle Maschinenbefehl besteht aus zwei Bytes (0x16 und n), wobei das erste Byte die Operation spezifiziert und das zweite Byte den Parameter n liefert. Der Befehl kann in die folgende Sequenz aus nativen MIPS-Befehlen umgewandelt werden:
    ori $a0, $0, n /* Register $a0 mit Konstante n * laden/
    sll $a0, $a0, 24 /* um 24 Bits nach links schieben*/
    sra $a0, $a0, 24 /* arithmetisch nach rechts schieben, was Vorzeichenerweiterung bewirkt, durch Nachbilden des letzten am weitesten linken Bit */
    sw $a0, 0 ($tosp) /* Ergebnis auf der neuen Stapelspitze speichern*/
    addi $tosp, –4 /* Stapelgröße erhöhen */
  • Dieses Beispiel veranschaulicht, dass ein virtueller Maschinenbefehl parametrisiert sein kann, wobei einem Operationscode zumindest ein Operand folgt. Vorteilhafterweise umfasst der Umsetzer 132 eine Übersetzungstabelle 200, wo native Befehle entweder durch den vollständigen Code oder durch ein Befehlsgerippe repräsentiert werden. Beispielsweise enthält der Befehl addi $tosp, –4 (letzter Befehl der Sequenz des vorhergehenden Beispiels) keine variablen Teile und kann vollständig als 4-Byte-Eintrag in der Tabelle lokalisiert sein. Der Befehl ori $a0, $0, n (erster Befehl der Sequenz des vorhergehenden Beispiels) enthält einen variablen Teil und kann in der Tabelle als Gerippe lokalisiert sein, wobei der variable Teil (der n ist) nicht spezifiziert ist. Vorzugsweise hat der Eintrag in der Tabelle für ein Befehlsgerippe die gleiche Breite wie ein vollständiger Befehl (z. B. 4 Bytes für einen MIPS-Prozessor), was eine uniforme Tabelle zulässt. Weitere Information kann in der Tabelle (oder in (einer) separaten Tabelle(n)) lokalisiert sein, um anzuzeigen, wie der nicht spezifizierte Teil des nativen Befehlsgerippes ausgefüllt werden sollte. Vorteilhafterweise wird Mikroprogrammierung verwendet, um die nicht spezifizierten Teile auszufüllen. Die weitere Information kann dann Mikrocode umfassen oder anzeigen. Es versteht sich, dass es vorteilhaft ist, für ein Befehlsgerippe eine gleiche Struktur (Breite und Zusammensetzung) zu verwenden wie für einen vollständigen nativen Befehl. Es können jedoch ebenso gut andere Strukturen verwendet werden.
  • Wenn die virtuelle Maschine eine stapelorientierte Maschine ist, werden vorzugsweise der Stapel oder zumindest die oberen Elemente des Stapels auf Register des Mikrocontrollers 110 abgebildet. Auf diese Weise wird der Speicherstapel (mit dem virtuellen Maschinenstapel) auf den Registerstapel abgebildet. Unter der Annahme, dass die Re gister $r1, $r2 und $r3 drei aufeinander folgende Elemente des Speicherstapels enthalten, wobei anfangs $r1 der ersten leeren Stelle des Speicherstapels (über der Spitze des Stapels) entspricht, $r2 die Spitze des Speicherstapels und $r3 das zweite Element des Speicherstapels enthält, kann der Java-Bytecode bipush n in die folgende Sequenz aus nativen MIPS-Befehlen umgewandelt werden:
    ori $r1, $0, n
    sll $r1, $r1, 24
    sra $r1, $r1, 24
  • Nach dieser Operation enthält $r1 die Spitze des Speicherstapels.
  • Ebenso kann der Java-Bytecode (ein virtueller Maschinenbefehl) für Ganzzahladdition (0x60) in die folgende Sequenz aus nativen MIPS-Befehlen umgewandelt werden, ausgehend von der gleichen Position, wo anfangs $r1 der ersten leeren Stelle des Speicherstapels (über der Spitze des Stapels) entspricht, $r2 die Spitze des Speicherstapels und $r3 das zweite Element des Speicherstapels enthält:
    add $r3, $r2, $r3
  • Nach dieser Operation enthält $r3 die Spitze des Speicherstapels.
  • In den obigen Beispielen wird vorzugsweise die Position der Spitze des Speicherstapels (d. h. welches Register die Spitze des Speicherstapels enthält) mittels eines Registers 138 des Umsetzers 132 angezeigt. Der Umsetzer nutzt das Register 138, als Registerstapelzeiger (RSP), um die geeigneten nativen Befehle zu erzeugen. Vorzugsweise wird Mikroprogrammierung verwendet, um die Registeroperanden der nativen Befehle zu spezifizieren. Auf diese Weise sind auch feste native Befehle variabel geworden, da die Registeroperanden durch den Umsetzer 132 spezifiziert werden müssen. Vorzugsweise werden solche Operanden auch in der Übersetzungstabelle 200 unter Verwendung von Befehlsgerippen gespeichert. Unter der Annahme, dass RSP auf das erste freie Register weist, kann der Java-Bytecode bipush n in die folgende Sequenz aus nativen MIPS Befehlen unter Steuerung des entsprechenden Mikrocodes umgesetzt werden:
    Mikrocode Befehle
    rsp –= 1; ftg = rsp + 1 ori $(rsp + 1), $0, n
    ftg = rsp + 1; fao = rsp + 1 sll $(rsp + 1), $(rsp + 1), 24
    ftg = rsp + 1; fao = rsp + 1 sra $(rsp + 1), $(rsp + 1), 2
    wobei ftg das Zielregister für den Befehl anzeigt, und fa0 und fa1 das erste bzw. zweite Argumentregister für den Befehl anzeigen. Ein folgender Java-Bytecode iadd zum Addieren der zwei oberen Elemente des Stapels würde zu dem folgenden Mikrocode und Befehl führen:
    ftg = rsp + 2; fao = rsp + 2; fa1 = rsp + 1; rsp += 1
    add $(rsp + 2), $(rsp + 2), $(rsp + 1)
  • 3 veranschaulicht eine erfindungsgemäße Ausführungsform, bei der der Vorprozessor 130 einen Zuführspeicher 300 umfasst. Der Zuführspeicher 300 umfasst einen Teil 310 zum Speichern von zumindest n Befehlen, die zuletzt dem Prozessor zugeführt worden sind (wobei n die maximale Anzahl nativer Befehle ist, für die der Prozessor Wiederzuführung anfordern könnte). In Reaktion darauf, dass der Prozessor 112 Wiederzuführung einer Anzahl Befehle anfordert, führt das Zuführmittel 136 die angeforderten Befehle erneut aus dem Zuführspeicher 300 zu. Vorzugsweise hat der Zuführspeicherteil 310 eine FIFO-Funktion 136. Jedes Mal, wenn dem Prozessor 112 erstmalig ein Befehl zugeführt wird, wird der Befehl in den Teil 310 geladen und, falls der Teil 310 voll ist, der älteste Befehl entfernt. Vorteilhafterweise ist für einen Mikrocontroller mit einer k-stufigen Pipeline n gleich oder größer als k. Ebenso ist für einen Prozessor mit einem Befehlscache zum Speichern bis zu h Befehlen n gleich oder größer als h. Wenn sowohl eine k-stufige Pipeline als auch ein Befehlscache zum Speichern bis zu h Befehlen, ist n vorzugsweise gleich oder größer als k + h.
  • Bei einer weiteren erfindungsgemäßen Ausführungsform umfasst der Zuführspeicher 300 Speicherstellen 320 zum Speichern weiterer m nativer Befehle, mit m ≥ 1. Dies erlaubt es dem Vorprozessor 130, bis zu m native Befehle vor dem erstmaligen Zuführen zum Prozessor zu erzeugen und die zusätzlichen Befehle auch im Zuführspeicher 300 zu speichern. Vorzugsweise hat der Teil 320 des Zuführspeichers 300 eine FIFO-Funktion. Jedes Mal, wenn ein Befehl dem Prozessor 112 zugeführt wird, wird dieser Befehl aus dem Teil 320 entfernt und in den Teil 310 eingegeben. Der Vorprozessor 130 gibt die Befehle in den Teil 320 ein. Vorzugsweise werden die zwei Speicherteile 310 und 320 des Zuführspeichers 300 kombiniert. Dies kann mittels eines einzigen einheitlichen FIFO implementiert werden. Andere Alternativen, wie z. B. zyklische Speicher mit entsprechendem Zeiger, können auch verwendet werden.
  • Bei einer weiteren erfindungsgemäßen Ausführungsform wird ein einheitlicher Mechanismus zum erstmaligen Zuführen und zum erneuten Zuführen von nativen Befehlen aus dem Zuführspeicher 300 zum Prozessor 112 verwendet. Der Zuführspeicher 300 speichert Befehle, die hintereinander erstmalig zugeführt werden sollen (Teil 320) oder aufeinander folgend erneut zugeführt werden sollen (Teil 310), wie in 4 veranschaulicht. Der Vorprozessor 130 umfasst einen Zähler 400, der eine Adresse eines nativen Befehls anzeigt, von dem erwartet wird, dass er von dem Prozessor als nächster zum erstmaligen Zuführen angefordert wird. Der Zähler 400 kann als der erwartete Befehlszeiger betrachtet werden. Der Vorprozessor 130 empfängt vom Prozessor einen tatsächlichen Befehlszeiger 410, der den tatsächlich angeforderten nativen Befehl anzeigt. Dies kann der erwartete Befehl sein, aber es kann auch ein bereits zugeführter Befehl sein. Der Vorprozessor 130 umfasst Mittel, um einen Offset einer tatsächlichen Adresse eines vom Prozessor angeforderten Befehls (410) in Bezug auf die in dem Zähler 400 gespeicherte Adresse zu bestimmen. Es wird ein Subtrahierer 420 zum Subtrahieren des erwarteten und des empfangenen Befehlszeigers gezeigt. Wenn der empfangene Befehlszeiger vom erwarteten Befehlszeiger subtrahiert wird, liegt das Ergebnis im Bereich von 0 bis n, wobei 0 anzeigt, dass der erste neue Befehl angefordert ist, und die anderen Werte eine Anforderung für Wiederzuführung anzeigen. Anhand des Offset wird der Befehl im Zuführspeicher 300 lokalisiert und dem Prozessor 112 zugeführt. Vorzugsweise erfolgt das Lokalisieren durch Kombinieren des Offset mit einem Wert eines Zeigers zum Zuführspeicher 300. Es wird ein Zeiger 430 gezeigt, der den ersten nativen Befehl anzeigt, der noch nicht dem Prozessor 112 zugeführt worden ist (d. h. der Befehl, von dem erwartet wird, dass unter normalen Umständen zugeführt wird). Ein Subtrahierer 440 subtrahiert den Offset vom Wert des Zeigers 430. Der resultierende Wert zeigt auf den gewünschten Befehl. Nachdem der Vorprozessor 130 die erwarteten und die empfangenen Befehlszeiger verglichen hat, wird der erwartete Befehlszeiger normalerweise auf den empfangenen Befehlszeiger + 1 Befehl gesetzt (für einen 4-Byte-Befehl kann dies Erhöhen des Zählers 400 um 4 bedeuten). Je nach der für den Zuführspeicher 300 gewählten Anordnung kann es notwendig sein, den Wert des Zeigers 430 jedes Mal, wenn ein Befehl zum ersten Mal dem Prozessor 112 zugeführt wird, um eins zu erhöhen. Wenn beispielsweise für den Zuführspeicher ein Schieberegister verwendet wird, in dem ein erstmaliges Zuführen eines Befehls zu einer Verschiebung führt, ist dies nicht erforderlich.
  • Als Alternative zur Verwendung des Zuführspeichers 300 umfasst der Vorprozessor 130 Speichermittel zum Speichern eines Zustandes des Vorprozessors, der das Regenerieren von zumindest n Befehlen, die zuletzt dem Prozessor zugeführt worden waren, ermöglicht. Beispielsweise könnte der Vorprozessor 130 zum Speichern von Zeigern zu den zuletzt zugeführten n Befehlen oder anderer Zustandsinformation, die es erlaubt, einen dieser Befehle zu lokalisieren oder anderenfalls zu regenerieren, einen Speicher umfassen, der ähnlich dem Zuführspeicher 130 ist. Das Zuführmittel 136 ist ausgebildet, um, in Reaktion darauf, dass der Prozessor die Wiederzuführung einer Anzahl Befehle anfordert, die angeforderten Befehle durch Regenerieren der Befehle auf Basis des gespeicherten Zustandes erneut zuzuführen.
  • Vorteilhafterweis ist bei einer weiteren Ausführungsform das Speichermittel ausgebildet, um zumindest einen Teil des Zustands in einem Befehlszeiger des Mikrocontrollers zu speichern. Dies kann in einfacher Weise ausgeführt werden, indem ein Sprungbefehl an den Mikrocontroller ausgegeben wird, der den Befehlszeiger auf einen Wert setzt, der den Teil des Zustands wiederspiegelt. Das Zuführmittel 136 ist ausgebildet, um den gespeicherten Teil aus dem Befehlszeiger zurückzugewinnen.
  • 5 veranschaulicht das Speichern eines Teils des Zustands in dem Befehlszeiger. Der Vorprozessor 130 umfasst für zumindest einen virtuellen Maschinenbefehl eine entsprechende Übersetzungstabelle zum Übersetzen des virtuellen Maschinenbefehls in eine Sequenz aus nativen Befehlen. Die Übersetzungstabelle kann beispielsweise im ROM gespeichert sein. Die Übersetzungstabelle kann eine Zelle 220 der bereits eher beschriebenen Tabelle sein, für die in 2 ein Beispiel gezeigt wird. Bei dieser alternativen Ausführungsform wird der niedrigstwertige Teil des Befehlsszeigers des Prozessors verwendet, um anzuzeigen, welcher der nativen Befehle (z. B. NI 1 bis NI n) in der Tabelle benötigt wird (d. h. der niedrigstwertige Teil des Befehlsszeigers wirkt als Übersetzungstabellenoffsetindikator). Dieser Teil kann beispielsweise 5 Bits breit sein, was ein Maximum von 32 nativen Befehle für einen virtuellen Maschinenbefehl berücksichtigt, ohne weitere Maßnahmen zu treffen. Beim Normalbetrieb erhöht der Prozessor 112 automatisch den Befehlszeiger. Vorteilhafterweise braucht der Vorprozessor 130 keinen eigenen Zähler zu speichern, wie den Zähler 400, und diesen Zähler zu erhöhen, um den nativen Befehl anzuzeigen, von dem erwartet wird, dass als nächster gelesen wird. Wenn der Prozessor eine Wiederzuführung anfordert, setzt der Prozessor 112 automatisch den Befehlszeiger auf einen vorhergehenden Wert. Auf diese Weise kann auch automatisch für Wiederzuführung gesorgt werden. 5 zeigt eine Struktur des Befehlsszeigers 500 des Prozessors 112, wobei der niedrigstwertige Teil 510, ausgehend vom niedrigstwertigen Bit (LSB) für den Übersetzungstabellenoffsetindikator verwendet wird. Der Vorprozessor 130 umfasst Mittel 540, um den Übersetzungstabellenoffsetindikator 510 aus dem Befehlszeiger 500 zu extrahieren (dies kann selbst eine XOR-Operation am Befehlszeiger 500 mit einer zuvor be stimmten Bitmaske mit "1"-Bits bei der Position des Teils 510 und "0"-Bits für den (die) anderen Teile) beinhalten). Der extrahierte Teil kann direkt als Zeiger in die Übersetzungstabelle oder als Offset verwendet werden.
  • Bei einer weiteren Ausführungsform umfasst ein zuvor bestimmter weiterer Teil 520 des Befehlsszeigers 500 einen virtuellen Maschinenbefehlszeiger, der einen virtuellen Maschinenbefehl in dem Befehlsspeicher 120 anzeigt. Dieser virtuelle Maschinenbefehlszeiger 520 kann als virtueller Maschinenprogrammzähler betrachtet werden, der jedes Mal, wenn ein neuer virtueller Maschinenbefehl erforderlich ist, erhöht werden muss. Wenn der Vorprozessor 130 ein speicherabgebildetes Peripheriegerät ist, werden eines oder mehrere der höchstwertigen Bits des Befehlsszeigers 500 zum Anzeigen des für den Vorprozessor 130 reservierten Adressenbereiches reserviert. Im Prinzip können die verbleibenden Bits für den Teil 520 verwendet werden. Vorzugsweise ist dieser Teil zumindest 16 Bit breit, was 64 KB-Blöcke virtuelles Maschinenprogramm berücksichtigt. Auch der Registerstapelzeiger 138 von 1A kann im Befehlszeiger codiert werden, wodurch die Notwendigkeit, dass der Vorprozessor 130 diesen Zeiger beibehält, beseitigt wird.
  • Der Vorprozessor 130 umfasst Mittel 530 zum Extrahieren des virtuellen Maschinenbefehlszeigers 520 aus dem Befehlszeiger 500. Der Vorprozessor 130 ruft den vom extrahierten virtuellen Maschinenbefehlszeiger angezeigten virtuellen Maschinenbefehl aus dem Befehlsspeicher 120 ab. Anhand des abgerufenen virtuellen Maschinenbefehls lokalisiert der Vorprozessor 130 die Übersetzungstabelle. Der niedrigstwertige Teil 510 des Befehlsszeigers 500 des Prozessors wird dann als Offset in der Übersetzungstabelle verwendet. Mittel 540 werden zum Extrahieren des niedrigstwertigen Teils 510 aus dem Befehlszeiger 500 verwendet. Vorzugsweise werden die Übersetzungstabellen für die jeweiligen virtuellen Maschinenbefehle zu einer einzigen sequentiellen Tabelle kombiniert, wobei eine Zelle für native Befehle reserviert ist, die einem einzigen virtuellen Maschinenbefehl entsprechen. Eine solche Tabelle ist vorstehend beschrieben worden und in 2 ist auch ein Beispiel 200 gezeigt worden. Zum Lokalisieren des relevanten Teil der Übersetzungstabelle 200 für jeden virtuellen Maschinenbefehl kann, wie bereits beschrieben, eine Indextabelle 210 verwendet werden. Zum Addieren der Ausgabe der Indextabelle 200 (d. h. eine Zellenadresse der Übersetzungstabelle 200) zum Übersetzungstabellenoffset (Ausgabe der Extraktionsmittel 540) können Addiermittel 560 verwendet werden. Vorteilhafterweise umfasst der Vorprozessor 130 einen Cache 550 zum Speichern bereits aus dem Befehlsspeicher 120 abgerufener oder abgerufen zu werden erwarteter virtueller Maschinenbefehle. Immer, wenn eine Sequenz aus nativen Befehlen, die zu einem einzigen virtuellen Maschinenbefehl gehört, abgeschlossen worden ist, kann der virtuelle Maschinenbefehlszeiger gesetzt werden, um den nächsten virtuellen Maschinenbefehl anzuzeigen, beispielsweise unter Verwendung eines letzten nativen Befehls in der Sequenz einen expliziten Sprung, der den virtuellen Maschinenbefehlszeiger auf den Sollwert setzt und den Übersetzungsoffsetteil des Befehlsszeigers zurücksetzt. Vorteilhafterweise ist, im Vergleich zu Teil 510, der Teil 520 des Befehlsszeigers hinsichtlich der Wertigkeit der nächste höhere Teil. Auf diese Weise kann der virtuelle Maschinenbefehlszeiger auch erhöht werden, indem einer oder mehrere NOP-Befehle (NOP: no operation, Nulloperation) verwendet werden, sodass schließlich ein Überlauf des Übersetzungsoffsetteils 510 dazu führt, dass der Prozessor 112 den virtuellen Maschinenbefehlszeiger erhöht. Je nach dem Prozessor kann es schneller sein, einen oder mehrere NOP-Befehle auszuführen als einen Sprung. Es versteht sich, dass es nicht erforderlich ist, dass jede Anforderung aus dem Prozessor 112 für einen nativen Befehl dazu führt, das der Vorprozessor 130 einen virtuellen Maschinenbefehl aus dem Befehlsspeicher 120 abruft.
  • Bei einer alternativen, in 6 gezeigten Ausführungsform ist die Übersetzungstabelle 600 in mehrere Subtabellen unterteilt; gezeigt werden Subtabellen 602, 604, 606, 608, und 609. Jede Subtabelle umfasst zumindest einen nativen Befehl oder ein natives Befehlsgerippe, wobei zumindest eine der Subtabellen eine Sequenz aus nativen Befehlen oder nativen Befehlsgerippen umfasst. Vorteilhafterweise beginnt eine Sequenz aus nativen Befehlen für einen virtuellen Maschinenbefehl beim ersten Eintrag einer Subtabelle. Die Subtabelle kann, aber muss nicht, einer vollständigen Sequenz aus nativen Befehlen entsprechen, die einem einzigen virtuellen Maschinenbefehl entsprechen. Die Subtabelle kann kürzer sein als die Sequenz, wobei dann vorgezogen wird, dass die Sequenz sich in der sequentiell nächsten Subtabelle fortsetzt. In der Praxis kann vorgezogen werden, eine Subtabellengröße mit nur 4 oder 8 nativen Befehlen zu wählen, was weniger sein kann als die maximale Sequenz aus nativen Befehlen für einen virtuellen Maschinenbefehl. Der Übersetzungstabellenoffsetindikator 510 zeigt einen Offset in einer der Subtabellen an. Ein zuvor bestimmter weiterer Teil 620 des Befehlsszeigers 500 umfasst einen Subtabellenindikator. Der Vorprozessor 130 nutzt den Wert des Subtabellenindikators 620, um die tatsächlich beteiligte Subtabelle zu lokalisieren. Hierzu umfasst der Vorprozessor 130 Mittel 610 zum Extrahieren des Subtabellenindikators 620 aus dem Befehlszeiger 500. Vorzugsweise wird im Normalbetrieb der Subtabellenindikator jedes Mal, wenn ein nativer Befehl aus einer nächsten Subtabelle abgerufen wird, um eine Einheit erhöht (unabhängig davon, ob die Subtabelle sich auf den gleichen oder unterschiedliche virtuelle Maschinenbefehle bezieht). Als Beispiel sei angenommen, dass die Sequenz aus einem ersten virtuellen Maschinenbefehl in den aufeinander folgenden Subtabellen mit jeweiligen Subtabellennummern 110, 111, und 112 gespeichert ist; dass der nächste virtuelle Maschinenbefehl in Subtabellen 85 und 86 gespeichert ist und dass ein dritter virtueller Maschinenbefehl in Subtabellen 41 und 42 gespeichert ist. Wenn die Subtabellengröße 4 Einträge beträgt (bei Verwendung eines 2-Bit-Übersetzungstabellenoffsetindikators 510), kann die erste Serie aus vier nativen Befehlen (der Subtabelle mit Nummer 110) beispielsweise für den Subtabellenindikator 620 durch einen Wert von 1 angezeigt werden, wobei die Übersetzungstabellenoffsetindikatoren von 0 bis 3 laufen. Die zweite Serie aus vier nativen Befehlen (der Subtabelle mit Nummer 111) wird dann durch einen Wert des Subtabellenindikators 620 von 2 angezeigt werden. Die dritte Serie wird durch einen Wert des Subtabellenindikators 620 von 3 angezeigt werden. Die vierte Serie (wenngleich sie sich auf einen anderen virtuellen Maschinenbefehl bezieht) wird durch den nächsten Wert des Subtabellenindikators 620 angezeigt werden, nämlich 4. Vorteilhafterweise umfasst der Vorprozessor 130 einen Cache 630 zum Speichern von Zeigern zu der (den) zugehörigen Subtabelle(n) für die zuletzt verwendeten Subtabellenindikatoren. In diesem Beispiel würde der Cache Folgendes speichern:
    Subtabellenindikator Subtabellennummer
    1 110
    2 111
    3 112
    4 85
  • Vorzugsweise haben die Subtabellen gleiche Größe. Wenn das so ist, kann ein Befehl für die Wiederzuführung, auf Basis des Subtabellenindikators 620, durch Lokalisieren der Subtabellennummer im Cache 630, Multiplizieren der Subtabellenummer mit der Größe und Addieren des Übersetzungstabellenoffset 510 lokalisiert werden. Vorteilhafterweise haben die Subtabellen gleiche Größe, die eine Potenz von 2 ist. Durch Verwendung eines Übersetzungstabellenoffsetindikators 510 mit entsprechender Länge (ein k-Bit-Indikator entspricht einer Subtabellengröße von 2k) wird der Subtabellenindikator jedes Mall, wenn alle Befehle einer Subtabelle behandelt worden sind, automatisch erhöht (als Ergebnis eines Überlaufs des Übersetzungstabellenoffsetindikators 510). Am Ende einer Sequenz aus nati ven Befehlen für einen einzigen virtuellen Maschinenbefehl können (kann ein) zusätzlicher) NOP-Befehle) verwendet werden, um die Sequenz zu ergänzen, so dass sie an einer Grenze der Subtabelle endet. Auf diese Weise wird der Subtabellenindikator 620 für aufeinander folgende Sequenzen von Befehlen auch automatisch auf einen korrekten Wert erhöht. Alternativ kann ein Sprungbefehl verwendet werden, der den Übersetzungstabellenoffsetindikator 510 zurücksetzt und den Subtabellenindikator 620 erhöht. Für Subtabellen variabler Größe kann eine separate Indextabelle, ähnlich Tabelle 210, zum Lokalisieren der Anfangsadresse einer auf der Subtabellennummer beruhenden Subtabelle verwendet werden. In der Praxis kann es möglich sein, einen sehr kleinen Subtabellenindikator 620 zu verwenden. Für einen Prozessor, der Wiederzuführung von bis zu 16 Befehlen anfordert und bei Verwendung von Subtabellen mit 4 Einträgen genügt es, einen 2-Bit-Subtabellenindikator 620 zu verwenden. In diesem Beispiel braucht der Cache 630 nur 4 Einträge zu haben.
  • Es versteht sich, dass für den Subtabellenindikator 620 auch die tatsächliche Subtabellennummer verwendet werden kann. In diesem Fall sind jedoch Sprünge erforderlich, um den Subtabellenindikator 620 auf den korrekten Wert zu setzen, beispielsweise wenn eine andere Sequenz begonnen wird. Auch die Größe des Subtabellenindikators 620 wird größer sein müssen, um alle Subtabellennummern darstellen zu können. Bei Verwendung einer solchen Anordnung kann die Kombination des Subtabellenindikators 620 und des Übersetzungstabellenoffsetindikators 510 direkt einen Eintrag in der Tabelle 600 anzeigen, wodurch der Cache 630 redundant wird.
  • Bei einer weiteren Ausführungsform gemäß der Erfindung umfasst der Mikrocontroller 110 den Befehlsspeicher 120 und den Vorprozessor 130. Hierbei sind der Prozessor 112, der Befehlsspeicher 120 und der Vorprozessor 130 über einen Mikrocontrollerbus 140 für atomare Transaktion gekoppelt. Mit einem Mikrocontrollerbus für atomare Transaktion ist ein Bus gemeint, auf dem eine Einrichtung zum Ausführen einer Lese-Operation, wie z. B. Abrufen eines Befehls, die folgende Sequenz aus Schritten ausführt:
    • – die Einrichtung erhält ausschließlichen Zugriff auf den Bus,
    • – die Einrichtung fordert Daten an (wie z. B. einen Befehl), indem eine Anforderung auf den Bus gegeben wird,
    • – die Einrichtung erhält die Daten, wenn eine andere Einrichtung die Daten auf den Bus gegeben hat,
    • – die Einrichtung gibt den Bus frei, was anderen Einrichtungen den Zugriff auf den Bus ermöglicht.
  • Der Prozessor 112 fordert (erneutes) Zuführen von nativen Befehlen über den Bus 140 an. Der Vorprozessor 130 ruft auch über den Bus 140 aus dem Befehlsspeicher 120 virtuelle Maschinenbefehle zur Umsetzung in (einen) zugehörige(n) native(n) Befehle) ab. Ohne spezielle Vorkehrungen kann eine Blockade auftreten, wenn der Prozessor 112 einen nativen Befehl angefordert hat und den Bus 140 blockiert, bis der Befehl abgegeben worden ist, während der Vorprozessor 130 zuerst einen (virtuellen Maschinen-) Befehl aus dem Befehlsspeicher 120 über den gleichen Bus 140 erhalten muss, bevor er den nativen Befehl abgegeben kann. Um eine solche Situation zu vermeiden, umfasst der Vorprozessor 130 Mittel, um, in Reaktion darauf, dass der Prozessor 112 (erneutes) Zuführen eines nativen Befehls anfordert, dessen zugehöriger virtueller Maschinenbefehl nicht oder nicht mehr im Vorprozessor 130 vorliegt, einen Nulloperationsbefehl (NOP-Befehl) dem Prozessor 112 zuzuführen, wodurch die von dem Prozessor 112 initiierte Bustransaktion abgeschlossen wird.
  • Vorteilhafterweise ist die Verarbeitungseinrichtung 100 imstande, virtuelle Maschinenbefehle von mehr als einem Programm auszuführen. Die Verarbeitungseinrichtung 100 unterstützt beispielsweise eine Vielzahl von Aufgaben, die in virtuellen Maschinenbefehlen ausgedrückt werden. Optional können einige der Aufgaben auch in nativen Befehlen ausgedrückt werden. Vorzugsweise ist die Unterstützung für Mehrfachaufgaben für virtuelle Maschinen durch eine Aufgabeumschaltroutine in dem auf dem Mikrocontroller 110 laufenden Betriebssystem implementiert. Wenn eine Aufgabenumschaltung ausgelöst wird (z. B. angesteuert durch eine Timerunterbrechung und abgehandelt durch eine Aufgabenumschalt-Unterbrechungshandlungsroutine), wird Information, die für die derzeit aktive Aufgabe relevant ist, zusätzlich zum Sichern von Information aus dem Prozessor 112 vom Vorprozessor 130 aus gesichert. Die Information kann in einem Speicher gesichert werden. Die gleiche Art der Information wird für die neue Aufgabe erneut geladen und dem Vorprozessor 130 und dem Prozessor 112 zur Verfügung gestellt. Bei den in 3 und 4 gezeigten Ausführungsformen enthält die relevante Vorprozessorinformation den Inhalt des Zuführspeichers 300, den Zähler 400 und den Zeiger 430. Bei den in 5 und 6 gezeigten Ausführungsformen enthält die betreffende Vorprozessorinformation den Inhalt des Cache 550 bzw. 630. Um Sichern und Rückspeichern der Information zu ermöglichen, sind die betreffenden Elemente des Vorprozessors 130 von einer Art, die unter Steuerung des Pro zessors 112 gelesen und gesetzt werden kann. Es versteht sich, dass als Alternative der Cache 550 vom Vorprozessor 130 gesichert und rückgespeichert werden kann.
  • Inschrift der Zeichnung
  • 4
    • NEW NEU
    • select selektieren
    • OUT AUS

Claims (14)

  1. Verarbeitungseinrichtung (110) zum Ausführen virtueller Maschinenbefehle; wobei die Verarbeitungseinrichtung umfasst: einen Befehlsspeicher (120) zum Speichern von Befehlen einschließlich zumindest einem der virtuellen Maschinenbefehle; einen Mikrocontroller mit einem Prozessor (112), der einen zuvor bestimmten Mikrocontrollerkern (114) zum Ausführen nativer Befehle aus einem zuvor bestimmten Satz von mikrocontrollerspezifischen Befehlen umfasst; wobei die nativen Befehle sich von den virtuellen Maschinenbefehlen unterscheiden; und einen Vorprozessor (130) mit: einem Umsetzer (132) zum Umsetzen zumindest eines virtuellen Maschinenbefehls, der aus dem Befehlsspeicher (120) abgerufen worden ist, in zumindest einen nativen Befehl; und einem Zuführmittel (136), um native Befehle dem Mikrocontrollerkern (114) zur Ausführung zuzuführen; dadurch gekennzeichnet, dass: der Prozessor (112) von einen Typ ist, der nach dem Auftreten einer zuvor bestimmten Bedingung, wie z. B. einer Unterbrechung, Wiederzuführung bis zu einem zuvor bestimmten Maximum von n nativen Befehlen anfordert, mit n > 1; und das Zuführmittel (136) Mittel umfasst, um, in Reaktion darauf, dass der Prozessor die Wiederzuführung einer Anzahl nativer Befehle anfordert, die angeforderten nativen Befehle erneut zuzuführen.
  2. Verarbeitungseinrichtung nach Anspruch 1, dadurch gekennzeichnet, dass der Vorprozessor einen Zuführspeicher zum Speichern von zumindest n Befehlen umfasst, die zuletzt dem Prozessor zugeführt worden sind; und dass das Zuführmittel ausgebildet ist, um in Reaktion darauf, dass der Prozessor die Wiederzuführung einer Anzahl Befehle anfordert, die angeforderten Befehle aus dem Zuführspeicher erneut zuzuführen.
  3. Verarbeitungseinrichtung nach Anspruch 2, wobei der Mikrocontroller eine Pipeline-Architektur hat, mit einer k-stufigen Pipeline, und n gleich oder größer ist als k.
  4. Verarbeitungseinrichtung nach Anspruch 2, wobei der Prozessor einen Befehlscache zum Speichern von bis zu h Befehlen umfasst und n gleich oder größer ist als h.
  5. Verarbeitungseinrichtung nach Anspruch 2, wobei der Mikrocontroller eine Pipeline-Architektur hat, mit einer k-stufigen Pipeline, und der Prozessor einen Befehlscache zum Speichern von bis zu h Befehlen umfasst und n gleich oder größer ist als k + h.
  6. Verarbeitungseinrichtung nach Anspruch 2, wobei der Zuführspeicher Stellen zum Speichern von zumindest n + m nativen Befehlen umfasst, mit m ≥ 1, und der Vorprozessor ausgebildet ist, in dem Zuführspeicher bis zu m native Befehle zum erstmaligen Zuführen zum Prozessor zu erzeugen und zu speichern.
  7. Verarbeitungseinrichtung nach Anspruch 6, wobei dem Prozessor hintereinander zuzuführende oder erneut zuzuführende Befehle hintereinander gespeichert werden; und der Vorprozessor umfasst: einen Zähler, der eine Adresse eines Befehls anzeigt, von dem erwartet wird, dass er als Nächstes von dem Prozessor zur erstmaligen Zuführung angefordert wird; Mittel, um einen Offset einer derzeitigen Adresse eines vom Prozessor angeforderten Befehls in Bezug auf die in dem Zähler gespeicherte Adresse zu bestimmen; und auf Basis des Offsets den angeforderten Befehl in dem Zuführspeicher zu lokalisieren.
  8. Verarbeitungseinrichtung nach Anspruch 1, dadurch gekennzeichnet, dass der Vorprozessor Speichermittel zum Speichern eines Zustandes des Vorprozessors umfasst, der das Regenerieren von zumindest n Befehlen ermöglicht, die zuletzt dem Prozessor zugeführt worden sind; und dass das Zuführmittel ausgebildet ist, um, in Reaktion darauf, dass der Prozessor die Wiederzuführung einer Anzahl Befehle anfordert, die angeforderten Befehle durch Regenerieren der Befehle auf Basis des gespeicherten Zustandes erneut zuzuführen.
  9. Verarbeitungseinrichtung nach Anspruch 8, dadurch gekennzeichnet, dass das Speichermittel ausgebildet ist, um zumindest eine Teil des Zustandes in einem Befehlszeiger des Mikrocontrollers zu speichern; und dass das Zuführmittel ausgebildet ist, um den gespeicherten Teil aus dem Befehlszeiger zurückzugewinnen.
  10. Verarbeitungseinrichtung nach Anspruch 9, dadurch gekennzeichnet, dass der Vorprozessor für zumindest einen virtuellen Maschinenbefehl eine entsprechende Übersetzungstabelle umfasst, um den virtuellen Maschinenbefehl in eine Sequenz aus nativen Befehlen zu übersetzen; wobei die Tabelle native Befehle und/oder native Befehlsgerippe umfasst; dass der Zustand einen Übersetzungstabellenoffsetindikator umfasst; und dass das Speichermittel ausgebildet ist, um den Übersetzungstabellenoffsetindikator in einem zuvor bestimmten niedrigstwertigen Teil des Befehlszeigers des Mikrocontrollers zu speichern; und dass das Zuführmittel ausgebildet ist, um einen nativen Befehl oder ein natives Befehlsgerippe in der Übersetzungstabelle unter Steuerung des Übersetzungstabellenoffsetindikators in dem Befehlszeiger zu lokalisieren.
  11. Verarbeitungseinrichtung nach Anspruch 10, dadurch gekennzeichnet, dass der Zustand weiter einen virtuellen Maschinenbefehlszeiger umfasst, der einen virtuellen Maschinenbefehl in dem Befehlsspeicher anzeigt; und dass das Speichermittel ausgebildet ist, um den virtuellen Maschinenbefehlszeiger in einem zuvor bestimmten weiteren Teil des Befehlszeigers des Mikrocontrollers zu speichern; und dass der Vorprozessor Mittel zum Holen eines virtuellen Maschinenbefehls aus einer Stelle in dem Befehlsspeicher umfasst, die von dem virtuellen Maschinenbefehlszeiger in dem Befehlszeiger des Mikrocontrollers angezeigt wird, und dass das Zuführmittel ausgebildet ist, um die Übersetzungstabelle zu lokalisieren, die dem abgerufenen virtuellen Maschinenbefehl entspricht.
  12. Verarbeitungseinrichtung nach Anspruch 10, dadurch gekennzeichnet,: dass die Übersetzungstabelle in eine Vielzahl von Subtabellen unterteilt ist, wobei zumindest eine der Subtabellen eine Sequenz aus nativen Befehlen oder nativen Befehlsgerippen umfasst; dass der Übersetzungstabellenoffsetindikator einen Offset in einer Subtabelle anzeigt; dass der Zustand weiter einen Subtabellenindikator umfasst; und dass das Speichermittel ausgebildet ist, um den Subtabellenindikator in einem zuvor bestimmten weiteren Teil des Befehlszeigers des Mikrocontrollers zu speichern; und dass das Zuführmittel ausgebildet ist, um einen nativen Befehl oder ein natives Befehlsgerippe an einer von dem Subtabellenindikator des Befehlszeigers und dem Übersetzungstabellenoffsetindikator des Befehlszeigers angezeigten Stelle in der Subtabelle zu lokalisieren.
  13. Verarbeitungseinrichtung nach Anspruch 1, wobei der Mikrocontroller den Befehlsspeicher und den Vorprozessor umfasst; wobei der Prozessor, Befehlsspeicher und Vorprozessor über einen Mikrocontrollerbus für atomare Transaktion gekoppelt sind; wobei der Mikrocontroller von einem Typ ist, der (erneutes) Zuführen eines nativen Befehls über den Bus anfordert, und der Vorprozessor ausgebildet ist, über den Bus einen virtuellen Maschinenbefehl aus dem Befehlsspeicher zu holen zur Umsetzung eines zugehörigen nativen Befehls oder zugehöriger nativer Befehle; und wobei der Vorprozessor Mittel umfasst, um, in Reaktion darauf, dass der Prozessor die (erneute) Zuführung eines nativen Befehls anfordert, dessen zugehöriger virtueller Maschinenbefehl nicht oder nicht mehr in dem Vorprozessor vorhanden ist, dem Prozessor einen NOP-Befehl (NOP: no operation; Nulloperation) zuzuführen, der die von dem Prozessor initiierte Bustransaktion beendet.
  14. Vorprozessor (130) zur Verwendung mit einem Mikrocontroller mit einem Prozessor (112), der einen zuvor bestimmten Mikrocontrollerkern (114) zum Ausführen nativer Befehle aus einem zuvor bestimmten Satz von mikrocontrollerspezifischen Befehlen umfasst; welcher Vorprozessor (130) umfasst: einen Umsetzer (132) zum Umsetzen zumindest einen virtuellen Maschinenbefehls, der aus einem Befehlsspeicher (120) abgerufen worden ist, in zumindest einen nativen Befehl; wobei die nativen Befehle sich von den virtuellen Maschinenbefehlen unterscheiden; und einem Zuführmittel (136), um native Befehle dem Mikrocontrollerkern (114) zur Ausführung zuzuführen; dadurch gekennzeichnet, dass das Zuführmittel (136) Mittel umfasst um, um, in Reaktion darauf, dass der Prozessor (112) die Wiederzuführung von mehr als einem nativen Befehl anfordert, die angeforderten nativen Befehle erneut zuzuführen.
DE69820027T 1997-10-02 1998-09-17 Vorrichtung zur ausführung virtueller maschinenbefehle Expired - Lifetime DE69820027T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP97203033 1997-10-02
EP97203033 1997-10-02
PCT/IB1998/001432 WO1999018484A2 (en) 1997-10-02 1998-09-17 A processing device for executing virtual machine instructions

Publications (2)

Publication Number Publication Date
DE69820027D1 DE69820027D1 (de) 2004-01-08
DE69820027T2 true DE69820027T2 (de) 2004-07-08

Family

ID=8228783

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69820027T Expired - Lifetime DE69820027T2 (de) 1997-10-02 1998-09-17 Vorrichtung zur ausführung virtueller maschinenbefehle

Country Status (5)

Country Link
US (2) US6349377B1 (de)
EP (2) EP0950216B1 (de)
JP (1) JP3945829B2 (de)
DE (1) DE69820027T2 (de)
WO (1) WO1999018484A2 (de)

Families Citing this family (50)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US7225436B1 (en) 1998-12-08 2007-05-29 Nazomi Communications Inc. Java hardware accelerator using microcode engine
US6826749B2 (en) 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager
WO2000034854A2 (en) * 1998-12-08 2000-06-15 Koninklijke Philips Electronics N.V. Method of executing an interpreter program
US6332215B1 (en) * 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
AU2001238261A1 (en) * 2000-02-14 2001-08-27 Chicory Systems, Inc. Predecoding instructions to determine stack change information
GB2367653B (en) 2000-10-05 2004-10-20 Advanced Risc Mach Ltd Restarting translated instructions
GB2367651B (en) * 2000-10-05 2004-12-29 Advanced Risc Mach Ltd Hardware instruction translation within a processor pipeline
US20020069402A1 (en) * 2000-10-05 2002-06-06 Nevill Edward Colles Scheduling control within a system having mixed hardware and software based instruction execution
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
US6996813B1 (en) * 2000-10-31 2006-02-07 Sun Microsystems, Inc. Frameworks for loading and execution of object-based programs
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
US7711763B2 (en) * 2001-02-21 2010-05-04 Mips Technologies, Inc. Microprocessor instructions for performing polynomial arithmetic operations
US7181484B2 (en) * 2001-02-21 2007-02-20 Mips Technologies, Inc. Extended-precision accumulation of multiplier output
US7599981B2 (en) 2001-02-21 2009-10-06 Mips Technologies, Inc. Binary polynomial multiplier
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US7020874B2 (en) * 2001-03-26 2006-03-28 Sun Microsystems, Inc. Techniques for loading class files into virtual machines
US7096466B2 (en) 2001-03-26 2006-08-22 Sun Microsystems, Inc. Loading attribute for partial loading of class files into virtual machines
US6957428B2 (en) 2001-03-27 2005-10-18 Sun Microsystems, Inc. Enhanced virtual machine instructions
US7543288B2 (en) 2001-03-27 2009-06-02 Sun Microsystems, Inc. Reduced instruction set for Java virtual machines
GB2376100B (en) * 2001-05-31 2005-03-09 Advanced Risc Mach Ltd Data processing using multiple instruction sets
GB2376097B (en) 2001-05-31 2005-04-06 Advanced Risc Mach Ltd Configuration control within data processing systems
GB2376099B (en) * 2001-05-31 2005-11-16 Advanced Risc Mach Ltd Program instruction interpretation
GB2376098B (en) * 2001-05-31 2004-11-24 Advanced Risc Mach Ltd Unhandled operation handling in multiple instruction set systems
US6988261B2 (en) 2001-08-24 2006-01-17 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions in Java computing environments
US8769508B2 (en) 2001-08-24 2014-07-01 Nazomi Communications Inc. Virtual machine hardware for RISC and CISC processors
US7058934B2 (en) 2001-08-24 2006-06-06 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for instantiating Java objects
US7039904B2 (en) 2001-08-24 2006-05-02 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for storing values into local variables
US7228533B2 (en) * 2001-08-24 2007-06-05 Sun Microsystems, Inc. Frameworks for generation of Java macro instructions for performing programming loops
EP1313012A1 (de) * 2001-11-15 2003-05-21 Texas Instruments France Java DSP-Beschleunigung durch Bytekodeoptimierung
US7162620B2 (en) * 2002-03-13 2007-01-09 Sony Computer Entertainment Inc. Methods and apparatus for multi-processing execution of computer instructions
US7131118B2 (en) * 2002-07-25 2006-10-31 Arm Limited Write-through caching a JAVA® local variable within a register of a register bank
US7747989B1 (en) 2002-08-12 2010-06-29 Mips Technologies, Inc. Virtual machine coprocessor facilitating dynamic compilation
JP4127495B2 (ja) * 2002-09-05 2008-07-30 株式会社ルネサステクノロジ 情報処理装置
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
US7694301B1 (en) * 2003-06-27 2010-04-06 Nathan Laredo Method and system for supporting input/output for a virtual machine
JP4224430B2 (ja) * 2003-07-07 2009-02-12 株式会社ルネサステクノロジ 情報処理装置
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
US7278122B2 (en) * 2004-06-24 2007-10-02 Ftl Systems, Inc. Hardware/software design tool and language specification mechanism enabling efficient technology retargeting and optimization
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US8359585B1 (en) * 2007-01-18 2013-01-22 Advanced Testing Technologies, Inc. Instrumentation ATS/TPS mitigation utilizing I/O data stream
US7797512B1 (en) * 2007-07-23 2010-09-14 Oracle America, Inc. Virtual core management
US9524163B2 (en) * 2013-10-15 2016-12-20 Mill Computing, Inc. Computer processor employing hardware-based pointer processing
US10114638B2 (en) * 2014-12-15 2018-10-30 Cisco Technology, Inc. Command message generation and execution using a machine code-instruction
US9477453B1 (en) * 2015-06-24 2016-10-25 Intel Corporation Technologies for shadow stack manipulation for binary translation systems
CN112256331B (zh) * 2020-12-22 2021-04-27 鹏城实验室 虚拟机指令解析加速方法、装置和计算机存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4524415A (en) * 1982-12-07 1985-06-18 Motorola, Inc. Virtual machine data processor
US4841476A (en) * 1986-10-06 1989-06-20 International Business Machines Corporation Extended floating point operations supporting emulation of source instruction execution
US5117387A (en) * 1988-08-18 1992-05-26 Delco Electronics Corporation Microprogrammed timer processor
ES2132073T3 (es) * 1991-01-10 1999-08-16 Siemens Ag Disposicion de circuito para la reproduccion del espacio de direccionamiento logico de una unidad de procesador sobre el espacio de direccionamiento fisico de una memoria.
US5432795A (en) * 1991-03-07 1995-07-11 Digital Equipment Corporation System for reporting errors of a translated program and using a boundry instruction bitmap to determine the corresponding instruction address in a source program
US5577259A (en) 1991-09-19 1996-11-19 Unisys Corporation Instruction processor control system using separate hardware and microcode control signals to control the pipelined execution of multiple classes of machine instructions
US5577295A (en) * 1994-09-27 1996-11-26 Chrysler Corporation Three diameter hinge pin
EP0976029A2 (de) * 1996-01-24 2000-02-02 Sun Microsystems, Inc. Prozessor zur ausführung von befehlssätze die entweder über einem netzwerk, oder von einem lokalen speicher empfangen sind
US6021469A (en) * 1996-01-24 2000-02-01 Sun Microsystems, Inc. Hardware virtual machine instruction processor
US5842017A (en) * 1996-01-29 1998-11-24 Digital Equipment Corporation Method and apparatus for forming a translation unit
DE69719269T2 (de) * 1996-08-01 2003-10-30 International Business Machines Corp., Armonk Absicherung der Unteilbarkeit für eine Ansammlung von transaktionellen Arbeitsschritten in einem Arbeitsflussverwaltungssystem
US6021273A (en) * 1997-06-30 2000-02-01 Sun Microsystems, Inc. Interpreter generation and implementation utilizing interpreter states and register caching
GB2327784B (en) * 1997-07-28 2002-04-03 Microapl Ltd A method of carrying out computer operations
US6112018A (en) * 1997-12-18 2000-08-29 Advanced Micro Devices, Inc. Apparatus for exchanging two stack registers
US6134573A (en) * 1998-04-20 2000-10-17 Ip-First, L.L.C. Apparatus and method for absolute floating point register addressing
US6314445B1 (en) * 1998-08-03 2001-11-06 International Business Machines Coproration Native function calling
US6826749B2 (en) * 1998-12-08 2004-11-30 Nazomi Communications, Inc. Java hardware accelerator using thread manager

Also Published As

Publication number Publication date
DE69820027D1 (de) 2004-01-08
US20020129225A1 (en) 2002-09-12
EP1359501A2 (de) 2003-11-05
JP3945829B2 (ja) 2007-07-18
EP1359501A3 (de) 2007-11-21
US6996703B2 (en) 2006-02-07
EP0950216B1 (de) 2003-11-26
JP2001508907A (ja) 2001-07-03
WO1999018484A3 (en) 1999-06-24
WO1999018484A2 (en) 1999-04-15
EP0950216A2 (de) 1999-10-20
US6349377B1 (en) 2002-02-19

Similar Documents

Publication Publication Date Title
DE69820027T2 (de) Vorrichtung zur ausführung virtueller maschinenbefehle
DE69836902T2 (de) Auf variable instruktionen eingestellter computer
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE68921776T2 (de) Prozessorssimulation.
DE68921775T2 (de) Prozessorssimulation.
DE69737423T2 (de) Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE60203612T2 (de) Datenverarbeitung mit mehrfachbefehlssätzen
DE68927492T2 (de) Verfahren und Vorrichtung zur gleichzeitigen Verteilung von Befehlen an mehrere funktionelle Einheiten
DE60131864T2 (de) Speichern von stapeloperanden in registern
DE60308201T2 (de) Datenverarbeitungssystem mit externen und internen anweisungssätzen
DE69621694T2 (de) Verfahren und Anordnung zur transparenten Emulation einer Befehlssatzarchitektur
DE69701141T2 (de) Multithreaded mikroprozessor ausgestaltet zur ausführung von unterbrechungsverarbeitungsroutinen als threads
DE2251876C3 (de) Elektronische Datenverarbeitungsanlage
DE3685913T2 (de) Vektorenverarbeitung.
DE69614515T2 (de) Software-emulationssystem mit dynamischer übersetzung von emulierten befehlen zur erhöhung der verarbeitungsgeschwindigkeit
DE68929483T2 (de) Datenprozessor mit einer Befehlseinheit, die einen Cachespeicher und einen ROM aufweist.
DE3750625T2 (de) Datenverarbeitungssystem mit zwei Ausführungseinheiten.
DE102007025397B4 (de) System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
DE69636861T2 (de) Mikroprozessor mit Lade-/Speicheroperation zu/von mehreren Registern
DE69623146T2 (de) Verfahren und Vorrichtung zum Koordinieren der Benutzung von physikalischen Registern in einem Mikroprozessor
DE2318069C2 (de) Mikroprogrammierte Rechenanlage mit Erweiterung von Steuerfunktionen mittels festverdrahteter logischer Matrix
DE60115976T2 (de) Rechnersystem und Interruptvorgang
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE60009496T2 (de) Mikroprozessor mit reduziertem kontextumschaltungsaufwand und verfahren

Legal Events

Date Code Title Description
8320 Willingness to grant licences declared (paragraph 23)
8364 No opposition during term of opposition