(57)【要約】【課題】ＩＣカード等の情報記憶媒体に搭載された仮想マシンの高速化を実現することが可能な情報記憶媒体、バイトコード実行方法、及び情報記憶媒体用プログラムを提供する。【解決手段】ＩＣチップ１ａは、フラッシュメモリ１２に記憶されている仮想マシン１０４の全部をＲＡＭ１１にロードし、ＲＡＭ１１にロードされた仮想マシン１０４を動作させる。【選択図】図３
2015041349.tif 000002
【特許請求の範囲】
【請求項１】
揮発性メモリと、アプリケーションを構成する複数のバイトコードの処理を行う仮想マシンを記憶する不揮発性メモリと、を備える情報記憶媒体であって、
前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードするロード手段と、
前記揮発性メモリにロードされた仮想マシンを動作させる制御手段と、
を備えることを特徴とする情報記憶媒体。
【請求項２】
前記仮想マシンは、前記バイトコードを取得するバイトコード取得処理部と、前記バイトコードを解釈するバイトコード解釈処理部と、前記バイトコードを実行するバイトコード実行処理部と、を含んで構成され、
前記ロード手段は、前記バイトコード実行処理部の全部又は一部を前記揮発性メモリにロードし、
前記仮想マシンは、前記不揮発性メモリに記憶されているバイトコード取得処理部により前記バイトコードを取得し、当該取得したバイトコードを前記不揮発性メモリに記憶されているバイトコード解釈処理部により解釈し、当該解釈したバイトコードを前記揮発性メモリに記憶されているバイトコード実行処理部により実行することを特徴とする請求項１に記載の情報記憶媒体。
【請求項３】
前記ロード手段は、前記不揮発性メモリに記憶されているバイトコード取得処理部により取得されたバイトコードが所定のロード条件を満たしている場合に、当該バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードすることを特徴とする請求項２に記載の情報記憶媒体。
【請求項４】
前記ロード手段は、前記不揮発性メモリに記憶されているバイトコード解釈処理部により解釈されたバイトコードが所定のバイトコードである場合に、当該バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードすることを特徴とする請求項２に記載の情報記憶媒体。
【請求項５】
前記ロード手段は、前記不揮発性メモリに記憶されているバイトコード解釈処理部により解釈されたバイトコードが所定のバイトコードである場合で、且つ当該バイトコードが所定のロード条件を満たしている場合に、当該バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードすることを特徴とする請求項２に記載の情報記憶媒体。
【請求項６】
前記ロード手段は、前記バイトコードの実行回数が所定回数以上である場合に、前記ロード条件を満たしていると判定することを特徴とする請求項３または５の何れか一項に記載の情報記憶媒体。
【請求項７】
前記ロード手段は、外部端末から受信したコマンドが前記情報記憶媒体のリセット後の最初のコマンドである場合に、前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードすることを特徴とする請求項１または２に記載の情報記憶媒体。
【請求項８】
前記ロード手段は、前記バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードする際に、ロード対象の当該バイトコード実行処理部が記憶されている前記不揮発性メモリ上のアドレスを示すアドレステーブルにおいて、当該バイトコード実行処理部が記憶されている前記不揮発性メモリ上のアドレスを、当該バイトコード実行処理部が当該ロードにより記憶される前記揮発性メモリ上のアドレスに変更することを特徴とする請求項２乃至７の何れか一項に記載の情報記憶媒体。
【請求項９】
前記ロード手段は、乱数生成器により生成された乱数に基づいて、前記ロード対象の前記バイトコード実行処理部が当該ロードにより記憶される前記揮発性メモリ上のアドレスを変更することを特徴とする請求項８に記載の情報記憶媒体。
【請求項１０】
揮発性メモリと、アプリケーションを構成する複数のバイトコードの処理を行う仮想マシンを記憶する不揮発性メモリと、を備える情報記憶媒体におけるバイトコード実行方法であって、
前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードするステップと、
前記揮発性メモリにロードされた仮想マシンを動作させるステップと、
を含むことを特徴とするバイトコード実行方法。
【請求項１１】
揮発性メモリと、アプリケーションを構成する複数のバイトコードの処理を行う仮想マシンを記憶する不揮発性メモリと、を備える情報記憶媒体であって、
前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードするロード手段と、
前記揮発性メモリにロードされた仮想マシンを動作させる制御手段として機能させることを特徴とする情報記憶媒体用プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、バイトコードを実行する仮想マシンを備えるＩＣカードの技術に関する。
【背景技術】
【０００２】
近年、数十Ｋバイトから１００Ｋバイトを超える不揮発性メモリの容量を有するＩＣチップがリリースされていることもあり、Java（登録商標）言語に代表されるプログラム言語の解釈機能を備えた仮想マシン（VM:Virtual Machine）が組み込まれ、アプリケーションの追加／削除が可能なマルチアプリケーションＩＣカードが普及しつつある（例えば、特許文献１）。ＩＣカードに搭載されるＩＣチップに格納されるプログラム（アプリケーション）の開発言語や実行環境は、通常、採用するＩＣチップのハードウェア仕様に依存して変化する。ＩＣチップがサポートするアセンブリ命令は、ＩＣチップごとに異なっているため、アセンブリ言語により開発を行う場合はもちろん、Ｃ言語のような高級言語であっても、開発環境はＩＣチップごとに異なっている（コンパイラやアセンブラの仕様はＩＣチップによって相違する）のが通例であった。これに対し、マルチアプリケーションＩＣカードは、ＩＣチップに依存しない中間コード（バイトコード）を実行可能な環境を用意し、当該バイトコードによってアプリケーションを提供することで、開発者がＩＣチップの相違を意識することなく、アプリケーションの実装、搭載を可能とする。例えば、JavaCardでは、Java実行環境としてJavaCard API/JavaCard VMを搭載し、Java言語によるアプリケーション開発を実現している。このようなアプリケーション開発では、アプリケーションは、コンパイラによって、中間コードであるバイトコードに変換された後、ＩＣチップにインストールされる。そして、各アプリケーションを構成するバイトコードは、仮想マシンによって解釈、実行される。このような実行環境を再現したＩＣチップであれば、開発者は採用ＩＣチップの相違を意識することなく、アプリケーションを開発することが可能となる。
【０００３】
ところで、バイトコードを用いた仮想マシン上のプログラムの実行には、ネイティブコード（機械語）と比較して処理速度が低下する問題がある。仮想マシン上でバイトコードを実行する場合、仮想マシンがインタプリタ機能を搭載し、バイトコードを対象ＩＣチップのネイティブコードに逐次変換し、対応するネイティブコードを実行していく方式が一般的である。仮想マシンにおけるバイトコードの処理では、バイトコード→ネイティブコードの変換が、バイトコード実行毎に必要である。このため、ネイティブコードを直接実行する場合と比して、変換のための処理時間を余分に必要とする。このようなバイトコード実行における処理速度低下の問題は早くから指摘されており、対応法として、ＪＩＴ(Just-In-Time)コンパイラによる解決法が提案、実現されている。ＪＩＴコンパイラとは、バイトコードで記述されたプログラムの実行を行う前に、当該プログラムの一部又は全部をバイトコードからネイティブコードに一括変換するコンパイラである。インタプリタによるバイトコード実行では、１つのバイトコードを実行するたびにインタプリタによるバイトコード解釈を実行する必要がある。一方、ＪＩＴコンパイラでは、バイトコード実行前にまとめてネイティブコードへの変換を行うため、プログラム実行中にはバイトコードを解釈する処理が発生せず、結果、プログラムの処理速度が高速化する、というメリットがある。このようなメリットにより、パーソナルコンピュータや携帯端末といった、ある程度潤沢なメモリリソースを有するデバイスでは、ＪＩＴコンパイル方式による仮想マシン実装が採用されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２０６７６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したＪＩＴコンパイル方式では、プログラム本体とは別に、ＪＩＴコンパイル結果を保持しておくメモリ領域が必要となる。しかしながら、ＩＣチップ上のリソースは他のデバイスに比べて貧弱であり、動的に変化する可能性があるＪＩＴコンパイル結果を適切に保持するのは困難である（実装メモリサイズを超過する可能性がある）。また、ＪＩＴコンパイル方式では、ＪＩＴコンパイル実行時に、コンパイル処理を伴うため、コマンド処理速度が著しく低下する可能性がある。ＩＣチップにおけるコマンド処理では、一定の処理時間制約が設けられることが多く、処理時間にばらつきが発生したり、処理時間制約を満たせない実装の採用は困難である。
【０００６】
また、ＩＣカードに搭載されるＩＣチップ上でプログラムを記憶可能な記憶素子としては、主としてＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭ（登録商標）、フラッシュメモリが挙げられる。従来のＩＣチップでは、ＲＯＭ、ＲＡＭ、及びＥＥＰＲＯＭの組み合わせが多く、主として仮想マシンの実装はＲＯＭに格納されてきた。一方で近年のＩＣチップでは、利便性、集積度等の観点から、ＲＯＭ、及びＥＥＰＲＯＭの代わりにフラッシュメモリが搭載されるケースが多い。このようなＩＣチップでは、仮想マシンはフラッシュメモリに格納され、フラッシュメモリ上から実行される。一般に、プログラムを高速化する手段のひとつとして、ＩＣチップの動作クロック周波数を上げる方法があるが、フラッシュメモリ上のコード実行は、ＲＯＭやＥＥＰＲＯＭ上のコード実行と比して、周波数の増加に当たり、チップの消費電流値が大きくなる特性を有することがある。このような高速化に伴う消費電流値増加は、特にＵＳＩＭ（Universal Subscriber Identification Module）のように、消費電流値制限が国際標準規格により定められている等の制約がある場合、許容することが困難となる。
【０００７】
本発明は、以上のような事情等に鑑みてなされたものであり、ＩＣカード等の情報記憶媒体に搭載された仮想マシンの高速化を実現することが可能な情報記憶媒体、バイトコード実行方法、及び情報記憶媒体用プログラムを提供することを課題とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、請求項１に記載の発明は、揮発性メモリと、アプリケーションを構成する複数のバイトコードの処理を行う仮想マシンを記憶する不揮発性メモリと、を備える情報記憶媒体であって、前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードするロード手段と、前記揮発性メモリにロードされた仮想マシンを動作させる制御手段と、を備えることを特徴とする。
【０００９】
請求項２に記載の発明は、請求項１に記載の情報記憶媒体において、前記仮想マシンは、前記バイトコードを取得するバイトコード取得処理部と、前記バイトコードを解釈するバイトコード解釈処理部と、前記バイトコードを実行するバイトコード実行処理部と、を含んで構成され、前記ロード手段は、前記バイトコード実行処理部の全部又は一部を前記揮発性メモリにロードし、前記仮想マシンは、前記不揮発性メモリに記憶されているバイトコード取得処理部により前記バイトコードを取得し、当該取得したバイトコードを前記不揮発性メモリに記憶されているバイトコード解釈処理部により解釈し、当該解釈したバイトコードを前記揮発性メモリに記憶されているバイトコード実行処理部により実行することを特徴とする。
【００１０】
請求項３に記載の発明は、請求項２に記載の情報記憶媒体において、前記ロード手段は、前記不揮発性メモリに記憶されているバイトコード取得処理部により取得されたバイトコードが所定のロード条件を満たしている場合に、当該バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードすることを特徴とする。
【００１１】
請求項４に記載の発明は、請求項２に記載の情報記憶媒体において、前記ロード手段は、前記不揮発性メモリに記憶されているバイトコード解釈処理部により解釈されたバイトコードが所定のバイトコードである場合に、当該バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードすることを特徴とする。
【００１２】
請求項５に記載の発明は、請求項２に記載の情報記憶媒体において、前記ロード手段は、前記不揮発性メモリに記憶されているバイトコード解釈処理部により解釈されたバイトコードが所定のバイトコードである場合で、且つ当該バイトコードが所定のロード条件を満たしている場合に、当該バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードすることを特徴とする。
【００１３】
請求項６に記載の発明は、請求項３または５の何れか一項に記載の情報記憶媒体において、前記ロード手段は、前記バイトコードの実行回数が所定回数以上である場合に、前記ロード条件を満たしていると判定することを特徴とする。
【００１４】
請求項７に記載の発明は、請求項１または２に記載の情報記憶媒体において、前記ロード手段は、外部端末から受信したコマンドが前記情報記憶媒体のリセット後の最初のコマンドである場合に、前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードすることを特徴とする。
【００１５】
請求項８に記載の発明は、請求項２乃至７の何れか一項に記載の情報記憶媒体において、前記ロード手段は、前記バイトコードを実行するバイトコード実行処理部を前記揮発性メモリにロードする際に、ロード対象の当該バイトコード実行処理部が記憶されている前記不揮発性メモリ上のアドレスを示すアドレステーブルにおいて、当該バイトコード実行処理部が記憶されている前記不揮発性メモリ上のアドレスを、当該バイトコード実行処理部が当該ロードにより記憶される前記揮発性メモリ上のアドレスに変更することを特徴とする。
【００１６】
請求項９に記載の発明は、請求項８に記載の情報記憶媒体において、前記ロード手段は、乱数生成器により生成された乱数に基づいて、前記ロード対象の前記バイトコード実行処理部が当該ロードにより記憶される前記揮発性メモリ上のアドレスを変更することを特徴とする。
【００１７】
請求項１０に記載の発明は、揮発性メモリと、アプリケーションを構成する複数のバイトコードの処理を行う仮想マシンを記憶する不揮発性メモリと、を備える情報記憶媒体におけるバイトコード実行方法であって、前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードするステップと、前記揮発性メモリにロードされた仮想マシンを動作させるステップと、を含むことを特徴とする。
【００１８】
請求項１１に記載の情報記憶媒体用プログラムの発明は、揮発性メモリと、アプリケーションを構成する複数のバイトコードの処理を行う仮想マシンを記憶する不揮発性メモリと、を備える情報記憶媒体であって、前記不揮発性メモリに記憶されている前記仮想マシンの全部又は一部を前記揮発性メモリにロードするロード手段と、前記揮発性メモリにロードされた仮想マシンを動作させる制御手段として機能させることを特徴とする。
【発明の効果】
【００１９】
本発明によれば、不揮発性メモリに記憶されている仮想マシンの全部又は一部を揮発性メモリにロードし、揮発性メモリにロードされた仮想マシンを動作させるように構成したので、当該仮想マシンの高速化を実現することができる。
【図面の簡単な説明】
【００２０】
【図１】ＩＣカード１のハードウェア構成例を示す図である。
【図２】（Ａ）は、ＩＣチップ１ａにおけるシステム構成例を示す図であり、（Ｂ）は、ＩＣチップ１ａにおけるメモリ構成例を示す図である。
【図３】（Ａ）は、外部端末２からのコマンド受信時に、ＩＣチップ制御用ソフトウェア１０２により実行される処理例を示すフローチャートであり、（Ｂ）は、仮想マシン１０４がロードされる際のメモリ構成例を示す図である。
【図４】実施例１におけるバイトコードの処理例を示すフローチャートである。
【図５】（Ａ）は、外部端末２からのコマンド受信時に、ＩＣチップ制御用ソフトウェア１０２により実行される処理例を示すフローチャートであり、（Ｂ）は、バイトコード実行処理部がロードされる際のメモリ構成例を示す図である。
【図６】（Ａ）は、実施例３におけるバイトコードの処理例を示すフローチャートであり、（Ｂ）は、（Ａ）のステップＳ３３におけるロード判定処理の一例を示すフローチャートである。
【図７】（Ａ）は、実施例４におけるバイトコードの処理例を示すフローチャートであり、（Ｂ）は、（Ａ）のステップＳ４４におけるロード判定処理の一例を示すフローチャートである。
【図８】（Ａ）は、バイトコード実行処理部のロード前のアドレステーブル及びメモリ構成例を示す図であり、（Ｂ）は、バイトコード実行処理部がロードされる際のアドレステーブル及びメモリ構成例を示す図である。
【図９】バイトコード実行処理部がロードされる際のアドレステーブル及びメモリ構成例を示す図である。
【発明を実施するための形態】
【００２１】
以下、図面を参照して本発明の実施形態について詳細に説明する。
【００２２】
先ず、図１等を参照して、ＩＣカード１の概要構成及び機能について説明する。図１は、ＩＣカード１のハードウェア構成例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣカード１は本発明における情報記憶媒体を構成するが、このＩＣカード１は通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００２３】
図１に示すように、ＩＣカード１には、ＩＣチップ１ａが搭載されている。ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、揮発性メモリであるＲＡＭ（Random Access Memory）１１、不揮発性メモリであるフラッシュメモリ１２、乱数生成器１３、及びＩ／Ｏ回路１４等を備えて構成される。なお、フラッシュメモリの代わりにＥＥＰＲＯＭであっても構わない。ＣＰＵ１０は、各種プログラムを構成するネイティブコードを実行する。ＲＡＭ１１は、作業用メモリとしてデータ及びプログラムを一時的に記憶する。フラッシュメモリ１２は、各種データ及び各種プログラムを記憶する。フラッシュメモリ１２に記憶される各種プログラムには、ＩＣチップ制御用ソフトウェア（本発明の情報記憶媒体用プログラムを含む）、仮想マシン、ＡＰＩ（Application Program Interface）、及びアプリケーションが含まれる。乱数生成器１３は、乱数を生成する。Ｉ／Ｏ回路１４は、外部端末２とのインターフェイスを担う。Ｉ／Ｏ回路１４には、例えばＩＳＯ／ＩＥＣ７８１６によって定められたＣ１〜Ｃ８の８個の端子が設けられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末２とのデータ通信を行う端子である。外部端末２の例としてはＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が通信機器に組み込まれる場合、外部端末２には通信機器の機能を担うコントローラが該当する。
【００２４】
図２（Ａ）は、ＩＣチップ１ａにおけるシステム構成例を示す図であり、図２（Ｂ）は、ＩＣチップ１ａにおけるメモリ構成例を示す図である。図２（Ａ）の例において、ＩＣチップハードウェア１０１は、ＣＰＵ１０、及び論理回路（図示せず）等により構成される。ＩＣチップ制御用ソフトウェア１０２は、ＩＣチップ１ａの動作を直接コントロールするソフトウェアモジュールであり、複数のネイティブコード（ＩＣチップ１ａ固有のアセンブリ命令から構成されるコード）により構成される。ＡＰＩ１０３は、アプリケーション１０５からＩＣチップ制御用ソフトウェアの機能を利用するためのインターフェースである。アプリケーション１０５は、複数のバイトコードにより構成されるソフトウェアモジュールである。バイトコードは、ソースコードとネイティブコードとの間の中間コード（中間言語）である。バイトコードは、例えばアプリケーション１０５のインストール時に、当該アプリケーション１０５をコンパイルすることで得られる。
【００２５】
仮想マシン１０４は、アプリケーション１０５を構成する複数のバイトコードの処理を行うソフトウェアモジュールである。仮想マシン１０４は、バイトコードを取得するバイトコード取得処理部１０４ａ、バイトコードを解釈するバイトコード解釈処理部１０４ｂ、及びバイトコードを実行するバイトコード実行処理部１０４ｃにより構成される。バイトコード取得処理部１０４ａは、仮想マシン１０４により保持されるプログラムカウンタが示すアドレスに格納されたバイトコードを取得する（バイトコード取得処理）。バイトコード解釈処理部１０４ｂは、バイトコード取得処理部１０４ａにより取得されたバイトコードがどのような命令であるかを解釈してバイトコードの種類を判定（つまり、実行すべきバイトコードを決定）する（バイトコード解釈処理）。バイトコード実行処理部１０４ｃは、複数のバイトコードそれぞれに対応するバイトコード実行処理部により構成される。つまり、バイトコード実行処理部１０４ｃは、複数のバイトコードそれぞれに対応するネイティブ処理部により構成される。そして、バイトコード実行処理部１０４ｃは、バイトコード解釈処理部１０４ｂにより解釈されたバイトコードに対応するネイティブ処理を実行する（バイトコード実行処理）。このネイティブ処理では、バイトコードに対応するネイティブコードがＣＰＵ１０により実行されることになる。なお、仮想マシン１０４は、それぞれのバイトコードに対応するネイティブ処理部が記憶されているフラッシュメモリ１２上のアドレスを示すアドレステーブルを保持している。
【００２６】
以上の構成において、ＣＰＵ１０は、本発明におけるロード手段及び制御手段として機能することで、フラッシュメモリ１２に記憶されている仮想マシン１０４の全部又は一部をＲＡＭ１１にロードし、ＲＡＭ１１にロードされた仮想マシン１０４を動作させる。これにより、ＩＣカード１に搭載された仮想マシン１０４の高速化を実現することができる。ここで、仮想マシン１０４の全部又は一部をＲＡＭ１１にロードするタイミングの例としては、電源投入直後、電源投入後の最初のコマンド実行直後、バイトコードの初回実行時等が挙げられる。仮想マシン１０４の一部とは、例えば、バイトコード実行処理部１０４ｃの全部又は一部である。バイトコード実行処理部１０４ｃの一部とは、例えば、バイトコード解釈処理部１０４ｂにより解釈されたバイトコードに対応するネイティブ処理である。
【００２７】
以下、ＩＣチップ１ａの動作を、実施例１〜実施例６に分けて説明する。
【００２８】
（実施例１）
先ず、図３〜図４を参照して、実施例１におけるＩＣチップ１ａの動作を説明する。実施例１では、電源投入(Cold reset)後、ＩＣカード１が最初にコマンドを実行する際に、仮想マシン１０４の全てをＲＡＭ１１上にロードした後、仮想マシン１０４を動作させる。
【００２９】
図３（Ａ）は、外部端末２からのコマンド受信時に、ＩＣチップ制御用ソフトウェア１０２により実行される処理例を示すフローチャートであり、図３（Ｂ）は、仮想マシン１０４がロードされる際のメモリ構成例を示す図である。図３（Ａ）に示す処理は、外部端末２からコマンドが受信された時に開始される。図３（Ａ）に示すステップＳ１では、外部端末２から受信されたコマンドが、電源投入後（つまり、ＩＣカード１のリセット後）の最初のコマンド（最初に受信したコメンド）であるかが判定される。受信されたコマンドが最初のコマンドであると判定された場合（ステップＳ１：ＹＥＳ）、ステップＳ２へ進む。一方、受信されたコマンドが最初のコマンドでないと判定された場合（ステップＳ１：ＮＯ）、ステップＳ３へ進む。ステップＳ２では、フラッシュメモリ１２上に記憶（格納）されている仮想マシン１０４の記憶領域をコピー元、ＲＡＭ１１をコピー先として、メモリコピーが実行され、ステップＳ３に進む。これにより、図３（Ｂ）に示すように、フラッシュメモリ１２に記憶されている仮想マシン１０４の全部がＲＡＭ１１にロードされる。こうして、ＲＡＭ１１に記憶された仮想マシン１０４を構成するプログラム及びデータは電源断まで保持される。ステップＳ３では、受信されたコマンドの処理が開始（図４に示す処理が開始）される。
【００３０】
図４は、実施例１におけるバイトコードの処理例を示すフローチャートである。図４に示すステップＳ１１では、仮想マシン１０４は、プログラムカウンタを初期設定する。次いで、仮想マシン１０４は、プログラムカウンタが示すアドレスに格納されたバイトコードを、ＲＡＭ１１にロード（つまり、展開）されたバイトコード取得処理部１０４ａにより取得（アプリケーション１０５から取得）する（ステップＳ１２）。次いで、仮想マシン１０４は、ステップＳ１２で取得されたバイトコードを、ＲＡＭ１１にロードされたバイトコード解釈処理部１０４ｂにより解釈して当該バイトコードの種類を判定する（ステップＳ１３）。次いで、仮想マシン１０４は、ステップＳ１３で種類が判定されたバイトコードに対応するネイティブ処理を、ＲＡＭ１１にロードされたバイトコード実行処理部１０４ｃにより実行し（ステップＳ１４）、ステップＳ１５に進む。このように、実施例１では、仮想マシン１０４におけるインタプリタ処理の全てがＲＡＭ１１上から実行される。ステップＳ１５では、仮想マシン１０４は、プログラムカウンタをインクリメントし、ステップＳ１２に戻り、上記処理を繰り返す。なお、受信されたコマンドに関するバイトコードの全てが実行されると、図４に示す処理は終了する。
【００３１】
このように、実施例１によれば、ＩＣチップ１ａは、フラッシュメモリ１２に記憶されている仮想マシン１０４の全部をＲＡＭ１１にロードし、ＲＡＭ１１にロードされた仮想マシン１０４を動作させるように構成したので、当該仮想マシン１０４の高速化を実現することができる。すなわち、一般に、ＲＡＭ１１は、フラッシュメモリ１２よりもデータ読み出し速度が高速である。さらに、ＲＡＭ１１は、クロック周波数増加に伴う消費電流値特性が、フラッシュメモリ１２と比して良好であり、高速化による消費電流値増加を許容しやすい。したがって、バイトコードの処理をフラッシュメモリ１２上から実行するよりも高速に実行することが可能となる。実施例１では、電源投入後、ＩＣカード１が最初にコマンドを実行する際の１回だけ、仮想マシン１０４がＲＡＭ１１にロードされ、電源断まで保持されるので、仮想マシン１０４のロードの効率化を図ることができる。
【００３２】
（実施例２）
次に、図５を参照して、実施例２におけるＩＣチップ１ａの動作を説明する。上述した実施例１では、仮想マシン１０４機能全てをＲＡＭ１１上にロードするように構成したが、仮想マシン１０４自体は比較的大きなソフトウェアモジュールであり、全てをＲＡＭ１１上に展開する場合、ＲＡＭ１１上の空き領域を消費するため、ＲＡＭ１１の記憶領域を圧迫するおそれがある。そこで、実施例２では、電源投入(Cold reset)後、ＩＣカード１が最初にコマンドを実行する際に、仮想マシン１０４の一部機能（この例では、バイトコード実行処理部１０４ｃのみ）を選択的にＲＡＭ１１上にロードさせる。
【００３３】
図５（Ａ）は、外部端末２からのコマンド受信時に、ＩＣチップ制御用ソフトウェア１０２により実行される処理例を示すフローチャートであり、図５（Ｂ）は、バイトコード実行処理部がロードされる際のメモリ構成例を示す図である。図５（Ａ）に示す処理は、図３（Ａ）と同様、外部端末２からコマンドが受信された時に開始される。図５（Ａ）に示すステップＳ２１では、外部端末２から受信されたコマンドが、電源投入後の最初のコマンドであるかが判定される。受信されたコマンドが最初のコマンドであると判定された場合（ステップＳ２１：ＹＥＳ）、ステップＳ２２へ進む。一方、受信されたコマンドが最初のコマンドでないと判定された場合（ステップＳ２１：ＮＯ）、ステップＳ２３へ進む。ステップＳ２２では、フラッシュメモリ１２上に記憶されている仮想マシン１０４のバイトコード実行処理部１０４ｃの記憶領域のみをコピー元、ＲＡＭ１１をコピー先として、メモリコピーが実行され、ステップＳ２３に進む。これにより、図５（Ｂ）に示すように、フラッシュメモリ１２に記憶されている仮想マシン１０４のバイトコード実行処理部１０４ｃのみがＲＡＭ１１にロードされる。こうして、ＲＡＭ１１に記憶されたバイトコード実行処理部１０４ｃを構成するプログラム及びデータは電源断まで保持される。ステップＳ２３では、受信されたコマンドの処理が開始される。実施例２におけるコマンドの処理の流れは、実施例１で説明した図４に示す処理の流れと同様であるが、ステップＳ１２の処理は、フラッシュメモリ１２に記憶されているバイトコード取得処理部１０４ａにより実行され、ステップＳ１３の処理は、フラッシュメモリ１２に記憶されているバイトコード解釈処理部１０４ｂにより実行される。そして、ステップＳ１４及びＳ１５の処理のみが、ＲＡＭ１１にロードされた（つまり、ＲＡＭ１１に記憶されている）バイトコード実行処理部１０４ｃにより実行されることになる。このように、実施例２では、仮想マシン１０４におけるバイトコード実行処理部１０４ｃの処理のみがＲＡＭ１１上から実行される。
【００３４】
このように、実施例２によれば、ＩＣチップ１ａは、フラッシュメモリ１２に記憶されている仮想マシン１０４の一部（この例では、バイトコード実行処理部１０４ｃ）をＲＡＭ１１にロードし、当該ＲＡＭ１１にロードされた仮想マシン１０４の一部についてはＲＡＭ１１上から動作させるように構成したので、ロード対象を限定することにより、処理速度向上と消費メモリ量節約の両立を実現することができる。特に、最も処理時間がかかるバイトコード実行処理部１０４ｃをロード対象とすることで、この効果がより顕著になる。
【００３５】
（実施例３）
次に、図６を参照して、実施例３におけるＩＣチップ１ａの動作を説明する。実施例３では、仮想マシン１０４により特定のバイトコードを実行する際に、仮想マシン１０４の一部機能（この例では、当該バイトコードを実行するバイトコード実行処理部）を選択的にＲＡＭ１１上にロードさせる。
【００３６】
図６（Ａ）は、実施例３におけるバイトコードの処理例を示すフローチャートであり、図６（Ｂ）は、図６（Ａ）のステップＳ３３におけるロード判定処理の一例を示すフローチャートである。図６（Ａ）に示す処理は、外部端末２からコマンドが受信された時に開始される。図６（Ａ）に示すステップＳ３１では、仮想マシン１０４は、プログラムカウンタを初期設定する。次いで、仮想マシン１０４は、プログラムカウンタが示すアドレスに格納されたバイトコードを、フラッシュメモリ１２に記憶されているバイトコード取得処理部１０４ａにより取得する（ステップＳ３２）。そして、仮想マシン１０４によりロード判定処理が実行される（ステップＳ３３）。このロード判定処理では、図６（Ｂ）に示すように、ステップＳ３２により取得されたバイトコードが、ロード対象のバイトコード（所定のバイトコードの一例）であるか否かが判定される（ステップＳ３３１）。ここで、ロード対象のバイトコードは、例えば仮想マシン１０４を開発した者（例えば、ＩＣカードのＯＳ開発者)により予め決定される。取得されたバイトコードがロード対象のバイトコードでないと判定された場合（ステップＳ３３１：ＮＯ）、バイトコード実行処理部１０４ｃのロードが行われることなく、ステップＳ３４に進む。この場合のステップＳ３４の処理は、フラッシュメモリ１２に記憶されているバイトコード解釈処理部１０４ｂにより実行され、この場合のステップＳ３５及びＳ３６の処理は、フラッシュメモリ１２に記憶されているバイトコード実行処理部１０４ｃにより実行される。
【００３７】
一方、取得されたバイトコードがロード対象のバイトコードであると判定された場合（ステップＳ３３１：ＹＥＳ）、当該ロード対象のバイトコードを実行するバイトコード実行処理部（つまり、当該バイトコードに対応するネイティブ処理部）がＲＡＭ１１にロード済であるか否かが判定される（ステップＳ３３２）。ロード対象のバイトコードを実行するバイトコード実行処理部がＲＡＭ１１にロード済であると判定された場合（ステップＳ３３２：ＹＥＳ）、ステップＳ３４に進む。この場合のステップＳ３４の処理は、フラッシュメモリ１２に記憶されているバイトコード解釈処理部１０４ｂにより実行され、この場合のステップＳ３５及びＳ３６の処理は、ＲＡＭ１１に記憶されている当該バイトコード実行処理部により実行される。
【００３８】
一方、ロード対象のバイトコードを実行するバイトコード実行処理部がＲＡＭ１１にロード済でないと判定された場合（ステップＳ３３２：ＮＯ）、ステップＳ３３３に進む。ステップＳ３３３では、ステップＳ３２により取得されたバイトコードが、所定のロード条件を満たしているか否かが判定される。ステップＳ３２により取得されたバイトコードが、所定のロード条件を満たしていないと判定された場合（ステップＳ３３３：ＮＯ）、ステップＳ３４に進む。この場合のステップＳ３４の処理は、フラッシュメモリ１２に記憶されているバイトコード解釈処理部１０４ｂにより実行され、この場合のステップＳ３５及びＳ３６の処理は、フラッシュメモリ１２に記憶されているバイトコード実行処理部１０４ｃにより実行される。
【００３９】
一方、ステップＳ３２により取得されたバイトコードが、所定のロード条件を満たしていると判定された場合（ステップＳ３３３：ＹＥＳ）、ステップＳ３３４に進む。ステップＳ３３４では、ステップＳ３２により取得されたバイトコードを実行するバイトコード実行処理部が、フラッシュメモリ１２からＲＡＭ１１にロードされ、ステップＳ３４に進む。この場合のステップＳ３４の処理は、フラッシュメモリ１２に記憶されているバイトコード解釈処理部１０４ｂにより実行され、この場合のステップＳ３５及びＳ３６の処理は、ＲＡＭ１１にロードされた当該バイトコード実行処理部により実行される。つまり、バイトコードが所定のロード条件を満たすまでは、フラッシュメモリ１２上から当該バイトコードが実行されるが、バイトコードが所定のロード条件を満たした後は、ＲＡＭ１１上から当該バイトコードが実行されることになる。例えば、電源投入後にバイトコードの実行回数を、ロード対象のバイトコードごとに区別して１からカウントし記憶しておき、当該実行回数が所定回数（例えば、１０回）以上である場合（つまり、カウントしていった実行回数が所定回数に達した場合）に、ロード条件を満たしていると判定するように構成するとよい。例えば、ロード対象のバイトコードを「aastore」とし、ロード条件を「１０回」とすると、「aastore」が１０回実行された場合、「aastore」を実行するバイトコード実行処理部（つまり、「aastore」に対応するネイティブ処理部）がフラッシュメモリ１２からＲＡＭ１１にロードされ（メモリ配置が変更され）、その後、「aastore」はフラッシュメモリ１２上ではなくＲＡＭ１１上から実行されることになる。一方、この場合、「aastore」以外の他のバイトコードは、そのままフラッシュメモリ１２上から実行されることになる。
【００４０】
このように、実施例３によれば、ＩＣチップ１ａは、フラッシュメモリ１２に記憶されているバイトコード取得処理部１０４ａにより取得されたバイトコードが所定のロード条件（例えば、実行回数が所定回数以上）を満たしている場合に、当該バイトコードを実行するバイトコード実行処理部をＲＡＭ１１にロードするように構成したので、例えば頻繁に実行される命令を局所的に高速化しつつ、メモリ占有量を節約することができる。
【００４１】
（実施例４）
次に、図７を参照して、実施例４におけるＩＣチップ１ａの動作を説明する。上述した実施例３では、バイトコード解釈処理部１０４ｂによるバイトコードの解釈に先立って、ロード判定処理（ステップＳ３３）を実行するように構成したが、この場合、ロード対象とならないバイトコードに対してもロード判定処理を実行することによるオーバーヘッドが発生する。そこで、実施例４では、バイトコード解釈処理部１０４ｂによりバイトコードが解釈された後に、当該解釈により決定されたバイトコードがロード対象のバイトコードである場合にロード判定処理を実行するように構成される。
【００４２】
図７（Ａ）は、実施例４におけるバイトコードの処理例を示すフローチャートであり、図７（Ｂ）は、図７（Ａ）のステップＳ４４におけるロード判定処理の一例を示すフローチャートである。図７（Ａ）に示す処理は、図６（Ａ）と同様、外部端末２からコマンドが受信された時に開始される。図７（Ａ）に示すステップＳ４１では、仮想マシン１０４は、プログラムカウンタを初期設定する。次いで、仮想マシン１０４は、プログラムカウンタが示すアドレスに格納されたバイトコードを、フラッシュメモリ１２に記憶されているバイトコード取得処理部１０４ａにより取得する（ステップＳ４２）。次いで、仮想マシン１０４は、ステップＳ４２で取得されたバイトコードを、フラッシュメモリ１２に記憶されているバイトコード解釈処理部１０４ｂにより解釈して当該バイトコードの種類を判定する（ステップＳ４３）。そして、ステップＳ４３により決定されたバイトコードがロード対象のバイトコードである場合、ロード判定処理が実行される（ステップＳ４４）。このロード判定処理では、図７（Ｂ）に示すように、当該ロード対象のバイトコード（この例では、「aastore」）を実行するバイトコード実行処理部（つまり、当該バイトコードに対応するネイティブ処理部）がＲＡＭ１１にロード済であるか否かが判定される（ステップＳ４４１）。ロード対象のバイトコードを実行するバイトコード実行処理部がＲＡＭ１１にロード済であると判定された場合（ステップＳ４４１：ＹＥＳ）、ステップＳ４５に進む。一方、ロード対象のバイトコードを実行するバイトコード実行処理部がＲＡＭ１１にロード済でないと判定された場合（ステップＳ４４１：ＮＯ）、ステップＳ４４２に進む。ステップＳ４４２では、ロード対象のバイトコードが、所定のロード条件（例えば、実施例３と同様のロード条件）を満たしているか否かが判定される。ロード対象のバイトコードが、所定のロード条件を満たしていないと判定された場合（ステップＳ４４２：ＮＯ）、ステップＳ４５に進む。この場合のステップＳ４５の処理は、フラッシュメモリ１２に記憶されているバイトコード実行処理部１０４ｃにより実行される。一方、ロード対象のバイトコードが、所定のロード条件を満たしていると判定された場合（ステップＳ４４２：ＹＥＳ）、ステップＳ４４３に進む。ステップＳ４４３では、ロード対象のバイトコードを実行するバイトコード実行処理部が、フラッシュメモリ１２からＲＡＭ１１にロードされ、ステップＳ４５に進む。この場合のステップＳ４５の処理は、ＲＡＭ１１にロードされた当該バイトコード実行処理部により実行される。なお、「aastore」以外の他のバイトコードは、そのままフラッシュメモリ１２上から実行されることになる。
【００４３】
このように、実施例４によれば、ＩＣチップ１ａは、フラッシュメモリ１２に記憶されているバイトコード解釈処理部１０４ｂにより解釈されたバイトコードがロード対象のバイトコードである場合で、且つ当該バイトコードが所定のロード条件を満たしている場合に、当該バイトコードを実行するバイトコード実行処理部をＲＡＭ１１にロードするように構成したので、上述したオーバーヘッドが発生することを防止しつつ、局所的な高速化とメモリ占有量の節約を実現することができる。
【００４４】
（実施例５）
次に、図８を参照して、実施例５におけるＩＣチップ１ａの動作を説明する。上述したように、フラッシュメモリ１２からＲＡＭ１１上に実行先を切り替えた場合（特に、フラッシュメモリ１２とＲＡＭ１１の双方から実行可能な構成とする場合）、実行先を制御し、適切に切り替えるメカニズムが必要である。フラッシュメモリ１２とＲＡＭ１１の実行先切り替え方法は複数存在するが、バイトコードそれぞれに対応するバイトコード実行処理部が記憶されているメモリのアドレスを示すアドレステーブルによる切り替え方法が好適である。実施例５では、実施例４で説明したように、バイトコード「aastore」を実行するバイトコード実行処理部のみ、選択的にＲＡＭ１１上にロードされる場合を例に取る。そのため、図７（Ａ）及び（Ｂ）の処理は、実施例５においても適用される。
【００４５】
図８（Ａ）は、バイトコード実行処理部のロード前のアドレステーブル及びメモリ構成例を示す図であり、図８（Ｂ）は、バイトコード実行処理部がロードされる際のアドレステーブル及びメモリ構成例を示す図である。仮想マシン１０４は、バイトコードを実行する際には、アドレステーブルを参照し、ロード対象となるバイトコード実行処理部を特定する。図８（Ａ）の例では、バイトコード「aastore」に対応するバイトコード実行処理部は、フラッシュメモリ１２上のアドレス「0x120001」に格納されている。仮想マシン１０４は、アドレステーブルにおいて、バイトコード「aastore」に対応するバイトコード実行処理部のアドレスが登録されている箇所を参照し、アドレス「0x120001」を特定した上で、特定したアドレスに格納されているバイトコード実行処理部により当該「aastore」を実行する。
【００４６】
これに対し、フラッシュメモリ１２上の「aastore」に対応するバイトコード実行処理部をＲＡＭ１１にロードする際には、当該バイトコード実行処理部をＲＡＭ１１上にメモリコピーすると共に、アドレステーブルにおいて当該バイトコード実行処理部が記憶されているフラッシュメモリ１２上のアドレスを、当該バイトコード実行処理部が当該ロードにより記憶されるＲＡＭ１１上のアドレスに変更し、参照先を切り替える。図８（Ｂ）の例は、「aastore」に対応するバイトコード実行処理部がＲＡＭ１１上にロードされつつ、アドレステーブル内のアドレスが「0x120001」（フラッシュメモリ１２）から「0x230000」（ＲＡＭ１１）に書き換えられた状態を示している。この状態では、仮想マシン１０４は、アドレステーブルにおいて、バイトコード「aastore」に対応するバイトコード実行処理部のアドレスが格納されている箇所を参照し、アドレス「0x230000」を特定した上で、特定したアドレスに格納されたバイトコード実行処理部により当該「aastore」を実行する。
【００４７】
このように、実施例５によれば、ＩＣチップ１ａは、バイトコード実行処理部をＲＡＭ１１にロードする際に、ロード対象の当該バイトコード実行処理部が記憶されているフラッシュメモリ１２上のアドレスを示すアドレステーブルにおいて、当該バイトコード実行処理部が記憶されているフラッシュメモリ１２上のアドレスを、当該バイトコード実行処理部が当該ロードにより記憶されるＲＡＭ１１上のアドレスに変更するように構成したので、ＲＡＭ１１上から仮想マシン１０４を効率良く動作させることができる。
【００４８】
（実施例６）
次に、図９を参照して、実施例６におけるＩＣチップ１ａの動作を説明する。上述した実施例５では、バイトコード「aastore」に対応するバイトコード実行処理部のコピー先となるアドレスを、「0x230000」のように固定値で示しているが、実施例６では、この値を、ＲＡＭ１１のアドレス範囲内に限定しつつ乱数要素を加えて決定することで、バイトコードをＲＡＭ１１上にロードするたびにロード先を変更するように構成される。なお、図７（Ａ）及び（Ｂ）の処理は、実施例６においても適用される。
【００４９】
図９は、バイトコード実行処理部がロードされる際のアドレステーブル及びメモリ構成例を示す図である。図９の例では、乱数生成器１３によって生成された乱数値「0x3327」と、ＲＡＭ１１の先頭アドレス「0x210000」とが加算され、バイトコード「aastore」に対応するバイトコード実行処理部のロード先が決定されている。
【００５０】
このように、実施例６によれば、アドレステーブルによる実行先の切り替えと乱数の生成を併用し、ＩＣチップ１ａは、乱数生成器１３により生成された乱数に基づいて、ロード対象のバイトコード実行処理部が当該ロードにより記憶されるＲＡＭ１１上のアドレスを変更するように構成したので、バイトコード実行処理部をターゲットとしたセキュリティアタックに対して効果的に対抗でき、セキュリティを向上させることができる。すなわち、バイトコード実行処理部をロードするたびにロード先が変わる（展開するＲＡＭ１１上のアドレスをランダム化する）ことにより、攻撃者はバイトコード実行処理部の場所を特定することができなくなり、当該攻撃者によるバイトコードの処理への攻撃を困難にすることが可能となる。
【００５１】
なお、実施例６では、ロード対象としてバイトコード実行処理部を例として示したが、同一の方式は仮想マシン１０４全体またはバイトコード実行処理部以外の部位に対しても適用可能である。したがって、本発明は乱数要素をＲＡＭ１１上のコピー先のアドレスに加えることにより、仮想マシン１０４の全部又は一部を動的、かつランダムに変更することができる効果を有しており、セキュリティの向上に寄与することができる。
【符号の説明】
【００５２】
１  ＩＣカード
２  外部端末
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＡＭ
１２  フラッシュメモリ
１３  乱数生成器
１４  Ｉ／Ｏ回路
【図１】
2015041349.tif 000003
【図２】
2015041349.tif 000004
【図３】
2015041349.tif 000005
【図４】
2015041349.tif 000006
【図５】
2015041349.tif 000007
【図６】
2015041349.tif 000008
【図７】
2015041349.tif 000009
【図８】
2015041349.tif 000010
【図９】
2015041349.tif 000011