DE10319299A1 - Optimierung und Ausführung eines Programms - Google Patents

Optimierung und Ausführung eines Programms Download PDF

Info

Publication number
DE10319299A1
DE10319299A1 DE2003119299 DE10319299A DE10319299A1 DE 10319299 A1 DE10319299 A1 DE 10319299A1 DE 2003119299 DE2003119299 DE 2003119299 DE 10319299 A DE10319299 A DE 10319299A DE 10319299 A1 DE10319299 A1 DE 10319299A1
Authority
DE
Germany
Prior art keywords
program
command
instruction
strand
optimized
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE2003119299
Other languages
English (en)
Inventor
Thomas Stocker
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Giesecke and Devrient GmbH
Original Assignee
Giesecke and Devrient GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Giesecke and Devrient GmbH filed Critical Giesecke and Devrient GmbH
Priority to DE2003119299 priority Critical patent/DE10319299A1/de
Priority to EP04729435A priority patent/EP1620798A2/de
Priority to PCT/EP2004/004400 priority patent/WO2004097628A2/de
Publication of DE10319299A1 publication Critical patent/DE10319299A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

Bei einem Verfahren zur Erzeugung eines optimierten Programms (32) aus einem ursprünglichen Programm (52) weist das optimierte Programm (32) einen Befehlscodestrang (34) mit Befehlscodes (OCx) und einen Operandenstrang (36) mit den zugehörigen Operanden (ODx.y) auf. Bei der Optimierung werden zumindest manche Befehlsgruppen (54, 56) des ursprünglichen Programms (52) in je einen Makrobefehl (46) des optimierten Programms (32) umgesetzt, wobei in dem Makrobefehl (46) die in der Befehlsgruppe (54, 56) enthaltenen Befehlscodes codiert sind und die Operanden (ODx.y) des Makrobefehls (46) den in der Befehlsgruppe (54, 56) enthaltenen Operanden entsprechen. Bei einem Verfahren zum Ausführen eines Programms (32), das insbesondere gemäß dem oben genannten Verfahren optimiert sein kann, ist die Verwendung eines ersten Befehlszählers für den Befehlscodestrang (34) und eines zweiten Befehlszählers für den Operandenstrang (36) vorgesehen. Ein Computerprogrammprodukt und eine Vorrichtung weisen entsprechende Merkmale auf. Die Erfindung verringert den zur Speicherung des Programms (32) erforderlichen Speicherplatz.

