(57)【特許請求の範囲】
【請求項１】
搭載するアプリケーションの実行コードと、その差分リストファイルとを受信する手段と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと同じ場合、受信した実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、受信した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する手段と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと異なる場合、受信した差分リストファイルに基づいて、受信した実行コードを変更して、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、変更した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する手段とを備えることを特徴とするネイティブ型ＩＣカード。
【請求項２】
削除又は搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードに関係付けられている差分リストファイルに基づいて、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、この差分リストファイルを、データ領域で、削除又は搭載し直したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、削除又は搭載し直したアプリケーションの次に搭載したアプリケーションを搭載し直す手段を備えることを特徴とする請求項１記載のネイティブ型ＩＣカード。
【請求項３】
あるアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に移動させ、他のアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域に移動させることにより、あるチャネルにて、あるアプリケーションの実行を一旦停止して、他のチャネルにて、他のアプリケーションを実行する手段を備えることを特徴とする請求項１又は２記載のネイティブ型ＩＣカード。
【請求項４】
搭載するアプリケーションの実行コードと、その差分リストファイルとを受信する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと同じ場合、受信した実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、受信した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと異なる場合、受信した差分リストファイルに基づいて、受信した実行コードを変更して、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、変更した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程とをネイティブ型ＩＣカードに実行させることを特徴とするＩＣカードＯＳ。
【請求項５】
削除又は搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードに関係付けられている差分リストファイルに基づいて、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、この差分リストファイルを、データ領域で、削除又は搭載し直したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、削除又は搭載し直したアプリケーションの次に搭載したアプリケーションを搭載し直す工程をネイティブ型ＩＣカードに実行させることを特徴とする請求項４記載のＩＣカードＯＳ。
【請求項６】
あるアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に移動させ、他のアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域に移動させることにより、あるチャネルにて、あるアプリケーションの実行を一旦停止して、他のチャネルにて、他のアプリケーションを実行する工程をネイティブ型ＩＣカードに実行させることを特徴とする請求項４又は５記載のＩＣカードＯＳ。
【請求項７】
搭載するアプリケーションの実行コードと、その差分リストファイルとを受信する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと同じ場合、受信した実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、受信した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと異なる場合、受信した差分リストファイルに基づいて、受信した実行コードを変更して、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、変更した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程とをネイティブ型ＩＣカードが実行することを特徴とする方法。
【請求項８】
削除又は搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードに関係付けられている差分リストファイルに基づいて、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、この差分リストファイルを、データ領域で、削除又は搭載し直したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、削除又は搭載し直したアプリケーションの次に搭載したアプリケーションを搭載し直す工程をネイティブ型ＩＣカードが実行することを特徴とする請求項７記載の方法。
【請求項９】
あるアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に移動させ、他のアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域に移動させることにより、あるチャネルにて、あるアプリケーションの実行を一旦停止して、他のチャネルにて、他のアプリケーションを実行する工程をネイティブ型ＩＣカードが実行することを特徴とする請求項７又は８記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＣカードに関する。
【背景技術】
【０００２】
近年ＩＣカードの普及が高まるにつれて、１枚のカードに、個々のサービスを実行させるアプリケーションプログラム（以後アプリケーションと略称する）を複数提供することが可能であり、発行後でもアプリケーションを追加する機能を持つ、いわゆる、マルチアプリケーション機能を持つプラットホーム型ＩＣカードの需要が高くなっている。そのため、一般に、代表的なプラットホームとして、Ｊａｖａ（登録商標）ＣａｒｄＯＳを利用したカードがあるが、実行処理速度が遅いことが問題である。
【０００３】
また一般に、Ｃ言語に代表されるネイティブ型ＩＣカードでは、カードに送られる全てのコマンドを、ＯＳレベルで解釈実行するため実行処理速度が速いことが特徴であるが、発行後のアプリケーションの追加、変更および削除が困難であり、可能である場合も、カード発行者とアプリケーション開発者とが一体となって開発を進める必要がある。具体的には、発行後のカードに対して、複数のアプリケーションベンダーが、自由にアプリケーションを開発しカードに搭載することができない。
【０００４】
これは、プラットホーム型ＩＣカードでは、アプリケーション開発者は、仮想マシン（ＶＭ）で処理されるコード、いわゆる中間コードを開発し作成してＩＣカードのメモリに格納し、ＩＣカードはアプリケーションがダウンロード完了時もしくは実行される時に、初めて物理的なメモリ領域を確保するからであるのに対して、ネイティブ型ＩＣカードでは、アプリケーション開発者は、搭載対象のＩＣカードのメモリの物理的な空き領域等を認知した上で、実行コードを開発し作成して、開発し作成した実行コードが、その空き領域に格納する必要があるためである。
【０００５】
また複数のアプリケーションが、チャネルの切り替えにより、それぞれのチャネルで同時に動作することがあるが、プラットホーム型ＩＣカードでは一時的変数であるＲＡＭ領域も、アプリケーションの実行時に、そのカードの状況に応じて確保するため、アプリケーション間の重複は問題とならないが、ネイティブ型ＩＣカードでは、アプリケーション開発者へ渡すアプリケーション側で自由に使用できるＲＡＭ領域は固定かつ同一アドレスとし、アプリケーションで利用するＲＡＭ領域も実コード作成時に決定されるため、重複が起きないようにする対策が必要である。
【０００６】
そのため、ネイティブ型ＩＣカードでは、複数のアプリケーションベンダーが、ユーザーのアプリケーションのダウンロード状況に応じて、メモリの空き領域が異なるカードに対してのアプリケーションの開発を行いカードに搭載できない。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、斯かる背景技術に鑑みてなされたもので、個々のアプリケーションベンダーが、個々のネイティブ型ＩＣカードのメモリの空き領域を気にすることなく、アプリケーションの開発を行えることを課題とする。
【課題を解決するための手段】
【０００８】
本発明において上記課題を解決するために、まず請求項１の発明では、
搭載するアプリケーションの実行コードと、その差分リストファイルとを受信する手段
と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと同じ場合、受信した実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、受信した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する手段と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと異なる場合、受信した差分リストファイルに基づいて、受信した実行コードを変更して、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、変更した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する手段とを備えることを特徴とするネイティブ型ＩＣカードとしたものである。
【０００９】
また請求項２の発明では、
削除又は搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードに関係付けられている差分リストファイルに基づいて、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、この差分リストファイルを、データ領域で、削除又は搭載し直したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、削除又は搭載し直したアプリケーションの次に搭載したアプリケーションを搭載し直す手段を備えることを特徴とする請求項１記載のネイティブ型ＩＣカードとしたものである。
【００１０】
また請求項３の発明では、
あるアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に移動させ、他のアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域に移動させることにより、あるチャネルにて、あるアプリケーションの実行を一旦停止して、他のチャネルにて、他のアプリケーションを実行する手段を備えることを特徴とする請求項１又は２記載のネイティブ型ＩＣカードとしたものである。
【００１１】
また請求項４の発明では、
搭載するアプリケーションの実行コードと、その差分リストファイルとを受信する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと同じ場合、受信した実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、受信した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと異なる場合、受信した差分リストファイルに基づいて、受信した実行コードを変更して、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、変更した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程とをネイティブ型ＩＣカードに実行させることを特徴とするＩＣカードＯＳとしたものである。
【００１２】
また請求項５の発明では、
削除又は搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードに関係付けられている差分リストファイルに基づいて、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、この差分リストファイルを、データ領域
で、削除又は搭載し直したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、削除又は搭載し直したアプリケーションの次に搭載したアプリケーションを搭載し直す工程をネイティブ型ＩＣカードに実行させることを特徴とする請求項４記載のＩＣカードＯＳとしたものである。
【００１３】
また請求項６の発明では、あるアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に移動させ、他のアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域に移動させることにより、あるチャネルにて、あるアプリケーションの実行を一旦停止して、他のチャネルにて、他のアプリケーションを実行する工程をネイティブ型ＩＣカードに実行させることを特徴とする請求項４又は５記載のＩＣカードＯＳとしたものである。
【００１４】
また請求項７の発明では、
搭載するアプリケーションの実行コードと、その差分リストファイルとを受信する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと同じ場合、受信した実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、受信した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程と、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと異なる場合、受信した差分リストファイルに基づいて、受信した実行コードを変更して、追加アプリケーション領域に、その開始アドレスから格納するとともに、受信した差分リストファイルを、変更した実行コードと関係付けて、データ領域に格納することにより、アプリケーションを搭載する工程とをネイティブ型ＩＣカードが実行することを特徴とする方法としたものである。
【００１５】
また請求項８の発明では、
削除又は搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードに関係付けられている差分リストファイルに基づいて、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、この差分リストファイルを、データ領域で、削除又は搭載し直したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、削除又は搭載し直したアプリケーションの次に搭載したアプリケーションを搭載し直す工程をネイティブ型ＩＣカードが実行することを特徴とする請求項７記載の方法としたものである。
【００１６】
また請求項９の発明では、あるアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に移動させ、他のアプリケーションを実行するのに必要な情報を、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域に移動させることにより、あるチャネルにて、あるアプリケーションの実行を一旦停止して、他のチャネルにて、他のアプリケーションを実行する工程をネイティブ型ＩＣカードが実行することを特徴とする請求項７又は８記載の方法としたものである。
【発明の効果】
【００１７】
本願の請求項１、４、及び７に係る発明は、個々のアプリケーションベンダーが、個々のネイティブ型ＩＣカードのメモリの空き領域を気にすることなく、デフォルト開始アドレスでアプリケーションの実行コード及び差分リストファイルの作成を行えば良いという効果がある。
【００１８】
本願の請求項２、５、及び８に係る発明は、ネイティブ型ＩＣカードに搭載したアプリケーションを削除しても、メモリを有効に活用できるという効果がある。
【００１９】
本願の請求項３、６、及び９に係る発明は、ネイティブ型ＩＣカードに搭載された複数のアプリケーション間で、ＲＡＭ領域の利用に関して重複が生じることを気にすることなく、アプリケーションの開発が行えるという効果がある。
【００２０】
以上、本願発明は、個々のアプリケーションベンダーが、個々のネイティブ型ＩＣカードのメモリの空き領域を気にすることなく、アプリケーションの開発を行えるという効果がある。
【図面の簡単な説明】
【００２１】
【図１】ＩＣカードのハードウエア構成例を示す図。
【図２】メモリのハードウエア構成例を示す図。
【図３】アプリケーションをダウンロードするためのシステムのハードウエア構成例を示す図。
【図４】アプリケーション搭載処理の流れの例を示すフローチャート。
【図５】アプリケーションの実行コードと差分リストファイルとが密に詰って格納されているメモリの例を示す図。
【図６】アプリケーションの実行コードと差分リストファイルとが歯抜け状態で格納されているメモリの例を示す図。
【図７】メモリコンパクション処理の流れの例を示すフローチャート。
【図８】ＲＡＭのアプリケーション側で自由に利用可能な領域にチャネル０にてアプリケーションＡを実行するのに必要な情報が保持されているメモリの例を示す図。
【図９】ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域にチャネル０にてアプリケーションＡを実行するのに必要な情報を退避させているメモリの例を示す図。
【図１０】ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域にチャネル０にてアプリケーションＡを実行するのに必要な情報を退避させながら、ＲＡＭのアプリケーション側で自由に利用可能な領域にチャネル１にてアプリケーションＢを実行するのに必要な情報を保持しているメモリの例を示す図。
【図１１】ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域にチャネル１にてアプリケーションＢを実行するのに必要な情報を退避させながら、ＲＡＭのアプリケーション側で自由に利用可能な領域にチャネル０にてアプリケーションＡを実行するのに必要な情報を保持しているメモリの例を示す図。
【発明を実施するための形態】
【００２２】
以下に、本発明の一実施形態を説明する。
【００２３】
１．構成
本実施形態では、ＩＣカードは、ネイティブ型であって、図１に示すように、ＣＰＵ、Ｉ／Ｆ、メモリを有する。
【００２４】
ＣＰＵは、中央処理装置とも呼ばれ、ＩＣカードリーダライタからのコマンド、メモリに記憶されているプログラムを実行して処理を行う装置である。
【００２５】
Ｉ／Ｆは、通信インターフェースとも呼ばれ、ＩＣカードリーダライタから電力とクロックの供給を受けるとともに、ＩＣカードリーダライタとＣＰＵとの間の通信を仲介するインターフェースである。
【００２６】
メモリには、図２に示すように、ＲＯＭ、ＲＡＭ、ＥＥＰＲＯＭがある。
【００２７】
ＲＯＭは、読み出し専用のメモリであり、ＩＣカードＯＳが記憶される。このＩＣカードＯＳは、ＣＰＵに、少なくとも、以下で説明するアプリケーション搭載処理とメモリコンパクション処理とＲＡＭ領域のスワップ処理とを実行させる基本プログラムである。
【００２８】
ＲＡＭは、ＣＰＵがコマンドやプログラムを実行するために、一時的にデータを記憶する作業用のメモリである。
【００２９】
ＥＥＰＲＯＭは、電気的に内容の書き換えが可能なメモリであって、追加アプリケーション領域と、データ領域とに別れている。カードに搭載されたアプリケーションの実行コードは、追加アプリケーション領域に保持され、この実行コードに関係付けて、差分リストファイルがデータ領域に保持される。
【００３０】
差分リストファイルは、アプリケーションの実行コードにおいて、そのアプリケーション内の自己関数或いは自己変数（アプリケーション内で作成した関数或いは変数）を絶対アドレスでコールするために必要なアドレス値を格納している箇所を表すファイルのことである。
【００３１】
一般に、ネイティブ型ＩＣカードの実行コードは、Ｃ言語等で書かれたソースコードを、コンパイラーでコンパイルしてオブジェクトファイルにし、このオブジェクトファイルをリンカーでリンクすることにより作成される。リンカーには、アプリケーションで自由に利用可能なＲＡＭ領域の情報や追加アプリケーション領域で実行コードの格納を開始するアドレス（以後、追加アプリケーション領域の開始アドレスとも云う）の情報などのリンク情報が書かれたリンクファイルが付属しており、このリンクファイルを参照することによりリンクが行われる。
【００３２】
追加アプリケーション領域の開始アドレスのみが異なる２つのリンクファイルを用いてオブジェクトファイルをリンクして２つの実行コードを作成した場合、これら２つの実行コードの間で、アプリケーション内の自己関数或いは自己変数を絶対アドレスでコールするのに必要なアドレス値に、これら開始アドレスの差だけの差異が現れ、かつ、これら２つの実行コードの間で差異が現れる箇所は、アプリケーション内の自己関数或いは自己変数を絶対アドレスでコールするのに必要なアドレス値を格納している箇所のみであるため、これら２つの実行コードを比較することで、これら２つの実行コードに差異のある箇所をリストすることにより、差分リストファイルが作成される。
【００３３】
ところで、アプリケーションをダウンロードするためのシステムは、図３に示すように、データベースを有するサーバと、ＩＣカードリーダライタを有する端末とを備え、これらサーバと端末とが、インターネット等のネットワークに接続されるものである。
【００３４】
サーバは、ダウンロードセンターと呼ばれる第三者によって運用されるものである。
【００３５】
データベースには、デフォルト開始アドレス（アプリケーションが未搭載の場合の追加アプリケーション領域で実行コードの格納を開始するアドレス）で作成された実行コードと、この実行コードと、デフォルトとは異なる値の開始アドレスで作成された実行コードとから作成された差分リストファイルとが保存されている。これら、実行コードと差分ファイルとは、アプリケーションベンダーの開発者によって作成され、データベースにアップロードされたものであっても良い。
【００３６】
本実施形態では、カードにアプリケーションを搭載するために、サーバのデータベースから端末に、そのアプリケーションの実行コードだけでなく、差分リストファイルもダウンロードされ、さらに端末のＩＣカードリーダライタからカードに、そのアプリケーションの実行コードだけでなく、差分リストファイルも送信される。
【００３７】
２．アプリケーション搭載処理
【００３８】
以下に、カードにアプリケーションを搭載するために、ＩＣカードＯＳによってカードのＣＰＵが行うアプリケーション搭載処理の流れの例を、図４のフローチャートに従って説明する。
【００３９】
Ｓ（ＳＴＥＰ）１；
端末のＩＣカードリーダライタから、アプリケーションの実行コードと、差分リストファイルとを受信する。
【００４０】
Ｓ（ＳＴＥＰ）２；
追加アプリケーション領域の開始アドレス（アプリケーションが未搭載ならば、デフォルト開始アドレスであり、アプリケーションが既搭載ならば、最後に搭載したアプリケーションの実行コードの格納を終了するアドレスの直ぐ隣で、このアドレスよりも大きいもの）をチェック。
【００４１】
Ｓ（ＳＴＥＰ）３；
追加アプリケーション領域の開始アドレスと、デフォルト開始アドレスとを比較し、
追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと同じであるならば、カードにアプリケーションが未搭載であることを意味するので、ＳＴＥＰ４に進み、
他方、追加アプリケーション領域の開始アドレスが、デフォルト開始アドレスと異なるならば、カードにアプリケーションが既搭載であることを意味するので、ＳＴＥＰ５に進む。
【００４２】
Ｓ（ＳＴＥＰ）４；
受信したアプリケーションの実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、差分リストファイルを、実行コードと関係付けて、データ領域に、その開始アドレスから格納して、ＥＮＤに進む。
【００４３】
Ｓ（ＳＴＥＰ）５；
追加アプリケーション領域の開始アドレスからデフォルト開始アドレスを引いた値を求
める。
【００４４】
Ｓ（ＳＴＥＰ）６；
受信した差分リストファイルを参照して、受信したアプリケーションの実行コードにおいて、そのアプリケーション内の自己関数或いは自己変数を絶対アドレスでコールするために必要なアドレス値を格納している箇所を特定し、このアドレス値に、求めた値を加算して、受信したアプリケーションの実行コードを、デフォルト開始アドレスで作成されたものから、追加アプリケーション領域の開始アドレスで作成された実行コードに変更する。
【００４５】
Ｓ（ＳＴＥＰ）７；
変更した実行コードを、追加アプリケーション領域に、その開始アドレスから格納するとともに、差分リストファイルを、実行コードと関係付けて、データ領域に、その開始アドレスから格納する。
【００４６】
３．メモリコンパクション処理
このようなアプリケーション搭載処理により、複数のアプリケーションを搭載した場合、図５に示すように、アプリケーションの搭載順に、それぞれの実行コードと差分リストファイルとは、それぞれ追加アプリケーション領域とデータ領域とに密に詰って格納される。そして、アプリケーションの実行コード（或いは差分リストファイル）の格納を開始するアドレスは、搭載順に大きくなる。図５に示す例は、アプリケーションをＡ、Ｂ、Ｃ、Ｄ順に搭載したものであり。アプリケーションＡ〜Ｄのそれぞれの実行コードＡ〜Ｄと差分リストファイルＡ〜Ｄとは、それぞれ追加アプリケーション領域とデータ領域とに密に詰って格納されている。そして、アプリケーションＡ〜Ｄのそれぞれの実行コードＡ〜Ｄの格納を開始する開始アドレスＡ〜Ｄは、開始アドレスＡ、Ｂ、Ｃ、Ｄの順に大きくなっている。
【００４７】
しかしながら、最後よりも以前に搭載したアプリケーションを削除した場合、図６に示すように、このアプリケーションの実行コードと差分リストファイルとが格納されていた領域のみが初期化され開放された歯抜けの状態になるため、この開放された領域を有効に活用できない。図６に示す例は、アプリケーションをＡ、Ｂ、Ｃ、Ｄ順に搭載した後に、アプリケーションＢを削除したものであり、このアプリケーションＢの実行コードＢと差分リストファイルＢとが格納されていた領域のみが初期化され開放された歯抜けの状態になるため、この開放された領域を有効に活用できない。
【００４８】
そこで、この開放された領域を有効活用するために、最後よりも以前に搭載したアプリケーションを削除した場合、削除したアプリケーションよりも以後に搭載したアプリケーションのそれぞれの実行コードと差分リストファイルとを、それぞれ追加アプリケーション領域とデータ領域とで順に詰めて格納し直して、削除したアプリケーションよりも以後に搭載したアプリケーションを搭載し直したいが、実行コードは、上述したように、アプリケーション内の自己関数或いは自己変数を絶対アドレスでコールするのに必要なアドレス値を含んだデータであるために、そのまま移動できない。
【００４９】
これに対処するために、本実施形態では、ＩＣカードＯＳによるメモリコンパクション処理がなされる。
【００５０】
以下に、ＩＣカードＯＳによってカードのＣＰＵが行うメモリコンパクション処理の流れの例を、図７のフローチャートに従って説明する。
【００５１】
Ｓ（ＳＴＥＰ）１；
削除したアプリケーションの次に搭載したアプリケーションがあるかを確かめ、
あるならば、ＳＴＥＰ２に進み、
他方、ないならば、ＥＮＤに進む。
【００５２】
Ｓ（ＳＴＥＰ）２；
削除したアプリケーションの次に搭載したアプリケーションの実行コードの移動先アドレス（削除したアプリケーションの実行コードの格納を開始していたアドレス）をチェックする。
【００５３】
Ｓ（ＳＴＥＰ）３；
削除したアプリケーションの次に搭載したアプリケーションの実行コードの格納を開始しているアドレスから、移動先アドレスを引いた値を求める。
【００５４】
Ｓ（ＳＴＥＰ）４；
削除したアプリケーションの次に搭載したアプリケーションの実行コードに関係付けられている差分リストファイルを参照して、削除したアプリケーションの次に搭載したアプリケーションの実行コードにおいて、削除したアプリケーションの次に搭載したアプリケーション内の自己関数或いは自己変数を絶対アドレスでコールするために必要なアドレス値を格納している箇所を特定し、このアドレス値に、求めた値を減算して、削除したアプリケーションの次に搭載したアプリケーションの実行コードを変更する。
【００５５】
Ｓ（ＳＴＥＰ）５；
削除したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、削除したアプリケーションの次に搭載したアプリケーションの差分リストファイルを、データ領域で、削除したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、削除したアプリケーションの次に搭載したアプリケーションを搭載し直す。
【００５６】
Ｓ（ＳＴＥＰ）６；
搭載し直したアプリケーションの次に搭載したアプリケーションがあるかを確かめ、
あるならば、ＳＴＥＰ７に進み、
他方、ないならば、ＥＮＤに進む。
【００５７】
Ｓ（ＳＴＥＰ）７；
搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードの移動先アドレス（搭載し直したアプリケーションの実行コードの格納を終了するアドレスの直ぐ隣で、このアドレスよりも大きいもの）をチェックする。
【００５８】
Ｓ（ＳＴＥＰ）８；
搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードの格納を開始しているアドレスから、移動先アドレスを引いた値を求める。
【００５９】
Ｓ（ＳＴＥＰ）９；
搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードに関係付けられている差分リストファイルを参照して、搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードにおいて、搭載し直したアプリケーションの次に搭載したアプリケーション内の自己関数或いは自己変数を絶対アドレスでコールするために必要なアドレス値を格納している箇所を特定し、このアドレス値に、求めた値を減算して、搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを変更する
。
【００６０】
Ｓ（ＳＴＥＰ）１０；
搭載し直したアプリケーションの次に搭載したアプリケーションの実行コードを追加アプリケーション領域から削除すると同時に、この実行コードを変更したものを追加アプリケーション領域に移動先アドレスから格納するとともに、搭載し直したアプリケーションの次に搭載したアプリケーションの差分リストファイルを、データ領域で、搭載し直したアプリケーションの差分リストファイルの分だけ詰めて格納し直すことにより、搭載し直したアプリケーションの次に搭載したアプリケーションを搭載し直して、ＳＴＥＰ６に戻る。
【００６１】
４．ＲＡＭ領域のスワップ処理
上述のように、ネイティブ型ＩＣカードでは、アプリケーション開発者へ渡すアプリケーション側で自由に使用できるＲＡＭ領域は固定かつ同一アドレスとし、アプリケーションで利用するＲＡＭ領域も実コード作成時に決定されるため、複数のアプリケーションを、チャネルの切り替えにより、それぞれのチャネルで同時に動作させる場合、複数のアプリケーションの間で、プリケーション側で自由に使用できるＲＡＭ領域の重複が起きないようにする対策が必要になる。
【００６２】
このような対策として、本実施形態では、ＩＣカードＯＳは、カードのＣＰＵに、あるチャネルにて、あるアプリケーションの実行を一旦停止して、他のチャネルにて、他のアプリケーションを実行する場合、あるアプリケーションを実行するのに必要な情報（主に、セキュリティステータスの情報、発生させた乱数、セッションキー情報など）を、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に移動させ、他のアプリケーションを実行するのに必要な情報（主に、セキュリティステータスの情報、発生させた乱数、セッションキー情報など）を、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域に移動させるスワップ処理を行わせる。
【００６３】
以下のＳＴＥＰ１〜５に、ＩＣカードＯＳによってカードのＣＰＵが行うＲＡＭ領域のスワップ処理の流れの例を説明する。
【００６４】
ＳＴＥＰ１；
図８に示すように、チャネル０にて、ＲＡＭのアプリケーション側で自由に利用可能な領域に、アプリケーションＡを実行するのに必要な情報を保持して、アプリケーションＡを実行する。
【００６５】
ＳＴＥＰ２；
チャネル０にてアプリケーションＡの実行を一旦停止して、チャネル１にてアプリケーションＢを実行する場合、アプリケーションＢへ制御が移る直前に、図９に示すように、ＲＡＭのアプリケーション側で自由に利用可能な領域から、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別の領域に、アプリケーションＡを実行するのに必要な情報を移動させて、ＲＡＭのアプリケーション側で自由に利用可能な領域を初期化する。
【００６６】
ＳＴＥＰ３；
図１０に示すように、チャネル１にて、ＲＡＭのアプリケーション側で自由に利用可能な領域に、アプリケーションＢを実行するのに必要な情報を保持して、アプリケーションＢを実行する。
【００６７】
ＳＴＥＰ４；
チャネル１にてアプリケーションＢの実行を一旦停止して、チャネル０にて一旦停止していたアプリケーションＡを、停止した箇所から再び実行する場合、アプリケーションＡへ制御が移る直前に、図１１に示すように、ＲＡＭのアプリケーション側で自由に利用可能な領域に保持しているアプリケーションＢを実行するのに必要な情報と、ＲＡＭのアプリケーション側で自由に利用可能な領域とは別な領域に保持しているアプリケーションＡを実行するのに必要な情報とを、スワップ（交換）させて、アプリケーションＢの実行を一旦停止させる。
【００６８】
ＳＴＥＰ５；
チャネル０にて、ＲＡＭのアプリケーション側で自由に利用可能な領域に、アプリケーションＡを実行するのに必要な情報を保持して、一旦停止していたアプリケーションＡを停止した箇所から再び実行する。
【図１】
0005402595.tif 000002
【図２】
0005402595.tif 000003
【図３】
0005402595.tif 000004
【図４】
0005402595.tif 000005
【図５】
0005402595.tif 000006
【図６】
0005402595.tif 000007
【図７】
0005402595.tif 000008
【図８】
0005402595.tif 000009
【図９】
0005402595.tif 000010
【図１０】
0005402595.tif 000011
【図１１】
0005402595.tif 000012