(57)【特許請求の範囲】
【請求項１】
揮発性メモリ内に固定サイズのバッファ領域を保持し、複数の通信セッションを並行して開設できるICカードであって、
各通信セッションはセッションのチャネル番号に対応付けられたセッションバッファを前記固定サイズのバッファ内に保持しており、セッションバッファの数、アドレス、および各セッションバッファに対応するチャネル番号をセッション管理情報として保持しており、
通信セッションを確立／閉鎖する指示を端末装置から受けると，確立／閉鎖後の通信セッションの数に応じて前記バッファ領域を所定のアルゴリズムに従い分割することで、確立／閉鎖後の通信セッションそれぞれに割り当てるセッションバッファのサイズとアドレスを計算し，計算した値を用いて前記セッション管理情報を更新するバッファ管理手段と，
前記セッション管理情報を外部に出力するセッション管理情報出力手段を備えたことを特徴とするＩＣカード。
【請求項２】
前記セッション管理情報には，セッションバッファにスタックしたデータの合計サイズがセッションバッファ毎に記憶され，端末装置からセッションのチャネル番号が指定されてデータが送信されると，前記セッション管理情報を参照し，該チャネル番号に割り当てられたセッションバッファに該データをスタックし，該セッションバッファの合計サイズに該データのサイズを加算するディスパッチ手段を備えたことを特徴とする，請求項１に記載のＩＣカード。
【請求項３】
前記バッファ管理手段は，前記セッション管理情報を更新する前に，確立／閉鎖後のセッションそれぞれに割り当てるセッションバッファのアドレスに従い，確立／閉鎖前にセッションバッファにストックされていたデータを，確立／閉鎖後のセッションバッファに再配置することを特徴とする，請求項２に記載のＩＣカード。
【請求項４】
前記バッファ管理手段は，通信セッションを確立する指示を端末装置から受けてデータを再配置する際，前記セッション管理情報を参照し，セッションバッファにスタックされたデータのサイズと，確立後のセッションバッファのサイズを比較する処理を行い，スタックされたデータのサイズが，確立後のセッションバッファのサイズを超えるセッションバッファがある場合，確立後のセッションバッファのサイズを超えた分の該データを書き換え可能な不揮発性メモリに退避させることを特徴とする，請求項３に記載のＩＣカード。
【請求項５】
前記バッファ管理手段は，通信セッションを閉鎖する指示を端末装置から受けてデータを再配置した後，書き換え可能な不揮発性メモリにデータを退避させているセッションバッファがある場合，該セッションバッファが全て埋まるまで，不揮発性メモリに退避されたデータを該セッションバッファに復帰させることを特徴とする，請求項４に記載のＩＣカード。
【請求項６】
確立可能な通信セッションの最大数が前記セッション管理情報に記憶され，前記バッファ管理手段は，通信セッションを確立する指示を端末装置から受けると，確立後の通信セッションの数と通信セッションの最大数を比較し，確立後の通信セッションの数が通信セッションの最大数を超える場合，前記セッション管理情報を更新しないことを特徴とする，請求項１又は請求項５のいずれか一つに記載のＩＣカード。
【請求項７】
請求項１から請求項６のいずれか一つに記載のＩＣカードと，前記ＩＣカードの前記セッション管理情報出力手段を利用して取得した前記セッション管理情報を参照し，前記ＩＣカード間に確立する通信セッションの数を管理するセッション管理手段を備えた端末装置とから構成されたことを特徴とするＩＣカードシステム。
【請求項８】
前記端末装置の前記セッション管理手段は，前記ＩＣカードから取得したセッション管理情報を参照し，通信セッションで前記ＩＣカードへ送信するデータのサイズを，前記ＩＣカード間に確立されている通信セッション毎に管理することを特徴とする，請求項７に記載のＩＣカードシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，ＣＰＵやメモリを有するＩＣチップが実装されたカード類であるＩＣカードの技術分野に関し，更に詳しくは，端末装置間に確立された通信セッションの数に応じて，ＩＣカードに設けられるセッションバッファを動的に変更するための技術に関する。
【背景技術】
【０００２】
ＩＣカードに実装されるＩＣチップには，外部の端末装置との通信プロトコルに対応したＵＡＲＴ（Universal Asynchronous Receiver Transmitter)が設けられることが多くなり、ＵＡＲＴのメモリ（例えば，ＦＩＦＯ）に格納されたデータをデータ転送するためのＡＰＤＵバッファ（APDU: Application Protocol Data Unit）がＩＣチップの揮発性メモリ（ＲＡＭ）に設けられる。
【０００３】
携帯電話に実装されるＳＩＭ／ＵＳＩＭ(Subscriber Identity Module/Universal Subscriber Identity Module)や金融用途で利用されるＩＣカードにおいては，仮想的な通信セッションが端末装置とＩＣカード間に確立されるケースがあり，このようなＩＣカードに実装されるＩＣチップの揮発性メモリには，ＡＰＤＵバッファに加え，端末装置が送信したデータをスタックするためのセッションバッファが設けられる。
【０００４】
昨今のＩＣカードに対する高機能化に係る要求として，（要求１）ＩＣカードが複数の通信セッションを並行に処理可能であること，（要求２）比較的大きなデータ(例えば，２５６バイトのデータ)を処理可能であること，が顕著になりつつあり，このような要求を満たすためには，何らかの手法により，ＩＣカードの揮発性メモリに設けられるセッションバッファを管理することが必要になる。
【０００５】
ＩＣカード分野に係わらずバッファのサイズを管理する技術としては，以下に述べる技術が開示されている。例えば，特許文献１では，受け取ったデータを書き込むバッファ領域内の未使用領域のサイズが所定サイズまで減少すると，他のメモリ領域をバッファ領域にアロケートすることにより、バッファ領域を増加させる発明が開示されている。
【０００６】
また，特許文献２では，バッファとして利用可能な領域を同一サイズからなるセグメント単位で複数のセルに分割し、一部のセルによってバッファ領域を構成しておき，バッファ領域内の未使用領域のサイズが所定サイズまで減少すると，未使用のセルをバッファ領域に追加する発明が開示されている。
【０００７】
上述した先行技術は，端末装置から送信されるデータの容量に合わせて，バッファ領域のサイズを増やすための発明であり，ある程度の揮発性メモリの容量を確保できるパーソナルコンピュータなどを対象装置として想定しているが，ＩＣカード用のＩＣチップは安価であることも求められるため，ＩＣチップの揮発性メモリの容量は比較的小さく（例えば，数Ｋバイト），上述した先行技術は，揮発性メモリのサイズの小さなＩＣチップが実装されるＩＣカードには適していない。
【０００８】
また，上述した先行技術は，端末装置からデータ受信後にバッファ領域のサイズを増やす処理を実行するため，端末装置からコマンドが送信される度に該処理に係るオーバーヘッドが発生し，ＩＣカードのパフォーマンスが低下してしまう問題もある。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平８-２２１３１８号公報
【特許文献２】特開平１０-９１５１５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
そこで，本発明は，ＩＣカードにおける揮発性メモリのサイズ上の制約内において、複数の通信セッションを並行に処理可能，かつ，比較的大きなデータを処理可能なように，開設セッション数を元にセッションバッファ構成を最適化し、揮発性メモリに設けられるセッションバッファを管理できるＩＣカード，及び，該ＩＣカードを用いたＩＣカードシステムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決する第１の発明は，揮発性メモリ内に固定サイズのバッファ領域を保持し、複数の通信セッションを並行して開設できるICカードであって、各通信セッションはセッションのチャネル番号に対応付けられたセッションバッファを前記固定サイズのバッファ内に保持しており、セッションバッファの数、アドレス、および各セッションバッファに対応するチャネル番号をセッション管理情報として保持しており、通信セッションを確立／閉鎖する指示を端末装置から受けると，確立／閉鎖後の通信セッションの数に応じて前記バッファ領域を所定のアルゴリズムに従い分割することで、確立／閉鎖後の通信セッションそれぞれに割り当てるセッションバッファのサイズとアドレスを計算し，計算した値を用いて前記セッション管理情報を更新するバッファ管理手段と，前記セッション管理情報を外部に出力するセッション管理情報出力手段を備えたことを特徴とするＩＣカードである。
【００１２】
更に，第２の発明は，セッションバッファに格納されたデータのサイズをセッション管理情報に反映させ，端末装置側で，セッションバッファに格納されたデータのサイズを取得できるように，前記セッション管理情報には，セッションバッファにスタックしたデータの合計サイズがセッションバッファ毎に記憶され，端末装置からセッションのチャネル番号が指定されてデータが送信されると，前記セッション管理情報を参照し，該チャネル番号に割り当てられたセッションバッファに該データをスタックし，該セッションバッファの合計サイズに該データのサイズを加算するディスパッチ手段を備えさせたことを特徴とする第１の発明に記載のＩＣカードである。
【００１３】
更に，第３の発明は，通信セッションを確立／閉鎖した後であっても，確立／閉鎖前にセッションバッファに格納されていたデータを利用できるように，前記バッファ管理手段は，前記セッション管理情報を更新する前に，確立／閉鎖後のセッションそれぞれに割り当てるセッションバッファのアドレスに従い，確立／閉鎖前にセッションバッファにストックされていたデータを，確立／閉鎖後のセッションバッファに再配置することを特徴とする第２の発明に記載のＩＣカードである。
【００１４】
更に，第４の発明は，確立前にセッションバッファに格納されていたデータのサイズが，確立後のセッションバッファのサイズを超えた場合であっても，確立前にセッションバッファに格納されていたデータを利用できるように，前記バッファ管理手段は，通信セッションを確立する指示を端末装置から受けてデータを再配置する際，前記セッション管理情報を参照し，セッションバッファにスタックされたデータのサイズと，確立後のセッションバッファのサイズを比較する処理を行い，スタックされたデータのサイズが，確立後のセッションバッファのサイズを超えるセッションバッファがある場合，確立後のセッションバッファのサイズを超えた分の該データを書き換え可能な不揮発性メモリに退避させることを特徴とする第３の発明に記載のＩＣカードである。
【００１５】
更に，第５の発明は，書き換え可能な不揮発性メモリにデータを退避させた後に閉鎖された場合であっても，確立前にセッションバッファに格納されていたデータを利用できるように，前記バッファ管理手段は，通信セッションを閉鎖する指示を端末装置から受けてデータを再配置した後，書き換え可能な不揮発性メモリにデータを退避させているセッションバッファがある場合，該セッションバッファが全て埋まるまで，不揮発性メモリに退避されたデータを該セッションバッファに復帰させることを特徴とする第４の発明に記載のＩＣカードである。
【００１６】
更に，第６の発明は，ＩＣカード側で確立可能な通信セッションの最大数を超えて通信セッションが確立できないようにするために，確立可能な通信セッションの最大数が前記セッション管理情報に記憶され，前記バッファ管理手段は，通信セッションを確立する指示を端末装置から受けると，確立後の通信セッションの数と通信セッションの最大数を比較し，確立後の通信セッションの数が通信セッションの最大数を超える場合，前記セッション管理情報を更新しないことを特徴とする第１の発明又は第５の発明のいずれか一つに記載のＩＣカードである。
【００１７】
更に，第７の発明は，第１の発明から第６の発明のいずれか一つに記載のＩＣカードを利用したＩＣカードシステムで，第１の発明から第６の発明のいずれか一つに記載のＩＣカードと，前記ＩＣカードの前記セッション管理情報出力手段を利用して取得した前記セッション管理情報を参照し，前記ＩＣカード間に確立する通信セッションの数を管理するセッション管理手段を備えた端末装置とから構成されたことを特徴とするＩＣカードシステムである。
【００１８】
更に，第８の発明は，前記端末装置の前記セッション管理手段は，前記ＩＣカードから取得したセッション管理情報を参照し，通信セッションで前記ＩＣカードへ送信するデータのサイズを，前記ＩＣカード間に確立されている通信セッション毎に管理することを特徴とする第７の発明に記載のＩＣカードシステムである。
【発明の効果】
【００１９】
このように，本発明によれば，複数の通信セッションを並行に処理可能，かつ，比較的大きなデータを処理可能なように，揮発性メモリに設けられるセッションバッファを管理できるＩＣカード，及び，該ＩＣカードを用いたＩＣカードシステムを提供できる。
【図面の簡単な説明】
【００２０】
【図１】本実施形態に係るＩＣカードシステムを説明する図。
【図２】ＩＣカードのソフトウェアの階層図。
【図３】セッション管理情報を説明する図。
【図４】通信セッションを新規に確立するときの動作を示したフロー図。
【図５】通信セッションを確立するときのデータ再配置処理のフロー図。
【図６】通信セッションを新規に確立する一例を示した図。
【図７】通信セッションを閉鎖するときの動作を示したフロー図。
【図８】通信セッションを閉鎖するときのデータ再配置処理のフロー図。
【図９】通信セッションを閉鎖する一例を示した図。
【図１０】ディスパッチモジュールが実行する処理のフロー図。
【図１１】端末装置に備えられた機能を説明する図。
【発明を実施するための形態】
【００２１】
ここから，本願発明の実施形態について，発明の技術分野に係わる当業者が，発明の内容を理解し，本願発明を実施できる程度に説明する。
【００２２】
図１は，本実施形態に係るＩＣカードシステム１を説明する図である。本実施形態に係るＩＣカードシステム１は，ＩＣチップ２０が実装されたＩＣカード２と，ＩＣカード２を利用する端末装置３とから少なくとも構成され，ＩＣカード２及び端末装置３の具体的な形態は，ＩＣカードシステム１の用途に依存する。
【００２３】
例えば，ＩＣカードシステム１を金融関係のシステムとする場合，ＩＣカード２はキャッシカード／クレジットカードになり，端末装置３は，ＩＣカード２と協働する現金自動預け払い機やクレジット端末になる。また，ＩＣカードシステム１を携帯電話／スマートフォンとする場合，端末装置３は携帯電話／スマートフォンになり，ＩＣカード２は携帯電話／スマートフォンに実装されるＳＩＭ／ＵＳＩＭ(Subscriber Identity Module/Universal Subscriber Identity Module)になる。
【００２４】
金融関係のシステムや携帯電話などでＩＣカード２が利用される場合，ＩＣカード２に実装されているアプリケーションを起動させるとき，起動したアプリケーション用の通信セッション３０が確立され，ＩＣカード２内には，ＩＣカード２と端末装置３間に確立された通信セッション３０により，端末装置３がアプリケーションに対して送信したデータをストックするセッションバッファ２０１がＩＣカード２の揮発性メモリ（ＲＡＭ２０ｃ）に設けられる。
【００２５】
昨今のＩＣカード２に対する高機能化に係る要求として，ＩＣカード２が複数の通信セッション３０を並行に処理可能であること，比較的大きなデータ（例えば，２５６バイトのデータ）をまとめて処理可能であることが顕著になりつつあり，ＩＣカード２と端末装置３間に新規に通信セッション３０が確立される毎に，所定サイズ（例えば，２５６バイト）のセッションバッファ２０１をＲＡＭ２０ｃに新規に設けることができればよいが，ＩＣカード２に実装されるＩＣチップ２０のＲＡＭ２０ｃのサイズは比較的小さく（例えば，数Ｋバイト），ＩＣカード２において，新規に通信セッション３０が確立される毎に，所定サイズのセッションバッファ２０１をＲＡＭ２０ｃに新規に設けることには難がある。
【００２６】
そこで，本実施形態のＩＣカード２では，セッションバッファ２０１として利用する固定サイズのバッファ領域２００を予めＲＡＭ２０ｃに設け，通信セッション３０を確立／閉鎖する指示を端末装置３から受けとき，確立／閉鎖後の通信セッション３０の数に応じて，ソフトウェア的に一つ又は複数のセッションバッファ２０１にバッファ領域２００を分割し，確立／閉鎖後の各通信セッション３０に一つのセッションバッファ２０１を割り当てることで，上述した２つの要求を満たせるようにしている。
【００２７】
サイズが固定のバッファ領域２００を通信セッション３０の数に応じて分割することで，ＩＣカード２が複数の通信セッション３０を並行に処理可能になり，また，通信セッション３０の数に応じてセッションバッファ２０１のサイズは縮小／拡大するため，端末装置３側で，ＩＣカード２間に確立する通信セッション３０の数を目的に応じて管理すれば，ＩＣカード２側で，比較的大きなデータ（例えば，２５６バイトのデータ）をまとめて処理可能になる。
【００２８】
すなわち，端末装置３とＩＣカード２間に確立する通信セッション３０の数を少なくすればセッションバッファ２０１のサイズは大きくなり，通信セッション３０の数を多くすればセッションバッファ２０１のサイズは小さくなるため，ＩＣカード２側に，比較的大きなデータ（例えば，２５６バイトのデータ）をまとめて処理させたい場合，比較的大きなデータを考慮して，通信セッション３０の数を管理すればよい。
【００２９】
更に，本実施形態では，通信セッション３０を確立／閉鎖する指示を端末装置３から受けとき，ＩＣカード２のＲＡＭ２０ｃに設けられるセッションバッファ２０１の数を変更することで，該処理に係るオーバーヘッドの発生は，通信セッション３０の確立時／閉鎖時に限定できるようになる。
【００３０】
また，端末装置３側で通信セッション３０の数を管理するためには，ＩＣカード２内のセッションバッファ２０１に係る情報が必要になるため，本実施形態のＩＣカード２は，セッションバッファ２０１の数とアドレスを，セッションバッファ２０１が対応する通信セッション３０のチャネル番号に対応付けたセッション管理情報を保持し，端末装置３へセッション管理情報を提供するため手段を備え，端末装置３は，ＩＣカード２から取得したセッション管理情報に応じて通信セッション３０の数や通信セッション３０で送信するデータのサイズを管理する機能を備えている。
【００３１】
まず，図１で図示したＩＣカード２について説明する。図１に図示したように，ＩＣカード２は，不揮発性メモリであるＲＯＭ２０ａ,電気的に書き換え可能な不揮発性メモリであるＥＥＰＲＯＭ２０ｂ，揮発性メモリであるＲＡＭ２０ｃ，ＲＯＭ２０ａやＥＥＰＲＯＭ２０ｂに実装されたコンピュータプログラムを実行するＣＰＵ２０ｅ，端末装置３との通信プロトコルに対応したＵＡＲＴ２０ｄを有するＩＣチップ２０が実装されたカードで，端末装置３から受信したデータを格納する一つのＡＰＤＵバッファ２０２とバッファ領域２００はＲＡＭ２０ｃに構成されている。
【００３２】
なお，図１では，本発明を説明するのに必要な最小なＩＣチップ２０の要素のみを記載している。図１で図示した以外にも，タイマー，セキュアチャネルプロトコルで利用する暗号演算回路などがＩＣチップ２０には実装される。
【００３３】
図２は，ＩＣカード２のソフトウェアの階層図である。ＩＣカード２のソフトウェアの階層は，最下位から順にハードウェア（ＩＣチップ２０），オペレーティングシステム２１（OS: Operating System），ＯＳ２１上で動作するアプリケーション２２で，ＯＳ２１には，ＩＣカード２の基本的な機能の一つとして，端末装置３間に確立される通信セッション３０の数に応じて，バッファ領域２００に設けられるセッションバッファ２０１の数とサイズを動的に変更するバッファ管理手段として機能するバッファ管理モジュール２１０と，端末装置３から通信セッション３０のチャネル番号が指定されてデータが送信されると，セッション管理情報を参照し，該チャネル番号に割り当てられたセッションバッファ２０１に該データをスタックするディスパッチ手段として機能するディスパッチモジュール２１１と，ＩＣカード２に構成されているセッションバッファ２０１の構成状況を示すセッション管理情報を端末装置３へ提供するセッション管理情報出力手段として機能するセッション管理情報出力インターフェース２１２を有している。
【００３４】
まず，ＩＣカード２に実装されるバッファ管理モジュール２１０について説明する。バッファ管理モジュール２１０は，端末装置３から通信セッション３０を確立／閉鎖する指示を受けると，確立／閉鎖後の通信セッション３０の数に応じてセッションバッファ２０１の数とサイズを動的に変更し，変更後の内容を，ＩＣカード２のＲＡＭ２０ｃ又はＥＥＰＲＯＭ２０ｂに設けられるセッション管理情報に反映させる処理を行うコンピュータプログラムである。
【００３５】
図３は，セッションバッファ２０１の管理に利用する情報が記憶されるセッション管理情報を説明する図である。図３に図示したように，本実施形態においてセッション管理情報には，ＩＣカード２のＲＡＭ２０ｃに設けられるバッファ領域２００に係る情報として，バッファ領域２００の先頭アドレスであるバッファ領域先頭アドレスと，バッファ領域２００のサイズを示すバッファ領域サイズが含まれ，更に，セッションバッファ２０１に係る情報として，確立可能な通信セッション３０の最大数，すなわち，バッファ領域２００に構成可能なセッションバッファ２０１の最大数を示す最大通信セッション数，確立されている通信セッション３０の数，すなわち，バッファ領域２００に構成されているセッションバッファ２０１の数を示す確立済み通信セッション３０の数，各セッションバッファ２０１の先頭アドレスであるセッションバッファ先頭アドレス，各セッションバッファ２０１にスタックされたデータの合計サイズを示すスタックデータサイズが含まれる。
【００３６】
図３で図示したセッション管理情報において，バッファ領域先頭アドレス，バッファ領域サイズ，最大通信セッション数及び確立済み通信セッション数は一つで，セッションバッファ先頭アドレス及びスタックデータサイズは最大通信セッション数だけ設けられ，セッションバッファ先頭アドレス及びスタックデータサイズには，それぞれが対応する通信セッション３０のチャネル番号（ここでは，「００」，「０１」，「０２」，「０３」）が付与される。
【００３７】
セッションバッファ先頭アドレスの初期値は「０」で，通信セッション３０が確立されると，確立された通信セッション３０に対応するセッションバッファ先頭アドレスが計算により求められた値に書き換えられ，通信セッション３０が閉鎖されると，閉鎖した通信セッション３０に対応するセッションバッファ先頭アドレスが初期値に書き換えられる。
【００３８】
また，スタックデータサイズの初期値は「０」で，端末装置３から通信セッション３０のチャネル番号が指定されてデータが送信され，該チャネル番号に対応するセッションバッファ２０１にデータがスタックされる毎に，データがスタックされたセッションバッファ２０１に対応するスタックデータサイズにスタックしたデータのサイズが加算され，通信セッション３０が閉鎖すると，閉鎖した通信セッション３０に対応するスタックデータサイズが初期値に書き換えられる。
【００３９】
図４は，通信セッション３０を新規に確立するときの動作を示したフロー図である。通信セッション３０を確立するコマンド（例えば，Global PlatformのSELECT CommandやMANAGE CHANNEL Command）を受信するなどして，端末装置３から通信セッション３０を確立する指示を受けると（Ｓ１），ＩＣカード２のバッファ管理モジュール２１０が作動し，通信セッション３０を新規に確立するときの動作が開始される。
【００４０】
通信セッション３０を新規に確立するときの動作が開始されると，バッファ管理モジュール２１０は，この時点で保持しているセッション管理情報の内容（例えば，バッファ領域サイズ，バッファ領域先頭アドレス，確立済み通信セッションなど）を読み取る（Ｓ２）。
【００４１】
次に，バッファ管理モジュール２１０は，確立後の通信セッション３０の数に応じてバッファ領域２００を所定のアルゴリズムに従い分割することで（Ｓ３），確立後のセッションそれぞれに割り当てるセッションバッファ２０１のサイズを計算する（Ｓ４）。
【００４２】
本発明は、確立後の通信セッション３０の数に応じてバッファ領域２００を分割するアルゴリズムを規定するものではなく，該アルゴリズムは任意で良いが，本発明の説明を分かり易くするために，該アルゴリズムを，確立後の通信セッション３０の数に応じてバッファ領域２００を均等に分割するアルゴリズムとし，確立後のセッションバッファ２０１のサイズは数式１で求められる。
【数１】
0005516314.tif 000002
【００４３】
確立後の通信セッション３０の数に応じてバッファ領域２００を分割すると，数式２に従い，確立後のセッションそれぞれに割り当てるセッションバッファ２０１のセッションバッファ先頭アドレスを計算し（Ｓ５），セッションバッファ先頭アドレスが若い順にチャネル番号の若いセッションに対応させる。
【数２】
0005516314.tif 000003
【００４４】
確立後のセッションそれぞれに割り当てるセッションバッファ２０１のセッションバッファ先頭アドレスを計算すると，バッファ管理モジュール２１０は，この時点のセッション管理情報に記憶されているスタックデータサイズの値を全て確認し（Ｓ６），スタックデータサイズの値の確認結果によって処理を分岐させる（Ｓ７）。
【００４５】
スタックデータサイズの値が全て「０」であるとき，この時点でバッファ領域２００に構成されている全てのセッションバッファ２０１にデータはスタックされていないことを意味しているため，この時点でバッファ領域２００に構成されているセッションバッファ２０１にスタックされたデータを再配置することなく，セッション管理情報を更新する処理を行い（Ｓ９），この手順を終了する。
【００４６】
セッション管理情報を更新する処理（Ｓ９）において，バッファ管理モジュール２１０は，確立済み通信セッション数を一つインクリメントした後，確立後の通信セッション３０毎に，該通信セッション３０に対応するセッションバッファ先頭アドレスを図４のＳ５で計算したアドレスに更新する。
【００４７】
また，スタックデータサイズの値が全て「０」でないとき，この時点で確立されている通信セッション３０に対応するセッションバッファ２０１の全て又は一部にデータがスタックされていることを意味しているため，スタックデータサイズの値が「０」でないセッションバッファ２０１毎に，該セッションバッファ２０１にスタックされているデータの先頭アドレスが，図４のＳ５で計算したセッションバッファ先頭アドレスになるように，該セッションバッファ２０１にスタックされているデータを再配置するデータ再配置処理を実行した後（Ｓ８），セッション管理情報を更新し（Ｓ９），この手順を終了する。
【００４８】
図５は，通信セッション３０を確立するときのデータ再配置処理のフロー図である。セッションバッファ２０１にスタックされているデータを再配置する処理において，まず，バッファ管理モジュール２１０は，再配置するデータのサイズ，すなわち，対象となるセッションバッファ２０１にスタックされているデータのサイズと，図４のＳ４で計算した確立のセッションバッファ２０１のサイズを比較し（Ｓ１０），比較結果によって処理を分岐させる（Ｓ１１）。
【００４９】
再配置するデータのサイズが，図４のＳ４で計算したセッションバッファ２０１のサイズ以下の場合，バッファ管理モジュール２１０は，対象となるセッションバッファ２０１にストックされているデータを，図４のＳ５で計算した先頭アドレスが先頭になるようにコピーする処理を実行することで，確立前にセッションバッファ２０１の領域にストックされていたデータを，確立後のセッションバッファ２０１の領域に再配置し（Ｓ１２），この手順を終了する。
【００５０】
また，再配置するデータのサイズが，図４のＳ４で計算したセッションバッファ２０１のサイズを超えている場合，バッファ管理モジュール２１０は，セッションバッファ２０１の先頭から，図４のＳ４で計算したセッションバッファ２０１のサイズのデータを，図４のｓ５で計算した新たな先頭アドレスが先頭になるようにコピーすることで，確立前にセッションバッファ２０１の領域にストックされていた一部のデータを，確立後のセッションバッファ２０１の領域に再配置した後（Ｓ１３），図４のＳ４で計算したセッションバッファ２０１のサイズに収まらない残りのデータを，ＥＥＰＲＯＭ２０ｂの指定された領域内にコピーする処理を実行することで，残りのデータをＥＥＰＲＯＭ２０ｂに退避させ（Ｓ１４），この手順を終了する。
【００５１】
なお，ＥＥＰＲＯＭ２０ｂの指定された領域内にデータをコピーした場合，コピー先の先頭アドレスとコピーしたデータのサイズを，対象となるセッションバッファ２０１のチャネル番号に対応付けてセッション管理情報に記憶させておく。
【００５２】
図６は，通信セッション３０を新規に確立する一例を示した図で，図６（ａ）は，通信セッション３０を新規に確立する前の図で，図６（ｂ）は，通信セッション３０を新規に確立した後の図で，図６において，バッファ領域サイズは３６００バイトで，バッファ領域先頭アドレスは0ｘＦＦ２０００としている。
【００５３】
図６（ａ）によれば，新規に通信セッション３０を確立する前に確立されている通信セッション３０の数は，チャネル番号が「００」と「０１」の２つで，各通信セッション３０に対応するセッションバッファ２０１のサイズは，バッファ領域サイズを２等分した１８００バイトで，チャネル番号が「００」の通信セッション３０に対応するセッションバッファ先頭アドレスは0ｘＦＦ２０００で，チャネル番号が「０１」の通信セッション３０に対応するセッションバッファ先頭アドレスは０ｘＦＦ２７０８である。
【００５４】
図６（ａ）の状態から新規に通信セッション３０を確立する際，数式１に従えば，新規に通信セッション３０を確立した後のセッションバッファ２０１のサイズは，バッファ領域２００のサイズを３等分した１２００バイト（３６００÷（２＋１）＝１２００）になる。
【００５５】
また，数式２に従えば，新規に通信セッション３０を確立した後の各セッションバッファ先頭アドレスは，図６（ｂ）で図示しているように，チャネル番号「００」のセッションバッファ先頭アドレスは0ｘＦＦ２０００（0ｘＦＦ２０００＋（０×１２００）＝0ｘＦＦ２０００）に，チャネル番号「０１」のセッションバッファ先頭アドレスは0ｘＦＦ２４Ｂ０（0ｘＦＦ２０００＋（１×１２００）＝0ｘＦＦ２４Ｂ０）に，チャネル番号「０２」のセッションバッファ先頭アドレスは0ｘＦＦ２９６０（0ｘＦＦ２０００＋（２×１２００）＝0ｘＦＦ２９６０）になる。
【００５６】
なお，上述した説明では，再配置するデータのサイズが，図４のＳ４で計算したセッションバッファ２０１のサイズを超えている場合，ＥＥＰＲＯＭ２０ｂにデータを退避するようにしているが，通信セッション３０の新規の確立を失敗と判断し，これまでの内容を無効とし，新規に通信セッション３０を確立する前の状態を維持し，セッション管理情報の更新を行わないようにすることもできる。
【００５７】
次に，通信セッション３０を閉鎖するときの処理について説明する。図７は，通信セッション３０を閉鎖するときの動作を示したフロー図である。通信セッション３０を閉鎖するコマンド（例えば，Global PlatformのMANAGE CHANNEL Command）を受信するなどして，端末装置３から通信セッション３０を閉鎖する指示を受けると（Ｓ２０），ＩＣカード２のバッファ管理モジュール２１０が作動し，通信セッション３０を閉鎖する動作が開始される。
【００５８】
通信セッション３０を閉鎖する動作が開始されると，バッファ管理モジュール２１０は，バッファ管理モジュール２１０がこの時点で保持しているセッション管理情報に記憶されている情報（例えば，バッファ領域サイズ，バッファ領域２００の先頭アドレスなど）を読み取る（Ｓ２１）。
【００５９】
次に，バッファ管理モジュール２１０は，閉鎖後の通信セッション３０の数に応じてバッファ領域２００を所定のアルゴリズムに従い分割することで（Ｓ２２），閉鎖後のセッションそれぞれに割り当てるセッションバッファ２０１のサイズを計算する（Ｓ２３）。
【数３】
0005516314.tif 000004
【００６０】
閉鎖後のセッションそれぞれに割り当てるセッションバッファ２０１のサイズを計算すると，バッファ管理モジュール２１０は，数式４に従い，閉鎖後のセッションそれぞれに割り当てるセッションバッファ２０１のセッションバッファ先頭アドレスを計算し（Ｓ２４），セッションバッファ先頭アドレスが若い順にチャネル番号の若い通信セッション３０を対応させる。
【数４】
0005516314.tif 000005
【００６１】
次に，バッファ管理モジュール２１０は，閉鎖する通信セッション３０に対応するスタックデータサイズを除く，全てのスタックデータサイズの値を確認し（Ｓ２５），スタックデータサイズの値の確認結果によって処理を分岐させる（Ｓ２６）。
【００６２】
確認したスタックデータサイズの値が全て「０」であるとき，この時点でバッファ領域２００に構成されている全てのセッションバッファ２０１にデータがスタックされていないことを意味しているため，この時点でバッファ領域２００に構成されているセッションバッファ２０１にスタックされたデータを再配置することなく，セッション管理情報を更新する処理を行い（Ｓ２８），この手順を終了する。
【００６３】
セッション管理情報を更新する処理（Ｓ２８）において，バッファ管理モジュール２１０は，確立済み通信セッション数を一つデクリメントした後，閉鎖した通信セッション３０に対応するセッションバッファ先頭アドレス及びスタックデータサイズを初期化すると共に，他の通信セッション３０毎に，該通信セッション３０に対応するセッションバッファ先頭アドレスを図７のＳ２４で計算したアドレスに更新する。
【００６４】
また，確認したスタックデータサイズの値が全て「０」でないとき，閉鎖しない通信セッション３０に対応するセッションバッファ２０１の一部又は全てにデータがスタックされていることを意味しているため，閉鎖する通信セッション３０に対応するセッションバッファ２０１を除き，スタックデータサイズの値が「０」でないセッションバッファ２０１毎に，該セッションバッファ２０１にスタックされているデータの先頭が，図７のＳ２４で計算したセッションバッファ先頭アドレスになるように，該セッションバッファ２０１にスタックされているデータを再配置するデータ再配置処理（Ｓ２７）を実行した後，セッション管理情報を更新し（Ｓ２８），この手順を終了する。
【００６５】
図８は，通信セッション３０を閉鎖するときのデータ再配置処理のフロー図である。セッションバッファ２０１にスタックされたデータを再配置する処理において，まず，バッファ管理モジュール２１０は，再配置するデータのサイズと，図７のＳ２３で計算したセッションバッファ２０１のサイズを比較し（Ｓ３０），比較結果によって処理を分岐させる（Ｓ３１）。
【００６６】
なお，上述しているように，セッションバッファ２０１にスタックされたデータの一部がＥＥＰＯＭに退避されている場合もあるため，この場合，再配置するデータのサイズとして，ＥＥＰＯＭに退避されているデータのサイズも加える。
【００６７】
再配置するデータのサイズが，図７のＳ２３で計算したセッションバッファ２０１のサイズ以下の場合，バッファ管理モジュール２１０は，対象となるセッションバッファ２０１に記憶されているデータを，図７のＳ２４で計算したセッションバッファ先頭アドレスが先頭になるようにコピーする処理を実行することで，閉鎖前にセッションバッファ２０１の領域にストックされていたデータを，閉鎖後のセッションバッファ２０１の領域に再配置し（Ｓ３２），この手順を終了する。
【００６８】
通信セッション３０を閉鎖する場合，セッションバッファ２０１のサイズは増加することになるが，データの一部がＥＥＰＲＯＭ２０ｂに退避されている場合，再配置するデータのサイズが，図７のＳ２３で計算したセッションバッファ２０１のサイズを超えることがあるため，このような場合，バッファ管理モジュール２１０は，閉鎖前にセッションバッファ２０１に記憶されているデータ全てを，図７のＳ２４で計算した先頭アドレスが先頭になるようにコピーすることで，閉鎖前にセッションバッファ２０１の領域にストックされていた全てのデータを，閉鎖後のセッションバッファ２０１の領域に再配置した後（Ｓ３３），セッションバッファ２０１が全て埋まるまで，ＥＥＰＲＯＭ２０ｂの指定された領域内に退避されているデータをコピーする処理を実行することで，ＥＥＰＲＯＭ２０ｂに退避されているデータの一部又は全てを揮発性メモリに復帰させ（Ｓ３４），この手順を終了する。
【００６９】
なお，ＥＥＰＲＯＭ２０ｂに退避されているデータの一部をＲＡＭ２０ｃに復帰させた場合，ＥＥＰＲＯＭ２０ｂに残っているデータのサイズを，対象となるセッションバッファ２０１のチャネル番号に対応付けてセッション管理情報に記憶させておく。
【００７０】
図９は，通信セッション３０を閉鎖する一例を示した図で，図９（ａ）は，通信セッション３０を閉鎖する前の図で，図９（ｂ）は，通信セッション３０を閉鎖した後の図で，図９において，バッファ領域２００のサイズは３６００バイトで，先頭アドレスは0ｘＦＦ２０００としている。
【００７１】
図９（ａ）によれば，通信セッション３０を閉鎖する前に確立されている通信セッションの数は，チャネル番号が「００」，「０１」，「０２」及び「０３」の４つで，各通信セッション３０に対応するセッションバッファ２０１のサイズは，バッファ領域サイズを４等分した９００バイトで，チャネル番号が「００」の通信セッション３０に対応するセッションバッファ先頭アドレスは0ｘＦＦ２０００で，チャネル番号が「０１」の通信セッション３０に対応するセッションバッファ先頭アドレスは０ｘＦＦ２３８４で，チャネル番号が「０２」の通信セッション３０に対応するセッションバッファ先頭アドレスは0ｘＦＦ２７０８で，チャネル番号が「０３」の通信セッション３０に対応するセッションバッファ先頭アドレスは０ｘＦＦ２Ａ８Ｃである。
【００７２】
図９（ａ）の状態から，チャネル番号が「０２」の通信セッション３０を閉鎖する際，数式３に従えば，新規に通信セッション３０を確立した後のセッションバッファ２０１のサイズは，バッファ領域サイズを３等分した１２００バイト（３６００÷（４―１）＝１２００）になる。
【００７３】
また，数式４に従えば，チャネル番号が「０２」の通信セッション３０を閉鎖した後の各セッションバッファ先頭アドレスは，図９（ｂ）で図示しているように，チャネル番号「００」のセッションバッファ先頭アドレスは0ｘＦＦ２０００（0ｘＦＦ２０００＋（０×１２００）＝0ｘＦＦ２０００）に，チャネル番号「０１」のセッションバッファ先頭アドレスは0ｘＦＦ２４Ｂ０（0ｘＦＦ２０００＋（１×１２００）＝0ｘＦＦ２４Ｂ０）に，チャネル番号「０３」のセッションバッファ先頭アドレスは0ｘＦＦ２９６０（0ｘＦＦ２０００＋（２×１２００）＝0ｘＦＦ２９６０）になる。
【００７４】
ここから，ＩＣカード２に備えられたディスパッチモジュール２１１について説明する。図１０は，ディスパッチモジュール２１１が実行する処理のフロー図である。端末装置３が，通信セッション３０のチャネル番号を指定してＩＣカード２へデータを送信すると，ＩＣカード２のＵＡＲＴ２０Ｄが該データを受信し（Ｓ４０），ＩＣカード２のＯＳの機能により，ＵＡＲＴ２０Ｄが受信したデータはＡＰＤＵバッファ２０２に格納される（Ｓ４１）。
【００７５】
ＵＡＲＴ２０Ｄが受信したデータがＡＰＤＵバッファ２０２に格納されると，ディスパッチモジュール２１１は，所定のデータ，例えば，コマンドＡＰＤＵのＣＬＡの値を確認することで，端末装置３が指定した通信セッション３０のチャネル番号を取得し（Ｓ４２），セッション管理情報を参照し，該チャネル番号に割り当てられたセッションバッファ２０１に該データをスタックし（Ｓ４３），該セッションバッファ２０１の合計サイズに該データのサイズを加算して（Ｓ４４），この手順を終了する。
【００７６】
図１では，端末装置３とＩＣカード２間に４つの通信セッション３０が確立され，図１において「＃」の後に続く2桁の数字は，通信セッション３０のチャネル番号を意味している。例えば，端末装置３が，通信セッション３０のチャネル番号「０１」を指定してデータをＩＣカード２へ送信すると，ＩＣカード２のＵＡＲＴ２０Ｄが端末装置３から受信したデータはＡＰＵＤバッファ２０２へ一旦格納され，ディスパッチモジュール２１１は，端末装置３が指定したチャネル番号「０１」に対応するセッションバッファ２０１にＡＰＤＵバッファ２０２内のデータをデータ転送し，端末装置３が受信したチャネル番号「０１」に対応するセッションバッファ２０１にスタックする。
【００７７】
次に，セッション管理情報を端末装置３へ提供するセッション管理情報出力インターフェースについて説明する。この構成情報出力インターフェースは，例えば，セッション管理情報を端末装置３へ通知する独自のコマンドで実現することができ，この場合，端末装置３から該コマンドを受信すると，この時点のセッション管理情報を端末装置３へ送信するレスポンに含ませる処理を実行する。
【００７８】
最後に，端末装置３が通信セッション３０を管理する内容について説明する。図１１は，端末装置３に備えられた機能を説明する図である。
【００７９】
図１１に図示したように，端末装置３とＩＣカード２間の通信セッション３０を管理するために，端末装置３には，ＩＣカード２からセッション管理情報を取得するセッション管理情報取得手段３１と，ＩＣカード２から取得したセッション管理情報に基づき，端末装置３とＩＣカード２間に確立する通信セッション３０の数と，通信セッション３０で送信するデータのサイズを管理する通信セッション管理手段３２が備えられ，これらの手段は，端末装置３を作動させるコンピュータプログラムで実現されている。
【００８０】
端末装置３のセッション管理情報取得手段３１は，通信セッション３０を確立／閉鎖する毎に，ＩＣカード２のセッション管理情報出力インターフェース２１２を利用してセッション管理情報をＩＣカード２から取得する手段で，セッション管理情報出力インターフェース２１２がコマンドの場合，ＩＣカード２へ該コマンドのＡＰＤＵを送信して，ＩＣカード２からセッション管理情報を含むレスポンスを取得する手段になる。
【００８１】
端末装置３の通信セッション管理手段３２は，ＩＣカード２から取得したセッション管理情報の最大通信セッション数を超えないように通信セッション３０の数を管理し，ＩＣカード２側に比較的大きなデータをまとめて処理させる場合，通信セッション３０の数を減らす（例えば，一つにする）などの管理を行う。また，ＩＣカード２から取得したセッション管理情報のセッションバッファ先頭アドレスやスタックデータサイズを参照し，セッションバッファ２０１のサイズを超えないように，通信セッション３０で送信するデータのサイズを調整する動作を行う。
【符号の説明】
【００８２】
１    ＩＣカードシステム
２    ＩＣカード
２０  ＩＣチップ
２０ｂ  ＥＥＰＲＯＭ
２０ｃ  ＲＡＭ
２０ｄ  ＵＡＲＴ
２００  バッファ領域
２０１  セッションバッファ
２０２  ＡＰＤＵバッファ
２１０  バッファ管理モジュール
２１１  ディスパッチモジュール
２１２  セッション管理情報出力インターフェース
３    端末装置
３０  通信セッション
３１  セッション管理情報取得手段
３２  通信セッション管理手段
【図１】
0005516314.tif 000006
【図２】
0005516314.tif 000007
【図３】
0005516314.tif 000008
【図４】
0005516314.tif 000009
【図５】
0005516314.tif 000010
【図６】
0005516314.tif 000011
【図７】
0005516314.tif 000012
【図８】
0005516314.tif 000013
【図９】
0005516314.tif 000014
【図１０】
0005516314.tif 000015
【図１１】
0005516314.tif 000016