Description

  • Die Erfindung betrifft allgemein das technische Gebiet der Optimierung eines Programms und der Ausführung des optimierten Programms durch eine Maschine, die insbesondere eine virtuelle Maschine, aber auch ein unmittelbar in Hardware implementierter Prozessor sein kann. Spezieller betrifft die Erfindung die Programmoptimierung durch Verwendung von Makrooperationen, um den für das optimierte Programm benötigten Speicherplatz zu verringern. Ein bevorzugtes Einsatzgebiet der Erfindung ist die Programmausführung durch einen tragbaren Datenträger, der beispielsweise als Chipkarte in unterschiedlichen Bauformen oder als Chipmodul ausgestaltet sein kann.
  • Bei tragbaren Datenträgern und anderen ressourcenbeschränkten Systemen ist der zur Aufnahme von ausführbarem Programmcode vorgesehene Speicherplatz in der Regel nur knapp bemessen. Dies gilt insbesondere dann, wenn der Programmcode nicht in einem maskenprogrammierten ROM, sondern in einem nicht-flüchtigen, beschreibbaren EEPROM abgelegt werden soll, da auf heute gebräuchlichen Datenträgern wesentlich mehr ROM-Speicher als EEPROM-Speicher vorgesehen ist. Die Speicherung von Programmcode im EEPROM ist jedoch wünschenswert, weil dann eventuelle Änderungen des Programmcodes mit viel geringerem Aufwand in die Fertigung neuer Datenträger einfließen können.
  • Es ist bekannt, den zur Speicherung eines Programms benötigten Speicherplatz ("footprint" des Programms) durch einen Optimierungsdurchlauf zu reduzieren. Der Artikel "Liebling, ich habe den Code geschrumpft" von Christian Ferdinand und Reinhold Heckmann, erschienen in der Zeitschrift Design und Elektronik, Heft 01/2001, Seiten 113 bis 115, verfügbar unter http://www.elektroniknet.de/fachthemen/pdf/pdf_due_0101/DE0101113.pdf, beschreibt ein Optimierungsverfahren, bei dem wiederholt vorkommende Codestücke aus einem zu optimierenden Programm herausgezogen und durch ein gemeinsames Unterprogramm als Stellvertreter ersetzt werden. Ein ähnlicher Artikel in englischer Sprache von Christian Ferdinand mit dem Titel "Post Pass Code Compaction at the Assembly Level for C16x" ist gegenwärtig unter http://www.spacetools.com/site/contact_v3_9/V3_9p35.pdf verfügbar.
  • Das aus den gerade genannten Artikeln bekannte Verfahren ist jedoch darauf angewiesen, Befehlsgruppen zu finden, die sowohl hinsichtlich ihrer Befehlscodes als auch hinsichtlich der jedem Befehlscode zugeordneten Operanden übereinstimmen. Dies schränkt die Optimierungsmöglichkeiten erheblich ein, da Befehlsgruppen, die z.B. identische Berechnungsfunktionen auf unterschiedlichen Daten ausführen, nicht als wiederholt vorkommende Codestücke angesehen werden. Es wäre daher wünschenswert, eine Codegrößenoptimierung auch für solche Befehlsgruppen zu ermöglichen.
  • Die Erfindung hat demgemäß die Aufgabe, die Probleme des Standes der Technik zumindest zum Teil zu vermeiden und eine Technik zur Optimierung und Ausführung eines Programms bereitzustellen, die den zur Speicherung des Programms erforderlichen Speicherplatz möglichst stark verringert. In bevorzugten Ausgestaltungen soll die Erfindung relativ leicht zu implementieren sein und keinen oder allenfalls geringen Zusatzaufwand bei der Programmentwicklung verursachen.
  • Erfindungsgemäß wird diese Aufgabe ganz oder zum Teil gelöst durch ein Verfahren zur Erzeugung eines optimierten Programms gemäß Anspruch 1, ein Verfahren zum Ausführen eines Programms gemäß Anspruch 9, ein Computerprogrammprodukt gemäß Anspruch 14 und eine Vorrichtung gemäß Anspruch 15, die insbesondere als tragbarer Datenträger ausgestaltet sein kann. Die abhängigen Ansprüche betreffen bevorzugte Ausführungsformen der Erfindung.
  • Die Erfindung beruht auf der Grundidee, bei der Optimierung und bei der Ausführung des optimierten Programms die Befehlscodes von den Operanden zu trennen. Das optimierte Programm enthält mindestens einen Befehlscodestrang mit Befehlscodes und mindestens einen Operandenstrang mit Operanden. Bei der Optimierung werden Befehlsgruppen des ursprünglichen Programms gesucht, deren Befehlscodes sich durch je einen Makrobefehl zusammenfassen lassen. Die Operanden einer solchen Befehlsgruppe werden als Operanden des Makrobefehls in den Operandenstrang übernommen. Auf diese Weise ergeben sich deutlich mehr Optimierungsmöglichkeiten als im Stand der Technik, weil Befehlsgruppen schon dann zu Makrobefehlen zusammengefaßt werden können, wenn nur die Befehlscodefolgen – und nicht notwendigerweise auch die in den Befehlsgruppen enthaltenen Operanden – übereinstimmen.
  • Zur Ausführung des optimierten Programms ist erfindungsgemäß eine Maschine mit zwei Befehlszählern vorgesehen, von denen der erste dem Befehlscodestrang und der zweite dem Operandenstrang zugeordnet ist. Während oder vor oder nach der Ausführung jedes Befehls wird der erste Befehlszähler entsprechend der Anzahl der Befehlscodes im Befehlscodestrang weitergeschaltet, und der zweite Befehlszähler wird entsprechend der Anzahl der Operanden im Operandenstrang weitergeschaltet. Bei Befehlen, die keine Operanden aufweisen, ist diese "Weiterschaltung" des zweiten Befehlszählers natürlich nur konzeptuell zu verstehen, weil der Befehlszähler dann um "null Operanden" weitergeschaltet, also im Ergebnis nicht verändert wird. Dieses Programmausführungsverfahren liefert die technischen Grundlagen, um Programme verarbeiten zu können, die gemäß der oben genannten Grundidee optimiert worden sind.
  • In bevorzugten Ausgestaltungen der Erfindung enthält das optimierte Programm Makrobefehle, die jeweils mehrere Befehle des ursprünglichen Programms ersetzen. Unter dem Begriff "Makrobefehl" soll im vorliegenden Dokument insbesondere jeder Befehl verstanden werden, der in seiner Wirkung der Wirkung mehrerer Einzelbefehle des ursprünglichen Programms entspricht. Ein Makrobefehl kann beispielsweise als spezielle Instruktion implementiert werden, die bereits in ihrem Befehlscode eine Information über die auszuführenden Einzelbefehle enthält, oder als allgemeine Instruktion, die erst in einem zweiten Befehlscodewort oder in einem Operanden die auszuführenden Einzelbefehle codiert. Insbesondere kann der Makrobefehl einen Unterprogrammaufruf oder einen Fangaufruf (trap) oder einen Befehlscode umfassen, der in einem vorgegebenen Befehlssatz für Erweiterungen reserviert ist.
  • Bei dem erfindungsgemäßen Optimierungsverfahren wird die Befehlscodefolge einer zu optimierenden Befehlsgruppe in einem Makrobefehl codiert. Dies bedeutet in der Regel nicht, daß sich die Befehlscodes ohne weitere Informationen aus dem Makrobefehl ableiten lassen. Der Makrobefehl enthält vielmehr vorzugsweise lediglich eine Referenz auf eine Makrodefinition, die ihrerseits die auszuführende Folge von Befehlscodes beinhaltet. In Ausführungsformen, bei denen der Makrobefehl als Unterprogrammaufruf ausgestaltet ist, wird das aufgerufene Unterprogramm als Makrodefinition angesehen.
  • In manchen Ausgestaltungen der Erfindung wird ein fest vorgegebener Satz von Makrodefinitionen verwendet, die Befehlssequenzen entsprechen, wel che erfahrungsgemäß häufig benötigt werden. Bevorzugt werden jedoch die Makrodefinitionen – ausschließlich oder zusätzlich zu vorgegebenen Makrodefinitionen – beim Optimierungsvorgang erstellt. Solche beim Optimierungsvorgang erzeugten Makrodefinitionen sollen insbesondere Folgen von Befehlscodes codieren, die im ursprünglichen Programm möglichst häufig auftreten.
  • Die erfindungsgemäße Trennung des optimierten Programms in mindestens einen Befehlscodestrang und mindestens einen Operandenstrang entsteht vorzugsweise erst bei der Optimierung. In bevorzugten Ausführungsformen weist das ursprüngliche Programm diese Trennung nicht auf, sondern besteht aus einer Befehlsfolge, in der sich Befehlscodes und gegebenenfalls vorhandene Operanden im wesentlichen abwechseln. Dieser an sich übliche Wechsel zwischen Befehlscodes und Operanden ist im optimierten Programm gemäß der vorliegenden Erfindung aufgelöst.
  • Was die effektiv ausgeführten Befehle – nach Auflösung der Makrobefehle – angeht, entspricht der Programmfluß im optimierten Programm vorzugsweise dem Programmfluß im ursprünglichen Programm. Es werden daher bei der Programmoptimierung vorzugsweise Sprungbefehle und sonstige den Programmablauf beeinflussende Befehle derart erzeugt, daß sie sowohl ein Sprungziel im Befehlscodestrang als auch ein entsprechendes Sprungziel im Operandenstrang definieren.
  • Bestehende Prozessorarchitekturen können so angepaßt werden, daß sie erfindungsgemäß optimierte Programme als Maschinensprache ausführen. Grundsätzliche Schwierigkeiten sind damit nicht verbunden, wenngleich natürlich gewisse Arbeiten für die Entwicklung geänderter Hardwarestrukturen erforderlich sind. Mit besonders geringem Aufwand kann die Erfindung jedoch in einer virtuellen Maschine implementiert werden. Insbesondere ist vorgesehen, eine Java Card Virtual Machine an die erfindungsgemäß optimierte Programmstruktur anzupassen. Die genannte virtuelle Maschine ist – soweit die Ausführung nicht-optimierter Programme betroffen ist – gut bekannt; ausführliche Spezifikationen finden sich auf den Internet-Seiten der Firma Sun Microsystems, Inc., Palo Alto, USA, unter http://java.sun.com.
  • Der erfindungsgemäße Optimierungsprozeß kann prinzipiell in jeder Stufe der automatischen Programmumsetzung vorgenommen werden, beispielsweise durch einen Compiler, einen Konverter oder ein gesondertes Optimierungsprogramm. Besonders bevorzugt wird der Optimierungsvorgang jedoch von einem Ladeprogramm ausgeführt, das z.B. in einem tragbaren Datenträger, in den auch das auszuführende Programm eingeschrieben werden soll, enthalten ist. In diesem Fall braucht bei der gesamten Programmentwicklung keinerlei Rücksicht auf das erfindungsgemäße Optimierungsverfahren genommen zu werden; es wird vielmehr ein völlig normales unoptimiertes Programm – z.B. in Form einer sogenannten CAP-Datei – erzeugt, das auch von einem gewöhnlichen Datenträger ohne weiteres ausgeführt werden könnte. Wenn dieses Programm in einen erfindungsgemäß ausgestalteten Datenträger eingelesen wird, erfolgt automatisch die Optimierung.
  • Das erfindungsgemäße Computerprogrammprodukt weist Programmbefehle auf, um das erfindungsgemäße Optimierungs- und/oder Ausführungsverfahren zu implementieren. Ein derartiges Computerprogrammprodukt kann ein körperliches Medium sein, beispielsweise ein Halbleiterspeicher oder eine Diskette oder eine CD-ROM. Das Computerprogrammprodukt kann jedoch auch ein nicht-körperliches Medium sein, beispielsweise ein über ein Computernetzwerk übermitteltes Signal. Das Computerprogrammprodukt kann z.B. ein Compiler oder ein Konverter oder ein Optimierungsprogramm zur Ausführung durch einen gewöhnlichen Arbeitsplatzcomputer oder ein optimierender Lader oder eine virtuelle Maschine zur Ausführung durch einen Prozessor eines tragbaren Datenträgers sein.
  • In bevorzugten Ausgestaltungen weisen der Datenträger und/oder das Computerprogrammprodukt Merkmale auf, die den gerade beschriebenen und/oder den in den abhängigen Verfahrensansprüchen genannten Merkmalen entsprechen.
  • Weitere Merkmale, Vorteile und Aufgaben der Erfindung gehen aus der folgenden genauen Beschreibung eines Ausführungsbeispiels und mehrerer Ausführungsalternativen hervor. Es wird auf die schematischen Zeichnungen verwiesen, in denen zeigen:
  • 1 ein Blockdiagramm mit Funktionseinheiten eines tragbaren Datenträgers nach einem Ausführungsbeispiel der Erfindung,
  • 2 eine schematische Darstellung des Speicherinhalts bei der Ausführung eines Befehls in einem optimierten Programm,
  • 3 beispielhafte Ausschnitte eines ursprünglichen und des daraus erzeugten optimierten Programms,
  • 4 eine schematische Darstellung des Datenflusses bei der Programmerzeugung durch einen Compiler und bei der Optimierung.
  • Der in 1 dargestellte Datenträger 10 ist im vorliegenden Ausführungsbeispiel als Chipkarte gemäß dem Java-Card-Standard ausgestaltet. Der Datenträger 10 weist auf einem einzigen Halbleiterchip einen Prozessor 12, mehrere in unterschiedlichen Technologien ausgestaltete Speicherfelder und eine Schnittstellenschaltung 14 zur kontaktlosen oder kontaktgebundenen Kommunikation auf. Im vorliegenden Ausführungsbeispiel sind als Speicherfelder ein Arbeitsspeicher 16, ein Festwertspeicher 18 und ein nichtflüchtiger Speicher 20 vorgesehen. Der Arbeitsspeicher 16 ist als RAM, der Festwertspeicher 18 als maskenprogrammiertes ROM und der nichtflüchtige Speicher 20 als elektrisch lösch- und programmierbares EEPROM ausgestaltet. Insgesamt ist der zur Verfügung stehende Speicherplatz relativ knapp bemessen.
  • Im Festwertspeicher 18 – und zum Teil auch im nicht-flüchtigen Speicher 20 – sind Systemprogramme 22 enthalten. In an sich bekannter Weise umfassen die Systemprogramme 22 ein Betriebssystem 24, das eine Vielzahl von hardwarenahen Funktionen und Diensten bereitstellt. Ein Codemodul 26 implementiert eine virtuelle Maschine, und zwar im vorliegenden Ausführungsbeispiel eine JCVM (Java Card Virtual Machine). Eine Klassenbibliothek 28 enthält eine Reihe vordefinierter Anwendungsprogrammierschnittstellen. Die im folgenden beschriebenen Optimierungsvorgänge werden im vorliegenden Ausführungsbeispiel von einem internen Ladeprogramm 30 durchgeführt, das sich im nicht-flüchtigen Speicher 20 befindet und das konzeptuell teils dem Betriebssystem 24 und teils dem JCVM-Codemodul 26 zuzuordnen ist.
  • Der betriebsbereite Datenträger 10 enthält im nicht-flüchtigen Speicher 20 ein optimiertes Programm 32, das mindestens einen Befehlscodestrang 34 und mindestens einen Operandenstrang 36 aufweist. Das Programm 32 ist hinsichtlich des im nicht-flüchtigen Speicher 20 statisch benötigten Speicherplatzes ("footprint") durch die Verwendung von Makrobefehlen optimiert worden. Makrodefinitionen 38, die die Bedeutung jedes Makrobefehls angeben, befinden sich ebenfalls im nicht-flüchtigen Speicher 20.
  • Bei der Ausführung des optimierten Programms 32 auf dem Datenträger 10 verwaltet die durch das Codemodul 26 implementierte virtuelle Maschine einen zusammengesetzten Befehlszähler 40 im Arbeitsspeicher 16. Der zusammengesetzte Befehlszähler 40 enthält einen ersten Befehlszähler 42, dessen Stand den jeweils aktuellen Befehlscode im Befehlscodestrang 34 angibt, und einen zweiten Befehlszähler 44, dessen Stand den jeweils aktuellen Operanden im Operandenstrang 36 angibt.
  • Die Verwendung des zusammengesetzten Befehlszählers 40 ist in 2 genauer dargestellt. Es ist dort beispielhaft ein erster Befehl 46 gezeigt, der sich aus einem Befehlscode OC1 im Befehlscodestrang 34 und zwei Operanden OD1.1 und OD1.2 im Operandenstrang 36 zusammensetzt. Ein zweiter Befehl 48 weist einen Befehlscode OC2 und einen einzigen Operanden OD2.1 auf.
  • Vor der Ausführung des ersten Befehls 46 zeigen der erste und der zweite Befehlszähler 42, 44 auf den Befehlscode OC1 sowie auf den ersten Operanden OD1.1. Bei der Befehlsausführung werden die Befehlszähler 42, 44 weitergeschaltet, und zwar für den Befehlscodestrang 34 und den Operandenstrang 36 getrennt je nach der Anzahl der Befehlscodes bzw. Operanden im ausgeführten Befehl. In dem Beispiel von 2 erfolgt bei der Ausführung des Befehls 46 also eine Weiterschaltung des ersten Befehlszählers 42 um ein Speicherwort und eine Weiterschaltung des zweiten Befehlszählers 44 um zwei Speicherwörter. Hierdurch wird der in 2 durch gestrichelte Pfeile angedeutete Zustand erreicht, in dem die Befehlszähler 42, 44 auf den Befehlscode OC2 bzw. den Operanden OD2.1 des nächsten auszuführenden Befehls 48 zeigen. Bei Befehlen, die keine Operanden aufweisen, wird der Wert des zweiten Befehlszählers 44 natürlich nicht verändert.
  • 3 zeigt größere Ausschnitte aus dem Befehlscodestrang 34 und dem Operandenstrang 36 des optimierten Programms 32. Die ersten beiden Befehle mit den Befehlscodes OC1, OC2 und den Operanden OD1.1, OD1.2, OD2.1 wurde bereits beschrieben. Ein dritter Befehl enthält lediglich den Befehlscode OC3 und keinen Operanden. Es folgen ein vierter Befehl mit dem Befehlscode OC4 und zwei Operanden OD4.1 und OD4.2, ein fünfter Befehl mit dem Befehlscode OC5 und zwei Operanden OD5.1 und OD5.2 sowie ein sechster Befehl, der nur den Befehlscode OC6 und keinen Operanden enthält.
  • Der zweite Befehl 48 (2) sowie die Befehle mit den Befehlscodes OC3, OC4 und OC6 werden unmittelbar von der durch das Codemodul 26 implementierten virtuellen Maschine ausgeführt. Diese Befehle werden daher auch als "native" Befehle bezeichnet. Der erste Befehl 46 (2) und der Befehl mit dem Befehlscode OC5 sind dagegen Makrobefehle, deren Wirkung jeweils durch eine Folge mehrerer nativer Befehle definiert ist. Die zur Ausführung eines Makrobefehls benötigten Zusatzinformationen sind in den Makrodefinitionen 38 enthalten; 3 zeigt beispielhaft eine Definition 50, die dem Makrobefehlscode "MAC1" des Befehls 46 die native Befehlscodefolge "ILOAD", "ILOAD", "IADD" zuordnet.
  • Im vorliegenden Ausführungsbeispiel ist die durch das Codemodul 26 implementierte virtuelle Maschine so ausgestaltet, daß sie Makrobefehle gemäß den jeweiligen Makrodefinitionen 38 in eine Folge nativer Befehle auflöst und letztere ausführt. Genauer greift die virtuelle Maschine bei der Ausführung eines Makrobefehls auf die entsprechende Makrodefinition – z.B. die Definition 50 – zu und arbeitet die darin enthaltenen Befehlscodes der Reihe nach ab, wobei je nach Bedarf – ebenfalls der Reihe nach – die im Operandenstrang 36 gespeicherten Operanden herangezogen werden. Die Auswahl der jeweiligen Makrodefinition kann über den Befehlscode selbst oder über einen Zeiger oder Indexwert erfolgen, der entweder als ergänzender Befehlscode im Befehlscodestrang 34 oder als ergänzender Operand im Operandenstrang 36 gespeichert sein kann.
  • In Ausführungsalternativen kann auch vorgesehen sein, bei der Optimierung statt der Makrodefinitionen 38 eine geeignete Erweiterung für das Codemodul 26 zu erzeugen, so daß effektiv der Befehlssatz der virtuellen Maschine um die benötigten Makrobefehle – die dann wie native Befehle ausgeführt werden – ergänzt wird.
  • In 3 ist ferner ein Ausschnitt aus einem ursprünglichen Programm 52 gezeigt, durch dessen Optimierung das optimierte Programm 32 und die Makrodefinitionen 38 erzeugt wurden. Dieser Vorgang ist in 3 durch zwei dicke Pfeile angedeutet. Das ursprüngliche Programm 52 liegt in dem für virtuelle Maschinen nach dem Java-Card-Standard üblicherweise verwendeten Format vor. In 3 sind zehn Befehle U1 – U10 des ursprünglichen Programms 52 gezeigt, die jeweils mit einem Befehlscode beginnen. Die Befehle U1, U2, U4, U6, U7 und U8 weisen ferner je einen Parameter auf, der jeweils unmittelbar auf den Befehlscode folgt.
  • Aufgabe des Optimierungsvorgangs ist es, Befehlsgruppen zu finden, die im ursprünglichen Programm 52 möglichst häufig vorkommen und die hinsichtlich ihrer Befehlscodefolgen übereinstimmen. In 3 sind beispiels weise zwei solche Befehlsgruppen 54, 56 enthalten, die jeweils die Befehlscodefolge "ILOAD", "ILOAD", "IADD" aufweisen. Diese Befehlsgruppen 54, 56 werden bei der Optimierung durch jeweils einen Makrobefehl im Befehlscodestrang 34 ersetzt, und ein entsprechender Eintrag 50 in den Makrodefinitionen 38 wird erzeugt. Die in der Befehlsgruppe 54, 56 enthaltenen Operanden werden in den Operandenstrang 36 übernommen. Im Ergebnis wird z.B. der Makrobefehl 46 (2) aus den ursprünglichen Befehlen U1 – U3 gebildet, und die Operanden der zweiten Befehlsgruppe 56 werden als Operanden OD5.1 und OD5.2 in den Operandenstrang 36 übernommen.
  • Das Ziel der Optimierung ist es, möglichst viele und gleichzeitig möglichst große übereinstimmende Befehlsgruppen im ursprünglichen Programm 52 zu identifizieren. Hier ist in der Regel eine Abwägung erforderlich, weil mit steigender Größe normalerweise die Anzahl der übereinstimmenden Befehlsgruppen abnimmt. Durch an sich bekannte Techniken – z.B. geeignete Heuristiken oder Techniken der linearen Programmierung – kann jedoch eine hinreichend gute Lösung gefunden werden. Da die Operanden der optimierten Befehlsgruppen 54, 56 nicht übereinzustimmen brauchen, ist bei praxisnahen Anwendungen eine erhebliche Codegrößenreduktion möglich, die weit über die relativ geringe Einsparung bei dem Beispiel von 3 hinausgeht.
  • Befehle des ursprünglichen Programms 52, die bei der Optimierung nicht durch Makrobefehle ersetzt werden konnten, werden in der Regel unverändert in das optimierte Programm 32 übernommen, wobei eine Aufspaltung in den Befehlscode und – falls vorhanden – den oder die Operanden erfolgt. So entspricht beispielsweise der Befehl 48 (2) dem ursprünglichen Befehl U4, und der ursprüngliche Befehl U10 wurde mit dem Befehlscode OC6 unverändert in den Befehlscodestrang 34 übernommen.
  • Eine Ausnahme von der gerade genannten Regel besteht bei Sprungbefehlen, deren Zieladressen an die Verwendung des zusammengesetzten Befehlszählers 40 angepaßt werden müssen. So wird beispielsweise der Sprungbefehl U6 des ursprünglichen Programms 52 mit einem Sprungzielversatz von 8 Byte bei der Optimierung in den Sprungbefehl mit dem Befehlscode OC4 umgewandelt, der in seinem ersten Operanden OD4.1 einen Versatz von 3 Byte für den ersten Befehlszähler 42 und in seinem zweiten Operanden OD4.2 einen Versatz von 4 Byte für den zweiten Befehlszähler 44 angibt. Statt dieser relativ einfachen Ausgestaltung kann in Ausführungsalternativen eine kompaktere Darstellung von Sprungzieladressen vorgesehen sein, durch die neue Zählerstände der beiden Befehlszähler 42, 44 mit möglichst wenig Speicherbedarf definiert werden können.
  • Es versteht sich, daß bei der gesamten Ausführung des optimierten Programms 32 die Trennung zwischen dem Befehlscodestrang 34 und dem Operandenstrang 36 sowie die Existenz von zwei Befehlszählern 42, 44 berücksichtigt werden muß. Dies betrifft z.B. auch die Verwaltung von Rücksprungadressen in einem Stapelspeicher und die Ausführung sonstiger Befehle, die den Programmfluß steuern.
  • In 4 ist der Vorgang der Programmerzeugung und -optimierung dargestellt, der mit der bekannten Übersetzung eines Java-Quellprogramms 58 durch einen Compiler 60 in eine Klassendatei 62 beginnt. Ein Konverter 64, der oft auch als "Off-Card Virtual Machine" bezeichnet wird, wandelt die Klassendatei 62 – sowie gegebenenfalls benötigte Export-Dateien – in eine CAP-Datei (CAP = Converted Applet) um. Im vorliegenden Ausführungsbeispiel stellt die CAP-Datei das ursprüngliche Programm 52 dar, während in Ausführungsalternativen die oben beschriebenen Optimierungsschritte bereits durch den Compiler 60 und/oder den Konverter 64 durchgeführt werden.
  • Das ursprüngliche Programm 52 wird bei der Herstellung oder der Initialisierung oder der Personalisierung des Datenträgers 10 von einem externen Ladeprogramm 66 über die Schnittstellenschaltung 14 in den Datenträger 10 eingespielt. Das interne Ladeprogramm 30 steuert den Schreibvorgang in den nicht-flüchtigen Speicher 20.
  • Im vorliegenden Ausführungsbeispiel führt das interne Ladeprogramm 30 überdies die oben beschriebenen Optimierungsschritte, also die Erzeugung des optimierten Programms 32 und der Makrodefinitionen 38 aus dem ursprünglichen Programm 52, aus. Dies hat den Vorteil, daß die hier beschriebene Optimierung für den Anwender völlig transparent ist; der Datenträger 10 nimmt also alle üblichen CAP-Dateien an. In Ausführungsalternativen kann dagegen die Optimierung des ursprünglichen Programms 52 auch von dem externen Ladeprogramm 66 oder von einem weiteren Zusatzprogramm durchgeführt werden. In diesem Fall wird die Optimierung auf einem externen Computer ausgeführt, der in der Regel erheblich höhere Rechenleistung als der Datenträger 10 zur Verfügung stellt.

