(57)【特許請求の範囲】
【請求項１】
ＲＡＭとＥＥＰＲＯＭとプロセッサとを有し、前記ＲＡＭと前記ＥＥＰＲＯＭの一部領域とからなるコミットバッファを設け、前記ＥＥＰＲＯＭの一部領域にパーシステントストレジを設け、前記プロセッサがプログラムを実行するプログラム実行環境部およびデータを管理するコミットバッファ管理部として機能するＩＣカードにおいて、前記プログラム実行環境部から要求に応じて前記コミットバッファ管理部が前記ＲＡＭあるいは前記ＥＥＰＲＯＭにデータを書き込むデータ書込方法であって、
前記プログラム実行環境部からｎバイトのデータの書き込み要求を受けた前記コミットバッファ管理部が前記コミットバッファにｎバイトのデータが書き込めるか否かを判断し、
この判断により前記ｎバイトのデータが前記コミットバッファに書き込めないと判断した場合、前記コミットバッファ管理部が、当該ＩＣカードがブロックトランザクション中か否かを判断し、
この判断によりブロックトランザクション中でないと判断した場合、前記コミットバッファ管理部が、前記ＲＡＭにコミット情報を書き込み、前記コミットバッファのデータを前記パーシステントストレジに移動し、前記コミットバッファに前記ｎバイトのデータを書き込み、
前記判断によりブロックトランザクション中であると判断した場合、前記コミットバッファ管理部が、前記ＲＡＭにアボート情報を書き込んで当該書き込み要求に対する処理を終了し、
前記ｎバイトのデータがコミットバッファに書き込めると判断した場合、前記コミットバッファ管理部が、前記コミットバッファに前記ｎバイトのデータを書き込む、
ことを特徴とするＩＣカードにおけるデータ書込方法。
【請求項２】
ＲＡＭとＥＥＰＲＯＭとプロセッサとを有し、前記ＲＡＭと前記ＥＥＰＲＯＭの一部領域とからなるコミットバッファを設け、前記ＥＥＰＲＯＭの一部領域にパーシステントストレジを設け、前記プロセッサがプログラムを実行するプログラム実行環境部およびデータを管理するコミットバッファ管理部として機能するＩＣカードにおいて、前記プログラム実行環境部から要求に応じて前記コミットバッファ管理部が前記ＲＡＭあるいは前記ＥＥＰＲＯＭからデータを読み込むデータ読込方法であって、
前記プログラム実行環境部からデータ読み込み要求を受けた前記コミットバッファ管理部が前記ＲＡＭにアボート情報があるか否かを判断し、
この判断により前記ＲＡＭにアボート情報がないと判断した場合、前記コミットバッファ管理部が、前記コミットバッファにおける指定アドレスにデータが存在するか否かを判断し、
前記ＲＡＭにアボート情報がなく、前記コミットバッファにおける指定アドレスにデータが存在しないと判断した場合、前記コミットバッファ管理部が、前記パーシステントデータストレジからデータを読み込み、
前記ＲＡＭにアボート情報がなく、前記コミットバッファにおける指定アドレスにデータが存在すると判断した場合、前記コミットバッファ管理部が、前記コミットバッファにおける指定アドレスからデータを読み込み、
前記ＲＡＭにアボート情報があると判断した場合、前記コミットバッファ管理部が、前記パーシステントデータストレジからデータを読み込む、
ことを特徴とするＩＣカードにおけるデータ読込方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明は、インターネットなどのネットワーク上でプログラムを実行するための環境を組み込んでアプリケーションのロード機能を有するＩＣカードにおけるデータ書込方法およびＩＣカードにおけるデータ読込方法に関する。
【０００２】
【従来の技術】
従来のＩＣカードでは、ＩＣカード内データの読み書きはすべてＣＯＳ（Card Operating System）に任されていた。ＣＯＳはデータの構造が既知であるので、データ更新のアトミシティ（原子性：中間段がない状態、途中状態がない）は、データ構造を生かしてＣＯＳ固有に実現可能であった。
【０００３】
近年、インターネットなどのネットワーク上でプログラムを実行するための環境（Ｊａｖａ）が登場し、折りからのインターネットブームに乗って急速に普及している。そこで、この環境を組み込んだＩＣカードの開発が進められている。
【０００４】
上記環境を組み込んだＩＣカードの場合、アプリケーション自体がデータを直接読み書きでき、そのデータ更新のアトミシティが保証されることが望まれる。合わせて、ブロックトランザクション機能が要求されている。ＣＯＳは、アプリケーションのデータ構造を知ることができないため、アプリケーションによるデータ更新のアトミシティはデータ構造に依存しない汎用的なものでなければならない。
【０００５】
上記環境を組み込んだＩＣカードでは、ブロックトランザクション機能の実装が要求されている。更に、ブロックトランザクション以外でも、１バイト、２バイト、４バイト、ｎバイトのデータ更新のアトミシティが要求されている。
【０００６】
また、ブロックトランザクション機能を提供するために、コミットバッファという概念が提唱されている。一般にコミットバッファはＥＥＰＲＯＭ等のパーシステントなメモリ空間に取られるが、ＥＥＰＲＯＭには書き込み耐用件数が限られ、書き込みに時間がかかっている。
【０００７】
【発明が解決しようとする課題】
上記したように、インターネットなどのネットワーク上でプログラムを実行するための環境を組み込んだＩＣカードにおいて、アプリケーション自体がデータを直接読み書きでき、そのデータ更新のアトミシティが保証されることが望まれ、ブロックトランザクション機能が要求され、アプリケーションによるデータ更新のアトミシティはデータ構造に依存しない汎用的なものでなければならず、データ更新のアトミシティが要求され、さらにブロックトランザクション機能を提供するためにＥＥＰＲＯＭ（不揮発性メモリ）には書き込み耐用件数が限られ、書き込みに時間がかかるという問題があった。
【０００８】
そこで、この発明は、不揮発性メモリへの書き込みを少なくすると共に汎用的なアトミシティ管理を行うことのできるＩＣカードにおけるデータ書込方法およびＩＣカードにおけるデータ読込方法を提供することを目的とする。
【０００９】
【課題を解決するための手段】
この発明のＩＣカードにおけるデータ書込方法は、ＲＡＭとＥＥＰＲＯＭとプロセッサとを有し、前記ＲＡＭと前記ＥＥＰＲＯＭの一部領域とからなるコミットバッファを設け、前記ＥＥＰＲＯＭの一部領域にパーシステントストレジを設け、前記プロセッサがプログラムを実行するプログラム実行環境部およびデータを管理するコミットバッファ管理部として機能するＩＣカードにおいて、前記プログラム実行環境部から要求に応じて前記コミットバッファ管理部が前記ＲＡＭあるいは前記ＥＥＰＲＯＭにデータを書き込むデータ書込方法であって、前記プログラム実行環境部からｎバイトのデータの書き込み要求を受けた前記コミットバッファ管理部が前記コミットバッファにｎバイトのデータが書き込めるか否かを判断し、この判断により前記ｎバイトのデータが前記コミットバッファに書き込めないと判断した場合、前記コミットバッファ管理部が、当該ＩＣカードがブロックトランザクション中か否かを判断し、この判断によりブロックトランザクション中でないと判断した場合、前記コミットバッファ管理部が、前記ＲＡＭにコミット情報を書き込み、前記コミットバッファのデータを前記パーシステントストレジに移動し、前記コミットバッファに前記ｎバイトのデータを書き込み、前記判断によりブロックトランザクション中であると判断した場合、前記コミットバッファ管理部が、前記ＲＡＭにアボート情報を書き込んで当該書き込み要求に対する処理を終了し、前記ｎバイトのデータがコミットバッファに書き込めると判断した場合、前記コミットバッファ管理部が、前記コミットバッファに前記ｎバイトのデータを書き込む。
【００１０】
この発明のＩＣカードにおけるデータ読込方法は、ＲＡＭとＥＥＰＲＯＭとプロセッサとを有し、前記ＲＡＭと前記ＥＥＰＲＯＭの一部領域とからなるコミットバッファを設け、前記ＥＥＰＲＯＭの一部領域にパーシステントストレジを設け、前記プロセッサがプログラムを実行するプログラム実行環境部およびデータを管理するコミットバッファ管理部として機能するＩＣカードにおいて、前記プログラム実行環境部から要求に応じて前記コミットバッファ管理部が前記ＲＡＭあるいは前記ＥＥＰＲＯＭからデータを読み込むデータ読込方法であって、前記プログラム実行環境部からデータ読み込み要求を受けた前記コミットバッファ管理部が前記ＲＡＭにアボート情報があるか否かを判断し、この判断により前記ＲＡＭにアボート情報がないと判断した場合、前記コミットバッファ管理部が、前記コミットバッファにおける指定アドレスにデータが存在するか否かを判断し、前記ＲＡＭにアボート情報がなく、前記コミットバッファにおける指定アドレスにデータが存在しないと判断した場合、前記コミットバッファ管理部が、前記パーシステントデータストレジからデータを読み込み、前記ＲＡＭにアボート情報がなく、前記コミットバッファにおける指定アドレスにデータが存在すると判断した場合、前記コミットバッファ管理部が、前記コミットバッファにおける指定アドレスからデータを読み込み、前記ＲＡＭにアボート情報があると判断した場合、前記コミットバッファ管理部が、前記パーシステントデータストレジからデータを読み込む。
【００１９】
【発明の実施の形態】
以下、この発明の一実施の形態について図面を参照して説明する。
【００２０】
図１は、ＩＣカードシステムの概略構成を示している。
【００２１】
このＩＣカードシステムは、端末装置１１とＩＣカード１２とにより構成される。端末装置１１は、演算および人間からの入力を司る演算装置１１１と、ＩＣカード１２との入出力を司るリーダライタ１１２が結線１１３により接続されている。
【００２２】
演算装置１１１は、演算を行うためのプロセッサを持ち、また人間系を含む外部よりの入力手段を持っている。ＩＣカード１２への要求と、結果ステータスの処理をここで行う。
【００２３】
リーダライタ１１２は、演算装置１１１より要求を受け、その要求をカード挿入口１２０に挿入されているＩＣカード１２へと発行する。同様にＩＣカード１２からのステータスを受け取り、その結果を演算装置１１１へと報告する。
【００２４】
ＩＣカード１２は、図１、図２に示すように、外部との接点となるコンタクト２０、および演算、制御を行うプロセッサ２１、一時データを配置するための揮発性メモリ（ＲＡＭ）２２、永続的にデータを保存するための不揮発性メモリ（ＥＥＰＲＯＭ）２３、プロセッサ２１を補佐するコプロセッサ２４、カードオペレーティングシステム（ＣＯＳ）やアプリケーションのロード／インストールの実行を行うカードドメインやアプリケーションのバイトコードをインタープリタするバーチャルマシンが搭載されているＲＯＭ２５を持つ。またコンタクト２０を通じてリーダライタ１１２と通信を行う。上記不揮発性メモリ２３としては、フラッシュメモリ、ＦＲＡＭ等を用いても良い。
【００２５】
プロセッサ２１は、端末装置１１からロードされるアプリケーションをＩＣカード１２用のデータに変換するカードアプレットＣＡＰを有している。
【００２６】
上記プロセッサ２１の制御のもと、２種類のメモリ、揮発性メモリ２２と不揮発性メモリ２３が管理される。また、特に負荷の生じる演算を行うためのコプロセッサ２４を持つこともあり、これはプロセッサ２１の指示のもと演算を行う。
【００２７】
データは、図１におけるコンタクト２０より入力され、一般にＲＡＭ２２内に格納される。ここで受信されたデータは、プロセッサ２１により解析され、処理される。ここで、保存が必要なデータはプロセッサ２１の指示のもとＥＥＰＲＯＭ２３に書き込まれ、特殊な演算が可能なものはコプロセッサ２４へと処理の指示が送られる。また、ＲＡＭ２２では格納しきれない大きなデータなどが一時的に、ＥＥＰＲＯＭ２３の別領域に書き込まれることがある。
【００２８】
上記ＥＥＰＲＯＭ２３は、図３、図４に示すように、カードＩＤ等が記録されるシステム領域３１、領域チェック用のＢＣＣ領域３２、コミットバッファ領域としてのＣＢ領域３３、スロットを管理するスロット管理テーブル３４ａやアプリケーション間の許可状態を示す共有テーブル３４ｂが記録されるカードデータ領域３４、複数スロットからなり各スロットごとにアプリケーションが記録できるユーザアプリケーション領域３５により構成されている。ＢＣＣ領域３２は、カードデータ領域３４、ユーザアプリケーション領域３５の正しさをチェックするための領域である。
【００２９】
ユーザアプリケーション領域３５は、たとえば、図４に示すように、＃０〜＃７の８つのスロットにより構成されており、各スロット単位で、ユーザアプリケーションが記録されるようになっている。
【００３０】
まず、図５のプログラムを用いて、ブロックトランザクション内外におけるアトミシティ管埋機能について説明する。
【００３１】
ＣＯＳは、端末装置１１からＣ−ＡＰＤＵを受信後に自動的にトランザクションを開始する（１０１）
また、端末装置１１にＲ−ＡＰＤＵを送信する前に自動的にトランザクションを終了する（１０５）。
【００３２】
ＣＯＳ動作中は、常に連鎖トランザクション（処理）状態にある。
【００３３】
トランザクションの同期点は、次のとおりである。
【００３４】
ユーザがブロックトランザクションを開始した時点（１０２）
ユーザがブロックトランザクションを終了した時点（１０３）
コミットバッファが次のデータ更新を行うとオーバーフローすることを検出した時点（１０４）
ユーザがコールしたメソッドが、コミットバッファの反映を必要とするものであった時点（１０４）
図６は、データの読み込み、書き込み手順を示すものである。すなわち、プログラム２０１を読み出し、プロセッサ２１のプログラム実行環境部２０２で実行し、コミットバッファ管理部２０３でコミットバッファ２０４を管理してパーシステントデータストレジ２０５に読み込み、書き込みを行う。なお、コミットバッファは、詳しくは後述するが、ＥＥＰＲＯＭ２３のほかにＲＡＭ２２にも設けられる。
【００３５】
次に、図６を参照してプログラムからのデータ読み出し手順の概要を説明する。
【００３６】
プログラム２０１からプログラム実行環境部２０２へ要求された処理がデータの読み出しの場合、プログラム実行環境部２０２は、コミットバッファ管理部２０３へデ一タ読み出しを依頼する。プログラム実行環境部２０２は、読み出したいデ一タのアドレス及びデータ長を指定して、コミットバッファ管理部２０３へデータ読み出しを依頼する。
【００３７】
コミットバッファ管理部２０３では、まずコミットバッファ２０４からのデータの読み出しを試行し、次にパーシステントデータストレジ２０５からの読み出しを試行する。コミットバッファ管理部２０３は、読み出した値をプログラム実行環境部２０２に返却する。プログラム実行環境部２０２は、読み出した値をプログラム２０１に返却する。
【００３８】
次に、図６を参照してプログラムからのデータ書き込み手順の概要を説明する。
【００３９】
プログラム２０１からプログラム実行環境部２０２へ要求された処理がデ一タの書き込みの場合、プログラム実行環境部２０２は、コミットバッファ管理部２０３へデータ書き込みを依頼する。プログラム実行環境部２０２は、書き込みたいデータのアドレス、値、及びデータ長を指定して、コミットバッファ管理部２０３へ書き込みを依頼する。
【００４０】
コミットバッファ管埋部２０３では、まずコミットバッファ２０４からデータの書き込みを試行し、次にパーシステントストレジ２０５からデータの書き込みを試行する。
【００４１】
プログラム実行環境部２０２は、プログラム２０１から要求されたデ一タ読み込み及び書き込みが何バイトであるかを知ることができる。プログラム実行環境部２０２は、データ更新を行う際、コミットバッファ管埋部２０３へ更新したいデ一タ数を通知する。コミットバッファ管理部２０３は、コミットバッファ２０４がオーバーフローするならば、同期点処理を行う。
【００４２】
次に、コミットバッファ管理部２０３の書き込み動作を図７のフローチャートを参照して説明する。
【００４３】
まず、ｎバイト（Byte）の書き込み要求を受けた際（ＳＴ１）、ｎバイト（Byte）書き込みがコミットバッファ２０４に入るかを確認し（ＳＴ２）、入らない場合、ブロックトランザクション中かを確認する（ＳＴ３）。ブロックトランザクション中でなければＲＡＭ２２にコミット情報を残し（ＳＴ４）、コミットバッファ２０４のデータをパーシステントストレジ２０５に反映し（ＳＴ５）、コミットバッファ２０４にｎバイト（Byte）のデータを書き込む（ＳＴ６）。
【００４４】
また、ステップＳＴ２で、ｎバイト（Byte）書き込みがコミットバッファ２０４に入る場合は、ステップＳＴ６に進んでコミットバッファ２０４にｎバイト（Byte）のデータを書き込む（ＳＴ６）。
【００４５】
また、ステップＳＴ３で、ブロックトランザクション中であれば、ＲＡＭ２２にアボート情報を残して終了する（ＳＴ７）。
【００４６】
次に、コミットバッファ管理部２０３の読み込み動作を図８のフローチャートを参照して説明する。
【００４７】
まず、ＲＡＭ２２にアボート情報があるかを確認し（ＳＴ１１）、アボート情報がない場合は、コミットバッファ２０４に指定アドレスのデータ（ＡＩ）が存在するかを確認し（ＳＴ１２）、指定アドレスのデータ（ＡＩ）が存在しない場合はパーシステントデータストレジ２０５から値を読み込む（ＳＴ１３）。
【００４８】
また、ステップＳＴ１１で揮発性メモリ（ＲＡＭ）２２にアボート情報がある場合は、ステップＳＴ１３に進んでパーシステントデータストレジ２０５から値を読み込む（ＳＴ１３）。
【００４９】
また、ステップＳＴ１２でコミットバッファ２０４に指定アドレスのデータが存在する場合、コミットバッファ２０４から値を読み込む（ＳＴ１４）。
【００５０】
次に、図９と図１０を用いてコミットバッファ２０４の制御について説明する。コミットバッファ２０４には、図９に示すＲＡＭ２２上のコミットバッファ３００と図１０に示すＥＥＰＲＯＭ２３上のコミットバッファ４００が存在する。
【００５１】
図９のＲＡＭ２２上のコミットバッファ３００は、ＴＩＤ領域３０１と、アドレス情報領域３０２と、アフターイメージ（Ａ１と略す）領域３０３と、ＢＣＣ（バイトチェック）領域３０４からなる。アドレス情報領域３０２とＡ１領域３０３は組みになっていて、ＲＡＭ２２上のコミットバッファ３００はそれらのｎ組から構成されている。現在までに登録されている組の数は、ＲＡＭ２２上のＣＢＲカウンタ３０５に保存されている。
【００５２】
図１０のＥＥＰＲＯＭ２３上のコミットバッファ４００は、ＲＡＭ２２上のコミットバッファ３００と同じ構造をもつｍ個の短編から構成されている。ＥＥＰＲＯＭ２３上のコミットバッファ４００は、その先頭であるＣＢ_ＴＯＰ４０１から、その終端であるＣＢ_ＢＴＭ４０４の区間に存在する。ＣＢ_ＳＴＡ４０３は現在のトランザクションにおけるＥＥＰＲＯＭ２２上のコミットバッファ２０４の開始位置を、ＣＢ_ＥＮＤ４０２は現在のトランザクションにおけるＥＥＰＲＯＭ２２上のコミットバッファ２０４の次回開始位置を示す。
【００５３】
コミットバッファ４００は、ＣＢ_ＳＴＡ４０３からＣＢ_ＥＮＤ４０２で囲まれる領域である。ＲＡＭ２２上のコミットバッファ３００は、ＥＥＰＲＯＭ２３上のコミットバッファ４００に追記する方式で書かれていく。ＲＡＭ２２上のコミットバッファ３００は、長さがＥＥＰＲＯＭ２３上のコミットバッファ４００の１頁となるように設計されている。現トランザクションに関するコミットバッファ４００は、ＣＢ_ＴＯＰ４０１からＣＢ_ＢＴＭ４０４の間で循環するように使われ、ＣＢ_ＳＴＡ４０３及びＣＢ_ＥＮＤ４０２も、ＣＢ_ＴＯＰ４０１からＣＢ_ＢＴＭ４０４の間で循環する。
【００５４】
図９と図１０を用いて、指定アドレスからのデ一タ読み込みについて詳述する。
【００５５】
コミットバッファ管理部２０３は、次の手順でデータ値を得る。
１．ＲＡＭ２２上のコミットバッファ３００に指定アドレスのデータがあるかを調べ、存在したならばそのＡ１を返却する。
２．ＥＥＰＲＯＭ２３上のコミットバッファ４００に指定アドレスのデータがあるかを調べ、存在したならばそのＡ１を返却する。
３．ＥＥＰＲＯＭ２３上の指定アドレスのデータを返却する。
【００５６】
図６、図９、図１０を用いて、指定アドレスへのデータ書き込みについて詳述する。
【００５７】
コミットバッファ管理部２０３は、次の手順でデータを書き込む。
１．更新情報をＲＡＭ２２上のコミットバッファ３００に反映する。
２．ＲＡＭ２２上のコミットバッファ３００がオーバーフローするならば、ＲＡＭ２２上のコミットバッファ３００をＥＥＰＲＯＭ２３上のコミットバッファ４００に反映する。
３．ＥＥＰＲＯＭ２３上のコミットバッファ４００がオーバーフローするならば、ＥＥＰＲＯＭ２３上のコミットバッファ４００をパーシステントデータストレジ２０５へ反映する。
【００５８】
ブロックトランザクションのコミットが要求された場合や、アトミックなデータ更新が要求された場合には、上記１〜３の処理がオーバーフローと関係なく行われる。
【００５９】
次に、有効なコミットバッファの構造と検出について説明する。
【００６０】
ＴＩＤのＭＳＢは、各トランザクションにおけるコミットバッファの終端フラグとなっている。ＥＥＰＲＯＭ２３上のコミットバッファ４００は、ＲＯＭ２２上のコミットバッファ３００の形式でｍ頁分あり、循環形式で使用する。ＲＡＭ２２上のコミットバッファ３００がオーバーフローした場合は、ＥＥＰＲＯＭ２３上のＣＢ_ＥＮＤ４０２の示す頁に書き込まれ、ＣＢ_ＥＮＤ４０２は次の頁を指すように更新される。
【００６１】
［ＣＢ_ＳＴＡ４０３〜ＣＢ_ＥＮＤ４０２）までが、現在のコミットバッファ上のデータである。なお、上記かぎかっこ「［」は、「以上、以下」の意味を示し、上記まるかっこ「）」は、「未満」の意味を示している。
【００６２】
上記の同期点に達すると、ＴＩＤのコミット終端フラグが立った頁が書き込まれ、ＴＩＤが＋１される。ＴＩＤはＥＥＰＲＯＭ２３上のコミットバッファ頁数よりも十分大きな値でもって循環するものとする。
【００６３】
１Ｃカード１２が処理中に引き抜かれた場合、次回の１Ｃカード１２が起動された時点でＥＥＰＲＯＭ２３上のコミットバッファ４００の検査が行われる。ＥＥＰＲＯＭ２３上のコミットバッファ４００のＴＩＤ３０１の終端フラグが立っている頁の検索が行われる。その頁の次の頁のＴＩＤが該当Ｔ１ＤのＴ１Ｄ＋１でない場合、コミットバッファ管理部２０３は、ＥＥＰＲＯＭ２３に未反映かもしれない有効なコミットバッファが存在すると判断する。そして該当ＴＩＤを持つＥＥＰＲＯＭコミットバッファ２０４を実ＥＥＰＲＯＭ２０５へ反映（ロールフォワード）させる。有効なコミットバッファが存在しない場合、実ＥＥＰＲＯＭ２０５への反映は行われない（ロールバックする）。
【００６４】
Ｒ−ＡＰＤＵを送信する直前に、コミットバッファ管理部２０３は、無効と判断されるような頁をＥＥＰＲＯＭ２３のコミットバッファ４００に書き込む。これにより、カード起動時に無駄なロールフォワードが発生しないようになる。
【００６５】
以上説明したコミットバッファの構造とその処理方法は、ＥＥＰＲＯＭ２３への書き込みが少なく、また平均的にＥＥＰＲＯＭコミットバッファが使われるようになる。
【００６６】
また、コミットバッファの構造を図６のような構造とすることにより、ストリングサーチが早くできるＣＰＵの場合、指定アドレスのデ一タの位置検索のためのアドレス３０２の走査がすばやくできる構造になる。
【００６７】
次に、ＲＡＭ２２上のコミットバッファ３００をＥＥＰＲＯＭ２３上のコミットバッファ４００に書き込む動作を図１１のフローチャートを参照して説明する。
【００６８】
コミットバッファ管理部２０３は、まずＲＡＭ２２上にアボート情報があるかを確認し（ＳＴ２１）、ある場合は終了する。ない場合は、ＲＡＭ２２上のコミットバッファ３００を、ＥＥＰＲＯＭ２３上のコミットバッファ４００に書き込むタイミングかを確認し（ＳＴ２２）、書き込むタイミングであれば、ＥＥＰＲＯＭ２３上のコミットバッファ４００をパーシステントストレジ２０５に書き込むタイミングかを確認し（ＳＴ２３）、書き込むタイミングであれば、ＴＩＤ３０１のコミットバッファ終端フラグをたてる（ＳＴ２４）。
【００６９】
ＲＡＭ２２上のコミットバッファ３００をＥＥＰＲＯＭ２３上のコミットバッファ４００のＣＢ_ＥＮＤ４０２からの領域に書き込む（ＳＴ２５）。
【００７０】
ＥＥＰＲＯＭ２３上のコミットバッファ４００のＣＢ_ＳＴＡ４０３〜ＣＢ_ＥＮＤ４０２データをパーシステントストレジ２０５に書き込む（ＳＴ２６）。
【００７１】
続いて、ＣＢ_ＳＴＡ４０３をＣＢ_ＥＮＤ４０２の値とする（ＳＴ２７）。そして、ＣＢ_ＥＮＤ４０２をシフトさせ、ＣＢ_ＥＮＤ４０２がＣＢ_ＢＴＭ４０４に達した場合、ＣＢ_ＥＮＤ４０２はＣＢ_ＴＯＰ４０１の位置として終了する（ＳＴ２８）。
【００７２】
また、ステップＳＴ２２で書き込むタイミングでない場合、ＲＡＭ２２上のコミットバッファ３００にアドレス３０２とＡＩ３０３を追加して終了する（ＳＴ２９）。
【００７３】
また、ステップＳＴ２３で書き込むタイミングでない場合、ＲＡＭ２２上のコミットバッファ３００をＥＥＰＲＯＭ２３上のコミットバッファ４００のＣＢ_ＥＮＤ４０２からの領域に書き込む（ＳＴ３０）。そして、ＣＢ_ＥＮＤ４０２をシフトさせ、ＣＢ_ＥＮＤ４０２がＣＢ_ＢＴＭ４０４に達した場合、ＣＢ_ＥＮＤ４０２はＣＢ_ＴＯＰ４０１の位置として終了する（ＳＴ３１）。
【００７４】
なお、ステップＳＴ２２におけるＲＡＭ２２上のコミットバッファ３００をＥＥＰＲＯＭ２３上のコミットバッファ４００に書き込むタイミングとは、ＲＡＭ２２上のコミットバッファ３００が次の書き込みでオーバーフローする場合、もしくはブロックトランザクションの開始前後の場合である。
【００７５】
また、ステップＳＴ２３におけるＥＥＰＲＯＭ２３上のコミットバッファ４００をパーシステントストレジ２０５に書き込むタイミングとは、ＥＥＰＲＯＭ２３上のコミットバッファ４００が次の書き込みでオーバーフローする場合、もしくはブロックトランザクションの開始前後の場合である。
【００７６】
次に、ＩＣカード起動時に有効なコミットバッファを検索する動作を図１２のフローチャートを参照して説明する。
【００７７】
まず、ＣＢ_ＴＯＰ４０１からＣＢ_ＢＴＭ４０４までの間で、ＴＩＤ３０１のコミット終端フラグを検索し（ＳＴ４１）、ループ中であればＣＢ_ＥＮＤ４０４値を現在の短冊の位置とし(ＳＴ４２)、ＥＥＰＲＯＭ２３上のコミットバッファ４００にて、ＴＩＤ３０１のコミット終端フラグが立っているか確認し（ＳＴ４３）、コミット終端フラグが立っていない場合はステップＳＴ４１へ戻り、コミット終端フラグが立っている場合はＥＥＰＲＯＭ２３上のコミットバッファ４００にて次のＴＩＤを取り出し、それが予定された値（現ＴＩＤ値＋１）以外かを確認し（ＳＴ４４）、予定された値であればステップＳＴ４１へ戻り、予定された値以外であれば同じＴＩＤをもつ短冊をＣＢ_ＥＮＤ４０４からＡＩ走査方向へ調べる（ＳＴ４５）。
【００７８】
同じＴＩＤをもつ一番古いセグメント位置をＣＢ_ＳＴＡ４０３とする（ＳＴ４６）。そして、ＥＥＰＲＯＭ２３上のコミットバッファ４００をパーシステントストレジ２０５に反映する（ＳＴ４７）。
【００７９】
また、ステップＳＴ４１において、コミット終端フラグを検索してループ終了ならば、ＣＢ_ＳＴＡ４０３値をＣＢ_ＥＮＤ４０２位置とする（ＳＴ４８）。
【００８０】
ステップＳＴ４７、またはステップＳＴ４８の後、終了してＣ−ＡＰＤＵ受信状態へ進む。
【００８１】
以上説明したように上記発明の実施の形態によれば、機器の動作中のデータ更新のアトミシティが常に保証される。
【００８２】
また、コミットバッファへの書き込みが平均化されるため、パーシステントなデータストレジの書き込み耐用件数を少なくすることができる。
【００８３】
また、パーシステントなデータストレジのコミットバッファの１頁の容量効率が上がり、書き込み耐用件数及び書き込み回数を低減させることができる。
【００８４】
また、パーシステントストレジ上のコミットバッファ頁群から、有効なコミットバッファを検出できる上に、パーシステントストレジの特定領域への書き込みの大量発生を防ぐことができる。
【００８５】
コミットバッファからのデータ読み込みトライ時間が早くなり、特にノーヒットだった場合に著しく速度が向上し、また、ヒットした場合にも速度が向上する。
【００８６】
【発明の効果】
以上詳述したように、この発明によれば、不揮発性メモリへの書き込みを少なくすると共に汎用的なアトミシティ管理を行うことのできるＩＣカードにおけるデータ書込方法、および、ＩＣカードにおけるデータ読込方法を提供できる。
【図面の簡単な説明】
【図１】ＩＣカードシステムの概略構成を示す図。
【図２】ＩＣカードの概略構成を示すブロック図。
【図３】ＥＥＰＲＯＭの概略構成を示す図。
【図４】ＥＥＰＲＯＭのユーザアプリケーション領域の概略構成を示す図。
【図５】ブロックトランザクション内外におけるアトミシティ管埋機能を説明するための図。
【図６】データの読み込み、書き込み手順を示す図。
【図７】コミットバッファ管理部の書き込み動作を説明するためのフローチャート。
【図８】コミットバッファ管理部の読み込み動作を説明するためのフローチャート。
【図９】ＲＡＭ上のコミットバッファを示す図。
【図１０】ＥＥＰＲＯＭ上のコミットバッファを示す図。
【図１１】ＲＡＭ上のコミットバッファをＥＥＰＲＯＭ上のコミットバッファに書き込む動作を説明するためのフローチャート。
【図１２】ＩＣカード起動時に有効なコミットバッファを検索する動作を説明するためのフローチャート。
【符号の説明】
１１…端末装置
１２…ＩＣカード
２１…プロセッサ（設定手段、処理手段、制御手段）
２２…揮発性メモリ（ＲＡＭ）
２３…不揮発性メモリ（ＥＥＰＲＯＭ）
【図１】
0003749798.tif 000002
【図２】
0003749798.tif 000003
【図３】
0003749798.tif 000004
【図４】
0003749798.tif 000005
【図５】
0003749798.tif 000006
【図６】
0003749798.tif 000007
【図７】
0003749798.tif 000008
【図８】
0003749798.tif 000009
【図９】
0003749798.tif 000010
【図１０】
0003749798.tif 000011
【図１１】
0003749798.tif 000012
【図１２】
0003749798.tif 000013