(57)【要約】コンパイラ生成プログラムコードを最適化する方法において、既定のライブラリ（２８）に収められたそれぞれ１つのライブラリコードフラグメント（３０ｘ）に、少なくともそれぞれの効果が対応しているプログラムコードフラグメント（４２）を探すために、コンパイラ生成プログラムコード（３８）が検索される。これにより見いだされたプログラムコードフラグメント（４２）は、対応するライブラリコードフラグメント（３０ｘ）のそれぞれ１つのコールで置き換えられる。コンピュータプログラム製品はこの方法の実行のためのプログラム命令を含む。携帯型データ記憶媒体（１０）はこの方法にしたがって最適化されたプログラムコード（４４）及びライブラリ（２８）のいずれをももつ。発明は、携帯型データ記憶媒体（１０）で利用できるメモリの有効利用を可能にし、プログラム変更及び／または少生産量における携帯型データ記憶媒体（１０）の生産に対する高いフレキシビリティを実現する。
2005522772.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサコア（１２）並びに第１及び第２のメモリ領域（２４，２６）のいずれをも有する携帯型データ記憶媒体（１０）を対象とするコンパイラ生成プログラムコード（３８）を最適化するための方法において、
−  前記第１のメモリ領域（２４）は最適化されたプログラムコード（４４）を受け取るように準備され、
−  前記第２のメモリ領域（２６）は多数のライブラリコードフラグメント（３０ｘ）を有する既定のライブラリ（２８）を受け取るように準備され、
−  前記コンパイラ生成プログラムコード（３８）から、少なくともそれぞれの効果に関して、前記ライブラリコードフラグメント（３０ｘ）のそれぞれ１つに対応しているプログラムコードフラグメント（４２）を探す検索が行なわれ、これにより見いだされた前記プログラムコードフラグメント（４２）が前記対応するライブラリコードフラグメント（３０ｘ）のそれぞれ１つのコールで置き換えられる、
ことを特徴とする方法。
【請求項２】
プログラムコードフラグメント（４２）とライブラリコードフラグメント（３０ｘ）の実行可能な機械コードとしての形態が一致する場合にのみ、プログラムコードフラグメント（４２）がライブラリコードフラグメント（３０ｘ）で置き換えられることを特徴とする請求項１に記載の方法。
【請求項３】
前記ライブラリコードフラグメント（３０ｘ）の内の少なくともいくつかがパラメータ化されていることを特徴とする請求項１に記載の方法。
【請求項４】
置き換えられるべきプログラムコードフラグメント（４２）が、少なくとも前記プログラムコードフラグメント（４２）がプログラムフローと干渉しなければ、サブルーチンコール命令（４６）により前記対応するライブラリコードフラグメント（３０ｘ）に置き換えられることを特徴とする請求項１から３のいずれか１項に記載の方法。
【請求項５】
前記コンパイラ生成プログラムコード（３８）がアッセンブラソースコードの形態で存在し、前記最適化の手順がソースコードレベルで実施されることを特徴とする請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記既定のライブラリ（２８）が前記携帯型データ記憶媒体（１０）のハードウエア及び／または前記携帯型データ記憶媒体（１０）のオペレーティングシステム及び／または前記コンパイラ生成プログラムコード（３８）の生成に用いられるコンパイラ（３６）に整合されていることを特徴とする請求項１から５のいずれか１項に記載の方法。
【請求項７】
前記第１のプログラム領域（２４）が電気的にプログラム可能であり、及び／または前記第２のメモリ領域（２６）がマスクプログラム可能であり、及び／または前記携帯型データ記憶媒体において前記第１のメモリ領域（２４）が占有するメモリセル当りのチップ面積が前記第２のメモリ領域（２６）により占有されるメモリセル当りのチップ面積より大きいことを特徴とする請求項１から６のいずれか１項に記載の方法。
【請求項８】
コンピュータプログラム製品において、請求項１から７のいずれか１項に記載の方法を汎用コンピュータに実行させる、汎用コンピュータ用のプログラム命令を有することを特徴とするコンピュータプログラム製品。
【請求項９】
前記プログラム命令がさらに、高水準言語ソースコード（３４）を前記コンパイラ生成プログラムコード（３８）に変換するためのコンパイラ（３６）を実施することを特徴とする請求項８に記載のコンピュータプログラム製品。
【請求項１０】
携帯型データ記憶媒体（１０）において、プロセッサコア（１２）、第１のメモリ領域（２４）及び第２のメモリ領域（２６）を有し、請求項１から７のいずれか１項に記載の方法により生成された最適化されたプログラムコード（４４）が前記第１のメモリ領域（２４）に収められ、前記最適化されたプログラムコード（４４）とは独立にあらかじめ定められ、多数のライブラリコードフラグメント（３０ｘ）を有するライブラリ（２８）が前記第２のメモリ領域（２６）に収められていることを特徴とする携帯型データ記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は携帯型データ記憶媒体のプログラミング及び携帯型データ記憶媒体によるプログラムの実行に関する。本明細書の意図する範囲にある携帯型データ記憶媒体は、特に、様々な構成の、ＩＣカード（スマートカード）またはＩＣモジュールとすることができる。
【背景技術】
【０００２】
今日普通に用いられているような携帯型データ記憶媒体は、プロセッサコア及び様々な技術でつくられた複数のメモリを有する。代表的構成においては、例えば、マスクプログラムＲＯＭ，電気的に消去及びプログラミングすることが可能なＥＥＰＲＯＭ及び書込可能なＲＡＭが備えられる。ＲＡＭはプログラム実行中の作業メモリとしてはたらき、一方、プロセッサコアにより実行されるべきプログラムコードはＲＯＭ及び／またはＥＥＰＲＯＭに格納することができる。データ記憶媒体の上記及び同様の構成は非特許文献１に説明されている。
【０００３】
一般に、ＥＥＰＲＯＭのメモリセルはＲＯＭメモリセルのほぼ４倍のチップ面積を占める。したがって、チップ面積を節約するため、または同じ面積で利用できるメモリ容量をより大きくするため、実行可能なプログラムコードはＲＯＭに可能な限り大規模に収められることが望ましい。しかし、マスクプログラムＲＯＭの内容は、大多数のデータ記憶媒体に対し、マスクプログラムの生産段階の初期に変更不能な態様で定められる必要がある。対照的に、ＥＥＰＲＯＭの書込は、あるシリーズのデータ記憶媒体の完成及び初期化時、あるいは個々のデータ記憶媒体が個人化されるときに限り、行なわれる。したがって、より高いフレキシビリティのため、実行可能なプログラムコードはＥＥＰＲＯＭに可能な限り大規模に格納されることが有利である。このことは、少生産量のデータ記憶媒体並びに大量生産の場合の欠陥の訂正及び付加機能の導入のいずれにも当てはまる。
【非特許文献１】ダブリュー・ランクル（W. Rankl）及びダブリュー・エッフィング（W. Effing）著，「ＩＣカードハンドブック（Handbuch der Chipkarten）」，第３版，ハンザー・ヴァーラグ（Hanser Verlag），１９９９年，第３.４節
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明の課題は、携帯型データ記憶媒体のプログラミングにおいて、一方では可能な限り大規模にマスクプログラムＲＯＭまたは同等のメモリを用い、他方では、プログラム変更のため及び／または少生産量におけるデータ記憶媒体の生産のために可能な限り高いフレキシビリティを達成することにある。
【課題を解決するための手段】
【０００５】
上記課題は、本発明によれば、特許請求項１の特徴を有する方法、特許請求項８にしたがうコンピュータプログラム製品及び特許請求項１０にしたがう携帯型データ記憶媒体により、完全にまたはある程度解決される。従属請求項は本発明の好ましい発展形を定める。方法に関する特許請求項において箇条書きにされているステップのシーケンスは、保護の範囲を限定するものとして理解されるべきではない。むしろ、本発明の発展形は、これらのステップが異なるシーケンスで、あるいは完全にまたは部分的に並行に、あるいは完全にまたは部分的に互いにインターリーブされて、実施される態様で提供される。
【０００６】
本発明は、プログラムコードを最適化する目的のために多数のライブラリコードフラグメントを収めている既定のライブラリを使用するという基本概念に基づく。本発明にしたがう最適化法では、最適化されるべきプログラムコードから、その一部について、効果または機能がそれぞれ１つのライブラリコードフラグメントに対応しているプログラムコードフラグメントを探す検索がなされる。そのようなプログラムコードフラグメントは、対応するライブラリコードフラグメントのそれぞれ１つのコールで置き換えられる。最適化されたプログラムコードはデータ記憶媒体の第１のメモリ領域（例えばＥＥＰＲＯＭ）に格納され、一方、ライブラリは第２のメモリ領域（例えばＲＯＭ）に格納されて提供される。
【０００７】
発明者等により実施された試験では、本発明にしたがう最適化手順により、第１のメモリ領域に与えられるプログラムコードサイズが著しく縮小した。現実的な大きさのライブラリでは、ライブラリコードフラグメントに対応するプログラムコードの部分はごくわずかしか見つからないであろうと誰もが直感的にみなすであろうから、この結果は予想外である。
【０００８】
本発明によりもたらされるコードサイズの縮小により、あらかじめ定められた大きさのメモリをもつデータ記憶媒体の場合に、付加機能のためのプログラムコードを第１のメモリ領域に含めることができるという結果が得られる。第１のメモリ領域がＥＥＰＲＯＭとして、または同等な技術で、構成されていれば、このプログラムコードは、データ記憶媒体の完成時または初期化時または個人化時にロードするだけでよい。したがって、多数の機能を実施するプログラムコードは、コンパクトであることから、高速に、少生産量のデータ記憶媒体の場合も、あるいはただ１つのデータ記憶媒体の場合であっても、変更するかまたは新たに書き込むことができる。
【０００９】
本発明にしたがえば、既定のライブラリは第２のメモリ領域、すなわち、例えばマスクプログラムＲＯＭにおかれる。通常、本発明にしたがう最適化により達成されるプログラムコードの節約分は、ライブラリサイズより小さい。しかし、そのような場合であっても、貴重な第１のメモリ領域がより有効に利用されるから、本発明の適用が有利である。コンパイラ生成プログラムコードにおいては、多くのコードフラグメントがあり、いずれの場合においても、コードフラグメント群をライブラリのそれぞれ１つの単一コードフラグメントで置き換えることができ、ライブラリが必要とされないわずかなコードフラグメントしかもっていない場合、それでも、最適化によりライブラリ長より大きくプログラムコードが縮小されるという結果を得ることができる。この場合、第１及び第２のメモリ領域が１つの同じ物理メモリ領域の論理区画であったとしても、本発明の使用が有利である。
【００１０】
本発明にしたがえば、最適化の目的のため、プログラムコードフラグメントを探す検索、すなわち対応するライブラリコードフラグメントで置き換えることができるコンパイラ生成プログラムコードの区画についての検索が実施される。これに続く最適化手順は、プログラム作成中にプログラマが考慮する必要はない。詳しくは、プログラマがライブラリルーチンのコールに対してプログラムで準備しておく必要はない。すなわち、本発明によりプログラミングがさらに困難になることは決してない。
【００１１】
本明細書における用語の選択において、“プログラムコード”または“コードフラグメント”は、リンクの前後で実行可能な機械コード及び対応するアッセンブラソースコードの両方を表すとされる。言い換えれば、本発明の様々な発展形において、本発明にしたがう最適化手順は、コンパイラ生成アッセンブラソースコードベースでも、既にアッセンブルされた機械コードベースでも、実行され得る。コンパイラ生成アッセンブラソースコードベースの場合、アッセンブル及び、必要であればリンクが、最適化後にのみ実施される。同様に、ライブラリは最適化中にアッセンブラソースコードとしておよび／または既にアッセンブルされた機械コードとして利用可能とすることができる。
【００１２】
一般に、ライブラリコードフラグメントによるプログラムコードフラグメントの置換は、いずれのコードフラグメントも相互に対応する機能を果たす場合には必ず可能である。この関係において、例えば、コードフラグメント内の個々の命令が何の問題もない態様で交換されるとしても、置換手順を開始するためにコードフラグメントの正確な効果に関して複雑な計算が実施され得る。対照的に、特に単純な例示的実施形態においては、コードフラグメントがコードフラグメントにより定められる機械コードに関して一致している場合に限り置換が実施される。しかし、この単純な発展形の場合においてさえ、例えば、コードフラグメント内にないジャンプ先をもつジャンプを有するコードフラグメントは一般に置き換えることができないという事実により、コードフラグメントの確実な解析が必要である。
【００１３】
手続きコールと同様の態様で、１つまたはそれより多くのパラメータ（例えば、メモリアドレスまたは数値）をもつパラメータ化されたコードフラグメントが用いられる場合には、さらに置き換えがおこる可能性がある。
【００１４】
ライブラリコードフラグメントは通常、プログラムコードに挿入されたサブルーチンコール命令によりコールされることが好ましい。次いで、ライブラリコードフラグメントに続いて直ちに、復帰命令がライブラリに与えられる。いくつかの実施形態において、置き換えられるべきコードフラグメントがプログラムフローと干渉する場合に、このルールの例外が適用され得る。例えば、コードフラグメントがサブルーチン復帰命令で終わっている場合は、通常、ジャンプ命令を用いてコールが実施され得る。
【００１５】
本発明にしたがえば、用いられるライブラリは既定である。すなわち、その時の最適化実行で処理されるプログラムコードに依存しない。しかし、可能な最善の最適化結果を達成するため、頻繁に発生するプログラムコード構造に対する適切なコードフラグメントを収録するように、ライブラリが設計されることが好ましい。そのような頻繁に発生するコード区画は、特に、ハードウエア及び／またはデータ記憶媒体のオペレーティングシステム及び／またはコンパイラ生成プログラムコードの生成に用いられるコンパイラに依存し得る。
【００１６】
本発明にしたがって提供されるコンピュータプログラム製品は、特に、例えば電子的または磁気的または光学的なメモリ媒体のようなコンピュータ読出可能なデータ記憶媒体とすることができるが、物理的データ記憶媒体に限定されない。電気信号または光信号（例えば、通信リンクの電圧レベル）も本明細書に用いられる意味のコンピュータプログラム製品として解釈されるべきである。コンピュータプログラム製品は、本発明にしたがう最適化ステップを実行するプログラムコードをもつ。コンピュータプログラム製品は、さらに、コンパイラ及び／またはアッセンブラ及び／またはリンカー及び／またはローダープログラムを含むことが好ましい。
【００１７】
本発明にしたがうコンピュータプログラム製品及び本発明にしたがう携帯型データ記憶媒体は、上に説明された特徴／または方法に関する特許請求項に述べられる特徴に相当する特徴をもって開発されることが好ましい。
【００１８】
本発明のさらなる特徴、目的及び利点は、以下の例示的実施形態及び複数の代替実施形態の説明によって開示される。
【発明を実施するための最良の形態】
【００１９】
唯一の図面（図１）に示される略図を参照する。
【００２０】
本発明は、本明細書に説明される例示的実施形態では、ＩＣカードとして構成される、携帯型データ記憶媒体１０のプログラミングに用いられる。データ記憶媒体１０は、既知のいずれかの態様で、プロセッサコア１２を有する半導体ＩＣ、マスクプログラムＲＯＭ１４、ＥＥＰＲＯＭ１６、ＲＡＭ１８、及び無接触または接触型通信のためのインターフェース２０を備える。上記の構成要素はバス２２を介して相互に接続されている。別の実施形態において、３つのメモリ領域１４，１６，１８は別の技術によって構成することもでき、特に、フラッシュメモリ技術をＲＯＭ２４及び／またはＥＥＰＲＯＭ１６に用いることができる。
【００２１】
第１及び第２のメモリ領域２４，２６はメモリ領域１４，１６，１８に論理的に設けられる。第１のメモリ領域２４は実行可能な機械コードの形態の最適化されたプログラムコードを受け取る働きをする。同様に実行可能な機械コードの形態の既定のライブラリ２８が第２のメモリ領域２６に格納される。本明細書に説明される例示的実施形態では、第１のメモリ領域２４はＥＥＰＲＯＭ１６に位置し、第２のメモリ領域２６はＲＯＭ１４に位置している。既知のいずれかの態様で、ＲＯＭ１４は、第２のメモリ領域２６に加えて、さらに、例えばデータ記憶媒体１０のオペレーティングシステムを構成する、不変のあらかじめ定められたルーチンをもつ。ＥＥＰＲＯＭ１６はさらに、データ記憶媒体１０に不揮発性データとして格納されるべきデータのためのファイルシステムを含む。
【００２２】
ライブラリ２８は多数のあらかじめ定められたライブラリコードフラグメント３０Ａ，３０Ｂ，３０Ｃ,...を有し、これらは以下で全体として３０ｘで表される。図１において、より明解な表示のため、ライブラリコードフラグメント３０ｘはアッセンブラソースコードとして示される。通常、それぞれのライブラリコードフラグメント３０ｘの直後には（以下で全体として３２ｘで表される）サブルーチン復帰命令３２Ａ，３２Ｂ,...が続く。しかし、例えば、ライブラリコードフラグメント３０ｘのプログラムフローのそれぞれがＥＸＩＴ命令で終了するか、またはライブラリコードフラグメント３０ｘに含まれるサブルーチン復帰命令で終了するという事実により、ライブラリコードフラグメント３０ｘの実行に至ることができなければ、サブルーチン復帰命令３２ｘを省略することができる。
【００２３】
携帯型データ記憶媒体１０のためのプログラム開発は、図１にプログラム言語Ｃで例示的に表される高水準言語ソースコード３４が基になる。図１に示される区画は、入力レジスタＩＮＰＯＲＴの１の位から数えて第３ビットが値“０”をとるまで待ち、次いで出力レジスタＯＵＴＰＯＲＴを１６進数値“ＦＦ”に設定する。既知のいずれかのコンパイラ３６が高水準言語ソースコード３４を、図１では６８０５命令セットに対するアッセンブラソースコードの形態で表されているコンパイラ生成プログラムコード３８に変換する。別の実施形態では、それぞれがプロセッサコア１２にしたがう別の命令セットが提供される。
【００２４】
最適化プログラム４０が、本例示的実施形態に肝要な最適化ステップを実行する。最適化プログラム４０は、コンパイラ生成プログラムコード３８を処理し、さらに、ライブラリ２８に収められているライブラリコードフラグメント３０ｘに関する情報にアクセスする。別の実施形態の変形例において、この情報は、例えば、ライブラリ２８のアッセンブラソースコードでのコピー及び／またはライブラリ２８の実行可能な機械コードでのコピー及び／または適切な記述言語での個々のライブラリコードフラグメント３０ｘの効果の仕様を含むことができる。さらに、最適化プログラム４０により実施される検索手順の速度を高めるため、例えばインデックスまたはハッシュテーブルのような、付加情報が提供され得る。
【００２５】
最適化プログラム４０は、プロセッサコア１２による実行において、ライブラリ２８に収められているライブラリコードフラグメント３０ｘの機能と同じ機能を有する、コンパイラ生成プログラムコード３８に含まれるプログラムコードフラグメント４２を識別する。本例示的実施形態においては、この目的のため、コンパイラ生成プログラムコード３８がライブラリ２８内の個々の収録項目とアッセンブラソーステキストレベルで比較される、比較的単純な手順が用いられる。この場合、短形の命令並びにアドレス及び数値情報に関しては、テキスト上での比較を実施することができる。対照的に、記号ジャンプ先は、比較に先立ち、標準化された形または相対数値に変換される必要がある。別の実施形態では、対照的に、アッセンブルされた機械コードの形態で既に存在するコンパイラ生成プログラムコード３８に基づいて最適化が実施され得る。
【００２６】
比較手順において対応するライブラリコードフラグメント３０ｘが見いだされたプログラムコードフラグメント４２が、最適化手順において、このライブラリコードフラグメント３０ｘのコールで置き換えられる。例えば、図１において、プログラムコードフラグメント４２とライブラリコードフラグメント３０Ｂが、ジャンプ先の記号指定を除いて一致している。したがって、最適化されたプログラムコード４４において、最適化プログラム４０はこのプログラムコードフラグメント４２をライブラリコードフラグメント３０Ｂのコールで置き換える。本例において、このコールはサブルーチンコール命令４６として構成される。本例において、プログラムコードフラグメント４２は７バイト長の機械コードに相当し、サブルーチンコール命令４６には３バイトしか必要ではないから、最適化されたプログラムコード４４に必要なメモリ空間は置換によってかなり縮小された。
【００２７】
最適化の完了に続いて、最適化済プログラムコード４４は、アッセンブラ４８により、プロセッサコア１２で実行され得る機械コードに変換される。おそらくは必要な別のプログラム部分とのリンク操作に続いて、データ記憶媒体１０の完成時または初期化時または個人化時に、コードが第１のメモリ領域２４にロードされる。ライブラリ２８は、データ記憶媒体１０のためのＩＣが作成されたときから既に第２のメモリ領域２６に存在している。よって、データ記憶媒体１０は使用の準備ができている。上述した翻訳、最適化及びアッセンブルステップは、コンパイラ３６，最適化プログラム４０及びアッセンブラ４８を実行する（図１には示されていない）汎用コンピュータで実施される。
【００２８】
データ記憶媒体１０の動作において、プロセッサコア１２によるプログラム実行が第１のメモリ領域２４におけるサブルーチンコール命令４６の位置に達すると、第２のメモリ領域２６にあるライブラリコードフラグメント３０Ｂがサブルーチンとして実行される。実際上、実行される命令は最適化時に取り除かれたプログラムコードフラグメント４２に正確に一致する。これらの命令の実行に続いて、サブルーチン復帰コマンド３２Ｂがトリガとなって、プロセッサコア１２は、サブルーチンコール命令４６の直後にある第１のメモリ領域２４の命令への復帰を実行する。
【００２９】
最適化中にプログラムの機能が変わらないことが保証されなければならない。したがって、例えば、プログラムコードフラグメント４２の外にあるジャンプ先を有するかもしれないジャンプ命令を有するプログラムコードフラグメント４２は、精密な解析後にのみ置き換えられるべきである。プログラムコードフラグメント４２の可能なフローのそれぞれがＥＸＩＴ命令またはサブルーチン復帰命令で終了していれば置換が許容される。しかし、そのような場合、対応するライブラリコードフラグメント３０ｘはサブルーチンコール命令を用いるのではなく、通常のジャンプ命令を用いてコールされる。ライブラリ２８がそれ以上の制約なしに用いられ得るようなライブラリコードフラグメント３０ｘだけをもつように、これらの要件を正にライブラリ２８の作成時に含めることもできる。
【００３０】
ライブラリ２８は可能な限り頻繁に適切なライブラリコードフラグメント３２ｘを提供し、よって可能な限り多くの最適化可能性を提供するような構成をもつべきである。すなわち、例えば、図１のライブラリコードフラグメント３０Ｂはデータ記憶媒体１０のハードウエア特性に整合される。このライブラリコードフラグメント３０Ｂにおいて要求される入力ビットが頻繁に要求される信号値に相当すれば、対応するプログラムコードフラグメント４２が、データ記憶媒体１０の大きく異なる用途に対してさえもコンパイラ生成プログラムコード３８に再三再四現れると想定されるべきである。同様に、頻繁に現れるオペレーティングシステムコールを、対応するライブラリコードフラグメント３０ｘによってカバーすることができる。コンパイラ生成プログラムコード３８において反復するコードフラグメントの別のソースは、コンパイラ３６におけるコード生成が一定の方式にしたがって実施され、この結果、反復して発生するコード構造が生成されるという事実から生じる。
【００３１】
したがって、全体として、ライブラリ２８の作成の目的のためには、データ記憶媒体１０のハードウエア及びオペレーティングシステムに対して選定される多数の用途についてコンパイラ３６により生成されるプログラムコード３８を統計的に評価することが有利である。
【図面の簡単な説明】
【００３２】
【図１】携帯型データ記憶媒体及び本発明の例示的実施形態におけるプログラムコードの様々なバージョンの図を示す
【符号の説明】
【００３３】
１０    携帯型データ記憶媒体
１２    プロセッサコア
２４，２６    プログラム領域
２８    既定ライブラリ
３０ｘ    ライブラリコードフラグメント
３４    高水準言語ソースコード
３６    コンパイラ
３８    コンパイラ生成プログラムコード
４２    プログラムコードフラグメント
４４    最適化済プログラムコード
４６    サブルーチンコール命令
【図１】
2005522772.tif 000003
【国際調査報告】
2005522772.tif 000004
2005522772.tif 000005
2005522772.tif 000006
2005522772.tif 000007
2005522772.tif 000008
2005522772.tif 000009