Claims (15)

  1. Verfahren zur Erzeugung eines optimierten Programms (32) aus einem ursprünglichen Programm (52), das Befehle (Ux) mit Befehlscodes und Operanden aufweist, zur Verringerung des benötigten Speicherplatzes, wobei: – das optimierte Programm (32) mindestens einen Befehlscodestrang (34) und mindestens einen Operandenstrang (36) aufweist, – jeder Befehl (46, 48) des optimierten Programms (32) aus mindestens einem Befehlscode (OCx) im Befehlscodestrang (34) und keinem, einem oder mehreren Operanden (ODx.y) im Operandenstrang (36) gebildet wird, – bei der Optimierung zumindest manche Befehlsgruppen (54, 56) des ursprünglichen Programms (52) in je einen Makrobefehl (46) des optimierten Programms (32) umgesetzt werden, wobei in dem Makrobefehl (46) die in der Befehlsgruppe (54, 56) enthaltenen Befehlscodes codiert sind und die Operanden (ODx.y) des Makrobefehls (46) den in der Befehlsgruppe (54, 56) enthaltenen Operanden entsprechen.
  2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, daß solche Befehlsgruppen (54, 56) des ursprünglichen Programms (52) optimiert werden, deren Folge von Befehlscodes im ursprünglichen Programm (52) mehrfach auftritt.
  3. Verfahren nach Anspruch 1 oder Anspruch 2, dadurch gekennzeichnet, daß Makrodefinitionen (38) vorgesehen sind, die jedem Makrobefehl (46) eine Folge von Befehlscodes zuordnen, die bei der Ausführung des Makrobefehls (46) abgearbeitet werden sollen.
  4. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, daß die Makrodefinitionen (38) zumindest zum Teil im Zuge der Optimierung des ursprünglichen Programms (52) erzeugt werden.
  5. Verfahren nach einem der Ansprüche 1 bis 4, dadurch gekennzeichnet, daß Sprungbefehle (U6) des ursprünglichen Programms (52) in Sprungbefehle (OC4, OD4.1, OD4.2) des optimierten Programms (32) umgewandelt werden, die ein Sprungziel im Befehlscodestrang (34) und ein Sprungziel im Operandenstrang (36) des optimierten Programms (32) definieren.
  6. Verfahren nach einem der Ansprüche 1 bis 5, dadurch gekennzeichnet, daß das ursprüngliche Programm (52) eine Folge von ineinander verzahnten Befehlscodes und Operanden aufweist.
  7. Verfahren nach einem der Ansprüche 1 bis 6, dadurch gekennzeichnet, daß das ursprüngliche und das optimierte Programm (52, 32) zur Ausführung durch eine virtuelle Maschine, insbesondere eine Java Card Virtual Machine, vorgesehen sind.
  8. Verfahren nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, daß das ursprüngliche Programm (52) beim Laden in einen Speicher (16, 18, 20) eines tragbaren Datenträgers (10) in das optimierte Programm (32) umgesetzt wird.
  9. Verfahren zum Ausführen eines Programms (32) durch eine Maschine, wobei: – das Programm (32) mindestens einen Befehlscodestrang (34) und mindestens einen Operandenstrang (36) aufweist, – die Maschine einen ersten Befehlszähler (42) für den Befehlscodestrang (34) und einen zweiten Befehlszähler (44) für den Operandenstrang (36) aufweist, – jeder Befehl (46, 48) des Programms (32) mindestens einen Befehlscode (OCx) im Befehlscodestrang (34) und keinen, einen oder mehrere Operanden (ODx.y) im Operandenstrang (36) aufweist, und – im Zusammenhang mit der Ausführung jedes Befehls (46, 48) der erste Befehlszähler (42) entsprechend der Anzahl der Befehlscodes (OCx) des Befehls (46, 48) im Befehlscodestrang (34) weitergeschaltet wird und der zweite Befehlszähler (44) entsprechend der Anzahl der Operanden (ODx.y) des Befehls (46, 48) im Operandenstrang (36) weitergeschaltet wird.
  10. Verfahren nach Anspruch 9, dadurch gekennzeichnet, daß zumindest manche Befehle (46, 48) des Programms (32) Makrobefehle (46) sind, von denen jeder bei einem Optimierungsvorgang aus mehreren in einem ursprünglichen Programm (52) vorgesehenen Befehlen (Ux) gebildet wurde, um den für das optimierte Programm (32) benötigten Speicherplatz zu verringern.
  11. Verfahren nach Anspruch 9 oder Anspruch 10, dadurch gekennzeichnet, daß bei der Ausführung eines den Programmfluß verändernden Befehls (OC4, OD4.1, OD4.2) sowohl der erste als auch der zweite Befehlszähler (42, 44) auf je einen neuen Zählerstand gesetzt werden.
  12. Verfahren nach einem der Ansprüche 9 bis 11, dadurch gekennzeichnet, daß das ausgeführte Programm (32) in einem Optimierungsverfahren nach einem der Ansprüche 1 bis 8 optimiert worden ist.
  13. Verfahren nach einem der Ansprüche 9 bis 12, dadurch gekennzeichnet, daß die Maschine eine virtuelle Maschine, insbesondere eine Java Card Virtual Machine, ist.
  14. Computerprogrammprodukt, das Programmbefehle aufweist, die einen Prozessor (12) zur Ausführung eines Verfahrens nach einem der Ansprüche 1 bis 13 veranlassen.
  15. Vorrichtung, insbesondere tragbarer Datenträger (10), mit einem Prozessor (12) und mindestens einem Speicher (16, 18, 20), wobei der Speicher (16, 18, 20) Programmbefehle enthält, die den Prozessor (12) zur Ausführung eines Verfahrens nach einem der Ansprüche 1 bis 13 veranlassen.
