-
Um
ein Programm zur Verfügung
zustellen, das nicht von einer Plattform eines Computers, wie Hardware
oder einem Betriebssystem, abhängt,
wurde ein Verfahren zum Erstellen einer virtuellen Maschine (VM)
auf jeder Plattform durch eine Software-Technik, oder eine Hardware-Technik,
und Ausführen
eines Zwischencode zwischen einem Quellcode und einem Objektcode
auf der virtuellen Maschine vorgeschlagen. Eine der Programmsprachen, die
ein solches Verfahren übernimmt,
ist Java (R), die eine Form des Zwischencodes übernimmt, die ein Class-File
genannt wird. Festzuhalten ist, dass die Hardware und die virtuelle
Maschine, die auf der Hardware erstellt ist, im Folgenden insgesamt
als Zwischencode-Ausführungssystem
bezeichnet werden kann.
-
Gemäss dem oben
beschriebenen Verfahren, ist es, da ein einzelner Programmcode an
verschiedene Plattformen zur Verfügung gestellt und ausgeführt werden
kann, nicht länger
nötig,
einen Objektcode vorzubereiten, der nur auf jeder Plattform ausgeführt werden
kann. Als Ergebnis kann nicht nur die Verteilung des Programms vereinfacht
werden, sondern die Softwareentwickelung kann auch effektiv gestaltet
werden. Daher wurde die virtuelle Maschine auf Plattformen von verschiedenen
Computern erstellt. Weiterhin wurde in den letzten Jahren die Erstellung
der virtuellen Maschine auf einem Prozessor auch in verschiedenen
elektronischen Vorrichtungen begonnen (die im Folgenden als zusammengesetzte Vorrichtungen
bezeichnet werden), welche einen darin angebrachten Prozessor aufweisen.
-
Hier
ist eine solche Maschine als virtuelle Maschine bekannt, die ein
Interpretierer-Typ ist, die auf der Plattform als Software erstellt
ist, und die der Reihe nach Byte-Code-Befehle übersetzt und ausführt, die
in einem Class-File enthalten sind. Die virtuelle Interpretierer-Typ-Maschine
erfordert ein Verfahren mit Entnehmen von einzelnen Byte-Code-Befehlen
aus dem Class-File und Interpretieren ihrer Inhalte. Dieses Verfahren
wird im Stand der Technik zur Somit wurde ein JIT-Compiler-(Just
In Time Compiler)-System, ein AOT-Compiler-(Ahead Of Time Compiler), oder
dergleichen vorgeschlagen, welcher das Class-File in einen ursprünglichen
Code kompiliert, der jeder Hardware eigen ist, und diesen ausführt, um
die Leistung zu steigern. Weiterhin, wurden Versuche unternommen,
eine virtuelle Maschine in Form von Hardware, wie einem Java-Chip,
zu erstellen, der besonders dazu ausgelegt ist, eine direkte Ausführung der
Byte-Code-Befehle zu ermöglichen.
-
Da
in dem oben erwähnten
Compiler-System, wie JIT oder AOT, der ursprüngliche Code des Prozessors
ausgeführt
wird, ist dies dem Interpretierer-System überlegen, wenn nur die Geschwindigkeit der
Befehlsausführung
betrachtet wird. Das Compiler-System erfordert jedoch einen Arbeitsbereich,
der für
einen Kompilierungsbetrieb selbst notwendig ist, oder einen Bereich,
um den ursprüngliche
Code zu speichern, der viermal bis zehnmal so gross ist, wie das
Class-File, und damit wird ein grösseres Speichervolumen in einer
unvorteilhaften Weise erforderlich als in dem Interpretierer-System.
Ein solches Problem tritt besonders in der zusammengesetzten Vorrichtung
auf, bei der die Beschränkung
in Bezug auf Hardware-Ressourcen strenger ist, als insbesondere
in einem üblichen
Computer. Weiterhin, wenn man mit der Kompilierung nach der Steuerung
der Ausführung
des Class-File beginnt, dann wird der Compiler-Betrieb zur Belastung,
und die ausreichende Leistung kann möglicherweise nicht erlangt
werden.
-
Weiterhin
ist gemäss
dem oben erwähnten Java-Chip,
obwohl das Class-File mit der hohen Leistung ausgeführt werden
kann, ohne eine Kompilierung durchzuführen, eine grosse Menge von
Entwicklungskosten bei der Entwickelung eines solchen zweckorientierten
Chip erforderlich, und die Steigerung der Kosten des Chips selbst
ist zwangsläufig. Weiterhin,
im Lichte der Tatsache, dass eine Versionsaktualisierung oder Fehlerbeseitigung
in der Sprachspezifikation gemäss
dem Fortschritt in der Technologie oder gemäss Markterfordernissen richtig ausgeführt wird,
gibt es einen Aspekt, dass die Erstellung der virtuellen Maschine
in der Form von Hardware nicht notwendigerweise vorzuziehen ist. Insbesondere
ist in der virtuellen Maschine in der zusammengesetzten Vorrichtung
eine Übernahme
des Java-Chip wegen einer Kombination der ausgeprägten Erfordernisse,
Kosten einzusparen, und die Version der Spezifikation in einem kurzen
Zyklus zu aktualisieren, nicht realistisch.
-
Da
es wie oben beschrieben schwierig ist, die virtuelle Maschine, wie
das Compiler-System, oder den Java-Chip in der zusammengesetzten
Vorrichtung oder dergleichen anzuwenden, ist die Steigerung der
Leistung bei der Ausführung
des Class-File in der virtuellen Maschine wünschenswert, die ein Interpretierer-System
aufweist, welches das kompakte Class-File ausführen kann, wie es in der Form
von Software angebracht ist, die mit Änderungen in der Spezifikation
zu Recht kommt, ohne von einer speziellen Hardware Auslegung abhängig zu sein.
-
Eine
Aufgabe der vorliegenden Erfindung ist es, die Leistung eines Zwischencode-Ausführungssystem
zu verbessern, das einen Zwischencode mit einem Interpretierer-System
ausführt.
-
Das
US-Patent 5889996 kann als
ein System zum Ausführen
eines Zwischencodes offenbarend betrachtet werden, der durch Kompilieren
eines Quell-Codes erlangt wird, der in einer vorbestimmten Programmsprache
erzeugt wird, die eine Befehlsgruppe aufweist, wobei das System
einen Prozessor aufweist, der betrieblich dazu geeignet ist zu beurteilen,
ob ein von dem Zwischencode entnommener Befehl zu einer Untergruppe
von Befehlen gehört,
die aus den Befehlen von dieser Befehlsgruppe ausgewählt wurden,
und wenn dies der Fall ist, einen Hochgeschwindigkeitsspeicher zu
verwenden, um den entnommenen Befehl zu interpretieren und auszuführen, und
falls nicht, um einen anderen Speicherteil zu verwenden, als den
genannten Hochgeschwindigkeitsspeicher, um den entnommen Befehl
zu interpretieren und auszuführen,
wobei der Hochgeschwindigkeitsspeicher eine höhere Geschwindigkeit der Übertragung
der Daten an den Prozessor aufweist, als der Speicherabschnitt.
Dieses System verwendet ein Niveau-1-Cache des Prozessors als Hochgeschwindigkeitsspeicher.
Eine ursprüngliche Anwendung wird
von dem System ausgeführt,
um ein Abbild (eine Kopie) eines Codesegments in das Cache zu laden,
wobei das Codesegment in der ursprünglichen Sprache des Prozessors
geschrieben ist, und jeweils für
sich jedem der virtuellen Maschinenbefehle entspricht. Jedes Abbild
eines Codesegments besetzt eine einzelne Cache-Zeile in dem Cache.
Wenn die Codesegmentbilder in das Cache geladen wurden, dann wird
das Cache „gepinnt", so dass der Cache-Kontroller
daran gehindert wird, die Inhalte irgendeiner Cache-Zeile zu ersetzen.
Dann kann der Prozessor während
der folgenden Ausführung
anderer Java-Anwendungen auf die Codesegmente zugreifen, welche
dazu erforderlich sind, um alle Java-Befehle zu interpretieren und
durch Zugriff auf das Cache auszuführen, deren Codesegmentbefehle
in die Caches geladen wurden, anstatt auf den Hauptspeicher zugreifen
zu müssen.
Weniger als eine volle Befehlsgruppe kann in das Cache vorgeladen
werden.
-
Ein
Zwischencode-Ausführungssystem,
das einen ersten Aspekt der vorliegenden Erfindung verkörpert wird,
ist gekennzeichnet durch: ein erstes Software-Interpretationsmodul,
welches dazu eingerichtet ist, in dem genannten Hochgeschwindigkeitsspeicher
gespeichert zu werden, während
das System sich in Betrieb befindet, und zumindest ein Software-Programm
aufweist, welches, wenn von dem Prozessor ausgeführt, den Prozessor dazu veranlasst,
die Beurteilung, ob der entnommene Befehl zu der Untergruppe gehört, und
das Interpretieren und das Ausführen
eines jeden entnommenen Befehls auszuführen, der von dem ersten Software-Interpretationsmodul
so beurteilt wird, als dass er zu der Untergruppe gehört, wobei
das erste Software-Interpretationsmodul
dazu betrieben werden kann, wenn es diese Beurteilung durchführt, einen
Betriebscode des entnommenen Befehls mit entsprechenden Betriebscodes
der Befehle zu vergleichen, die in diese Untergruppe von Befehlen
in absinkender Auftrittshäufigkeit
der Befehle dieser Untergruppe gehören; und ein zweites Software-Interpretationsmodul,
welches dazu eingerichtet ist, in dem genannten Speicherabschnitt
gespeichert zu werden, wenn das System sich in Betrieb befindet,
und welches zumindest ein Software-Programm umfasst, welches, wenn durch
den Prozessor ausgeführt,
den Prozessor dazu veranlasst, die Interpretation und Ausführung eines
verbleibenden Befehls der Gruppe von Befehlen durchzuführen, der
von dem ersten Software-Interpretationsmodul nicht als zu dieser
Untergruppe gehörig bestimmt
wurde.
-
Gemäss einem
zweiten Aspekt der vorliegenden Erfindung wird ein Verfahren zum
Ausführen von
Zwischencode zur Verfügung
gestellt, der durch Kompilieren eines Quellcode erlangt wurde, der
in einer vorbestimmten Programmsprache erzeugt wurde, wobei die
vorbestimmte Programmsprache eine Befehlsgruppe aufweist, und das
Verfahren die Verwendung eines Prozessors umfasst, um zu beurteilen
ob ein Befehl, der von dem Zwischencode entnommen wurde, in eine
Untergruppe von Befehlen gehört,
die von den Befehlen dieser Befehlsgruppe entnommen wurden, und
wenn ja einen Hochgeschwindigkeitsspeicher zu verwenden, um den
entnommenen Befehl zu interpretieren und auszuführen, und wenn nicht, einen
anderen Speicherabschnitt, als den Hochgeschwindigkeitsspeicher
zu verwenden, um den entnommenen Befehl zu interpretieren und auszuführen, wobei
der Hochgeschwindigkeitsspeicher eine höhere Übertragungsgeschwindigkeit
für Daten
an den Prozessor aufweist, als der Speicherabschnitt, gekennzeichnet durch:
Verwenden eines ersten Software-Interpretationsmoduls, welches in
dem Hochgeschwindigkeitsspeicher gespeichert ist und zumindest ein
Software-Programm umfasst, um den Prozessor dazu zu veranlassen,
die Beurteilung, ob der entnommene Befehl zu dieser Untergruppe
gehört,
und die Interpretation und Ausführung
eines jeden entnommenen Befehls auszuführen, von dem das erste Software-Interpretationsmodul
entscheidet, dass er zu dieser Untergruppe gehört, wobei diese Beurteilung
dadurch ausgeführt
wird, dass ein Betriebscode des entnommenen Befehls mit entsprechenden
Betriebscodes der Befehle verglichen wird, die zu dieser Untergruppe
von Befehlen in absteigender Häufigkeitsanordnung
der Befehle dieser Gruppe gehören; und
Verwenden eines zweiten Software-Interpretationsmoduls, das in dem
Speicherabschnitt gespeichert ist und zumindest ein Software-Programm
umfasst, das den Prozessor dazu veranlasst, die Interpretation und
die Ausführung
eines verbleibenden Befehls von dieser Befehlsgruppe auszuführen, die nicht
von dem ersten Software Übersetzungsmodul so
beurteilt wird, dass sie zu dieser Untergruppe gehört.
-
Gemäss einem
dritten Aspekt der vorliegenden Erfindung wird ein Computer-Programm zu Verfügung gestellt,
welches dazu ausgelegt ist, von einem Prozessor ausgeführt zu werden,
um den Prozessor dazu zu veranlassen, Zwischencode auszuführen, der
durch Kompilierung eines Quell-Codes erlangt wird, der in einer
vorbestimmten Programmsprache erzeugt wird, wobei die vorbestimmte
Sprache eine Befehlsgruppe aufweist, der Prozessor Zugriff auf einen
Hochgeschwindigkeitsspeicher und einen anderen Speicherabschnitt
als diesen Hochgeschwindigkeitsspeicher hat, und der Hochgeschwindigkeitsspeicher
eine höhere
Datenübertragungsgeschwindigkeit
an den Prozessor aufweist, als der Speicherabschnitt, und das Programm
umfasst: ein erstes Software-Interpretationsmodul, welches dazu angepasst
ist, in dem Hochgeschwindigkeitsspeicher gespeichert zu werden,
und welches, wenn von dem Prozessor ausgeführt, den Prozessor dazu veranlasst,
zu beurteilen, ob ein aus dem Zwischencode entnommener Befehl zu
einer Untergruppe von Befehlen gehört, die aus den Befehlen dieser
Befehlsgruppe ausgewählt
sind, und jeden entnommenen Befehl zu interpretieren und auszuführen, der
von dem ersten Software-Interpretationsmodul so beurteilt wird,
dass er zu dieser Untergruppe gehört, wobei diese Beurteilung
dadurch ausgeführt
wird, dass ein Betriebscode des entnommenen Befehls mit betreffenden
Betriebscodes der Befehle verglichen wird, die zu dieser Untergruppe
von Befehlen in absinkender Reihenfolge der Auftrittshäufigkeit
der Befehle dieser Untergruppe gehören; und ein zweites Software-Interpretationsmodul,
welches dazu eingerichtet ist, in diesem Speicherabschnitt gespeichert zu
werden, und welches, wenn von dem Prozessor ausgeführt, den
Prozessor dazu veranlasst, einen verbleibenden Befehl dieser Gruppe
von Befehlen, von dem das erste Software-Interpretationsmodul entschieden
hat, dass er zu dieser Untergruppe gehört, zu interpretieren und auszuführen.
-
Diese
Zusammenfassung der Erfindung beschreibt nicht notwendigerweise
alle notwendigen Eigenschaften, so dass die Erfindung auch eine
Unterkombination der beschriebenen Eigenschaften sein kann.
-
Die
Erfindung kann besser verstanden werden, wenn man der nun folgenden
eingehenden Beschreibung in Verbindung mit den beigefügten Zeichnungen
folgt, wobei:
-
1 ist
eine Konzeptansicht, die eine Hardware-Konfiguration zeigt, die
auf eine erste Ausführungsform
gemäss
der vorliegenden Erfindung anwendbar ist;
-
2 ist
ein Funktionsblockdiagramm eines Zwischencode-Ausführungssystems,
welches auf die erste Ausführungsform
gemäss
der vorliegenden Erfindung anwendbar ist;
-
3 ist
ein Flussdiagramm, das den Betrieb des Zwischencode-Ausführungssystems
zeigt, das auf die erste Ausführungsform
gemäss
der vorliegenden Erfindung anwendbar ist;
-
4 ist
ein Funktionsblockdiagramm eines Zwischencode-Ausführungssystem,
welches auf eine zweite Ausführungsform
gemäss
der vorliegenden Erfindung anwendbar ist; und
-
5 ist
ein Flussdiagramm, welches den Betrieb des Zwischencode-Ausführungssystem zeigt,
das auf die zweite Ausführungsform
der vorliegenden Erfindung anwendbar ist.
-
Ein
erstes Ausführungsbeispiel
gemäss
der vorliegenden Erfindung wird zuerst mit Bezug auf die 1, 2 und 3 beschrieben.
-
1 ist
eine Ansicht, die schematisch eine Hardware-Konfiguration eines
Zwischencode-Ausführungssystems 1 gemäss der ersten
Ausführungsform
der vorliegenden Erfindung zeigt, und 2 ist ein
Funktionsblockdiagramm des Zwischencode-Ausführungssystems 1.
-
Wie
in 1 gezeigt, enthält die Hardware-Konfiguration
des Zwischencode-Ausführungssystems 1 einen
Chip 1, der einen Prozessor 2, wie z. B. eine CPU
oder eine MPU, und einen Hochgeschwindigkeitsspeicher 3 aufweist,
und einen Speicherabschnitt 6, der einen RAM 7 und
einen ROM 8 aufweist. Weiterhin kann eine Eingabevorrichtung, eine
Anzeigevorrichtung, eine externe Schnittstelle oder dergleichen
vorhanden sein, aber sie haben nicht direkt etwas mit der Struktur,
und Wirkungen/Vorzügen
dieser Ausführungsform
zu tun, und werden daher weggelassen.
-
Hier
sind der Prozessor 2 und der Speicherabschnitt 6 durch
einen externen Bus 5 verbunden, wohingegen der Prozessor 2 und
der Hochgeschwindigkeitsspeicher 3 durch einen internen
Bus 4 verbunden sind, der eine grössere Busbreite, als der externe
Bus 4 aufweist, und der Hochgeschwindigkeitsspeicher 3 kann
Daten an den Prozessor 2 mit einer höheren Geschwindigkeit übertragen,
als in den Speicherabschnitt 6. Obwohl ein interner Speicher oder
ein Cache-Speicher für
eine solchen Hochgeschwindigkeitsspeicher 3 verwendet werden
kann, wird eine Beschreibung in Bezug auf den Fall gegeben, wo der
interne Speicher in dieser Ausführungsform
verwendet wird.
-
In
der oben beschriebenen Hardware-Konfiguration kann das Zwischencode-Ausführungssystem 1,
welches das Funktionsblockdiagramm, wie in 2 gezeigt,
bildet, dadurch ausgeführt
werden, dass verschiedene Arten von Software unter Verwendung des
Prozessors 2 ausgeführt
werden, die in dem Speicherabschnitt 6 gespeichert sind.
Das Zwischencode-Ausführungssystem 1 führt einen
Zwischencode aus, der nicht von einer Plattform abhängig ist,
und die Ausführung
eines Class-File, das durch Kompilierung eines Quellcodes erlangt
wird, der in der Java Sprache erzeugt wurde, wird in dieser Ausführungsform
beschrieben. Nun wird jeder Funktionsblock beschrieben.
-
Das
Zwischencode-Ausführungssystem 1 enthält einen
Verarbeitungsbefehlerfassungsabschnitt 13, einen ersten
Verarbeitungsbefehlausführungsabschnitt 15,
und einen zweiten Verarbeitungsbefehlausführungsabschnitt 17.
-
Der
Befehlserfassungsabschnitt 13 holt der Reihe nach einen
nächsten
Befehlscode, der aus dem Class-File ausgeführt werden soll, und der geholte Befehlscode
wird zu dem ersten Verarbeitungsbefehlsausführungsabschnitt 15 übertragen.
-
Der
erste Verarbeitungsbefehlsausführungsabschnitt 15 enthält einen
ausgewählten
Verarbeitungsbefehlsbeurteilungsabschnitt 14 und Verarbeitungsmodule 11,
und er weist eine Funktion auf, um der Reihe nach Untergruppen von
Byte-Code-Befehlen zu interpretieren und auszuführen, die aus allen Byte-Code-Befehlen ausgewählt sind,
die in einem Befehlssystems der Java-Sprache enthalten sind. Genauer noch,
in dem ausgewählten
Verarbeitungsbefehlsbeurteilungsabschnitt 14 wird ein Befehlscode,
der von dem Verarbeitungsbefehlserfassungsabschnitt 13 entnommen
wurde, mit jedem Byte-Code-Befehl
verglichen, der in der Untergruppe enthalten ist, und das Verarbeitungsmodul 11,
das dem Byte-Code-Befehl entspricht, wird ausgeführt, wenn sie mit einander übereinstimmen.
Das Verarbeitungsmodul 11 ist ein Software-Programm, das
gemäss
jedem Byte-Code-Befehl zur Verfügung
gestellt wird, der in der Untergruppe enthalten ist, und veranlasst den
Prozessor 2, eine Verarbeitung gemäss einem bestimmten Inhalt
jedes Byte-Code-Befehls auszuführen.
Wenn es keinen gleichen Befehlscode in den Byte-Code-Befehlen gibt,
die in der Untergruppe enthalten sind, dann wird der entnommene
Befehlscode auf den zweiten Verarbeitungsbefehlsausführungsabschnitt 17 übertragen.
-
Der
zweite Verarbeitungsbefehlsausführungsabschnitt 17 enthält einen
nicht gewählten
Verarbeitungsbefehlsspezifikationsabschnitt 16 und ein Verarbeitungsmodul 12,
und hat eine Funktion, um der Reihe nach Byte-Code-Befehle zu interpretieren und
auszuführen,
die nicht in der Untergruppe enthalten sind. Genauer noch wird in
dem nicht ausgewählten
Verarbeitungsbefehlsspezifikationsabschnitt 16 der entnommene
Befehlscode mit jedem der Byte-Code-Befehle verglichen, die nicht in der
Untergruppe enthalten sind. Dann, wenn sie miteinander übereinstimmen,
wird das Verarbeitungsmodul 12, das dem Byte-Code-Befehl
entspricht, ausgeführt. Wie
oben beschrieben, wird die vorbestimmte Verarbeitung in dem Verarbeitungsmodul 11 oder 12 entsprechend
dem entnommenen Befehlscode durch eine Kombination des ersten Verarbeitungsbefehlsausführungsabschnitts 15 und
des zweiten Verarbeitungsbefehlsausführungsabschnitts 17 ausgeführt.
-
Wie
oben beschrieben, werden in dieser Ausführungsform die Byte-Code-Befehle in diejenigen
unterschieden, die in dem ersten Verarbeitungsbefehlsausführungsabschnitt 15 ausgeführt werden, und
diejenigen, die in dem zweiten Verarbeitungsbefehlsausführungsabschnitt 17 ausgeführt werden. Hier
können
die Byte-Code-Befehle in der Java(R)-Sprache ungefähr in vier
operationsgestützte Befehle
eingeteilt werden (iadd, isub, imul, idiv, ...), oder in Bit-Betrieb
gestützte
Befehle (ior, band, ishl, ...), deren Feinheit klein ist, auf Speicherbetrieb
gestützte
Befehle (iload, istore, iaload, ...), deren Feinheit mittel ist,
und Java-eigene Befehle (new, invokespecial, ...), deren Feinheit
gross ist. Weiterhin gibt es allgemein eine Tendenz, dass eine Auftrittshäufigkeit in
dem Class-File bei Befehlen hoch ist, deren Feinheit klein ist,
und sie ist niedrig in den Befehlen, deren Feinheit gross ist.
-
Damit
werden in dieser Ausführungsform
Befehle, deren Grösse
klein ist und deren Auftrittshäufigkeit
gross ist, aus allen Byte-Code-Befehlen vorab ausgewählt, und
die ausgewählten
Byte-Code-Befehle werden in dem ersten Verarbeitungsbefehlsausführungsabschnitt 15 ausgeführt, und
die verbleibenden Byte-Code-Befehle werden in dem zweiten Verarbeitungsbefehlsausführungsabschnitt 17 ausgeführt. Das
bedeutet, der erste Verarbeitungsbefehlsausführungsabschnitt 15 weist
das Verarbeitungsmodul 11 auf, das jedem der gewählten Byte-Code-Befehle
entspricht. Weiterhin vergleicht der ausgewählte Verarbeitungsbefehlsbeurteilungsabschnitt 14 einen
Betriebscode eines vorgegebenen Befehlscodes einzeln mit Betriebscodes
des ausgewählten
Byte-Code-Befehls, und führt
das entsprechende Verarbeitungsmodul 11 aus, wenn sie miteinander übereinstimmen.
Weiterhin hat der zweite Verarbeitungsbefehlsausführungsabschnitt 17 das Verarbeitungsmodul 12,
das jedem der verbleibenden Byte Codes entspricht. Weiterhin vergleicht
der nicht ausgewählte
Verarbeitungsbefehlsspezifikationsabschnitt 16 den Betriebscode
des vorgegebenen Befehlscodes einzeln mit Betriebscodes der verbleibenden
Byte-Code-Befehle, und führt
das Verarbeitungsmodul 12 aus, wenn sie miteinander übereinstimmen.
-
Jedoch
unterscheidet sich ein Byte-Code-Befehl, der eine hohe Häufigkeit
aufweist in Abhängigkeit
von der Umgebung, in der das Zwischencodeausführungssystem 10 angebracht
ist. Zum Beispiel haben der Fall, wo es in einem Mobiltelefon angebracht
ist, der Fall, wo es in einem Autonavigationssystem angebracht ist,
und der Fall, wo es in einem PDA angebracht ist, alle verschiedene
Use-Objekte und Use-Situationen, und damit hat ein Befehl mit einer
hohen Häufigkeit
in einer gegebenen Umgebung nicht notwendigerweise die grosse Häufigkeit
in einem beliebigen anderen System. Daher ist es vorzuziehen, Auftrittshäufigkeiten
der Byte-Code-Befehle gemäss
jeder Umgebung zu untersuchen, in der das Zwischencodeausführungssystem 10 angebracht
ist, und die Byte-Code-Befehle gestützt auf das Untersuchungsergebnis
auszuwählen,
die in dem ersten Verarbeitungsbefehlsausführungsabschnitt 15 ausgeführt werden
sollen.
-
Zusätzlich führt in dieser
Ausführungsform ein
Code des Software-Programms,
das den ersten Verarbeitungsbefehlsausführungsabschnitt 15 darstellt,
der die oben beschriebene Struktur aufweist (erstes Interpretationsmodul)
das Class-File aus, während
der betreffende Code in dem Hochgeschwindigkeitsspeicher 3 gespeichert
wird. Zum Beispiel kann das Zwischencode-Ausführungssystem 10 einen
Code des ersten Verarbeitungsbefehlsausführungsabschnitts 15 in
den Hochgeschwindigkeitsspeicher 3 aus dem Speicherabschnitt 6 kopieren, bevor
das Class-File ausgeführt
wird. Um dies zu erreichen, wird die Anzahl der ausgewählten Byte-Code-Befehle,
die in dem ersten Verarbeitungsbefehlsausführungsabschnitt 15 ausgeführt werden
sollen, angepasst, und das Software-Programm, welches den ersten
Verarbeitungsbefehlsausführungsabschnitt 15 darstellt,
wird auf eine Grösse
gebracht, die in dem Hochgeschwindigkeitsspeicher 3 gespeichert
werden kann.
-
Andererseits
kann ein Code des Software-Programms, das den zweiten Verarbeitungsbefehlsausführungsabschnitt 17 darstellt
(zweites Interpretationsmodul) in dem Speicherabschnitt 6 gespeichert
bleiben.
-
Der
Betrieb des Zwischencodeausführungssystems 10 gemäss dieser
Ausführungsform
wird nun mit Bezug auf 3 beschrieben. Hier weist das Zwischencodeausführungssystem 10 den
Verarbeitungsbefehlserfassungsabschnitt 13 den ersten Verarbeitungsbefehlsausführungsabschnitt 15 einschliesslich
des ausgewählten
Verarbeitungsbefehlsbeurteilungsabschnitts 14 und des Verarbeitungsmoduls 11,
und den zweiten Verarbeitungsbefehlsausführungsabschnitts 17,
einschliesslich des nicht ausgewählten
Verarbeitungsbefehlsspezifikationsabschnitts 16 und des
Verarbeitungsmoduls 12 auf und alle werden dargestellt
durch Ausführen
einer Reihe von Software-Programmen
durch den Prozessor 2 die in dem Speicherabschnitt 6 gespeichert
sind.
-
Zum
Beispiel akzeptiert das Zwischencodeausführungssystem 10 ein
Class-File der Java-Anwendung
von einer nicht beschriebenen Informationseingabeseite, und speichert
das akzeptierte Class-File in dem RAM-Speicher 7 des Speicherabschnitts 6 (S1).
Dann führt
das Zwischencodeausführungssystem 10 das
Software-Programm aus, und führt
weiterhin das Class-File durch eine Reihe von Operationen aus, die
unten erwähnt
werden. In diesem Moment wird das Software-Programm, welches den
ersten Verarbeitungsbefehlsausführungsabschnitt 15 darstellt
(erstes Interpretationsmodul) in dem Hochgeschwindigkeitsspeicher 3 vorab
gespeichert gehalten. Die folgende Operation wird auch auf das Zwischencodeausführungsverfahren
gemäss der
ersten Ausführungsform
angewandt.
-
Der
Verarbeitungsbefehlserfassungsabschnitt 13 wird zuerst
durch Ausführen
des Software-Programms durch den Prozessor 2 dargestellt, und
ein Befehlscode wird aus dem Class-File entnommen (S2).
-
Danach
wird das Software-Programm, welches den ersten Verarbeitungsbefehlsausführungsabschnitt 15 (erstes
Interpretationsmodul) darstellt, welches in dem Hochgeschwindigkeitsspeicher 3 gespeichert
ist, ausgeführt,
wobei die Beurteilung ausgeführt
wird, auf welche der ausgewählten
Byte-Code-Befehle der bei S2 entnommene Befehlscode spezifiziert
werden kann (S3), und das Verarbeitungsmodul 11, welches
dem Befehlscode entspricht, wird wenn möglich ausgeführt (S4).
Genauer gesagt dient die hier ausgeführte Verarbeitung zum Vergleich
des Betriebscodes des entnommenen Befehlscodes mit den Betriebscodes
des entnommenen Byte-Code-Befehls, jeweils der Reihe nach in dem ausgewählten Verarbeitungsbefehlsbeurteilungsabschnitt 14 in
dem ersten Verarbeitungsbefehlsausführungsabschnitt 15,
und zum Ausführen
des entsprechenden Verarbeitungsmodul 11, wenn sie miteinander übereinstimmen.
-
Wenn
festgestellt wird, dass es bei S3 unmöglich ist, nämlich wenn
festgestellt wird, dass der Betriebscode des entnommenen Befehlscode
nicht mit irgendeinem Betriebscode der ausgewählten Byte-Code-Befehle in
dem ausgewählten Verarbeitungsbefehlsbeurteilungsabschnitt 14 übereinstimmt,
dann wird das Software-Programm ausgeführt, welches den zweiten Verarbeitungsbefehlsausführungsabschnitt 17 (zweites
Interpretationsmodul) bildet, einer der verbleibenden Byte-Code-Befehle,
dem der Befehlscode entspricht, wird spezifiziert (S5), und das
Verarbeitungsmodul 12, welches dem spezifizierten Befehlscode
entspricht, wird ausgeführt
(S6). Genauer gesagt dient die hier ausgeführte Verarbeitung dem Vergleich
des Betriebscodes des betreffenden Befehlscodes mit Betriebscodes
der verbleibenden Byte-Codes, der Reihe nach, in dem nicht ausgewählten Verarbeitungsbefehlsspezifikationsabschnitt 16 in
dem zweiten Verarbeitungsbefehlsausführungsabschnitt 17,
und das entsprechende Verarbeitungsmodul 12 wird ausgeführt, wenn
sie miteinander übereinstimmen.
-
Danach
werden die ähnlichen
Verfahren mit Bezug auf den nächsten
Befehlscode ausgeführt,
der in dem Class-File enthalten ist, und das Class-File wird durch
Wiederholung dieser Verfahren ausgeführt.
-
Gemäss der oben
beschriebenen Betriebsweise werden die Byte-Code-Befehle, die aus allen Byte-Code-Befehlen
ausgewählt
werden, durch die Verarbeitung durch Bilden einer inneren Schleife ausgeführt, die
durch das Bezugszeichen L1 gekennzeichnet ist, und die verbleibenden
Byte-Code-Befehle
werden durch eine Verarbeitung ausgeführt, die eine äussere Schleife
bildet, die mit L2 bezeichnet ist.
-
Wie
oben beschrieben, werden in dieser Ausführungsform die Byte-Code-Befehle mit einer geringen
Grösse
und einer hohen Auftrittshäufigkeit zuerst
aus all denjenigen Byte-Code-Befehlen vorab ausgewählt, eine
Interpretation und eine Ausführung der
Befehlscodes in dem ersten Verarbeitungsbefehlsausführungsabschnitt 15 entsprechend
den ausgewählten
Byte-Code-Befehlen
ausgeführt,
und die Befehlscodes, die noch nicht ausgeführt wurden, dann in dem zweiten
Verarbeitungsbefehlsausführungsbefehl 17 interpretiert
und ausgeführt.
Daher kann die Interpretation und Ausführung des Byte-Code-Befehls mit
der höchsten
Auftrittshäufigkeit
nach Priorität
ausgeführt
werden. Zusätzlich,
da das Software-Programm, welches den ersten Verarbeitungsbefehlsausführungsabschnitt 15 (erstes
Interpretationsmodul) bildet, in dem Hochgeschwindigkeitsspeicher 3 gespeichert
ist, kann der erste Verarbeitungsbefehlsausführungsabschnitt 15 eine
Interpretation und Ausführung
des Byte-Code-Befehls mit der hohen Auftrittshäufigkeit mit hoher Geschwindigkeit
ausführen.
Daher können
gemäss
dieser Ausführungsform Byte-Code-Befehle mit
der hohen Auftrittshäufigkeit mit
hoher Geschwindigkeit nach Priorität ausgeführt werden. Andererseits, da
die Byte-Code-Befehle mit der geringen Auftrittshäufigkeit
von dem zweiten Verarbeitungsbefehlsausführungsabschnitt interpretiert
und ausgeführt
werden, kann die Geschwindigkeit beim Ausführen der Byte-Code-Befehle
nicht gesteigert werden. Jedoch ist der Effekt des Ausführens der
Byte-Code-Befehle mit der hohen Auftrittshäufigkeit durch den ersten Verarbeitungsbefehlsausführungsabschnitt 15 mit
hoher Geschwindigkeit sehr hoch, und die Leistung des Zwischencodeausführungssystems 10 kann
verbessert werden, wenn die gesamte Verarbeitungsausführung des
Class-File betrachtet wird.
-
Weiterhin
kann in dieser Ausführungsform das
Software-Programm, welches den Verarbeitungsbefehlsausführungsabschnitt 15 (erstes
Interpretationsmodul) bildet, konfiguriert sein, um optimal zur
Ausführung
der ausgewählten
Befehlscodes zu sein, und die Leistung des Zwischencodeausführungssystems 10 kann
dadurch weiter verbessert werden.
-
Zum
Beispiel kann sowohl das Software-Programm, welches den ersten Verarbeitungsbefehlsausführungsabschnitt 15 (erstes
Interpretationsmodul) bildet, und die Software, welche das zweite
Verarbeitungsbefehlsausführungsmodul 17 (zweites
Interpretationsmodul) bildet, durch Verwendung einer Hochsprache,
wie C oder C++ erzeugt werden, aber die Vorgenannten können durch
Verwendung der Assemblersprache so konfiguriert sein, dass sie optimal sind.
-
Weiterhin
wird, wenn der ausgewählte Verarbeitungsbefehlsbeurteilungsabschnitt 14 den Betriebscode
des entnommenen Befehlscodes mit den Befehlscodes der ausgewählten Byte-Code-Befehle
vergleicht und eine Beurteilung trifft, ob diese miteinander übereinstimmen,
der Vergleich in der Reihenfolge mit dem Byte-Code-Befehl mit höherer Häufigkeit
durchgeführt.
Dies kann vorzugsweise auch auf den nicht ausgewählten Verarbeitungsbefehlsspezifikationsabschnitt 16 angewendet
werden.
-
In
Anbetracht des Computerprogrammprodukts, welches verwendet wird,
um den Zwischencode auszuführen,
ist die Ausführungsform
wie folgt.
-
Das
bedeutet, hier wird ein Computerprogrammprodukt zur Verfügung gestellt,
welches einen Zwischencode ausführt,
der durch Umwandeln eines Source-Code erlangt wird, der in einer
vorbestimmten Programmsprache auf einem Prozessor erzeugt wird,
mit dem der Hochgeschwindigkeitsspeicher 3 und der Speicherabschnitt 6 verbunden
sind, wobei das erste Interpretationsmodul, welches einer Untergruppe
einer Befehlsgruppe der Programmsprache entspricht, in dem Hochgeschwindigkeitsspeicher 3 gespeichert
ist, wobei das erste Interpretationsmodul verwendet wird, um zu
beurteilen, ob ein Befehl, der aus dem Zwischencode entnommen ist,
irgendeinem der Untergruppe entspricht, wobei dieser Befehl ausgeführt wird,
wenn der entsprechende Befehl in der Untergruppe vorhanden ist,
wobei das zweite Interpretationsmodul, das den verbleibenden Befehlen der
Befehlsgruppe entspricht in dem Speicherabschnitt 6 gespeichert
wird, und das zweite Interpretationsmodul verwendet wird, um zu
spezifizieren welchem der verbleibenden Befehle der Befehl entspricht,
und um ihn auszuführen,
wenn sich kein entsprechender Befehl in der Untergruppe befindet.
In diesem Fall wird angenommen, dass die Untergruppe der Befehlsgruppe
der Programmsprache vorher bestimmt wird.
-
Eine
zweite Ausführungsform
gemäss
der vorliegenden Erfindung wird nun mit Bezug auf die 4 und 5 beschrieben.
-
4 ist
ein Funktionsblockdiagramm eines Zwischencodeausführungssystems 20 gemäss der zweiten
Ausführungsform
der vorliegenden Erfindung. In 4 kennzeichnen
gleiche Bezugszeichen Bestandteile, die gleichwertig mit denen in
der ersten Ausführungsform
sind.
-
Das
Zwischencodeausführungssystem 20 gemäss der zweiten
Ausführungsform
ist ähnlich
zu demjenigen gemäss
der ersten Ausführungsform
in der Grundstruktur, aber es unterscheidet sich von diesem dadurch,
dass ein erster ausgewählter Verarbeitungsbefehlsausführungsabschnitt 24 und ein
zweiter ausgewählter
Verarbeitungsbefehlsausführungsabschnitt 26 anstatt
des ersten Verarbeitungsbefehlsausführungsabschnitts 15 in der
ersten Ausführungsform
vorgesehen ist. Eine Beschreibung wird hauptsächlich mit Bezug auf diesen Unterschied
gegeben.
-
Der
erste ausgewählte
Verarbeitungsbefehlsausführungsabschnitt 24 enthält einen
ersten ausgewählten
Verarbeitungsbefehlsbeurteilungsabschnitt 23 und Verarbeitungsmodule 21 und
weist eine Funktion auf, um der Reihe nach eine erste Untergruppe
von Byte-Code-Befehlen zu interpretieren und auszuführen, die
aus allen Byte-Code-Befehlen ausgewählt sind.
-
Der
zweite ausgewählte
Verarbeitungsbefehlsausführungsabschnitt 26 enthält einen
zweiten ausgewählten
Verarbeitungsbefehlsbeurteilungsabschnitt 25 und Verarbeitungsmodule 22 und
weist eine Funktion auf, um der Reihe nach eine zweite Untergruppe
von Byte-Code-Befehlen zu interpretieren und auszuführen, die
aus den verbleibenden Byte-Code-Befehlen ausschließlich der
ersten Untergruppe ausgewählt
werden.
-
Das
Verarbeitungsmodul 21 ist ein Software-Programm, welches
einen Prozessor 2 dazu veranlasst, eine Verarbeitung gemäss einem
bestimmten Inhalt eines jeden Byte-Code-Befehls auszuführen, der
zu der ersten Untergruppe gehört,
und das Verarbeitungsmodul 21 ist ein Software-Programm, welches
den Prozessor 2 dazu veranlasst, eine Verarbeitung gemäss einem
bestimmten Inhalt eines jeden Byte-Code-Befehls auszuführen, der
zu der zweiten Untergruppe gehört.
-
Weiterhin
sind konkrete Funktionen des ersten ausgewählten Verarbeitungsbefehlsausführungsabschnitts 24 und
des zweiten ausgewählten Verarbeitungsbefehlsausführungsabschnitts 26 im Wesentlichen ähnlich zu
denjenigen des Verarbeitungsbefehlsausführungsabschnitts 15 in der
ersten Ausführungsform.
Wenn ein entnommener Befehlscode der selbe ist, wie einer der Byte-Code-Befehle,
der zu der ersten Untergruppe oder der zweiten Untergruppe gehört, dann
führen
diese Abschnitte den Byte-Code-Befehl aus.
-
Hier
enthält
die erste Untergruppe einen Byte-Code-Befehl, der eine höhere Auftrittshäufigkeit in
einem Class-File aufweist, und die zweite Untergruppe enthält einen
Byte-Code-Befehl, der die zweit höchste Auftrittshäufigkeit
in dem Class-File aufweist. Weiterhin wird in dieser Ausführungsform
ein Code des Software-Programms, das den ersten ausgewählten Verarbeitungsbefehlsausführungsabschnitt 24 bildet
in einem Hochgeschwindigkeitsspeicher 3 gespeichert. Obwohl
es vorzuziehen ist, einen Code des Software-Programms, welches den zweiten ausgewählten Verarbeitungsbefehlsausführungsabschnitt 26 bildet
in dem Hochgeschwindigkeitsspeicher 3 zu speichern, wenn
genügend
freie Speicherkapazität
vorhanden ist, kann er in einem Speicherabschnitt 6 gespeichert
werden, wenn der Hochgeschwindigkeitsspeicher 3 nicht genügend freie
Kapazität
aufweist.
-
Der
Betrieb des Zwischencodeausführungssystems 20 wird
nun mit Bezug auf 5 beschrieben.
-
Wie
in der ersten Ausführungsform
nimmt das Zwischencodeausführungssystem 10 zuerst
das Class-File der Java-Anwendung aus der nicht dargestellten Informationseingabeseite,
speichert das angenommene Class-File in einem RAM 7 des
Speicherabschnitts 6 (S11), und führt das Class-File durch die
folgenden Verfahren mit dem Software-Programm aus, das den ersten
ausgewählten Verarbeitungsbefehlsausführungsabschnitt 24 bildet, der
in dem Hochgeschwindigkeitsspeicher 3 gespeichert ist.
-
Ein
Befehlscode wird zuerst von dem Class-File, wie in der ersten Ausführungsform
entnommen (S12).
-
Dann
wird das Software-Programm, das den ersten ausgewählten Verarbeitungsbefehlsausführungsabschnitt 24 bildet,
der in dem Hochgeschwindigkeitsspeicher 3 gespeichert ist,
ausgeführt,
wobei eine Beurteilung durchgeführt
wird, ob der entnommene Befehlscode spezifiziert werden kann als
irgendein Byte-Code-Befehl in der ersten Untergruppe (S13), und
das Verarbeitungsmodul 21, welches diesem Befehlscode entspricht,
wird ausgeführt,
wenn die Spezifikation möglich
ist (S14).
-
Wenn
festgestellt wird, dass eine Spezifikation bei S13 nicht möglich ist,
dann wird das Software-Programm, das den zweiten ausgewählten Verarbeitungsbefehlsausführungsabschnitt 17 bildet, ausgeführt, wobei
eine Beurteilung in Bezug darauf durchgeführt wird, ob der Befehlscode
spezifiziert werden kann, als irgendein Byte-Code-Befehl in der zweiten
Untergruppe (S15), und das Verarbeitungsmodul 22, welches
diesem Befehlscode entspricht, ausgeführt wird, wenn die Spezifikation
möglich
ist (S16).
-
Weiterhin
wird, wenn festgestellt wird, dass eine Spezifikation bei S15 nicht
möglich
ist, das Software-Programm, das den zweiten Verarbeitungsbefehlsausführungsabschnitt 17 bildet,
ausgeführt,
wobei einer der verbleibenden Byte-Code-Befehle, dem der Befehlscode
entspricht, spezifiziert wird (S17), und das Verarbeitungsmodul 12,
welches dem spezifizierten Befehlscode entspricht ausgeführt wird (S18).
-
Ähnliche
Verfahren werden mit Bezug auf den nächsten Befehlscode ausgeführt, der
in dem Class-File enthalten ist, und das Class-File wird durch Wiederholen
dieser Verfahren ausgeführt.
-
Gemäss dieser
Ausführungsform,
welche das Class-File mit der oben beschriebenen Betriebsweise ausführt, kann
der Byte-Code-Befehl mit der höchsten
Auftrittshäufigkeit
in dem Class-File mit hoher Geschwindigkeit und mit Priorität, wie in
der ersten Ausführungsform,
ausgeführt
werden, und der Byte-Code-Befehl mit der nächst höchsten Auftrittshäufigkeit
in dem Class-File
kann mit Priorität über alle
anderen Byte-Code-Befehle ausgeführt
werden.
-
Zusätzlich kann
bei dem oben beschriebenen Betrieb, obwohl der Code des Software-Programms,
das den ersten ausgewählten Verarbeitungsbefehlsausführungsabschnitt 24 bildet, in
dem Hochgeschwindigkeitsspeicher 3 vorab gespeichert ist,
eine freie Kapazität
in dem Hochgeschwindigkeitsspeicher detektiert werden, wenn das Class-File
ausgeführt
wird, und der Code des Software-Programms, das den zweiten ausgewählten Verarbeitungsbefehlsausführungsabschnitt 26 bildet, kann
gleichsam in dem Hochgeschwindigkeitsspeicher 3 gespeichert
werden, wenn genügend
freie Kapazität
vorhanden ist.
-
Obwohl
die obige Darstellung das Zwischencodeausführungssystem gemäss der ersten
und zweiten Ausführungsform
beschrieben hat, ist die vorliegende Erfindung nicht auf diese Ausführungsformen
beschränkt.
-
Zum
Beispiel ist, obwohl der interne Speicher als Hochgeschwindigkeitsspeicher 3 in
den vorgenannten Ausführungsformen
vorgesehen ist, die vorliegende Erfindung nicht darauf beschränkt, und
der Hochgeschwindigkeitsspeicher 3 kann ein Cachespeicher
sein. Zusätzlich
ist die vorliegende Erfindung nicht auf das Beispiel der Hardware-Konfiguration,
die in 1 gezeigt ist, eingeschränkt, und es ist möglich, jede
Hardware-Konfiguration solange anzuwenden, wie ein vergleichsweise
schneller Speicher und ein vergleichsweise langsamer Speicher, beide in
dieser Konfiguration zur Verfügung
gestellt werden. Der Chip 1 kann z. B. ein ASIC oder Mikrokontroller
sein, und eine Struktur die eine Mehrzahl von Chips 1 oder
Prozessoren 2 enthält,
kann ausreichen.
-
Wenn
der Cachespeicher als Hochgeschwindigkeitsspeicher 3 in
der ersten Ausführungsform
verwendet wird, dann kann die Ausführung des Class-File damit
begonnen werden, dass der Code des Software-Programms, das den ersten Verarbeitungsbefehlsausführungsabschnitt 15 bildet, in
dem Speicherabschnitt 6 gespeichert wird. In diesem Fall,
da der Code mit einem vorbestimmten Cache-Mechanismus in dem Cachespeicher
gespeichert wird, welcher der Hochgeschwindigkeitsspeicher 3 ist,
kann die Leistung des Zwischencodeausführungssystems 10 verbessert
werden, wie bei dem vorgehenden Ausführungsformen. Dies ist auch
der Fall bei Verwendung des Cachespeichers in der zweiten Ausführungsform.
-
Weiterhin
ist, obwohl mit Bezug auf den Fall eine Beschreibung gegeben wurde,
wo das Class-File aus Java als Zwischencode in jeder der vorgenannten
Ausführungsformen
ausgeführt
wird, die vorliegende Erfindung darauf nicht beschränkt.
-
Weiterhin
kann das Software-Programm, welches das Zwischencodeausführungssystem
bildet, vorher in dem Speicherabschnitt 6 gespeichert werden,
oder es kann von ausserhalb des Zwischencodeausführungssystem nach Bedarf geliefert
werden. In diesem Fall ist die Bestätigung des Empfangs des Software-Programms
von der Aussenseite des Zwischencodeausführungssystem nicht beschränkt auf
Herunterladen von einem Server durch ein Netz, und die Software
kann von einem Speichermedium, wie z. B. einer CD-ROM oder einem
portablen Speicher geliefert werden.