-
Ein Teil der Offenbarung dieser Patentschrift
enthält
Material, das dem Urheberrechtsschutz unterliegt. Der Eigentümer des
Urheberrechts hat gegen eine Facsimile-Reproduktion der Patentschrift,
wie sie in der Akte des Patentamts oder in Aufzeichnungen erscheint,
keine Einwendungen, macht jedoch für alle anderen Fälle seine
Urheberrechte geltend.
-
HINTERGRUND
-
Die Erfindung betrifft allgemein
objektorientierte Computersoftware und genauer Datenstrukturen und Laufzeitverfahren,
um Anforderungen bei der Stapelspeicherung zu verringern und gleichzeitig
eine Behandlung von Ausnahmen in einer virtuellen JavaTM-Maschine
zu unterstützen,
die in resourcenbeschränkten
Einrichtungen, z.B. in Smartcards oder dergleichen implementiert
ist.
-
Eine virtuelle Maschine ist eine
abstrakte Rechenmaschine, die durch eine Softwareanwendung oder eine
Folge von durch einen Prozessor ausgeführten Befehlen erzeugt wird.
Auf einer virtuellen Maschine ausgeführte Programme können architekturneutral
sein. Der Ausdruck "architekturneutral" bezieht sich auf
Programme, z.B. solche in JavaTM-Programmiersprache
geschriebene, die durch eine virtuelle Maschine auf verschiedenartigen
Computerplattformen ausgeführt
werden können,
die verschiedenartigste Computerarchitekturen haben können. So
verwendet z.B. eine auf einem auf WindowsTM basierenden Personalcomputer-System
implementierte virtuelle Maschine denselben Befehlssatz wie eine
auf einem auf UnixTM basierenden Computersystem
implementierte virtuelle Maschine. Das Ergebnis der von der Plattform
unabhängigen
Codierung einer Befehlssequenz einer virtuellen Maschine ist ein
Strom aus einem oder mehreren Bytecodes, von denen jeder beispielsweise
ein ein Byte lange numerischer Code ist.
-
Die Java-Programmiersprache ist eine
objektorientierte Programmiersprache. In einem objektorientierten
System beschreibt eine "Klasse" eine Sammlung von
Daten und Methoden, die diese Daten bearbeiten. Zusammengenommen
beschreiben die Daten und die Methoden den Zustand und das Verhalten
eines Objekts.
-
Die Java-Programmiersprache ist auch
verifizierbar, was bedeutet, dass vor der Ausführung einer in Java-Programmiersprache
geschriebenen Applikation bestimmt werden kann, ob eine Befehlssequenz
in dem Programm versuchen wird, Daten eines für diesen Bytecode ungeeigneten
Typs zu verarbeiten oder ob die Ausführung von Bytecodebefehlen
in dem Programm ein Unterschreiten oder Überschreiten eines Operandenstapels
(„Openrandenstack")verursacht.
-
Eine in Java implementierte virtuelle
Maschine führt
einen in der Java-Programmiersprache
geschriebenen virtuellen Maschinencode aus und erfüllt die
nachstehend zitierte Spezifikation für virtuelle JavaTM-Maschinen.
Eine virtuelle Java-Maschine ist für die Anwendung bei einer 32-Bit-Architektur
entworfen. Allerdings haben verschiedenartige resourcenbeschränkte Einrichtungen,
z.B. Smartcards, eine 8-Bit- oder 16-Bit-Architektur.
-
Smartcards, die auch als intelligente
tragbare Datenträgerkarten
bekannt sind, bestehen im allgemeinen aus Kunststoff oder Metall
und haben einen elektronischen Chip, der einen eingebetteten Mikroprozessor zur
Ausführung
von Programmen und einen Speicher zum Speichern von Programmen und
Daten enthält.
Solche Geräte,
die etwa die Größe einer
Kreditkarte haben können,
besitzen üblicherweise
eine begrenzte Speicherkapazität.
Die begrenzte Architektur und die Speicherkapazität lassen
es in der Praxis nur schwer oder gar nicht zu, dass auf der Einrichtung
eine virtuelle Java-Maschine realisiert wird. Beispielsweise haben
einige Smartcards unter 1 K RAM-Speicher
und nur 16 K ROM-Speicher. Beispielsweise besteht eine der Schwierigkeiten
bei der Realisierung einer virtuellen Java-Maschine auf einer resourcenbeschränkten Einrichtung
in der Handhabung von Ausnahmen.
-
Bezogen auf 1 ist im Kontext von in Java-Programmiersprache
geschriebenen Computerprogrammen ein Ausnahmebehandler 100,
eine Prozedur (oder ein Befehlssatz innerhalb einer Prozedur), die bzw.
der einen bestimmten Satz des Programmcodes schützt und der als geschützter Codeblock 102 bezeichnet
wird. Wenn ein Java-Programm die semantischen Schranken der Java-Programmiersprache
verletzt, signalisiert die virtuelle Java-Maschine diesen Fehler dem Programm
als eine Ausnahme. Der Ausnahmebehandler wird ausgeführt, wann
immer die anwendbare Ausnahme während
der Ausführung
des entsprechenden geschützten
Codes "ausgeworfen" bzw. veranlasst
wird. Die Spezifikation der Java-Programmiersprache
legt fest, dass eine Ausnahme ausgeworfen wird, wenn Semantikrandbedingungen
verletzt sind und verursacht einen nicht lokalen Steuerungstransfer
von dem Punkt, wo die Ausnahme geschehen ist, zu einem Punkt, der vom
Programmierer gekennzeichnet werden kann. Eine Ausnahme wird von
dem Punkt, wo sie aufgetreten ist, als ausgeworfen betrachtet, und
an dem Punkt, zu dem die Steuerung übertragen wurde, als eingefangen betrachtet.
Z.B. kann ein bestimmter Ausnahmebehandler, wie z.B. eine Prozedur
zur Behandlung von "Dateiende"-Ein/Ausgabefehler
so festgelegt sein, dass er für
einen bestimmten Teil einer ersten Methode 104 anwendbar
ist. Falls sich die entsprechende Ausnahme (d.h. hier in diesem
Beispiel eine "Dateiende"-Ausnahme) während der
Ausführung
des geschützten
Codes 104 ergibt, wird die Ausführung des Ausnahmebehandlers 100 initiiert.
Ausnahmen können
implizit oder explizit ausgeworfen sein. Implizite Ausnahmen werden
von einer virtuellen Java-Maschine als Ergebnis der Ausführung von
Programmbefehlen ausgeworfen, z.B. als eine Null-Pointer-Ausnahme.
Alternativ ist eine explizite Ausnahme im Körper einer eine Java"Auswurf"-Anweisung verwendenden Methode enthalten.
-
Eine ausgeworfene oder veranlasste
Ausnahme wird als durch einen Ausnahmebehandler gefangen betrachtet,
wenn es für
die ausgeworfene Ausnahme einen anwendbaren umfassenden Ausnahmebehandler gibt.
Ein umfassender Ausnahmebehandler ist einer, dessen Umfang oder
Bereich von anwendbaren Befehlen den Befehl enthält, der eine entsprechende
Ausnahme ausgeworfen hat. Von der Perspektive eines bestimmten Befehls
in einer Methode ist der Satz der umfassenden Ausnahmebehandler
der Satz der Ausnahmebehandler, deren Bereich der anwendbaren Befehle
(Satz des geschützten
Codes) den bestimmten Befehl enthält.
-
Die Java-Programmiersprache bezieht
sich häufig,
wenn sie Ausnahmebehandler betrifft, auf "Versuchsanweisungen", "Versuchsblöcke", "Fangklauseln" und "Schlussklauseln". Eine Versuchsanweisung
enthält
einen Versuchsblock, null oder mehr Fangklauseln und optional eine
Schlussklausel. Ausnahmen werden durch Einschließen des Codes in Versuchsblöcke gefangen.
Ein Versuchsblock ist ein Teil eines Codes, für den ein bestimmter Ausnahmebehandler
zutrifft (d.h. der geschützte
Codeblock). Eine Fangklausel definiert einen Ausnahmebehandler.
Eine Schlussklausel einer Versuchsanweisung stellt einen Mechanismus
zur Ausführung
eines Abschnitts eines Codes zur Verfügung, und zwar unabhängig davon,
ob eine Ausnahme ausgeworfen wurde oder nicht. In einem Java-Programm
ist eine Anweisung oder ein Ausdruck dynamisch durch eine Fangklausel
eingeschlossen, wenn sie innerhalb des Versuchsblocks der Versuchanweisung
auftritt, von der die Fangklausel ein Teil ist, oder wenn die die
Anweisung oder den Ausdruck aufrufende Methode dynamisch von der
Fangklausel eingeschlossen ist.
-
Ob eine bestimmte Fangklausel eine
Ausnahme behandelt, wird durch Vergleich der Klasse des ausgeworfenen
Ausnahmeobjekts mit dem erklärten
Parametertyp der Fangklausel bestimmt. Die Fangklausel behandelt
die Ausnahme, wenn der Typ ihres Parameters die Klasse der Ausnahme
oder eine Überklasse
der Klasse der Ausnahme ist. In äquivalenter
Weise fängt
eine Fangklausel irgendein Ausnahmeobjekt, das eine konkrete Ausprägung des
vereinbarten Parametertyps ist.
-
Wenn der geschützte Teil der ersten Methode
Aufrufe an andere Methoden 106 enthält (die Aufrufe werden in der
nachstehend in Bezug genommenen Spezifikation der virtuellen Java-Maschine "Aufruf"-Befehle genannt),
die ihrerseits ineinander geschachtelte Aufrufe an andere Methoden 108, 110 enthalten
können,
bewirken die durch eine der Methoden 106, 108, 110,
die direkt oder indirekt von dem geschützten Code 102 aufgerufen
wurden, erzeugten Datei-Ende-Fehler auch die Ausführung des
aufzurufenden Ausnahmebehandlers 100. Allerdings können verschachtelte
Methoden 112 ihren eigenen Datei-Ende-Ausnahmebehandler 114 enthalten.
Wenn eine Ausnahme ausgeworfen wird, während eine Methode 112 ausgeführt wird,
wird der Ausnahmebehandler 114 zur Behandlung von Datei-Ende-Ausnahmen
verwendet, die durch die Ausführung
von Befehlen verursacht werden, die in dem bestimmten verschachtelten
Verfahren enthalten sind und auch zur Behandlung von Datei-Ende-Ausnahmen,
die durch die Ausführung
von irgendwelchen von der verschachtelten Methode 112 aufgerufenen
Methoden 116 verursacht wurden. In üblichen Java-Programmen sind
alle einer Objektklasse zugehörigen
Methoden in einer als Klassendatei bezeichneten Datenstruktur gespeichert,
die in der Spezifikation der virtuellen Java-Maschine definiert
ist. Jede Methode hat ihre eigene Ausnahmetabelle, und außerdem enthält der Code
jeder Methode den Code des Ausnahmebehandlers, wie er durch deren
Ausnahmetabelle bezeichnet wird. Sobald eine Java-Klassendatei erstellt
ist, werden alle dem Verfahren zugeordnete Ausnahmen in einer Liste
angeordnet, die als Ausnahmebehandlungstabelle bezeichnet ist. Bezogen
auf 2 enthält eine übliche Ausnahmebehandlungstabelle 200 eine
oder mehrere Fangklauseln (Ausnahmebehandler) 202. Jede
Fangklausel 202 enthält
eine Start-pc-Adresse 204 und eine Stopp-pc-Adresse 206,
die den Befehlsbereich der virtuellen Java-Maschine für die der
Ausnahmebehandler aktiv ist, beschreiben, einen Typindikator 208,
der die Ausnahmetypen beschreibt, deren Fangklausel zu behandeln
ist, und eine Adresse 210, an der die Ausführung des
Ausnahmebehandlungscodes zu beginnen ist.
-
Wichtig ist die Reihenfolge der Fangklauseln
in der Ausnahmebehandlungstabelle. Das Auswerfen einer Ausnahme
hat als Ergebnis eine von der virtuellen Java-Maschine ausgeführte Suche
durch die Ausnahmebehandlungstabelle. Die Ausführung der virtuellen Java-Maschine
fährt mit
einer ersten übereinstimmenden
Fangklausel fort. Da der Java-Code strukturiert ist, kann er in
jedem Fall alle Ausnahmebehandler für eine Methode in einer einzelnen
Liste anordnen. Für
jeden möglichen
Programmzählerwert
kann diese Liste abgesucht werden, um den geeigneten Ausnahmebehandler
aufzufinden, das ist der innerste Ausnahmebehandler, der sowohl
den Programmzähler-(pc)-Wert einschließt (wo die
Ausnahme ausgeworfen wurde), als auch die ausgeworfene Ausnahme
behandeln kann.
-
Sofern es keine passende Fangklausel
gibt, sagt man, dass die laufende Methode eine ungefangene Ausnahme
ist. Wenn eine Ausnahme ungefangen ist, wird der Ausführungszustand
der Aufrufenden, d.h. der Methode, die die laufende Methode (wenn
vorhanden) aufgerufen hat, zurückgespeichert.
Die Ausbreitung der Ausnahme setzt sich fort, als ob die Ausnahme
in der Aufrufenden bei dem Befehl aufgetreten wäre, der die die Ausnahme tatsächlich verursachende
Methode aufgerufen hat.
-
Von einer virtuellen Java-Maschine
werden, um die Ausführung
und den Aufruf von Methoden zu verfolgen, verschiedene Laufzeitdatenstrukturen
beibehalten. Eine virtuelle Java-Maschine kann viele Ausführungspfade
auf einmal unterstützen.
Jeder Pfad einer virtuellen Java-Maschine hat sein eigenes pc-Register (Programmzählerregister).
Das pc-Register enthält
die Adresse des Befehls der virtuellen Java-Maschine, der gerade
ausgeführt
wird. Jeder Pfad einer virtuellen Java-Maschine hat einen privaten
Java-Stapel („Java stack"), der zur selben
Zeit wie der Pfad erzeugt wird. Der Java-Stapel speichert virtuelle
Java-Maschinen-Rahmen. Der Java-Stapel ist dem Stapel einer herkömmlichen
Sprache, wie z.B. „C", äquivalent:
Er hält lokale
Variable und Teilergebnisse und unterstützt Methodenaufruf und Rücksprung.
-
Nun wird auf 3 Bezug genommen, wo ein herkömmlicher
Java-Stapel 300 dargestellt ist, der eine Vielzahl von
Java-Maschinen-Rahmen 302 enthält. Jeder Rahmen 302 enthält eine
Referenz 304 auf eine Methode und einen Rücksprungzeiger 306.
-
Die Referenz 204 ist eine
Referenz zu der derzeit ausgeführten
Methode, die als laufende Methode bezeichnet wird. Die Referenz 304 dient
dazu anzuzeigen, welche Ausnahmebehandlungstabelle zu suchen ist,
wenn eine Ausnahme während
der Ausführung
des laufenden Verfahrens veranlasst wird. Die Referenz 304 kann
in Form einer Adresse sein, unter der die laufende Methode gespeichert
ist. Der Code für
jede Methode enthält
typischerweise den für
die Methoden nötigen
maximalen Stapelplatz, die maximale Anzahl der von der Methode benötigten Register,
die aktuellen Bytecodes zur Ausführung
der Methode und eine Tabelle von Ausnahmebehandlern. Die Referenz 304 kann
auf den Anfang der laufenden Methode zeigen, wo typischerweise die
Ausnahmebehandlungstabelle gespeichert ist.
-
Der Rücksprungzeiger 306 ist
ein Zeiger, der auf die Methode zeigt, die die laufende Methode
aufrief, und zeigt genauer auf die Stelle, wo die Ausführung in
der aufrufenden Methode bei vollständiger Ausführung der laufenden Methode
wieder aufgenommen werden soll.
-
Wie oben beschrieben, haben Smartcards
und andere resourcenbeschränkte
Einrichtungen üblicherweise
eine begrenzte Speicherkapazität.
-
Dementsprechend könnten Programme, die eine Vielzahl
verschachtelter Methoden enthalten, die eine Vielzahl von auf dem
Java-Stapel zu speichernde Bytes benötigen, eine Überlaufsituation
des Stapels bei der Laufzeit verursachen. Es ist deshalb wünschenswert,
die Information zu begrenzen, die im Speicher während der Laufzeit gespeichert
werden muss, und dennoch eine vollständige Unterstützung für übliche Ausnahmebehandler
in einer virtuellen Java-Maschine zu gewährleisten.
-
KURZFASSUNG
DER ERFINDUNG
-
Gemäß einem Aspekt erzielt die
Erfindung einen in einem Computer realisierten Prozess zur Verwaltung
von Ausnahmen, die während
der Ausführung
von Methoden in einer oder mehreren Klassen durch eine Maschine
veranlassbar bzw. auswerfbar sind. Jede Methode enthält ein Ausnahmebehandlungsfeld,
welches dieser Methode zugeordnete Ausnahmebehandler definiert.
Das Verfahren enthält
die Kombination der Ausnahmebehandlungsfelder für alle Methoden in einer einzigen
Ausnahmebehandlungstabelle.
-
Aspekte der Erfindung enthalten eines
oder mehrere der folgenden Merkmale. Alle Ausnahmebehandlungsfelder
für alle
Methoden in einer Klasse oder alle Methoden in allen Klassen können in
der einzigen Ausnahmebehandlungstabelle gespeichert werden. Alle
Ausnahmebehandlungsfelder für
alle Methoden in einem Java-Paket können in der einzigen Ausnahmebehandlungstabelle
kombiniert werden. Eine Methode kann in einer Klassendatei enthalten
sein. Der Schritt, der sämtliche
Ausnahmebehandlungsfelder kombiniert kann die Kombination der Ausnahmebehandler
in allen Methoden in einer Klassendatei in der einzelnen Ausnahmebehandlungstabelle
enthalten.
-
Der Prozess kann das Suchen der Ausnahmebehandlungstabelle,
wenn eine Ausnahme während
der Ausführung
einer der Methoden veranlasst wird, einschließlich der Einordnung einer
ersten übereinstimmenden
Ausnahme in der einzigen Ausnahmebehandlungstabelle enthalten. Der
Suchschritt kann das Wiederaufsuchen in der Reihenfolge der Ausnahmebehandlungseinträge aus der
Ausnahmebehandlungstabelle, eine Prüfung des Typs und Bereichs
jedes Ausnahmebehandlers für
den ersten übereinstimmenden
Ausnahmebehandler und einen Suchstopp enthalten, wenn der laufende
Ausnahmebehandler nicht passt und der letzte Behandler für das oberste
Niveau des geschützten
Codes in einer zugeordneten Methode ist.
-
Alle Methoden in einer Klasse sind
in einer einzigen Klassendatei beschrieben. Die Klassendateien können Java-Klassendateien
sein. Die Methoden in einer oder mehreren Klassen können in
einem Paket gruppiert sein, das eine einen ersten und zweiten Teil
enthaltende Paketdatenstruktur enthält. Der Prozess kann das Speichern
der Ausnahmebehandlungstabelle in dem ersten Teil des Pakets und
aller Methoden im zweiten Teil des Pakets enthalten. Der Kombinationsschritt
kann eine Verkettung der Ausnahmebehandlungsfelder, einschließlich des
Ladens jedes Ausnahmebehandlungsfeldes in dem ersten Teil der Paketdatenstruktur übereinstimmend
mit einer vordefinierten Ordnung oder Reihenfolge enthalten. Die
vordefinierte Reihenfolge kann auf der Basis der Reihenfolge der
im zweiten Teil der Paketdatenstruktur gespeicherten Methode festgelegt sein.
-
Die Maschine kann eine auf einer
resourcenbeschränkten
Einrichtung realisierte virtuelle Maschine sein. Die resourcenbeschränkte Einrichtung
kann eine Smartcard sein. Die Methoden in einer oder mehreren Klassen
können
in einem Paket gruppiert, und das Paket kann auf der Smartcard eingerichtet
sein. Der Prozess kann die Erzeugung eines Pakets enthalten, welches
eine einen ersten und zweiten Teil enthaltende Paketdatenstruktur
enthält.
Der Prozess kann die Verkettung der Ausnahmebehandlungsfelder für jede Klassendatei
in einer Ausnahmebehandlungstabelle, die Speicherung der Ausnahmebehandlungstabelle
im ersten Teil des Pakets und aller Methoden im zweiten Teil des
Pakets enthalten.
-
Der Prozess kann die für einen
Laufzeitstapel, wenn ein Programm ausgeführt wird, notwendige Speichermenge
minimieren. Der Laufzeitstapel wird in der Laufzeit während der
Ausführung
des Programms durch eine Maschine, die einen oder mehrere Rahmen
speichert, beibehalten, wobei jeder Rahmen einen Rücksprungzeiger
zu einer aufrufenden Methode enthält, die als momentan ausgeführte Methode
in dem Programm bezeichnet wird. Das Verfahren enthält die Kombination
der Ausnahmebehandlungsinformation für die in dem Programm enthaltenen
Methoden in einer kombinierten Ausnahmebehandlungstabelle und eine
Lokalisierung und eine Suchen der kombinierten Ausnahmebehandlungstabelle,
wenn während
der Ausführung
einer der Methoden eine Ausnahme veranlasst wird, um die Ausnahmebehandlungsinformation
zu lokalisieren, ohne dass der Laufzeitstapel eines Zeigers zur
Ausnahmebehandlungsinformation gespeichert werden muss.
-
Der Prozess kann einen oder mehrere
Merkmale enthalten. Das Programm kann ein Java-Programm sein. Die
Maschine kann eine eine virtuelle Java-Maschine realisierende virtuelle Maschine
sein. Das Programm kann ein Paket von Methoden enthalten, die in
eine oder mehrere Klassen fallen. Die virtuelle Maschine kann in
einer kapazitäts-
oder resourcenbeschränkten
Einrichtung realisiert sein, auf der das Paket eingerichtet ist
und ausgeführt
wird.
-
Der Prozess kann bei der Installation
die Registrierung des Pakets in einem Registrierdienst enthalten. Der
Registrierdienst behält
einen Zeiger und einen Bereich. Der Zeiger gibt den Ort in der ressourcenbegrenzten
Einrichtung der einem gegebenen Paket zugeordneten kombinierten
Ausnahmebehandlungstabelle an. Der Bereich definiert einen Adressenbereich
in der resourcenbeschränkten
Einrichtung, an dem sich die dem Paket zugeordneten Methoden befinden.
-
Der Lokalisierungsschritt kann die
Lokalisierung eines Pakets enthalten, das einer momentan ausgeführten Methode
zugeordnet ist und einen Vergleich einer Adresse, bei der eine Ausnahme
veranlasst wurde mit dem Bereich jedes in dem Registrierdienst registrierten
Pakets enthalten. Der Suchschritt kann das Aufsuchen der zu einem
lokalisierten Paket gehörenden
kombinierten Ausnahmebehandlungstabelle enthalten.
-
In einem anderen Aspekt erzielt die
Erfindung ein Verfahren zur Umwandlung von Klassendateien in ein „gewandeltes
Applet" zur Ausführung auf
einer kapazitätsbeschränkten Einrichtung
und enthält
den Empfang einer oder mehrerer Klassendateien, die jeweils eine
oder mehrere Methoden enthalten. Jede Methode enthält ein Ausnahmebehandlungsfeld,
welches durch die Methode veranlassbare Ausnahmebehandler definiert.
Die Methode enthält
eine Definition einer Datenstruktur zum Speichern der Methoden und
der Ausnahmebehandler für
das gewandelte Applet einschließlich
eines ersten und zweiten Teils sowie die Definition einer Ordnungsfolge
für die
Methode sowie das Laden der Methoden in Übereinstimmung mit der Ordnung
in dem zweiten Teil der Datenstruktur. Die Ausnahmebehandlungsfelder
für alle
Methoden werden in einer einzelnen Ausnahmebehandlungstabelle kombiniert.
Die Ausnahmebehandlungsfelder sind in der Tabelle übereinstimmend
mit der für
die Methoden definierten Ordnung geordnet. Die Methode enthält die Speicherung
des einzelnen Ausnahmebehandlungsfelds in dem ersten Teil der Datenstruktur.
-
Der Prozess kann Ausnahmen verwalten,
die während
der Ausführung
von Methoden in einer oder mehreren Klassen durch eine virtuelle
Maschine veranlassbar sind. Jede Methode enthält ein Ausnahmebehandlungsfeld,
welches dieser Methode zugeordnete Ausnahmebehandler definiert.
Die einzelnen Ausnahmebehandlungsfelder werden kombiniert und bilden
eine einzige Ausnahmebehandlungstabelle für zwei oder mehr Methoden.
Der Prozess enthält
das Aufsuchen der Ausnahmebehandlungstabelle, sobald eine Ausnahme
während
der Ausführung
einer der Methoden veranlasst wird, einschließlich der Lokalisierung einer
ersten übereinstimmenden
Ausnahme in der einzigen Ausnahmebehandlungstabelle.
-
Erreicht ist ein Computersystem,
das Befehle enthält,
die es veranlassen, die Ausnahmebehandlungsfelder für Methoden
in einer einzigen Ausnahmebehandlungstabelle zu kombinieren.
-
Ein solches Computersystem kann Befehle
enthalten, die es veranlassen, die Ausnahmebehandlungsinformation
für Methoden
in einem Programm in einer kombinierten Ausnahmebehandlungstabelle
zu vereinigen und die kombinierte Ausnahmebehandlungstabelle zu
lokalisieren und aufzusuchen, wenn eine Ausnahme während der
Ausführung
einer der Methoden veranlasst wird, um damit die Ausnahmebehandlungsinformation
zu lokalisieren, ohne dass eine Speicherung des Laufzeitstapels
eines Zeigers in dem Ausnahmebehandler nötig ist.
-
Außerdem ist ein Computersystem
ermöglicht,
das Befehle enthält,
die es veranlassen, eine oder mehrere Klassendateien zu empfangen.
Jede Klassendatei enthält
eine oder mehrere Methoden, und jede Methode enthält ein Ausnahmebehandlungsfeld,
das durch die Methode veranlassbare Ausnahmebehandler definiert.
Das Computersystem enthält
Befehle, die es veranlassen, eine Datenstruktur zur Speicherung
der Methoden und Ausnahmebehandler für das gewandelte Applet einschließlich eines
ersten und zweiten Teils zu definieren, eine Ordnungsfolge für die Methoden
zu definieren und die Methoden übereinstimmend
mit der Ordnungsfolge in dem zweiten Teil der Datenstruktur zu laden,
die Ausnahmebehandlungsfelder für
zwei oder mehr Methoden in einer einzigen Ausnahmebehandlungstabelle,
einschließlich
der Ordnung der Ausnahmebehandlungsfelder, übereinstimmend mit der für die Methoden
definierten Ordnung zu kombinieren und das einzelne Ausnahmebehandlungsfeld
im ersten Teil der Datenstruktur zu speichern.
-
Ein Computersystem ist ermöglicht,
das Befehle enthält,
die es veranlassen, eine Ausnahmebehandlungstabelle aufzusuchen,
wenn eine Ausnahme während
der Ausführung
einer Methode veranlasst wird. Befehle sind enthalten, die eine
erste übereinstimmende
Ausnahme in der einzigen Ausnahmebehandlungstabelle lokalisieren.
-
Ausführungsbeispiele der Erfindung
können
einen oder mehrere Vorteile enthalten. Die Menge der zur Speicherung
auf einem Laufzeitstapel notwendigen Information lässt sich
verringern und immer noch übliche Ausnahmebehandlungsprozeduren
unterstützen.
Eine verkettete Ausnahmebehandlungstabelle kann generiert werden,
die Einträge
für alle
Ausnahmen enthält,
die einem Paket von in einer resourcenbeschränkten Einrichtung zu verwendenden
Methoden zugeordnet sind. Zur Unterstützung der Ausnahmebehandlung
ist kein Stapelüberhang
notwendig. Sobald eine Ausnahme veranlasst ist, kann die virtuelle
Java-Maschine die verkettete Ausnahmebehandlungstabelle für den korrekten
Ausnahmebehandler wirksam aufsuchen. Mit einer Optimierung kann
das Suchen der verketteten Ausnahmebehandlungstabelle wirksam realisiert
werden, ohne dass die Bewertung aller Einträge in der verketteten Tabelle
für gewisse
Klassen von verschachtelten Fangklauseln notwendig ist. Die Tabelleneinträge können geordnet
sein, um ein Ende einer Suche nach Übereinstimmung am obersten
Niveau des Behandlers sicher zu stellen. Aus der nachfolgenden detaillierten
Beschreibung, den beiliegenden Zeichnungen und den Patentansprüchen sind
weitere Merkmale und Vorteile ohne weiteres ersichtlich.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
1 ist
eine schematische Darstellung eines Satzes von Methoden, die durch
Prozeduraufrufe bei der Laufzeit miteinander verkettet sind.
-
2 zeigt
eine übliche
Java-Ausnahmebehandlungstabelle, die Einträge für jede in einer Methode eingeschlossene
Ausnahme enthält.
-
3 zeigt
einen konventionellen Java-Stapel-Laufzeitdatenbereich.
-
4 ist
ein schematisches Blockdiagramm, welches ein beispielhaftes System
veranschaulicht, das eine erfindungsgemäße virtuelle Maschine enthält, die
sich auf einer Smartcard befindet.
-
5a ist
ein Flussdiagramm für
einen Prozess, der eine verkettete Ausnahmebehandlungstabelle erzeugt.
-
5b ist
ein schematisches Blockdiagramm für eine Datenstruktur für ein Methodenelement
einschließlich
sämtlicher
Methoden für
ein mit einer virtuellen Maschine auf einer Java-CardTM auszuführendes Paket.
-
6 ist
ein schematisches Blockdiagramm einer verketteten Ausnahmebehandlungstabelle
für ein Java-Paket.
-
7 ist
ein schematisches Blockdiagramm einer Ausnahmeregistrierung, die
von einer virtuellen Maschine einer Java-Card gehalten wird.
-
8 zeigt
für eine
virtuelle Maschine einer Java-Card einen Laufzeitdatenbereich eines
Laufzeitstapels.
-
9 ist
ein Flussdiagramm für
eine Laufzeitmethode zum Suchen einer verketteten Ausnahmebehandlungstabelle.
-
10a ist
ein Flussdiagramm für
eine optimierte Laufzeitmethode zum Suchen einer verketteten Ausnahmebehandlungstabelle.
-
10b ist
ein detaillierter Fluss einer Realisierung für die in 10a beschriebene optimierte Laufzeitmethode.
-
BESCHREIBUNG
-
Nachstehend wird eine Datenstruktur
und eine Methode zur Verarbeitung von Ausnahmen beschrieben, die
während
der Ausführung
eines Java-Pakets auf einer resourcenbeschränkten Einrichtung ausgeworfen
bzw. veranlasst werden. Resourcenbeschränkte Einrichtungen sind im
allgemeinen solche, deren Speicherkapazität und/oder Rechenleistung oder
-geschwindigkeit beschränkt
sind. Obwohl die hier behandelte besondere Realisierung in Bezug
auf eine Smartcard beschrieben ist, kann die Erfindung auch bei
anderen resourcenbeschränkten
Einrichtungen verwendet werden, die, ohne darauf beschränkt zu sein,
Handys, Scangeräte
an Grenzen, am Ort programmierbare Geräte, personale Datenassistenten
(PDAs) und Rufgeräte
sowie auch andere sehr kleine oder auf kleinem Fuß stehende
Geräte
enthalten. Solche Geräte
haben üblicherweise
eine beschränkte
Speicherkapazität.
Z.B. haben einige Smartcards weniger als 1 K RAM-Speicher und sind
auch in der Speicherkapazität
ihres ROM- Speichers und/oder nichtflüchtigen Speichers beschränkt, wie z.B.
bei einem elektrisch löschbaren,
programmierbaren Nur-Lese-Speicher
(EEPROM). Gleichermaßen
basieren einige resourcenbeschränkte
Einrichtungen auf einer Architektur, die für weniger als 32 Bits entworfen ist.
Z.B. beruhen einige der bei der Erfindung verwendeten resourcenbeschränkten Einrichtungen
auf einer 8-Bit- oder 16-Bit-Architektur anstatt auf einer 32-Bit-Architektur.
Bezogen auf 4 beginnt
die Entwicklung eines Applets für
eine resourcenbeschränkte
Einrichtung, z.B. eine Smartcard 40, in derselben Weise
wie die Entwicklung eines Java-Programms. Anders gesagt, schreibt
ein Entwickler eine oder mehrere Java-Klassen und übersetzt
den Quellcode mit einem Java-Compiler, um eine oder mehrere Klassendateien 10 zu
erzeugen. Das Applet kann z.B. auf einer Arbeitsstation, die Simulationsprogramme
zur Nachbildung der Umwelt auf einer Smartcard 40 verwendet,
ablaufen, geprüft
und auf Fehler untersucht werden. Wenn das Applet zum Laden auf
eine Smartcard 40 bereit ist, werden die Klassendateien 10 in
eine umgewandelte Applet-(CAP)-Datei 16 durch einen Konverter 14 umgewandelt.
Der Konverter 14 kann als eine Java-Anwendung realisiert
sein, die sich auf einem Tischcomputer ausführen lässt. Der Konverter 14 akzeptiert
als Eingang eine oder mehrere Exportdateien 12 zusätzlich zu
den umzuwandelnden Klassendateien 10. Eine Exportdatei 12 enthält die Benennung
oder Verkettung von Information für die Inhalte anderer Pakete,
die durch die umgewandelten Klassen importiert werden.
-
Im allgemeinen enthält die CAP-Datei 16 all
die Klassen und Schnittstellen, die in einem einzelnen Java-Paket
definiert sind, und wird durch einen Strom von 8 Bit umfassenden
Bytes dargestellt. Alle 16-Bit- und 32-Bit-Größen werden jeweils durch das
Auslesen in zwei oder vier aufeinander folgenden 8-Bit-Bytes konstruiert.
Unter anderem enthält
die CAP-Datei 16 ein Element 18 für einen
Konstantenpool, das getrennt von einem Methodenelement 20 gepackt
wird. Das Element 18 für
den Konstantenpool enthält
mehrere Konstantentypen, die von numerischen Literaten, bekannt
als Compilezeit, bis zu Methoden und Feldreferenzen reichen, die
entweder beim Laden des Programms auf die Smartcard 40 oder
zum Zeitpunkt der Ausführung
durch die Smartcard aufgelöst
werden. Das Methodenelement 20 spezifiziert den auf die
Smartcard 40 zu ladenden und darauf folgend von ihr auszuführenden
Befehlssatz.
-
Weitere Einzelheiten der Struktur
einer beispielhaften CAP-Datei 16 werden in der gleichfalls
anhängigen
Internationalen Anmeldung mit der Bezeichnung "AN OBJECT-ORIENTED INSTRUCTION SET FOR USE
WITH OTHER RESOURCE-CONSTRAINED DEVICES" von Joshua B. Susser et al. diskutiert,
die gleichzeitig mit der vorliegenden Anmeldung eingereicht worden
ist und die auf der Patentanmeldung EP-A-1 149 337 beruht.
-
Allgemein folgen für eine resourcenbeschränkte Plattform,
z.B. die Smartcard 40, geschriebene Realisierungen und
Applets den Standardregeln für
Pakete auf der Java-Plattform. Die virtuelle Java-Maschine und die
Java-Programmiersprache sind in T. Lindholm et al., The JavaTM Virtual Machine Specification (1997) und
K. Arnold et al., in JavaTM Programming
Language Second Edition (1998) beschrieben, die hier als ganzes in
Bezug genommen sind. Schnittstellenklassen für die Kartenanwendungen bezogen
auf die Smartcard-Plattform
werden als Java-Quelldateien geschrieben, die Paketbestimmungen
enthalten, wo ein Paket eine Anzahl von Übersetzungseinheiten enthält und einen
einheitlichen Namen hat. Paketmechanismen werden zur Kennzeichnung
und Steuerung des Zugriffs zu Klassen, Feldern und Methoden verwendet.
-
Wie oben beschrieben akzeptiert der
Konverter 14 als eine Eingabe eine oder mehrere Exportdateien 12 zusätzlich zu
den umzuwandelnden Klassendateien 10 und erzeugt eine CAP-Datei 16.
Jede Klassendatei enthält
eine Ausnahmebehandlungstabelle, die einer jeweiligen Methode für eine gegebene
Klasse zugeordnet ist. Der Konverter 14 verkettet alle
Ausnahmebehandlungstabellen für
alle Methoden von allen einem Paket zugeordneten Klassen in eine
einzige Ausnahmebehandlungstabelle. Die verkettete Ausnahmebehandlungstabelle
wird mit den zugrundeliegenden Methoden für das Paket bei der Laufzeit,
wenn eine Ausnahme veranlasst wird, beibehalten und gesucht, wie
nachstehend mehr im einzelnen beschrieben wird.
-
Bezogen auf die 5a und 5b beginnt
ein Prozess 500, der vom Konverter 14 (4) zur Verkettung der Ausnahmebehandlungstabelle
für alle
Methoden ausgeführt
wird, mit Schritt 502. Eine Ordnungsfolge für die Methoden
in dem Paket wird definiert (504). Die Ordnung definiert
die Stellung des Codes für
die zugrundeliegenden Methoden in einem zugeordneten Methodenelement 550.
Z.B. sind in einem Paket 545 drei Methoden 530, 535 und 540 (Methoden
A, B und C) enthalten. Jede Methode enthält einen Code (jeweils 531, 536 und 541)
und eine zugehörige
Ausnahmebehandlungstabelle (jeweils 532, 537 und 542).
-
Das Methodenelement beschreibt jede
Methode, die in einem Paket vereinbart ist. Die jeder Methode zugeordneten
Ausnahmebehandler sind auch beschrieben. In einer Realisation wird
das Methodenelement durch folgende Struktur dargestellt:
-
TABELLE
1: METHODENELEMENT
-
Das Kennzeichenfeld hat einen Wert,
der die Datenstruktur als ein Methodenelement identifiziert. Das Größenfeld
gibt die Bytezahl in der Methodenelementstruktur an, ausgenommen
des Kennzeichens und der Datensätze
für das
Größenfeld.
Das Feld: „Behandler
Zahl" gibt die Anzahl
der Einträge
in der verketten Ausnahmebehandlungstabelle an. Das Feld: „Ausnahme_Behandler" gibt ein Feld von
in einer Tabelle angeordneten 8-Byte-Ausnahmebehandlungsstrukturen an und
wird als verkettete Ausnahmebehandlungstabelle bezeichnet. Jede
Ausnahmebehandlungsstruktur gibt eine Fang- und eine Schlussklausel an, die in
einer Methode des Pakets definiert sind. Einträge in der verketteten Ausnahmebehandlungstabelle
werden in aufsteigender Reihenfolge mittels des Abstands zwischen
dem Beginn des Methodenelements bis zum Endpunkt jedes aktiven Ausnahmebehandlungsbereichs
in dem Methodenfeld sortiert. Die Ordnung der Blöcke der den bestimmten Methoden
zugeordneten Ausnahmebehandler wird nachstehend im einzelnen beschrieben.
-
Das Methodenfeld stellt ein Feld
von Methodeninformationsstrukturen variabler Länger dar. Jeder Eintrag gibt
eine in einer Klasse oder in einer Schnittstelle des gegebenen Pakets
vereinbarte Methode an.
-
Für
den Zweck der vorliegenden Anwendung kann ein Methodenelement 550 als
eine Datenstruktur dargestellt werden, die zwei Teile enthält, einen
ersten Teil 552 und einen zweiten Teil 554. Der
erste Teil 552 ist ein Platzhalter für die Ausnahmebehandler für die zugrundeliegenden
Methoden des Pakets. Die Ausnahmebehandler sind in einer verketteten
Ausnahmebehandlungstabelle 556 gespeichert. Der einzelne
Methodencode ist im zweiten Teil 554 gespeichert.
-
Die einzelnen Ausnahmebehandlungstabellen
werden in die verkette Ausnahmebehandlungstabelle geladen und in Übereinstimmung
mit der durch Schritt 504 (506) definierten Ordnungs
geordnet. D.h., dass jedes Ausnahmebehandlungstabelle für jede Methode
blockförmig
in die verkette Ausnahmebehandlungstabelle 556 geladen
wird. Die in jeder einzelnen Ausnahmebehandlungstabelle für jede Methode
definierte lokale Ordnungsfolge wird beibehalten. In dem in 5b gezeigten Beispiel werden
die Methoden in der Reihenfolge A, C und B im zweiten Teil 554 des
Methodenelements nach der Ausführung
des Ordnungsschritts 504 geordnet. Die zugehörigen Ausnahmebehandlungstabellen
A, B und C werden in die verkettete Ausnahmebehandlungstabelle 556 in
derselben Reihenfolge (A, C und dann B) geladen. Die Reihenfolge
der einzelnen Ausnahmebehandler in den einzelnen Ausnahmebehandlungstabellen
erfüllt
die übliche
Konstruktion in der Java-Programmiersprache,
um sicher zu stellen, dass eine erste durch eine virtuelle Java-Maschine
bei der Laufzeit getroffene Übereinstimmung
die spezifischste Übereinstimmung
ist, die auftreten kann.
-
Bei einer Realisierung sind Ausnahmen
in einer Klassenhierarchie organisiert. Die Ausnahmenklassenhierarchie
hat eine höchste
Ausnahmeklasse, die "auswerfbar" genannt wird, und
zwei Hauptzweige: einen Satz außergewöhnlich ernster
Ausnahmen, deren Überklasse
die "Fehler"-Klasse ist, und
einen Satz etwas weniger katastrophaler Ausnahmen, deren Überklasse
die "Ausnahme"-Klasse ist.
-
Sobald eine Ausnahme veranlasst wird,
führt eine
virtuelle Java-Maschine den ersten Ausnahmebehandler aus, der sich
in einem Suchbaum des umfassten Ausnahmebehandlers findet, der für die veranlasste Ausnahme
anwendbar ist. Um sicher zu stellen, dass der die niedrigste Klasse
umfassende Ausnahmebehandler, der für die veranlasste Ausnahme
verwendet werden kann, anwendbar ist, werden die Autoren der Java-Programme
(das sind die Methoden) im allgemeinen die Ausnahmebehandler innerhalb
jeder Methode so anordnen, dass die Ausnahmebehandler der unteren
Klassen vor den Ausnahmebehandlern der höheren Klassen stehen (wobei
der Klassenrang durch die Position der Ausnahmenhierarchie bestimmt
ist). Außerdem führt eine
virtuelle Maschine, wenn es für
genau dieselbe Ausnahmebedingung zwei oder mehr umfassende Ausnahmebehandler
gibt, die für
einen Befehl anwendbar sind, der eine Ausnahme veranlasst, den anwendbaren
umfassenden Ausnahmebehandler aus, der durch die Methode eingerichtete
ist, die in der Kette der Methodenaufrufe derjenigen Methode am
nächsten
liegt, die die Ausnahme veranlasst.
-
Nachdem die einzelnen Ausnahmebehandlungstabellen
in ihre Ordnung gebracht und im Schritt 506 geladen worden
sind, wird jeder Ausnahmebehandlungseintrag in der verketteten Ausnahmebehandlungstabelle 556 in
eine für
die Verwendung in einer resourcenbeschränkten Einrichtung, wie eine
Smartcard 40 (4)
optimierte Datenstruktur umgewandelt (508). In einer Realisation
ist in 6 die Datenstruktur
für einen
optimierten Eintrag in der verketteten Ausnahmebehandlungstabelle 556 dargestellt.
Die verkettete Ausnahmebehandlungstabelle 600 enthält mehrere
Einträge 602,
die jeweils Daten in Übereinstimmung
mit einer Ausnahmebehandlungsinformations-Datenstruktur enthalten. Die Ausnahmebehandlungsinformations-Datenstruktur
enthält
einen Startversatz 604, eine aktive Länge 606, einen Handlerversatz
610 und
einen Fangtypindex 612. Der Startversatz 604 und
ein (nicht gezeigter) Endversatz sind Byteversätze in den bestimmten Methodenelementen.
-
Der Startversatz und der Endversatz
geben den Bereich in einem Bytecodefeld an, in dem ein Ausnahmebehandler
aktiv ist. Der Wert des Startversatzes 604 muss ein gültiger Versatz
in ein Bytecodefeld zu dem Operationscode eines Befehls sein.
-
Der Endversatz ist als die Summe
des Startversatzes 604 plus die aktive Länge 606 definiert.
Der Wert des Endversatzes muss entweder ein gültiger Versatz in ein Codefeld
des Operationscodes eines Befehls oder gleich einer Bytecodezahl
einer Methode (die Länge
des Codefeldes) sein. Der Wert des Startversatzes 604 muss
kleiner sein als der Wert des Endversatzes. Der Startversatz 604 ist
inklusiv und der Endversatz exklusiv; d.h., dass der Ausnahmebehandler
aktiv sein muss während
die Ausführungsadresse
innerhalb des Intervalls liegt [Startversatz, Endversatz].
-
Die aktive Länge 606 definiert
in Bytecodes den Bereich der durch den gegebenen Ausnahmebehandler
umschlossenen Befehle. In einer Realisation ist die aktive Länge 606 so
codiert, dass sie angibt, ob der aktive Bereich des bestimmten Ausnahmebehandlers
in einen anderen Ausnahmebehandler geschachtelt ist und insbesondere,
ob der laufende Ausnahmebehandler der letzte Behandler in einer
Liste von einem bestimmten geschützten
Codeblock zugeordneten Ausnahmebehandlern ist. Für in der Java-Programmiersprache
geschriebene Programme wird das Bit codiert, um anzugeben, wenn
der laufende Ausnahmebehandler der letzte (Fang- oder Schlussklausel)
in einer Liste von Ausnahmebehandlern für einen geschützten Codeblock
ist. Das hohe Bit der aktiven Länge 606 wird
auf eins ("1") gesetzt, wenn der
geschützte
Codeblock nicht in einem anderen geschützten Codeblock enthalten und
der laufende Behandler der letzte dem geschützten Codeblock zugeordnete
Behandler ist. Das Bit wird auf null ("0")
gesetzt, wenn der geschützte
Codeblock in einem anderen geschützten
Codeblock enthalten oder der laufende Behandler nicht der letzte
dem geschützten
Codeblock zugeordnete Behandler ist. Bei Verwendung dieser Codierung
wird der Endversatz als die Summe des Startversatzes 604 plus
die aktive Länge 606 und
0×7FFF
definiert.
-
Der Behandlerversatz 608 stellt
einen Byteversatz in ein Informationsfeld des Methodenelements dar. Genauer
gibt der Behandlerversatz 608 den Start des Ausnahmebehandler
und eine Stelle an, wo die Ausführung
von der virtuellen Java-Maschine wieder aufzunehmen ist, wenn die
bestimmte Ausnahme gefangen ist. Der Wert des Behandlerversatzes 608 muss
ein gültiger
Versatz in ein Bytecodefeld einer Methode zu einem Operationscode
eines Befehls und kleiner sein als der Wert der Bytecodezahl der
Methode.
-
Der Fangtypindex 610 gibt
den Typ des Ausnahmebehandlers an. Damit die Steuerung an den Ausnahmebehandler übertragen
wird, muss der der veranlassten Ausnahme zugehörige pc in den für den Ausnahmebehandler
definierten Bereich fallen und vom selben Typ sein. Wenn der Wert
des Index 610 für
den Fangtyp nicht Null ist, muss er ein gültiger Index in die Konstantenpooltabelle
sein, die die Klasse der durch diesen Ausnahmebehandler gefangenen
Ausnahme angibt. Wenn der Ausnahmebehandler eine Schlussklausel
darstellt, wird der Wert des Index 610 für den Fangtyp
auf null gesetzt. Ein Ausnahmebehandler für die Schlussklausel wird für alle Ausnahmen
aufgerufen, die innerhalb des Startversatzes und des Endversatzbereichs
veranlasst werden, und zwar unabhängig vom Typ.
-
Wieder bezogen auf 4, kann die CAP-Datei 16 nach
der Umwandlung in ein computerlesbares Medium 17, z.B.
eine Festplatte, eine Floppy-Disc, ein optisches Speichermedium,
einen Flashspeicher oder in ein anderes geeignetes Speichermedium
gespeichert werden. Dann kann die CAP-Datei 16 kopiert
oder an ein Terminal 22, z.B. einen Tischcomputer mit einer
peripheren Kartenannahmeeinrichtung (CAD) 24 übertragen
werden. Die CAD 24 gestattet ein Einschreiben und wieder
Aufsuchen von Information von einer Smartcard 40. Die CAD 24 enthält ein Cardport
(nicht gezeigt), in die eine Smartcard 40 eingelegt oder
gesteckt werden kann. Sobald sie eingesteckt worden ist, drücken Kontakte
von einem Stecker gegen einen Oberflächenverbindungsbereich der
Smartcard 40, um Versorgungsleistung zu liefern und einen
Verkehr mit der Smartcard 40 zu ermöglichen. Das Endgerät 22 enthält auch
ein Installationswerkzeug oder -programm 26, das die CAP-Datei 16 lädt und sie
auf die Card 40 überträgt.
-
Die Smartcard 40 hat ein
Eingabe/Ausgabe(In/Out)-Port 42, das einen Kontaktsatz
enthält,
durch den Programme, Daten und andere Kommunikationen übertragen
werden können.
Die Smartcard 40 enthält
auch ein Installationswerkzeug 46, mit dem die Inhalte
der CAP-Datei 16 empfangen werden und das Applet zur Ausführung auf
der Card 40 bereitgestellt wird. Das Installationswerkzeug 46 kann
z.B. als Java-Programm realisiert und auf der Smartcard 40 ausgeführt werden.
Die Smartcard 40 hat auch einen Speicher, der einen flüchtigen
Speicher, z.B. einen RAM 50, und einen nichtflüchtigen
Speicher, z.B. einen elektrisch löschbaren, programmierbaren
ROM (EEPROM)
54 einschließt. Die Smartcard 40 hat
auch einen ROM-Speicher, z.B. das ROM 52. Das vom Umwandler 14 bereitgestellte
Applet (CAP-Datei 16) kann im EEPROM 54 gespeichert
werden.
-
Als Teil des Installationsprozesses
werden ein oder mehrere Datenbereiche vom Installationswerkzeug 46 eingerichtet,
um Laufzeitoperationen zu erleichtern. Ein Beispiel eines Datenbereichs
ist eine Ausnahmeregistratur. Die Ausnahmeregistratur ist eine von
einer virtuellen Maschine einer Java-CardTM verwendete Liste,
wenn veranlasste Ausnahmen interpretiert werden.
-
Bezogen auf die 4 und 7 kann
die Ausnahmeregistratur 700 eine erweiterbare verbundene
Listendatenstruktur haben. Neue Einträge können dem Kopf der Liste hinzugefügt werden.
Jeder Eintrag 702 in der Ausnahmeregistratur 700 stellt
ein Methodenelement 550 (siehe 5b) dar, das Ausnahmebehandler enthält. Methodenelemente
ohne Ausnahmebehandler sind nicht enthalten.
-
Während
der Installation einer CAP-Datei ruft das Installationswerkzeug 46 eine
virtuelle Maschine der Java-Card zum Registrieren der einem Paket
zugehörigen
Methodenelemente auf. Jeder Eintrag enthält eine Adresse 704 des
zugeordneten Methodenelements und dessen Größe 706. Die Adresse 704 und
die Größe 706 definieren
einen Bereich bezogen auf den Programmzähler (pc) für Befehle, die in einem Paket
enthalten sind. Die Verwendung der Ausnahmeregistratur wird nachstehend
mehr im einzelnen beschrieben.
-
Wie eingangs im Hintergrund der Erfindung
beschrieben, hält
eine virtuelle Java-Maschine verschiedene Laufzeitdatenstrukturen,
um die Verfolgung, Ausführung
und den Aufruf von Methoden zu erhalten. Eine virtuelle Java-Card-Maschine macht das
gleiche. Bei der Laufzeit hält
eine virtuelle Java-Card-Maschine
eine pc und einen Laufzeitstapel aufrecht. Ein Laufzeitstapel speichert
Rahmen der virtuellen Java-Card-Maschine. Bezogen auf 8 enthält ein Laufzeitstapel 800 mehrere
virtuelle Maschinenrahmen 802. Jeder Rahmen 802 enthält einen
Rücksprungzeiger 806.
-
Der Rücksprungzeiger 806 ist
ein Zeiger zu der Methode, die die laufende Methode aufrief und
genauer zu dem Ort, wo die Ausführung
in der aufrufenden Methode bei vollständiger Ausführung der laufenden Methode
wieder aufzunehmen ist.
-
Wie nachstehend erläutert, braucht
auf dem Laufzeitstapel keine Referenz zu der derzeit ausgeführten Methode
gehalten werden. Alle die Ausnahmebehandler für sämtliche Methoden, die in einem
Paket zugeordnet sind, sind in einer einzigen verketteten Ausnahmebehandlungstabelle
gespeichert, die zur Laufzeit für
einen für
den laufenden pc relevanten Ausnahmebehandler aufgesucht werden
kann.
-
Bezogen auf 9 beginnt ein Prozess 900 für eine Laufzeitausnahmebehandlung
mit dem Schritt 902. Eine virtuelle Java-Card-Maschine veranlasst
eine Ausnahme (904) entweder explizit oder implizit. Die Klasse
der Ausnahme wird ermittelt (906) zusammen mit dem pc-Stand,
wo die Ausnahme veranlasst wurde (908).
-
In der Ausnahmeregistratur wird eine
Suche durchgeführt,
um ein Methodenelement zu orten, das den pc einschließt, wo die
Ausnahme veranlasst wurde (910). Dies bestimmt, in welchem
Paket die Methode des laufenden Rahmens implementiert ist. Falls
sich kein übereinstimmendes
einschließendes
Methodenelement finden (und damit auch keine verkettete Ausnahmebehandlungstabelle)
(912), erfolgt eine Prüfung,
um festzustellen, ob ein Stapelrahmen zur Entnahme aus dem Laufzeitstapel
verfügbar
ist (914). Falls keine Stapelrahmen zur Entnahme aus dem
Laufzeitstapel mehr verfügbar
sind, wird die virtuelle Java-Card-Maschine mit einer ungefangenen
Ausnahme angehalten (916). Falls ein anderer Rahmen zur
Entnahme aus dem Laufzeitstapel verfügbar ist, wird dieser Rahmen
entnommen (918). Die Entnahme des Rahmens enthält eine
Wiederinstandsetzung des vorigen Rahmens und das Setzen des pc auf
einen neuen Wert, nämlich
den Rücksprungort,
den der im Laufzeitstapel gespeicherte und zum vorangehenden Rahmen
gehörende
Rücksprungzeiger angibt.
Danach geht der Prozess mit Schritt 910 weiter. Das Entnehmen
der Einträge
aus dem Laufzeitstapel gestattet die Verschachtelung von Methoden
zwischen Paketen. D.h., dass eine Methode in einem ersten Paket
von einer aufrufenden Methode in einem zweiten anderen Paket aufgerufen
werden kann. Als solche kann die Aufrufmethode als die aufgerufene
Methode einschließend
angesehen werden und dementsprechend kann sie einen Ausnahmebehandler
enthalten, der in dem Fall anwendbar ist, wo die aufrufende Methode
eine bestimmte Ausnahme nicht fangen kann.
-
Wenn ein einschließendes Methodenelement
im Suchschritt 910 lokalisiert wird, wird ein Eintrag in
der zugehörigen
verketteten Ausnahmebehandlungstabelle (die laufende verkettete
Ausnahmebehandlungstabelle), die dem Methodenelement zugehört, wieder
aufgefunden (in diesem Fall der erste Eintrag) (930). Bei
einer Realisation zeigt die in der Ausnahmeregistratur gespeicherte
Startadresse auf die Adresse für
den ersten Eintrag in der verketteten Ausnahmebehandlungstabelle
für das
gegebene Methodenelement. Als solche kann die Ausführung der
folgenden Schritte direkt nach Wiederauffinden der Startadresse
aus der Ausnahmeregistratur fortgeführt werden.
-
Der Bereich, der dem laufenden, zu
prüfenden
Eintrag zugeordnet ist, wird geprüft, um festzustellen, ob er
den pc umfasst, wo die Ausnahme veranlasst wurde (932).
Falls sich keine Übereinstimmung
ergibt, wird im Schritt 930 ein nächster Eintrag in der laufenden
verketteten Ausnahmebehandlungstabelle aufgesucht. Falls keine Einträge mehr
verfügbar
sind (934), fährt
der Prozess mit Schritt 914 fort und prüft in der zuvor beschriebenen
Weise, ob mehr Stapelrahmen zur Entnahme verfügbar sind.
-
Wenn in Schritt 932 der
Bereich den pc umfasst, erfolgt eine Prüfung, um festzustellen, ob
der vom Ausnahmebehandler spezifizierte Ausnahmetyp mit der veranlassten
Ausnahme übereinstimmt
(936). Der Typ stimmt überein,
wenn der Typ der veranlassten Ausnahme dieselbe Klasse hat, wie
die spezifizierte Klasse oder eine Unterklasse der spezifizierten
Klasse. Auch dann, wenn der Ausnahmebehandler einer Schlussklausel
entspricht, liegt Übereinstimmung
vor. Eine Schlussklausel ist ein Konstrukt der Java-Programmiersprache, das
es einem Programmierer gestattet, einen Ausnahmebehandler zu definieren,
der für
alle Klassentypen ausgeführt
wird und an sich mit allen Typen veranlasster Ausnahmen übereinstimmt.
Wenn der Typ passt, wird der dem laufenden Eintrag zugeordnete Ausnahmebehandler
ausgeführt
(938) und der Prozess vervollständigt (940). Genauer
wird der pc auf der Basis der im laufenden Eintrag für den Ausnahmebehandler gespeicherten Adresse
eingestellt (Behandlerversatz 610 von 6) und die Ausführung mit der ersten Anweisung
des gefangenen Ausnahmebehandler fortgesetzt.
-
In einer Realisation brauchen nicht
alle Einträge
in der verketteten Ausnahmebehandlungstabelle vor der Feststellung,
dass eine ungefangene Ausnahme veranlasst wurde, getestet werden.
Bezogen auf 10a wird
nach der Prüfung
des Typs im Schritt 936 zusätzlich geprüft, um festzustellen, ob eine
andere umfassende Versuchsanweisung in der laufenden Methoden enthalten
ist (937). Wie oben beschrieben, spiegelt eine umfassende
Versuchsanweisung einen anderen Ausnahmebehandler wieder, dessen
Bereich ebenfalls den laufenden pc umfasst. Wenn keine andere einschließende Versuchsanweisung
vorliegt, kann der Prozess unmittelbar zu dem Laufzeitstapelentnahmeschritt 914 springen,
unabhängig
davon, ob andere Einträge
in der laufenden verketteten Ausnahmebehandlungstabelle zur Verarbeitung
verbleiben.
-
In einer Realisation kann Schritt 937 unter
Verwendung des Optimierbits (das codierte hohe Bit des Felds der
aktiven Länge 606),
das in der verketteten Ausnahmebehandlungstabelle für den laufenden
Eintrag gespeichert ist, aufgerufen werden. Genauer wird das höchste Bit
der aktiven Länge
für den
laufenden Eintrag wieder aufgefunden (937a). Eine Prüfung erfolgt,
um festzustellen, ob das Bit gesetzt ist (937b). Falls
das Bit nicht gesetzt ist (was angibt, dass die umfassende Versuchsanweisung
vorhanden ist oder dass weitere Behandler für dieselbe Versuchsanweisung
vorliegen), fährt
der Prozess mit Schritt 934 fort. Falls das Bit gesetzt ist,
fährt der
Prozess mit Schritt 914 fort.
-
Diese Erfindung wurde bezogen auf
einige spezifische Ausführungsbeispiele
beschrieben, wobei die Beschreibung als die Erfindung veranschaulichend
und nicht beschränkend
anzusehen ist. Verschiedene Modifikationen können den einschlägigen Fachleuten
einfallen, ohne vom Umfang der durch die beiliegenden Ansprüche definierten
Erfindung abzuweichen.
-
Diese Erfindung ist auf Programme
und Methoden anwendbar, die in anderen Programmiersprachen als Java
geschrieben sind, die Programmiersprachen einschließen, die
in plattformabhängige
Codes übersetzt sind.
Die beschriebenen Techniken können
in anderem Kontext, z.B. auf in „C" oder „Pascal" geschriebene Programme, angewendet
werden, wo gleichartige Laufzeitstapelbehandlungen benötigt werden.