DE2003119299 2003-04-29 2003-04-29 Optimierung und Ausführung eines Programms Withdrawn DE10319299A1 (de)

Priority Applications (3)

Application Number Priority Date Filing Date Title
DE2003119299 DE10319299A1 (de) 2003-04-29 2003-04-29 Optimierung und Ausführung eines Programms
EP04729435A EP1620798A2 (de) 2003-04-29 2004-04-26 Optimierung und ausführung eines programms
PCT/EP2004/004400 WO2004097628A2 (de) 2003-04-29 2004-04-26 Optimierung und ausführung eines programms

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE2003119299 DE10319299A1 (de) 2003-04-29 2003-04-29 Optimierung und Ausführung eines Programms

Publications (1)

Publication Number Publication Date
DE10319299A1 true DE10319299A1 (de) 2004-12-09

Family

ID=33393977

Family Applications (1)

Application Number Title Priority Date Filing Date
DE2003119299 Withdrawn DE10319299A1 (de) 2003-04-29 2003-04-29 Optimierung und Ausführung eines Programms

Country Status (3)

Country Link
EP (1) EP1620798A2 (de)
DE (1) DE10319299A1 (de)
WO (1) WO2004097628A2 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116466995A (zh) * 2023-06-16 2023-07-21 紫光同芯微电子有限公司 基于复合指令的指令及其操作数的优化方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6467037B1 (en) * 1998-06-30 2002-10-15 Sun Microsystems, Inc. Utilizing a program counter with one or more data counters for executing instructions
US6263429B1 (en) * 1998-09-30 2001-07-17 Conexant Systems, Inc. Dynamic microcode for embedded processors

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Christian Ferdinand et al.: Liebling, ich habe den Code geschrumpft, Design & Elektronik 01/2001, S. 113-115
Christian Ferdinand et al.: Liebling, ich habe den Code geschrumpft, Design & Elektronik 01/2001,S. 113-115 *
De Sutter, B. et al.: Sifting out the Mud: low level C++ Code Reuse, SIGPLAN Conference on Object-oriented Programming Systems, Languages and Applications (OOPSLA), Seattle, Washington, November 2002, pp. 275-291 *

