(57)【要約】【課題】不揮発性メモリのコンパクション処理に対してトランザクション制御の適用を実現し、安全にコンパクション処理を行うことができるＩＣチップ等の電子情報記憶媒体等を提供する。【解決手段】不揮発性メモリを区分した領域毎に、先頭アドレス、レングス、記憶状態、及び、アプリケーションが参照するインデックスを記憶し、断片化した空き領域をまとめるために、断片化した空き領域に、データを移動させるとともに、当該データが記憶されていた領域に対応する先頭アドレスを移動先のアドレスに変更し、当該データが移動してきた断片化した空き領域の先頭アドレスを、移動してきた当該データのレングスを加算した値に更新することとし、一のデータ移動で移動させるデータのレングスを、トランザクション制御可能なレングス範囲内とする。【選択図】図９
2019082751.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリを区分した領域毎に、先頭アドレス、レングス、記憶状態、及び、アプリケーションが参照するインデックスを記憶し、前記記憶状態として、空き状態、断片化した空き状態、又は、使用中状態を記憶する記憶手段と、
前記記憶状態が前記断片化した空き状態である領域が存在する場合に、前記断片化した空き状態又は前記空き状態である領域をまとめるために、前記断片化した空き状態である領域に、前記使用中状態である領域に記憶されているデータを移動させる移動処理を実行する移動手段と、
前記移動処理によりデータを移動させた場合に、当該データが記憶されていた領域に対応する先頭アドレスを移動先のアドレスに変更し、当該データが移動してきた前記断片化した空き状態である領域の先頭アドレスを、移動してきた当該データのレングスを加算した値に更新する更新処理を実行する更新手段と、
前記移動処理及び前記更新処理に対してトランザクション制御を行うトランザクション手段と、
を備える電子情報記憶媒体であって、
一の前記移動処理で移動させるデータのレングスは、前記トランザクション制御可能なレングスを超えないことを特徴とする電子情報記憶媒体。
【請求項２】
請求項１に記載の電子情報記憶媒体であって、
前記レングスが前記トランザクション制御可能なレングスを超えている一の領域について、それぞれの前記レングスが前記トランザクション制御可能なレングス以下となる複数の領域に分割する分割手段を更に備え、
前記記憶手段は、前記分割手段が分割した各領域について、前記先頭アドレス、前記レングス、前記記憶状態、及び、前記インデックスを記憶することを特徴とする電子情報記憶媒体。
【請求項３】
請求項１又は２に記載の電子情報記憶媒体であって、
前記記憶手段は、前記領域毎に、当該領域の次の領域の前記インデックスを示す配置順番を更に記憶することを特徴とする電子情報記憶媒体。
【請求項４】
請求項１乃至３の何れか一項に記載の電子情報記憶媒体であって、
前記記憶手段は、前記記憶状態として、前記使用中状態である領域に記憶されているデータを移動させる際の状態である移動中状態を更に記憶し、
前記移動手段は、前記使用中状態である領域に記憶されているデータを移動させる際に当該領域の記憶状態を使用中状態から移動中状態に更新し、
前記更新手段は、前記使用中状態である領域に記憶されているデータを移動させた場合に、当該領域の記憶状態を移動中状態から使用中状態に更新することを特徴とする電子情報記憶媒体。
【請求項５】
請求項１乃至４の何れか一項に記載の電子情報記憶媒体を備えることを特徴とするＩＣカード。
【請求項６】
不揮発性メモリを区分した領域毎に、先頭アドレス、レングス、記憶状態、及び、アプリケーションが参照するインデックスを記憶し、前記記憶状態として、空き状態、断片化した空き状態、又は、使用中状態を記憶する記憶手段を備える電子情報記憶媒体によるデータ移動方法であって、
前記記憶状態が前記断片化した空き状態である領域が存在する場合に、前記断片化した空き状態又は前記空き状態である領域をまとめるために、前記断片化した空き状態である領域に、前記使用中状態である領域に記憶されているデータを移動させる移動処理を実行する移動工程と、
前記移動処理によりデータを移動させた場合に、当該データが記憶されていた領域に対応する先頭アドレスを移動先のアドレスに変更し、当該データが移動してきた前記断片化した空き状態である領域の先頭アドレスを、移動してきた当該データのレングスを加算した値に更新する更新処理を実行する更新工程と、
前記移動処理及び前記更新処理に対してトランザクション制御を行うトランザクション工程と、
を含み、
一の前記移動処理で移動させるデータのレングスは、前記トランザクション制御可能なレングスを超えないことを特徴とする電子情報記憶媒体によるデータ移動方法。
【請求項７】
不揮発性メモリを区分した領域毎に、先頭アドレス、レングス、記憶状態、及び、アプリケーションが参照するインデックスを記憶し、前記記憶状態として、空き状態、断片化した空き状態、又は、使用中状態を記憶する記憶手段を備える電子情報記憶媒体に含まれるコンピュータを、
前記記憶状態が前記断片化した空き状態である領域が存在する場合に、前記断片化した空き状態又は前記空き状態である領域をまとめるために、前記断片化した空き状態である領域に、前記使用中状態である領域に記憶されているデータを移動させる移動処理を実行する移動手段、
前記移動処理によりデータを移動させた場合に、当該データが記憶されていた領域に対応する先頭アドレスを移動先のアドレスに変更し、当該データが移動してきた前記断片化した空き状態である領域の先頭アドレスを、移動してきた当該データのレングスを加算した値に更新する更新処理を実行する更新手段、
前記移動処理及び前記更新処理に対してトランザクション制御を行うトランザクション手段、
として機能させ、
一の前記移動処理で移動させるデータのレングスは、前記トランザクション制御可能なレングスを超えないことを特徴とするデータ移動プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
ＩＣチップ等の電子情報記憶媒体の技術分野に関する。
【背景技術】
【０００２】
従来、ＩＣカード等に組み込まれるＩＣチップは不揮発性メモリを備え、アプリケーションやオブジェクトといったデータを記憶するようになっている。こうしたＩＣカードは、Ｊａｖａ（登録商標）Ｃａｒｄに対応しているものが多く、Ｊａｖａ言語で記述されたアプリケーションを、Ｇｌｏｂａｌ  Ｐｌａｔｆｏｒｍの規格に定められたＩＮＳＴＡＬＬコマンドによってダウンロードし、ＩＣチップ上で動作させることができる。
【０００３】
ＩＣチップにアプリケーションを追加するケースは、例えば、ＩｏＴ用途のｅＵＩＣＣで増加すると想定されている。ｅＵＩＣＣには複数のＭＮＯ（Mobile Network Operator）を切り替える機能が求められる一方で、ｅＵＩＣＣは機器にハンダ付けされており、ＩＣチップそのものの交換が難しいためである。
【０００４】
ＩＣチップにおいて機能を追加したり削除したりする場合、その機能を提供するアプリケーションやこれに付随するオブジェクトを追加したり削除したりすることになる。この時に重要なことは、削除したアプリケーションやオブジェクトを記憶していたメモリの領域にできる断片化した空き領域（断片空き領域）を再利用できるようにすることである。断片空き領域を再利用できない場合、低リソースのＩＣチップではすぐにメモリが一杯になり、アプリケーションを追加することができなくなってしまう。
【０００５】
断片空き領域を集めて連続した空き領域として再利用する仕組みは、コンパクションと呼ばれる。不揮発性メモリにおけるコンパクションに関する技術は多数開示されている（例えば、特許文献１、２）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１３−１９１１７４号公報
【特許文献２】特開２０１３−１９６６４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
一般にコンパクションは断片空き領域を回収し、メモリに配置されている利用中のデータを詰める処理であり、相対的に他の処理よりも処理時間が掛かる。処理時間が掛かるがゆえに、自ら電源を持たないＩＣチップでコンパクションを行う場合、電源断（外部からの電源供給が断たれること）が発生したときの対策（すなわち、コンパクション処理が中断された場合の対策）を施さなければならないという問題がある。
【０００８】
電源断の対策については、ＩＣチップのトランザクション制御を利用することができる。トランザクション制御は、トランザクション開始からトランザクション終了（コミット（commit））までの間に行われる一連の書き込み処理を保証するもので、書き込み処理中に電源断が発生した場合に、トランザクション開始前か、トランザクション終了後の何れかの状態に遷移させる制御である。このトランザクション制御は電源断が発生しやすいＩＣチップにとって有効な制御であるが不揮発性メモリを大量に使用するため、相対的に記憶容量の小さい不揮発性メモリを備えるＩＣチップにおいてコンパクション処理全体（コンパクション処理の開始から終了まで）にそのまま適用することができないという問題がある。
【０００９】
そこで、本発明は、不揮発性メモリのコンパクション処理に対してトランザクション制御の適用を実現し、安全にコンパクション処理を行うことができるＩＣチップ等の電子情報記憶媒体等を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、請求項１に記載の発明は、不揮発性メモリを区分した領域毎に、先頭アドレス、レングス、記憶状態、及び、アプリケーションが参照するインデックスを記憶し、前記記憶状態として、空き状態、断片化した空き状態、又は、使用中状態を記憶する記憶手段と、前記記憶状態が前記断片化した空き状態である領域が存在する場合に、前記断片化した空き状態又は前記空き状態である領域をまとめるために、前記断片化した空き状態である領域に、前記使用中状態である領域に記憶されているデータを移動させる移動処理を実行する移動手段と、前記移動処理によりデータを移動させた場合に、当該データが記憶されていた領域に対応する先頭アドレスを移動先のアドレスに変更し、当該データが移動してきた前記断片化した空き状態である領域の先頭アドレスを、移動してきた当該データのレングスを加算した値に更新する更新処理を実行する更新手段と、前記移動処理及び前記更新処理に対してトランザクション制御を行うトランザクション手段と、を備える電子情報記憶媒体であって、一の前記移動処理で移動させるデータのレングスは、前記トランザクション制御可能なレングスを超えないことを特徴とする。
【００１１】
請求項２に記載の発明は、請求項１に記載の電子情報記憶媒体であって、前記レングスが前記トランザクション制御可能なレングスを超えている一の領域について、それぞれの前記レングスが前記トランザクション制御可能なレングス以下となる複数の領域に分割する分割手段を更に備え、前記記憶手段は、前記分割手段が分割した各領域について、前記先頭アドレス、前記レングス、前記記憶状態、及び、前記インデックスを記憶することを特徴とする。
【００１２】
請求項３に記載の発明は、請求項１又は２に記載の電子情報記憶媒体であって、前記記憶手段は、前記領域毎に、当該領域の次の領域の前記インデックスを示す配置順番を更に記憶することを特徴とする。
【００１３】
請求項４に記載の発明は、請求項１乃至３の何れか一項に記載の電子情報記憶媒体であって、前記記憶手段は、前記記憶状態として、前記使用中状態である領域に記憶されているデータを移動させる際の状態である移動中状態を更に記憶し、前記移動手段は、前記使用中状態である領域に記憶されているデータを移動させる際に当該領域の記憶状態を使用中状態から移動中状態に更新し、前記更新手段は、前記使用中状態である領域に記憶されているデータを移動させた場合に、当該領域の記憶状態を移動中状態から使用中状態に更新することを特徴とする。
【００１４】
請求項５に記載の発明は、請求項１乃至４の何れか一項に記載の電子情報記憶媒体を備えることを特徴とするＩＣカードである。
【００１５】
請求項６に記載の発明は、不揮発性メモリを区分した領域毎に、先頭アドレス、レングス、記憶状態、及び、アプリケーションが参照するインデックスを記憶し、前記記憶状態として、空き状態、断片化した空き状態、又は、使用中状態を記憶する記憶手段を備える電子情報記憶媒体によるデータ移動方法であって、前記記憶状態が前記断片化した空き状態である領域が存在する場合に、前記断片化した空き状態又は前記空き状態である領域をまとめるために、前記断片化した空き状態である領域に、前記使用中状態である領域に記憶されているデータを移動させる移動処理を実行する移動工程と、前記移動処理によりデータを移動させた場合に、当該データが記憶されていた領域に対応する先頭アドレスを移動先のアドレスに変更し、当該データが移動してきた前記断片化した空き状態である領域の先頭アドレスを、移動してきた当該データのレングスを加算した値に更新する更新処理を実行する更新工程と、前記移動処理及び前記更新処理に対してトランザクション制御を行うトランザクション工程と、を含み、一の前記移動処理で移動させるデータのレングスは、前記トランザクション制御可能なレングスを超えないことを特徴とする。
【００１６】
請求項７に記載の発明は、不揮発性メモリを区分した領域毎に、先頭アドレス、レングス、記憶状態、及び、アプリケーションが参照するインデックスを記憶し、前記記憶状態として、空き状態、断片化した空き状態、又は、使用中状態を記憶する記憶手段を備える電子情報記憶媒体に含まれるコンピュータを、前記記憶状態が前記断片化した空き状態である領域が存在する場合に、前記断片化した空き状態又は前記空き状態である領域をまとめるために、前記断片化した空き状態である領域に、前記使用中状態である領域に記憶されているデータを移動させる移動処理を実行する移動手段、前記移動処理によりデータを移動させた場合に、当該データが記憶されていた領域に対応する先頭アドレスを移動先のアドレスに変更し、当該データが移動してきた前記断片化した空き状態である領域の先頭アドレスを、移動してきた当該データのレングスを加算した値に更新する更新処理を実行する更新手段、前記移動処理及び前記更新処理に対してトランザクション制御を行うトランザクション手段、として機能させ、一の前記移動処理で移動させるデータのレングスは、前記トランザクション制御可能なレングスを超えないことを特徴とする。
【発明の効果】
【００１７】
本発明によれば、トランザクション制御可能な範囲でデータの移動やアドレスの更新を行うことにより、不揮発性メモリのコンパクション処理に対してトランザクション制御の適用を実現し、安全にコンパクション処理を行うことができる。また、データを移動させた場合であっても、インデックスは更新せずにアドレスを更新することから、アプリケーションがインデックスを参照する可能性がある場合（例えば、アプリケーションの動作中）であっても、データを移動させることができる。
【図面の簡単な説明】
【００１８】
【図１】本実施形態に係るＩＣカード１に搭載されるＩＣチップ１ａのハードウェア構成例を示す図である。
【図２】（Ａ）は、不揮発性メモリ１３に断片的な空き領域が存在している場合の記憶領域の一例を示す図であり、（Ｂ）は、当該断片的な空き領域を回収して空き領域とした場合の記憶領域の一例を示す図である。
【図３】（Ａ）は、本実施形態に係る管理テーブルの構成例を示す図であり、（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である。
【図４】（Ａ）は、本実施形態に係る管理テーブルの構成例を示す図であり、（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である。
【図５】（Ａ）は、本実施形態に係る管理テーブルの構成例を示す図であり、（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である。
【図６】（Ａ）は、本実施形態に係る管理テーブルの構成例を示す図であり、（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である。
【図７】（Ａ）は、本実施形態に係る管理テーブルの構成例を示す図であり、（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である。
【図８】本実施形態に係るＩＣチップ１ａによるコンパクション処理の一例を示すフローチャートである。
【図９】本実施形態に係るＩＣチップ１ａによる再配置処理の一例を示すフローチャートである。
【図１０】（Ａ）は、変形例における管理テーブルの構成例を示す図であり、（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である。
【図１１】（Ａ）は、変形例における管理テーブルの構成例を示す図であり、（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である。
【図１２】変形例における不揮発性メモリ１３のデータ格納例を示す図である。
【発明を実施するための形態】
【００１９】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、コンパクション機能及びトランザクション制御機能を有するＩＣチップを搭載するＩＣカードに対して本発明を適用した場合の実施の形態である。
【００２０】
［１．ＩＣチップ１ａの構成］
まず、図１を参照して、ＩＣカード１に搭載されるＩＣチップ１ａの構成について説明する。図１は、ＩＣカード１に搭載されるＩＣチップ１ａのハードウェア構成例を示す図である。本実施形態のＩＣカード１は、接触によるデータ通信と非接触によるデータ通信の２つの通信機能を兼ね備えたデュアルインターフェース型ＩＣカードである。但し、ＩＣカード１の種類はデュアルインターフェース型ＩＣカードに限定されず、キャッシュカードやクレジットカードと同じ大きさのプラスチック製カードにＩＣチップ１ａがエンベットされた接触型ＩＣカードであってもよいし、また、アンテナコイルを内蔵し無線でリーダ・ライタとデータ通信する非接触型ＩＣカードであってもよく、ＩｏＴ用途のｅＵＩＣＣであってもよい。
【００２１】
図１に示すように、ＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、ＲＡＭ（Random Access Memory）１１、ＲＯＭ（Read Only Memory）１２、不揮発性メモリ１３、及びＩ／Ｏ回路１４を備えて構成される。ＣＰＵ１０は、ＲＯＭ１２又は不揮発性メモリ１３に記憶された各種プログラムを実行するプロセッサ（コンピュータ）である。なお、Ｉ／Ｏ回路１４は、外部機器２とのインターフェースを担う。これにより、ＩＣチップ１ａは、リーダ・ライタを備える外部機器２との間で接触又は非接触で通信を行うことができる。接触式のＩＣチップ１ａの場合、Ｉ／Ｏ回路１４には、例えば、Ｃ１〜Ｃ８の８個の端子が備えられている。例えば、Ｃ１端子は電源端子（ＩＣチップ１ａへ電源供給する端子）、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部機器２との間で通信を行うための端子である。一方、非接触式のＩＣチップ１ａの場合、Ｉ／Ｏ回路１４には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部機器２の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣチップ１ａが通信機器に組み込まれる場合、外部機器２には通信機器の機能を担う制御部が該当する。
【００２２】
不揮発性メモリ１３には、例えばフラッシュメモリ、強誘電体メモリ又は「Electrically Erasable Programmable Read-Only Memory」を適用することができる。不揮発性メモリ１３は、ＩＣカードＯＳ（以下、「ＯＳ」という場合がある）や各種アプリケーション及びこれらが使用するデータを記憶する。
【００２３】
ＯＳは、その一機能としてコンパクション機能を備える。コンパクション機能とは、図２（Ａ）に示すように、不揮発性メモリ１３に断片的な空き領域が存在している場合に、断片的な空き領域に後続のデータを移動させて詰めることにより、断片的な空き領域を回収して、図２（Ｂ）に示すように、連続的な空き領域を形成する機能である。
【００２４】
また、ＯＳは、その一機能としてトランザクション制御機能を備える。具体的には、ＯＳは、トランザクション開始時に不揮発性メモリにおける書き換え対象の領域のコピーを作成しておき、コミット前に電源断が発生した場合に、当該コピーによりトランザクション開始前の状態に戻す。但し、コピーを記憶させておく不揮発性メモリ１３の記憶容量に制限があるため、トランザクション制御機能を適用することのできるデータサイズの上限が予め設定されている。そのため、コンパクション機能により、図２（Ａ）の断片的な空き領域を含む、データが格納されている領域（斜線で示した領域）についてコンパクションを行う場合であっても、当該領域全体のデータについてトランザクション制御を行うことはできない。なお、以下、コンパクション処理においてデータを移動させる際、トランザクション制御を適用できるデータのレングスを「トランザクション可能長」という場合がある。
【００２５】
不揮発性メモリ１３には、不揮発性メモリ１３の記憶領域を管理するための管理テーブルが記憶されている。図３（Ａ）は管理テーブルの構成例を示す図であり、図３（Ｂ）は、当該管理テーブルに対応するデータ領域の概念図である（図４−７、１０、１１について同様である）。
【００２６】
管理テーブルは、ＯＳが不揮発性メモリ１３の記憶領域を管理するためのテーブルであって、「インデックス」、「状態」、「アドレス」、「レングス」、「配置順番」及び「データ種別」をそれぞれ示す情報からなる管理情報が格納されている。管理情報は、基本的にデータが記憶されている記憶領域毎に設けられる。但し、「レングス」が「トランザクション可能長」を超えるデータについては、ＣＰＵ１０が「トランザクション可能長」以下のサイズに分割し、それぞれに管理情報を設ける。また、データが記憶されていない記憶領域（すなわち、後述する「状態」が「空き状態」又は「断片空き状態」である領域）についても管理情報が設けられる。
【００２７】
「インデックス」は、アプリケーションがデータを特定するために参照する値である。つまり、アプリケーションは「インデックス」で特定されるデータについて読み出しや書き換えなどを行うことができる。「インデックス」は、データが不揮発性メモリ１３に格納された実際のアドレスを示しているわけではない。
【００２８】
「状態」は、記憶領域の状態を示し、「空き状態」、「利用中状態」、「断片空き状態」、「移動中状態」の何れかの状態がセットされる。「空き状態」は、データが記憶されていない状態であり、且つ、断片化していない状態を示している。「利用中状態」は、データが記憶されている状態を示している。「断片空き状態」は、データが記憶されていない状態であり、且つ、断片化されている状態を示している。「移動中状態」は、コンパクションのためにデータを移動している状態であることを示している。
【００２９】
「アドレス」は、管理情報に対応する記憶領域の先頭アドレス（物理アドレス）を示している。
【００３０】
「レングス」は、管理情報に対応する記憶領域のレングスを示している。
【００３１】
「配置順番」は、管理情報に対応する記憶領域に続く記憶領域に対応する「インデックス（参照）」を示している。
【００３２】
「データ種別」は、管理情報に対応する記憶領域に記憶されているデータの種別を示しおり、「オブジェクト」、「パッケージ」、「インスタンス」の何れかの種別がセットされる。
【００３３】
［２．コンパクション処理の概要］
次に、図３−図７を用いてコンパクション処理の概要について説明する。なお、図３−図７のそれぞれにおいて、（Ａ）は管理テーブルを示しており、（Ｂ）はデータ領域を示している。
【００３４】
図３の例では、「インデックス」が「１」、「２」、「６」−「９」、「１１」−「１５」である管理情報に対応する記憶領域にデータが格納されている。そして、「インデックス」が「３」−「５」、「１０」である管理情報に対応する記憶領域が「断片空き状態」となっており、「インデックス」が「１６」以降である管理情報に対応する記憶領域が「空き状態」となっている。以下、この状態を初期状態としてコンパクション処理を行う場合について説明する。
【００３５】
コンパクション処理では、「インデックス」が「３」−「５」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域と、「インデックス」が「１０」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域に、後続の記憶領域に記憶されているデータを移動させて詰めることにより、「断片空き状態」の記憶領域を回収し、連続した「空き状態」の記憶領域を増やす。具体的には、図３（Ｂ）において、「アドレス」が「２０」である記憶領域のデータ「Ｂ」と「アドレス」が「７０」である記憶領域のデータ「Ｃ」の間にある「断片空き状態」の記憶領域と、「アドレス」が「１００」である記憶領域のデータ「Ｆ」と「アドレス」が「１２５」である記憶領域のデータ「Ｇ」の間にある「断片空き状態」である記憶領域を回収して、「空き状態」の記憶領域と統合する。ここでは、「インデックス」が「６」−「９」である管理情報に対応する記憶領域のデータ（図３（Ｂ）のデータ「Ｃ」−「Ｆ」）を「アドレス」が「３０」の位置まで前方に移動させて、データ「Ｂ」とデータ「Ｆ」の間の記憶領域を埋めることについて説明する。データ「Ｆ」とデータ「Ｇ」の間の記憶領域については、同様であるので説明を省略する。
【００３６】
まず、ＯＳは、図４（Ａ）に示すように、「インデックス」が「６」−「９」である管理情報について「状態」を「移動中状態」に更新する。次に、ＯＳは、「状態」が「移動中状態」である管理情報に対応する記憶領域に記憶されているデータを断片空き領域の位置（アドレス「３０」の位置）に移動させる。このとき、一度にデータを移動するレングスは、トランザクション制御を適用するために、トランザクション可能長以下とする必要がある。本実施形態では、「トランザクション可能長」は、一例として「２５」であるとする。すると、「インデックス」が「６」、「７」である管理情報についてはレングスの合計が「１０＋１０＝２０」となり、更に「インデックス」が「８」である管理情報のレングス「１０」を加えると合計「３０」となる。したがって、ＯＳは、「インデックス」が「６」−「９」である管理情報に対応する記憶領域のデータを移動させる場合、トランザクション制御を適用するために、「インデックス」が「６」、「７」である管理情報に対応する記憶領域のデータを移動させてから、「インデックス」が「８」、「９」である管理情報に対応する記憶領域のデータを移動させる必要がある。これにより、「インデックス」が「６」−「９」である管理情報に対応する記憶領域のデータを移動させる場合に、トランザクション制御を適用することができるため、電源断があってもデータの不整合などの事故を防ぐことができる。
【００３７】
ＯＳは、「インデックス」が「６」、「７」である管理情報に対応する記憶領域のデータを移動させる際、どれだけ前方に移動させるかを算出する。このとき、ＯＳは、「インデックス」が「３」−「５」（「状態」が「断片空き状態」）の管理情報のレングスを合算して「断片空き長」を求める。図４の例では、「断片空き長」は「１５＋１５＋１０＝４０」となる。ＯＳは、「断片空き長」を算出すると、「インデックス」が「６」、「７」の管理情報のアドレス「７０」、「８０」からそれぞれ「断片空き長」（「４０」）を減算し、「３０」、「４０」とする（図５（Ａ）参照）。そして、この新アドレス「３０」、「４０」に、「インデックス」が「６」、「７」である管理情報に対応する記憶領域のデータを、それぞれ移動させる（図５（Ｂ）のデータ「Ｃ」、「Ｄ」参照）。
【００３８】
また、ＯＳは、「インデックス」が「６」、「７」である管理情報の「状態」を「移動中状態」から「利用中状態」に更新する。
【００３９】
次に、ＯＳは、「インデックス」が「２」である管理情報に対応する記憶領域のデータの次に、「インデックス」が「６」である管理情報に対応する記憶領域のデータが配置されたので、「インデックス」が「２」である管理情報の「配置順番」を「６」に更新する（図５（Ａ）参照）。これにより、管理テーブルにおいても、「インデックス」が「２」である管理情報に対応する記憶領域のデータの次に、「インデックス」が「６」である管理情報に対応する記憶領域のデータが配置されたことを把握することができる。
【００４０】
また、「インデックス」が「７」である管理情報に対応する記憶領域のデータの次に、「インデックス」が「３」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域が配置されたので、「インデックス」が「７」である管理情報の「配置順番」を「３」に更新する（図５（Ａ）参照）。
【００４１】
更に、「インデックス」が「５」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域の次に、「インデックス」が「８」である管理情報に対応する記憶領域のデータが位置するので、「インデックス」が「５」である管理情報の「配置順番」を「８」に更新する（図５（Ａ）参照）。
【００４２】
加えて、ＯＳは、移動させたデータ（「インデックス」が「６」、「７」である管理情報に対応する記憶領域のデータ）のレングスの合算値（「１０＋１０＝２０」。「移動データ長」という）を算出する。そして、ＯＳは、「インデックス」が「３」−「５」の管理情報のアドレス「３０」、「４５」、「６０」にそれぞれ「移動データ長」（「２０」）を加算し、「５０」、「６５」、「８０」とする（図５（Ａ）、（Ｂ）参照）。これにより、「インデックス」が「６」、「７」である管理情報に対応する記憶領域のデータの移動が完了するとともに、これに整合する管理テーブルに更新することができる。
【００４３】
次に、ＯＳは、「インデックス」が「８」、「９」である管理情報に対応する記憶領域のデータを移動させる。まず、ＯＳは、「インデックス」が「８」、「９」の管理情報のアドレス「９０」、「１００」からそれぞれ「断片空き長」（「４０」）を減算し、「５０」、「６０」とする（図６（Ａ）参照）。そして、この新アドレス「５０」、「６０」に、「インデックス」が「８」、「９」である管理情報に対応する記憶領域のデータを、それぞれ移動させる（図６（Ｂ）のデータ「Ｅ」、「Ｆ」参照）。
【００４４】
また、ＯＳは、「インデックス」が「８」、「９」の管理情報の「状態」を「移動中状態」から「利用中状態」に更新する。
【００４５】
次に、ＯＳは、「インデックス」が「７」である管理情報に対応する記憶領域のデータの次に、「インデックス」が「８」である管理情報に対応する記憶領域のデータが配置されたので、「インデックス」が「７」である管理情報の「配置順番」を「８」に更新する（図６（Ａ）参照）。これにより、管理テーブルにおいても、「インデックス」が「７」である管理情報に対応する記憶領域のデータの次に、「インデックス」が「８」である管理情報に対応する記憶領域のデータが配置されたことを把握することができる。
【００４６】
また、「インデックス」が「９」である管理情報に対応する記憶領域のデータの次に、「インデックス」が「３」」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域が配置されたので、「インデックス」が「９」である管理情報の「配置順番」を「３」に更新する（図６（Ａ）参照）。
【００４７】
更に、「インデックス」が「５」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域の次に、「インデックス」が「１０」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域が位置するので、「インデックス」が「５」である管理情報の「配置順番」を「１０」に更新する（図６（Ａ）参照）。
【００４８】
加えて、ＯＳは、移動させたデータ（「インデックス」が「８」、「９」である管理情報に対応する記憶領域のデータ）について「移動データ長」を算出する（「１０＋１５＝２５」）。そして、ＯＳは、「インデックス」が「３」−「５」の管理情報のアドレス「５０」、「６５」、「８０」にそれぞれ「移動データ長」（「２５」）を加算し、「７５」、「９０」、「１０５」とする（図６（Ａ）、（Ｂ）参照）。これにより、「インデックス」が「８」、「９」である管理情報に対応する記憶領域のデータの移動が完了するとともに、これに整合する管理テーブルに更新することができる。
【００４９】
以上により、インデックスが「６」−「９」である管理情報に対応する記憶領域のデータを前方に移動させたことにより、インデックスが「３」−「５」（「状態」が「断片空き状態」）の管理情報に対応する記憶領域と、インデックスが「１０」（「状態」が「断片空き状態」）の管理情報に対応する記憶領域を連続させることができる。以下、同様に、インデックスが「１１」−「１５」である管理情報に対応する記憶領域のデータを前方に移動させることにより、インデックスが「３」−「５」、「１０」（「状態」が「断片空き状態」）の管理情報に対応する記憶領域と、インデックスが「１６」、「１７」（「状態」が「空き状態」）の管理情報に対応する記憶領域を連続させることができる。そして、「断片空き状態」の記憶領域と「空き状態」の記憶領域とが連続するように配置換えがなされた場合には、当該「断片空き状態」の記憶領域について、管理情報の「状態」を「断片空き状態」から「空き状態」に更新する。ここまでの処理が完了した際の管理テーブル及びデータ領域について図７（Ａ）、（Ｂ）に示す。
【００５０】
［３．ＣＰＵ１０の動作］
［３．１．コンパクション処理］
次に、図８、図９のフローチャートを用いて、コンパクション処理について説明する。なお、コンパクション処理は、ＩＣチップ１ａに電源が投入されて起動した際に実行される。
【００５１】
まず、ＯＳ（を実行するＣＰＵ１０）は、「移動中状態」の管理情報があるか否かを判定する（ステップＳ１００）。具体的には、ＯＳは管理テーブルを参照し、「状態」が「移動中状態」である管理情報があるか否かを判定する。ＯＳは、「移動中状態」の管理情報があると判定した場合には（ステップＳ１００：ＹＥＳ）、図９を用いて後述する再配置処理を実行し（ステップＳ１０９）、ステップＳ１０２の処理に移行する。なお、ＩＣチップ１ａの起動時に「移動中状態」の管理情報があるということは、コンパクション処理中に電源断が発生したことを示している。
【００５２】
一方、ＯＳは、「移動中状態」の管理情報がないと判定した場合には（ステップＳ１００：ＮＯ）、次いで、再配置処理実行条件を満たしているか否かを判定する（ステップＳ１０１）。再配置処理実行条件は、例えば、「空き状態」の領域が所定量以下になった場合、前回のコンパクション処理から所定期間が経過した場合、「断片空き状態」の記憶領域が所定量以上になった場合、外部からコンパクション処理の実行要求を受け付けた場合などに満たされる。ＯＳは、再配置処理実行条件を満たしていないと判定した場合には（ステップＳ１０１：ＮＯ）、コンパクション処理を終了する。一方、ＯＳは、再配置処理実行条件を満たしていると判定した場合には（ステップＳ１０１：ＹＥＳ）、管理テーブルを参照して、「状態」が「断片空き状態」の管理情報を前方から探索する（ステップＳ１０２）。
【００５３】
次に、ＯＳは、「断片空き状態」の管理情報が見つかったか否かを判定する（ステップＳ１０３）。ＯＳは、「断片空き状態」の管理情報が見つからなかったと判定した場合には（ステップＳ１０３：ＮＯ）、コンパクション処理を終了する。一方、ＯＳは、「断片空き状態」の管理情報が見つかったと判定した場合には（ステップＳ１０３：ＹＥＳ）、当該管理情報の「レングス」を「断片空き長」に加算する（ステップＳ１０４）。「断片空き長」は、「断片空き状態」の記憶領域の長さを算出するための変数であり、「断片空き状態」の記憶領域が連続する場合、その記憶領域の合算値を示す。なお、「断片空き長」は、ステップＳ１０３からステップＳ１０４の処理に移行する前までにクリアされるものとする。
【００５４】
次に、ＯＳは、管理情報（直前のステップＳ１０４の処理が、ステップＳ１０３の処理から移行してきた場合はステップＳ１０２の処理で探索した管理情報であり、ステップＳ１０６の処理から移行してきた場合はステップＳ１０５の処理で選択した管理情報である）の「配置順番」を参照して、次の管理情報（選択中の管理情報の「配置順番」が「インデックス」となっている管理情報。以下、同様）を選択する（ステップＳ１０５）。
【００５５】
次に、ＯＳは、ステップＳ１０５の処理で選択した管理情報の「状態」は「断片空き状態」であるか否かを判定する（ステップＳ１０６）。ＯＳは、管理情報の「状態」は「断片空き状態」であると判定した場合には（ステップＳ１０６：ＹＥＳ）、ステップＳ１０４の処理に移行する。一方、ＯＳは、管理情報の「状態」は「断片空き状態」ではないと判定した場合には（ステップＳ１０６：ＮＯ）、次いで、管理情報の「状態」は「利用中状態」であるか否かを判定する（ステップＳ１０７）。
【００５６】
ＯＳは、管理情報の「状態」は「利用中状態」ではないと判定した場合には（ステップＳ１０７：ＮＯ）、コンパクション処理を終了する。一方、ＯＳは、管理情報の「状態」は「利用中状態」であると判定した場合には（ステップＳ１０７：ＹＥＳ）、変数である「断片空き長」を不揮発性メモリ１３に保持し（ステップＳ１０８）、再配置処理を実行し（ステップＳ１０９）、ステップＳ１０２の処理に移行する。なお、再配置処理では、ステップＳ１０４からステップＳ１０６の処理で算出した「断片空き長」の分だけ、後続の「利用中状態」の記憶領域に記憶されているデータを前に移動させて詰める処理を行う。そして、再配置処理を終了した後に、ステップＳ１０２の処理に移行し、次の「断片空き状態」の記憶領域を探索する。こうしてステップＳ１０２からステップＳ１０９の処理を繰り返すことにより、「断片空き状態」の記憶領域を回収して、「空き状態」の記憶領域と統合する。
【００５７】
［３．２．再配置処理］
次に、図９を用いて再配置処理について説明する。
【００５８】
まず、ＯＳは、「状態」が「移動中状態」である管理情報があるか否かを判定する（ステップＳ２００）。ＯＳは、「状態」が「移動中状態」である管理情報があると判定した場合には（ステップＳ２００：ＹＥＳ）、ステップＳ２０４の処理に移行する。
【００５９】
一方、ＯＳは、「状態」が「移動中状態」である管理情報がないと判定した場合には（ステップＳ２００：ＮＯ）、次いで、選択中である管理情報の「状態」を「利用中状態」から「移動中状態」に更新する（ステップＳ２０１）。次に、ＯＳは選択中である管理情報の「配置順番」を参照して、次の管理情報を選択する（ステップＳ２０２）。次に、ＯＳは、ステップＳ２０２の処理で選択した管理情報の状態が「利用中状態」であるか否かを判定する（ステップＳ２０３）。
【００６０】
ＯＳは、管理情報の状態が「利用中状態」であると判定した場合には（ステップＳ２０３：ＹＥＳ）、ステップＳ２０１の処理に移行する。一方、ＯＳは、管理情報の状態が「利用中状態」ではないと判定した場合には（ステップＳ２０３：ＮＯ）、次いで、管理テーブルを参照して、状態が「移動中状態」である管理情報を前方から一つ選択する（ステップＳ２０４）。なお、ＯＳは、ステップＳ２０４の処理の前に、トランザクションを開始する。
【００６１】
次に、ＯＳは、ステップＳ２０４の処理で選択した管理情報のレングスを「移動データ長」に加算すると「トランザクション可能長」を超えるか否かを判定する（ステップＳ２０５）。「移動データ長」は、「断片空き状態」の領域に移動させるデータの合計レングスを算出するための変数である。すなわち、ＯＳは、「レングス」の合算値である「移動データ長」が、「トランザクション可能長」を超えない範囲で、複数の管理情報分（管理テーブルの複数行分）のデータを移動させる。これにより、トランザクション制御を実現しつつ、データを移動させることができる。
【００６２】
ＯＳは、管理情報の「レングス」を「移動データ長」に加算しても「トランザクション可能長」を超えないと判定した場合には（ステップＳ２０５：ＮＯ）、ステップＳ２０４の処理で選択した管理情報の「レングス」を「移動データ長」に加算し（ステップＳ２０６）、「移動カウンタ」に「１」を加算し（ステップＳ２０７）、ステップＳ２０４の処理に移行する。「移動カウンタ」は、一度に複数の管理情報分のデータを移動させるにあたり、いくつ分のデータを移動させるかを示す。
【００６３】
一方、ＯＳは、管理情報の「レングス」を「移動データ長」に加算すると「トランザクション可能長」を超えると判定した場合には（ステップＳ２０５：ＹＥＳ）、次いで、「状態」が「移動中状態」である管理情報を前方から一つ選択する（ステップＳ２０８）。次いで、ＯＳは、ステップＳ２０８の処理で選択した管理情報の「インデックス」を変数αにセットし（ステップＳ２０９）、ステップＳ２１０の処理に移行する。
【００６４】
次に、ＯＳは、直近に選択した管理情報の「アドレス」から「断片空き長」を減算した値により、当該「アドレス」を更新する（ステップＳ２１０）。「断片空き長」は、ステップＳ１０８の処理で不揮発性メモリ１３に保持したものである。
【００６５】
次に、ＯＳは、直近に選択した管理情報に対応する記憶領域に記憶されているデータを、ステップＳ２１０の処理で更新したアドレスに移動させる（ステップＳ２１１）。
【００６６】
次に、ＯＳは、直近に選択した管理情報の「状態」を「移動中状態」から「利用中状態」に更新する（ステップＳ２１２）。
【００６７】
次に、ＯＳは、「移動カウンタ」分、ステップＳ２０８又はステップＳ２１４の処理で管理情報を選択したか否かを判定する（ステップＳ２１３）。ＯＳは、「移動カウンタ」分、管理情報を選択していないと判定した場合には（ステップＳ２１３：ＮＯ）、「状態」が「移動中状態」である次の管理情報を一つ選択し（ステップＳ２１４）、ステップＳ２１０の処理に移行する。一方、ＯＳは、「移動カウンタ」分、管理情報を選択したと判定した場合には（ステップＳ２１３：ＹＥＳ）、直近に選択した管理情報の「インデックス」を変数βにセットする（ステップＳ２１５）。
【００６８】
次に、ＯＳは、直近に選択した管理情報の「配置順番」を変数γにセットする（ステップＳ２１６）。
【００６９】
次に、ＯＳは、「状態」が「断片空き状態」である管理情報を前方から一つ選択し（ステップＳ２１７）、その一つ前の管理情報（「配置順番」が選択中の管理情報の「インデックス」となっている管理情報。以下、同様）の「配置順番」にαをセットする（ステップＳ２１８）。
【００７０】
次に、ＯＳは、ステップＳ２１７の処理で選択した管理情報の「インデックス」を、「インデックス」がβである管理情報の「配置順番」にセットする（ステップＳ２１９）。
【００７１】
次に、ＯＳは、ステップＳ２１７の処理で選択した管理情報の「アドレス」に「移動データ長」を加算した値により、当該「アドレス」を更新する（ステップＳ２２０）。
【００７２】
次に、ＯＳは、次の管理情報を選択する（ステップＳ２２１）。
【００７３】
次に、ＯＳは、ステップＳ２２１の処理で選択した管理情報の「状態」が「断片空き状態」であるか否かを判定する（ステップＳ２２２）。ＯＳは、ステップＳ２２１の処理で選択した管理情報の「状態」が「断片空き状態」であると判定した場合には（ステップＳ２２２：ＹＥＳ）、ステップＳ２２０の処理に移行する。一方、ＯＳは、ステップＳ２２１の処理で選択した管理情報の「状態」が「断片空き状態」ではないと判定した場合には（ステップＳ２２２：ＮＯ）、一つ前に選択していた管理情報（直近に選択した管理情報の「インデックス」が「配置順番」になっている管理情報）の「配置順番」にγをセットする（ステップＳ２２３）。
【００７４】
次に、ＯＳは、「インデックス」がγである管理情報の「状態」は「空き状態」か否かを判定する（ステップＳ２２４）。ＯＳは、「インデックス」がγである管理情報の「状態」は「空き状態」ではないと判定した場合には（ステップＳ２２４：ＮＯ）、ステップＳ２２９の処理に移行する。一方、ＯＳは、「インデックス」がγである管理情報の「状態」は「空き状態」であると判定した場合には（ステップＳ２２４：ＹＥＳ）、「配置順番」がγである管理情報を選択する（ステップＳ２２５）。
【００７５】
次に、ＯＳは、直近に選択した管理情報の「状態」を「断片空き状態」から「空き状態」に更新する（ステップＳ２２６）。次に、ＯＳは、一つ前に選択していた管理情報（直近に選択した管理情報の「インデックス」が「配置順番」になっている管理情報）を選択する（ステップＳ２２７）。
【００７６】
次に、ＯＳは、ステップＳ２２７の処理で選択した管理情報の「状態」は「断片空き状態」であるか否かを判定する（ステップＳ２２８）。ＯＳは、ステップＳ２２７の処理で選択した管理情報の「状態」は「断片空き状態」であると判定した場合には（ステップＳ２２８：ＹＥＳ）、ステップＳ２２６の処理に移行する。一方、ＯＳは、ステップＳ２２７の処理で選択した管理情報の「状態」は「断片空き状態」ではないと判定した場合には（ステップＳ２２８：ＮＯ）、ステップＳ２２９の処理に移行する。
【００７７】
次に、ＯＳは、「状態」が「移動中状態」である管理情報があるか否かを判定する（ステップＳ２２９）。ＯＳは、「状態」が「移動中状態」である管理情報があると判定した場合には（ステップＳ２２９：ＹＥＳ）、ステップＳ２０４の処理に移行する。このとき、「移動カウンタ」と「移動長データ」についてはクリアすることとする。一方、ＯＳは、「状態」が「移動中状態」である管理情報がないと判定した場合には（ステップＳ２２９：ＮＯ）、再配置処理を終了する。なお、ＯＳは、ステップＳ２２９の処理後、ステップＳ２０４の処理に移行する前、又は、再配置処理を終了する前までに、トランザクションをコミットする。
【００７８】
以上のように、本実施形態のＩＣチップ１ａ（「電子情報記憶媒体」の一例）は、不揮発性メモリ１３（「記憶手段」の一例）は、不揮発性メモリ１３を区分した記憶領域（「領域」の一例）毎に、「アドレス」（「先頭アドレス」の一例）、「レングス」、「状態」（「記憶状態」の一例）、及び、アプリケーションが参照する「インデックス」を記憶し、「状態」として、「空き状態」、「断片化した空き状態」、又は、「使用中状態」を記憶し、ＣＰＵ１０（「移動手段」、「更新手段」、「トランザクション手段」の一例）は、「状態」が「断片化した空き状態」である記憶領域が存在する場合に、「断片化した空き状態」又は「空き状態」である記憶領域をまとめるために、「断片化した空き状態」である記憶領域に、「使用中状態」である記憶領域に記憶されているデータを移動させる移動処理を実行し、移動処理によりデータを移動させた場合に、当該データが記憶されていた記憶領域に対応する「アドレス」を移動先のアドレスに変更し（ステップＳ２１０）、当該データが移動してきた「断片化した空き状態」である記憶領域の「アドレス」を、移動してきた当該データの「レングス」を加算した値に更新する（ステップＳ２２０）更新処理を実行し、移動処理及び更新処理に対してトランザクション制御を行い、「移動データ長」（「一の移動処理（ステップＳ２１０〜ステップＳ２１４のループ処理においてステップＳ２１３の処理で「ＹＥＳ」と判定し、ループを抜けるまでに行うステップＳ２１１の処理）で移動させるデータのレングス」）は、「トランザクション可能長」（「トランザクション制御可能なレングス」）を超えない。
【００７９】
したがって、本実施形態のＩＣチップ１ａによれば、トランザクション制御可能な範囲でコンパクション処理のためのデータの移動や、管理情報の「アドレス」の更新を行うことにより、不揮発性メモリ１３のコンパクション処理に対してトランザクション制御の適用を実現し、安全にコンパクション処理を行うことができる。また、データを移動させた場合であっても、「インデックス」は更新せずに「アドレス」を更新することから、アプリケーションが「インデックス」を参照する可能性がある場合（例えば、アプリケーションの動作中）であっても、データを移動させることができる。
【００８０】
また、ＩＣチップ１ａのＣＰＵ１０（「分割手段」の一例）は、「レングス」が「トランザクション可能長」を超えている一の記憶領域について、それぞれの「レングス」が「トランザクション可能長」以下となる複数の記憶領域に分割し、不揮発性メモリ１３、分割した各記憶領域について、「アドレス」、「レングス」、「状態」、及び、「インデックス」を記憶する。これにより、「トランザクション可能長」を超えるレングスのデータについても、分割することにより、トランザクション制御を行いつつ、データを移動させることができる。
【００８１】
更に、ＩＣチップ１ａの不揮発性メモリ１３は、記憶領域毎に、当該記憶領域の次の記憶領域の「インデックス」を示す「配置順番」を更に記憶する。これにより、各記憶領域の「配置順番」を「アドレス」の大小関係から求めるより早く把握することができる。
【００８２】
更にまた、ＩＣチップ１ａの不揮発性メモリ１３は、「状態」として、「使用中状態」である記憶領域に記憶されているデータを移動させる際の状態である「移動中状態」を更に記憶し、ＣＰＵ１０は、「使用中状態」である記憶領域に記憶されているデータを移動させる際に当該記憶領域の「状態」を「使用中状態」から「移動中状態」に更新し、「使用中状態」である記憶領域に記憶されているデータを移動させた場合に、当該記憶領域の「記憶状態」を「移動中状態」から「使用中状態」に更新する。これにより、データの移動中である場合には、当該データの記憶領域の「状態」が「移動中状態」となっていることから、データの移動中に電源断が発生しても、電源の再投入時に「状態」が「移動中状態」である記憶領域の存在を確認することにより、データの移動中に電源断が発生したか否かを判定することができる。
【００８３】
［４．変形例］
次に、上記実施形態の変形例について説明する。なお、以下に説明する変形例は適宜組み合わせることができる。
【００８４】
［４．１．変形例１］
上記実施形態では、「トランザクション可能長」を超えない範囲で、「移動中状態」である複数（「移動カウンタ」分）の管理情報にそれぞれ対応する記憶領域のデータを、トランザクション制御を行いつつ移動させることとしたが、「移動中状態」である管理情報に対応する記憶領域のデータを一つずつ、トランザクション制御を行いつつ移動させることとしてもよい。
【００８５】
［４．２．変形例２］
「トランザクション可能長」は、トランザクション制御が可能な範囲で変更することができる。「トランザクション可能長」を長くすると、「移動カウンタ」の値が大きくなりやすく、一のトランザクション制御で多くのデータを移動させることができるが、途中で電源断が発生した場合には、移動の前の状態にロールバックしてしまい、移動をやり直さなければデータ量が多くなる。一方、「トランザクション可能長」を短くすると、一度のトランザクション制御で移動できるデータ量が少なくなってしまうが、途中で電源断が発生した場合であっても、ロールバックした際に、移動をやり直さなければデータ量は少なくなる。
【００８６】
［４．３．変形例３］
上記実施形態では、「インデックス」が「３」−「５」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域と、「インデックス」が「１０」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域を統合した後、更に、「インデックス」が「３」−「５」、「１０」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域と、「インデックス」が「１６」以降（「状態」が「空き状態」）である管理情報に対応する記憶領域とを統合して、「状態」が「空き状態」である連続した記憶領域を生成することとしたが、「インデックス」が「３」−「５」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域と、「インデックス」が「１０」（「状態」が「断片空き状態」）である管理情報に対応する記憶領域を統合したところ（図６に示す状態）でコンパクション処理を終了することとしてもよい。このとき、図１０に示すように、「インデックス」が「３」−「５」、「１０」である管理情報に対応する記憶領域については「インデックス」が「３」である管理情報にまとめてもよい（この領域についてはデータが記憶されておらずコンパクション処理のためにデータを移動させることがないため「レングス」が「トランザクション可能長」よりも長くてもよい）。具体的には、「インデックス」が「３」−「５」、「１０」である管理情報の「レングス」の合計を「インデックス」が「３」である管理情報の「レングス」にセットするとともに、「インデックス」が「１０」である管理情報の「配置順番」を「インデックス」が「３」の「配置順番」にセットする。そして、「インデックス」が「４」、「５」、「１０」である管理情報の「アドレス」、「レングス」、「配置順番」をクリアし、「状態」を「空き状態」に変更する。
【００８７】
図１０の状態から、「インデックス」が「３」の管理情報に対応する記憶領域に新たにデータを格納することもできる。但し、新たに格納するデータのレングスが「５０」（「インデックス」が「３」の管理情報の「レングス」）を超えない場合に限られる。図１１は、ここに、新たにレングスが「１０」のデータオブジェクトを格納した場合を示している。すなわち、ＯＳは、図１０の状態から、「インデックス」が「３」の管理情報の「レングス」に「１０」をセットし、「配置順番」に「４」をセットし、「データ種別」に「オブジェクト」をセットする。また、「インデックス」が「４」の管理情報の「状態」に「断片空き状態」をセットし、「レングス」に「５０−１０＝４０」をセットし、「配置順番」に「１１」をセットする。
【００８８】
［４．４．変形例４］
Ｊａｖａ  Ｃａｒｄに対応するＩＣカードでは、一般的に、パッケージ、インスタンス、オブジェクトのうち、オブジェクトを削除する機会が、パッケージやインスタンスを削除する機会よりも多い。そのため、パッケージ、インスタンス、オブジェクトが不揮発性メモリ１３に混在して記憶されていると、断片化した空き領域が生まれやすく、頻繁にコンパクション処理を行わなければならない。そこで、図１１に示すように、不揮発性メモリ１３において、例えば、パッケージやインスタンスは前方側から格納し、オブジェクトは後方側から格納していくこととしてもよい。これにより、オブジェクトの削除が行われても前方側では断片化した空き領域が発生しないため、パッケージやインスタンスといったオブジェクトより大きなデータの移動を避けることができる。
【符号の説明】
【００８９】
１  ＩＣカード
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  ＲＡＭ
１２  ＲＯＭ
１３  不揮発性メモリ
１４  Ｉ／Ｏ回路
２  外部機器
【図１】
2019082751.tif 000003
【図２】
2019082751.tif 000004
【図３】
2019082751.tif 000005
【図４】
2019082751.tif 000006
【図５】
2019082751.tif 000007
【図６】
2019082751.tif 000008
【図７】
2019082751.tif 000009
【図８】
2019082751.tif 000010
【図９】
2019082751.tif 000011
【図１０】
2019082751.tif 000012
【図１１】
2019082751.tif 000013
【図１２】
2019082751.tif 000014