Also Published As

Publication number Publication date
WO2004097628A2 (de) 2004-11-11
EP1620798A2 (de) 2006-02-01
WO2004097628A3 (de) 2005-06-16

Similar Documents

Publication Publication Date Title
EP1088270B1 (de) Verfahren zur prüfung von java-bytecode-programmen auf sicherheitseigenschaften
DE19633466C2 (de) Nachinitialisierung von Chipkarten
DE2712575C2 (de) Assoziatives Speichersystem in hochintegrierter Halbleitertechnik
DE19536548A1 (de) Vorrichtung und Verfahren zur vereinfachten Erzeugung von Werkzeugen zur Initialisierung und Personalisierung von und zur Kommunikation mit einer Chipkarte
EP1497722B1 (de) Optimierung von compilergeneriertem programmcode
DE2054835A1 (de) Prozessor fur ein Informationsver arbeitungssystem und ein Betriebsver fahren fur diesen Prozessor
DE60224937T2 (de) Verfahren und anordnung zum verknüpfen von verwandelten appletdateien
EP1709534B1 (de) Ausführung eines programms durch eine virtuelle maschine
DE10319299A1 (de) Optimierung und Ausführung eines Programms
DE10320062A1 (de) Speicherverwaltung bei einem tragbaren Datenträger
DE3104256C2 (de)
DE102004011488B4 (de) Schutz von Software gegen Angriffe
EP1543411B1 (de) Prozessor mit expliziter angabe über zu sichernde informationen bei unterprogrammsprüngen
DE19637883B4 (de) Datenverarbeitungsanlage zur Ausführung großer Programmsysteme
EP1668494B1 (de) Verfahren und system zur sprachkonfigurierung eines computerprogramms
DE102008044808B4 (de) Verfahren zur Generierung von Programmcode in einem Betriebssystemspeicher und einem Applikationsspeicher eines Datenträgers
EP1600855B1 (de) Erzeugen und Verwenden von Speicherbelegungsinformationen bei einem tragbaren Datenträger
DE10145783A1 (de) Erzeugen einer Nachricht zur Fehlersuche bei einem tragbaren Datenträger
EP3132346B1 (de) Verfahren zum ausführen einer codefolge auf einem sicherheitsmodul
DE102004002177A1 (de) Optimierung eines Programmpakets
EP0671678A1 (de) Projektierbare Bedienoberfläche
DE102008057682A1 (de) Verfahren zum Optimieren von Programmcode für einen tragbaren Datenträger
EP1044409A2 (de) Programmablaufverfahren und verfahren zur erweiterung eines programmkomponentensystems
WO2002099653A1 (de) Rechnersystem mit virtueller adressierung und verfahren zum ermitteln einer physikalischen adresse aus einer virtuellen adresse
DE19810675A1 (de) Datenträger

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R120 Application withdrawn or ip right abandoned

Effective date: 20140319