(57)【要約】【課題】メモリ上で更新対象のデータを格納する更新可能領域が他の領域が混在するなどして不連続であっても、少ないメモリ容量でデータ更新を正しくかつ単純な計算手順で効率良く実行可能にする。【解決手段】差分データ生成送出部１１０において、差分データ復元部１２０のデータ格納メモリ１２１におけるコード領域の配置情報に相当するコード領域情報ファイル１１５を設ける。差分データ復元部１２０では、復元部１２４において、コード領域情報ファイル１１５に基づき生成された書換えアドレスにより指定された参照範囲を参照して、差分データと更新前データとから更新後データを復元する。これにより、他の領域にまたがって参照して復元処理してしまうことを防止でき、復元側でアドレス変換などの処理が不要であり、少ない簡単な処理ステップで正しい更新後データの復元が可能となる。【選択図】  図１
2004234503.tif 000002
【特許請求の範囲】
【請求項１】
更新前データから更新後データへデータを書き換えるための差分データを生成する差分データ生成装置であって、
前記更新前データ及び前記更新後データに関する、データ復元側のデータ格納手段における記憶領域の配置情報を含む記憶領域情報を基に、差分抽出時の更新前データの参照範囲を設定する領域設定手段と、
前記更新後データと、前記設定された参照範囲の前記更新前データとを比較参照して差分データを生成する差分抽出手段と、
前記生成した差分データに、前記データ復元側のデータ格納手段におけるデータ復元時の対象データのアドレス情報を含むヘッダ情報を付加した差分ファイルを生成する差分ファイル生成手段と、
を備えた差分データ生成装置。
【請求項２】
前記記憶領域情報を保持する記憶領域情報保持手段を備え、
前記データ復元側の前記データ格納手段が、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域を有する場合に、
前記記憶領域情報は、前記データ復元側のデータ格納手段における前記更新前データ及び前記更新後データを格納する記憶領域のアドレス情報を含むものであって、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域において、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域を一つの更新可能領域とし、この更新可能領域ごとの開始アドレス、終了アドレス、及びブロックサイズを含むものである請求項１に記載の差分データ生成装置。
【請求項３】
前記領域設定手段は、前記更新前データ及び前記更新後データがデータ復元側のデータ格納手段の記憶領域に対応して複数のブロックに分割されている場合に、前記差分抽出時の更新前データの参照範囲として、前記記憶領域情報に基づいて対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを参照するように前記参照範囲を設定し、
前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として設定するものである請求項２に記載の差分データ生成装置。
【請求項４】
前記ヘッダ情報は、前記データ復元側のデータ格納手段におけるデータ復元時の更新後データの書き込み範囲を示すアドレス情報を含むものである請求項１または２に記載の差分データ生成装置。
【請求項５】
前記アドレス情報は、前記データ復元側のデータ格納手段におけるデータ復元時の更新前データの参照範囲を含むものである請求項４に記載の差分データ生成装置。
【請求項６】
更新前データから更新後データへデータを書き換えるための差分データを生成する差分データ生成方法であって、
前記更新前データ及び前記更新後データに関する、データ復元側のデータ格納手段における記憶領域の配置情報を含む記憶領域情報を基に、差分抽出時の更新前データの参照範囲を設定する領域設定ステップと、
前記更新後データと、前記設定された参照範囲内の前記更新前データとを比較参照して差分データを生成する差分抽出ステップと、
前記生成した差分データに、前記データ復元側のデータ格納手段におけるデータ復元時の対象データのアドレス情報を含むヘッダ情報を付加した差分ファイルを生成する差分ファイル生成ステップと、
を有する差分データ生成方法。
【請求項７】
前記データ復元側の前記データ格納手段が、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域を有する場合であり、
前記記憶領域情報は、前記データ復元側のデータ格納手段における前記更新前データ及び前記更新後データを格納する記憶領域のアドレス情報を含むものであって、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域において、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域を一つの更新可能領域とし、この更新可能領域ごとの開始アドレス、終了アドレス、及びブロックサイズを含むものである場合に、
前記領域設定ステップにおいて、前記更新前データ及び前記更新後データがデータ復元側のデータ格納手段の記憶領域に対応して複数のブロックに分割されている場合に、前記差分抽出時の更新前データの参照範囲として、前記記憶領域情報に基づいて対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを参照するように前記参照範囲を設定し、
前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として設定することとした請求項６に記載の差分データ生成方法。
【請求項８】
請求項６または７に記載の差分データ生成方法の手順をコンピュータにより実行するためのプログラム。
【請求項９】
通信手段を介して受信した差分データを用いて、更新前データから更新後データを復元してデータを書き換える更新後データ復元装置であって、
前記更新前データ及び前記更新後データを格納するデータ格納手段と、
前記通信手段を介して送られてきた差分データ及びデータ復元時の前記データ格納手段における対象データのアドレス情報を受信する受信手段と、
前記アドレス情報に基づき指定される前記データ格納手段における参照範囲の更新前データを参照して、この更新前データと前記差分データとから更新後データを復元するデータ復元手段と、
前記復元した更新後データを保持するバッファ手段と、
前記保持した更新後データを前記アドレス情報に基づき指定される前記データ格納手段における書き込み範囲に書き込むデータ書き込み手段と、
を備えた更新後データ復元装置。
【請求項１０】
前記アドレス情報は、前記差分データを生成する差分データ生成装置において、前記更新前データ及び前記更新後データに関する前記データ格納手段における記憶領域の配置情報を含む記憶領域情報が保持され、この記憶領域情報を基に生成されるものであって、
前記データ格納手段におけるデータ復元時の更新後データの書き込み範囲を含むものである請求項９に記載の更新後データ復元装置。
【請求項１１】
前記アドレス情報は、前記データ格納手段におけるデータ復元時の更新前データの参照範囲を含むものである請求項１０に記載の更新後データ復元装置。
【請求項１２】
前記データ格納手段は、前記更新前データをブロック単位で複数のブロックに分割して格納するもので、このデータ格納手段の記憶領域について、前記差分データ生成装置に保持された記憶領域情報によって、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域が一つの更新可能領域として定義されており、
前記データ復元手段は、前記アドレス情報に基づいて前記データ格納手段における対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを前記参照範囲として参照して前記更新後データを復元し、
前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として参照して復元するものである請求項１０または１１に記載の更新後データ復元装置。
【請求項１３】
前記バッファ手段は、リングバッファ方式のバッファにより構成され、前記ブロックごとに復元された更新後データをそれぞれ保持する複数の領域を有しており、
前記データ書き込み手段は、前記バッファ手段に保持された更新後データの前記データ格納手段における書き込み範囲が、前記データ復元手段によるデータ復元時の参照範囲から外れた場合に、該当する更新後データを前記バッファ手段から前記データ格納手段に書き込み、その後前記バッファ手段における書き込み完了した更新後データの保持領域の開放を指示するものである請求項１２に記載の更新後データ復元装置。
【請求項１４】
通信手段を介して受信した差分データを用いて、更新前データから更新後データを復元してデータを書き換える更新後データ復元方法であって、
前記通信手段を介して送られてきた差分データ及び前記更新前データを格納するデータ格納手段におけるデータ復元時の対象データのアドレス情報を受信する受信ステップと、
前記アドレス情報に基づき指定される前記データ格納手段における参照範囲の更新前データを参照して、この更新前データと前記差分データとから更新後データを復元するデータ復元ステップと、
前記復元した更新後データを保持するバッファリングステップと、
前記保持した更新後データを前記アドレス情報に基づき指定される前記データ格納手段における書き込み範囲に書き込むデータ書き込みステップと、
を有する更新後データ復元方法。
【請求項１５】
前記アドレス情報は、前記差分データを生成する差分データ生成装置において、前記更新前データ及び前記更新後データに関する前記データ格納手段における記憶領域の配置情報を含む記憶領域情報が保持され、この記憶領域情報を基に生成されるものであって、
前記データ格納手段におけるデータ復元時の更新後データの書き込み範囲を含むものであり、
前記データ格納手段が、前記更新前データをブロック単位で複数のブロックに分割して格納するもので、このデータ格納手段の記憶領域について、前記差分データ生成装置に保持された記憶領域情報によって、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域が一つの更新可能領域として定義されている場合に、
前記データ復元ステップにおいて、前記アドレス情報に基づいて前記データ格納手段における対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを前記参照範囲として参照して前記更新後データを復元し、
前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として参照して復元することとした請求項１４に記載の更新後データ復元方法。
【請求項１６】
前記アドレス情報は、前記データ格納手段におけるデータ復元時の更新前データの参照範囲を含むものである請求項１５に記載の更新後データ復元方法。
【請求項１７】
前記バッファリングステップにおいて、リングバッファ方式のバッファにより構成され複数の領域を有するバッファ手段を用いて、前記ブロックごとに復元された更新後データを前記バッファ手段の複数の領域のうちの一つに保持し、
前記データ書き込みステップにおいて、前記バッファ手段に保持された更新後データの前記データ格納手段における書き込み範囲が、前記データ復元ステップにおけるデータ復元時の参照範囲から外れた場合に、該当する更新後データを前記バッファ手段から前記データ格納手段に書き込み、その後前記バッファ手段における書き込み完了した更新後データの保持領域の開放を指示することとした請求項１５または１６に記載の更新後データ復元方法。
【請求項１８】
請求項１４〜１７のいずれかに記載の更新後データ復元方法の手順をコンピュータにより実行するためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、差分データを用いて自装置内のデータを更新するデータ更新方法に関し、このデータ更新方法に用いる差分データ生成装置及び方法、更新後データ復元装置及び方法、並びにプログラムに関する。
【０００２】
【従来の技術】
パーソナルコンピュータ、携帯情報端末（ＰＤＡ）、携帯電話機など、所定のプログラムに基づくプロセッサの動作によって装置動作の少なくとも一部を実行する端末装置では、プログラムの改良などのために、対象のプログラムを含むデータのバージョンを更新する、いわゆるバージョンアップが行われることがある。このようなデータのバージョン更新時には、フラッシュＲＯＭ、ハードディスクなどの書換え可能な記録媒体に記録された更新前のソフトウェア等のデータ（以下、更新前データと称する）が、他のバージョン（一般には新しいバージョン）のソフトウェア等のデータ（以下、更新後データと称する）に書き換えられる。この場合、単純に更新前データを更新後データに置き換えることもできるが、更新前データと更新後データとの差分データを生成し、この差分データを基に更新前データから更新後データを生成して書き換えることも従来より多く行われている。
【０００３】
このようなデータ更新方法の一つとして、ネットワークなどの通信路を介して更新用のデータを転送してデータ更新を行うものが提案されている。この場合、送信側装置で更新前データと更新後データとを比較して差分を抽出し、その差分データのみを転送して、受信側の端末装置では装置内にある更新前データと転送されてきた差分データとから更新後データを復元し、データを更新するような手順が用いられる（例えば、特許文献１参照）。
【０００４】
上記のような差分データを用いたデータ更新技術を実用に使う際には、更新前のデータ全体と更新後のデータ全体とを比較して差分を抽出するのではなく、全体をいくつかの部分（ブロックと称する）に分けて差分を抽出することが行われることがある（例えば、非特許文献１参照）。なお、上記非特許文献１における詳細な差分抽出技術は非特許文献２に示されている。
【０００５】
ここで、非特許文献２に示された差分抽出技術の概要を図１１〜図１２を参照して説明する。この差分抽出技術は、Ｂｌｏｃｋ−Ｍｏｖｅアルゴリズムと呼ばれるもので、更新前データと更新後データとを比較して一致するデータ列を検索し、一致するデータ列はそのまま更新前データから更新後データへＭｏｖｅデータとして移動するようにしてコピーし、一致しないデータ列は新たなデータ列をＡｄｄデータとして追加して書き込むことで、差分データを生成するものである。
【０００６】
図１１は差分データ抽出に用いる疑似コードを示したものである。擬似コード中の（ｐ，ｑ，ｌ）は連続したデータの移動の命令であり、更新前データのｐ番地からのｌ（エル）バイトを更新後データのｑ番地に運べという意味を表す。ｐ１からｐ３は更新前データ中のアドレスを示す。更新前データがメモリ上にある場合は、ｐ１からｐ３はメモリ上のアドレスと更新前データの先頭アドレスとの差である。ファイル上に更新前データがある場合は、ｐ１からｐ３はファイルの先頭からの距離で表される。ｑ１からｑ３は、更新後データ中のアドレスであり、意味は更新前データにおけるｐ１からｐ３と同様である。
【０００７】
図１２はデータの一例を示したもので、図１２（Ａ）は更新前データ、図１２（Ｂ）は更新後データ、図１２（Ｃ）はこれらの差分データをそれぞれ示す図である。図１２（Ａ），（Ｂ）のような更新前データ及び更新後データの場合、図１１の疑似コードからの出力は、図１２（Ｃ）に示すように、（ｐ２，ｑ２，２）（ｐ３，ｑ３，２）（ｐ１，ｑ１，３）となる。この命令を差分データとして受信側の端末装置に転送し、端末装置において図１２（Ａ）の更新前データに対して適用することにより、図１２（Ｂ）の更新後データを得ることができる。
【０００８】
上記のようなデータ更新方法を用いることによって、転送する差分データが小さくなり、受信側の端末装置では少量の差分データを基に更新後データを復元生成してデータを更新することが可能となる。
【０００９】
また、上記非特許文献２に示されるように、差分データを生成する際にデータ全体を比較するのではなく、所定単位でデータを分割したブロックごとを比較することにより、差分抽出にかかる時間を短縮できる。更新前データと更新後データの違いが少なく、更新前データがほとんど更新後データの同じブロック内にある場合、上記のようにブロック単位でデータの一部分のみを参照することで、差分抽出のための計算量を大幅に減らすことが可能である。またこの場合、ブロックに分けることによる差分データ量の増大はあまり大きくなく、差分データを小さく維持できる。
【００１０】
一方、ブロック間のデータの移動量が大きく、１対１のブロックの比較による差分抽出のみでは十分に差分データを小さくすることができない場合には、１対１ではなく、前後の複数のブロックと書換えるブロックの更新後データを比較して差分データを生成し、更新前データの前後の複数ブロックを参照しながら更新後データを復元する方法も知られている。この方法は上記非特許文献１に示されている。このように前後ブロックをも参照することによって、ブロックをまたがって大きな移動をしているデータについても更新前データから更新後データにコピーすることができ、差分データの量をより減らすことができる。
【００１１】
【特許文献１】
特開平８−２５５１０４号公報（図７）
【非特許文献１】
Ｊａｍｅｓ  Ｊ．  Ｈｕｎｔ，  Ｋｉｅｍ−Ｐｈｏｎｇ  Ｖｏ，  Ｗａｌｔｅｒ  Ｆ．  Ｔｉｃｈｙ，  「Ｄｅｌｔａ  Ａｌｇｏｒｉｔｈｍｓ：  Ａｎ  Ｅｍｐｉｒｉｃａｌ  Ａｎａｌｙｓｉｓ」，  ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｆ  Ｓｏｆｔｗａｒｅ  Ｅｎｇｉｎｅｅｒｉｎｇ  ａｎｄ  Ｍｅｔｈｏｄｏｌｏｇｙ，  ＡＣＭ  （Ａｓｓｏｃｉａｔｉｏｎ  ｆｏｒ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｒｙ），  １９９８年４月，第７巻，第２号，ｐ．１９２−２１４
【非特許文献２】
Ｗａｌｔｅｒ  Ｆ．  Ｔｉｃｈｙ，  「Ｔｈｅ  Ｓｔｒｉｎｇ−ｔｏ−Ｓｔｒｉｎｇ  Ｃｏｒｒｅｃｔｉｏｎ  Ｐｒｏｂｒｅｍ  ｗｉｔｈ  Ｂｌｏｃｋ  Ｍｏｖｅｓ」，  ＡＣＭ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍｓ，  ＡＣＭ  （Ａｓｓｏｃｉａｔｉｏｎ  ｆｏｒ  Ｃｏｍｐｕｔｉｎｇ  Ｍａｃｈｉｎｅｒｙ），  １９８４年１１月，第２巻，第４号，ｐ．３０９−３２１
【００１２】
【発明が解決しようとする課題】
しかしながら、上記従来例におけるデータ更新方法においては、更新用の差分データ等を受信してデータ更新を行う端末装置に通常のコンピュータを想定しており、メモリ等のハードウェア資源に制約の多い携帯電話機、携帯情報端末などの組込み系機器での使用が考慮されていない。
【００１３】
携帯電話機などの組込み系機器では、下記のような特殊性が存在する。
（１）プログラムを更新する際に、ワーキング領域やデータ格納領域として用いられるＲＡＭやフラッシュＲＯＭ等のメモリにおいて、更新前データを保持しながら、更新前データが格納されているのとは違う領域に更新後データを格納しようとしても、すべての更新後データを格納するために十分なメモリ領域が確保できない場合が多い。
【００１４】
（２）最近の機器では、フラッシュＲＯＭ等の書換え可能不揮発性メモリ上に、装置プログラム等の更新すべきデータを保持する領域（更新可能領域、コード領域とも称する）と、ユーザが使用時に格納したデータ等を保持する領域でデータ更新の際に書換え対象としない領域（更新不可領域、ユーザ領域とも称する）とが混在することがある。
【００１５】
このような特殊性を持つ機器で、上記従来例のようなデータ更新方法をそのまま用いようとすると、下記のような不都合が生じる。
【００１６】
第１に、メモリ上に更新前データと更新後データの双方を格納する領域が十分にないため、更新の際に更新後データを保存できない。また、更新後データの復元と並行して更新前データが格納されている領域に更新後データを書き込もうとすると、差分データを用いて復元時に参照する更新前データの内容が変わってしまい、正しい復元をすることができない。
【００１７】
図１３は更新後データの復元と書き込みを並行して行う場合の問題点を説明する図である。ここでは、上記のように書換え可能不揮発性メモリ５００において更新不可領域であるユーザ領域５０１，５０３と更新可能領域であるコード領域５０２，５０４とが混在している状態でのデータ更新動作を説明する。図示のように、コード領域５０２，５０４のブロックａ〜ｇを更新することとする。
【００１８】
この場合、データ更新を行う際に、メモリのアドレス５１０上の書換えアドレス５１１を先頭とする参照範囲５１２（図示例ではブロックｂ）の更新前データを参照して、差分データを基に更新後データを復元するとともに、この更新後データを書き込み範囲５１３（ブロックｂ）に書き込むことになる。このとき、参照範囲５１２と書き込み範囲５１３とが重なっており、復元及び書き込みの動作中にも参照範囲５１２のデータが変化してしまい、更新後データの復元ができなくなる。
【００１９】
また、フラッシュＲＯＭへのデータ書き込みの際には、１つのブロック全体を消去してデータを書き込む必要があり、この点からも、同一ブロック内を参照しながらの復元は困難である。
【００２０】
更新前データと更新後データとの比較によって抽出した差分データを用いて更新後データを復元する際には、変化のない更新前データの参照が必要である。コンピュータ上でデータ更新を行う場合のように、更新前データの領域とは別の領域に更新後データを復元して格納する場合は、上記問題は生じないが、図１３のようにメモリ容量等の制約があり同一の領域において更新前データから更新後データへ書き換える必要がある場合は、上記従来例のようなデータ更新方法をそのまま適用することができない。
【００２１】
第２に、従来の技術で述べたような前後の複数ブロックを参照して更新後データを復元するようにした場合は、更新不可領域であるユーザ領域と更新可能領域であるコード領域とが混在してコード領域が不連続であったり、コード領域においてブロックサイズが異なるブロックが混在していると、正しい復元をすることができない。
【００２２】
現在の組込み機器は大規模化、複雑化しており、そのメモリ配置、使用法が上記のような不連続コード領域、不均一なブロックサイズを含むことがある。
【００２３】
１つのブロックごとの比較のみではなく前後の複数のブロックを比較して復元データを生成する際に、同一サイズのブロックが連続していない場合は、差分抽出手段がデータ更新する領域が連続していると解釈して差分を抽出してしまう。データ復元時にこの差分データを基に前後の複数ブロックを参照して更新後データを復元すると、差分抽出時とは別のデータを参照してしまうことがあり、データ復元を正常に行えないおそれがある。
【００２４】
図１４は更新可能領域であるコード領域が不連続である場合の問題点を説明する図である。ここでは、図１３と同様に書換え可能不揮発性メモリ５００において更新不可領域であるユーザ領域５０１，５０３と更新可能領域であるコード領域５０２，５０４とが混在している状態における、コード領域５０２，５０４のブロックａ〜ｇのデータ更新動作を説明する。
【００２５】
図１４（Ａ）に示すように、更新前データ５４０を従来の方法に従って均一かつ連続なブロックサイズに分けて、複数ブロックを比較して差分抽出を行う場合、更新前データ５４０のファイル中の位置５５０において、ブロックｂについては参照範囲５５１を、ブロックｄについては参照範囲５５２を更新前データと更新後データとで比較参照することになる。更新後データの復元時には、図１４（Ｂ）に示すように、書換え可能不揮発性メモリ５００のアドレス５１０上において、ブロックｂについては参照範囲５３１を、ブロックｄについては参照範囲５３２を参照することとなる。このとき、ブロックｄについてはユーザ領域５０３を参照してしまい、差分抽出時と復元時とで参照先の内容が食い違う部分５３３，５５３が生じ、正しくデータを復元することができない。また、この場合、ユーザ領域とコード領域の区別を認識していないので、ユーザ領域にもデータを書き込んでしまう可能性がある。
【００２６】
上記のようなデータ復元時の参照範囲の位置の相違を避けるために、図１５（Ａ），（Ｂ）に示すように更新前データを書換え可能不揮発性メモリ５００上に展開したときと同じ配置になるように、ユーザ領域部分にダミーデータ５６１，５６２を挿入して展開し、この展開した更新前データ５６０によって差分抽出することも考えられる。この場合、更新前データ５６０のメモリ上のアドレス５７０において、ブロックｂについては参照範囲５７１を、ブロックｄについては参照範囲５７２を更新前データと更新後データとで比較参照することになる。
【００２７】
この方法では、ブロックｄについては、差分抽出時にはダミーデータ５６２を参照し、更新後データの復元時にはダミーデータ５６２とは異なるユーザ領域５０３を参照してしまうため、やはり参照先の内容が食い違う部分５３３，５７３が生じ、データ復元を正しく行うことができない。
【００２８】
このように、携帯電話機などの組込み系機器は、上記（１）、（２）のような特殊性を有し、ハードウェア的な制約が大きいため、従来のようなデータ更新方法をそのまま用いることは困難であった。このため、より少ないハードウェア資源で更新後データの復元、書き込みを実行可能にして、更新すべきデータを正しく更新し、更新しないデータを変化させないデータ更新方法が求められている。
【００２９】
本発明は、上記課題を解決するためになされたもので、メモリ容量等のハードウェア資源に制約のある機器であっても、メモリ上の同じ領域においてプログラム等のデータを更新前データから更新後データに書き換えて更新できるようにした差分データ生成装置及び方法、更新後データ復元装置及び方法、並びにプログラムを提供することを目的とする。
【００３０】
また、本発明は、メモリ上で更新不可領域と更新可能領域が混在して更新前データや更新後データの格納領域が不連続であったり、異なるブロックサイズの格納領域が混在する場合であっても、データ更新を正しく、かつ単純な計算手順で効率良く実行できるようにした差分データ生成装置及び方法、更新後データ復元装置及び方法、並びにプログラムを提供することを目的とする。
【００３１】
【課題を解決するための手段】
本発明は、第１に、更新前データから更新後データへデータを書き換えるための差分データを生成する差分データ生成装置であって、前記更新前データ及び前記更新後データに関する、データ復元側のデータ格納手段における記憶領域の配置情報を含む記憶領域情報を基に、差分抽出時の更新前データの参照範囲を設定する領域設定手段と、前記更新後データと、前記設定された参照範囲の前記更新前データとを比較参照して差分データを生成する差分抽出手段と、前記生成した差分データに、前記データ復元側のデータ格納手段におけるデータ復元時の対象データのアドレス情報を含むヘッダ情報を付加した差分ファイルを生成する差分ファイル生成手段と、を備えた差分データ生成装置を提供する。
【００３２】
これにより、例えばデータ復元側のデータ格納手段において更新対象のデータを格納する更新可能領域とユーザデータなどを格納する更新不可領域とが混在して更新可能領域が不連続になっている場合であっても、差分抽出手段では記憶領域情報を基に連続した一つの更新可能領域のみを参照して差分データを生成することが可能となる。また、復元側の装置においても、差分ファイル中のヘッダ情報を基に連続した一つの更新可能領域のみを参照して更新前データと差分データとから更新後データを正常に復元することが可能である。
【００３３】
また、第２に、前記記憶領域情報を保持する記憶領域情報保持手段を備え、前記データ復元側の前記データ格納手段が、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域を有する場合に、前記記憶領域情報は、前記データ復元側のデータ格納手段における前記更新前データ及び前記更新後データを格納する記憶領域のアドレス情報を含むものであって、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域において、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域を一つの更新可能領域とし、この更新可能領域ごとの開始アドレス、終了アドレス、及びブロックサイズを含むものとする。
【００３４】
これにより、更新前データ及び更新後データが複数のブロックからなり、ブロック単位で差分データの生成を行う場合において、記憶領域情報を基に連続した一つの更新可能領域のみを参照して差分データを生成することが可能となり、他の領域にまたがって参照して差分データを生成してしまうような不具合を防止可能である。
【００３５】
また、第３に、前記領域設定手段は、前記更新前データ及び前記更新後データがデータ復元側のデータ格納手段の記憶領域に対応して複数のブロックに分割されている場合に、前記差分抽出時の更新前データの参照範囲として、前記記憶領域情報に基づいて対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを参照するように前記参照範囲を設定し、前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として設定するものとする。
【００３６】
これにより、更新前データ及び更新後データが複数のブロックからなり、対象ブロックとその前後のブロックを合わせた複数のブロックを参照して差分データの生成を行う場合において、記憶領域情報を基に他の領域にまたがることなく、連続した一つの更新可能領域のみを参照して差分データを生成することが可能である。またこの場合、複数のブロックを参照することで、差分データのデータ量を削減可能である。したがって、復元側の装置では、データ格納手段の更新可能領域が不連続であっても、複数のブロックを参照しながら正常にデータの復元を行うことが可能となる。
【００３７】
また、第４に、前記ヘッダ情報は、前記データ復元側のデータ格納手段におけるデータ復元時の更新後データの書き込み範囲を示すアドレス情報を含むものとする。
【００３８】
また、第５に、前記アドレス情報は、前記データ復元側のデータ格納手段におけるデータ復元時の更新前データの参照範囲を含むものとする。
【００３９】
これにより、復元側の装置では、ヘッダ情報を利用して、差分データと更新前データの参照による更新後データの復元処理と、復元した更新後データの書き込み処理とを適切に実行でき、復元時に他の領域にまたがって参照してしまったり、まだ参照範囲にあるブロックに更新後データを書き込んでしまうような不具合を防止可能である。このため、正常に更新前データから更新後データへの書き換えが可能となる。また、それらの動作を記憶領域情報を必要とせずに実行可能である。
【００４０】
本発明は、第６に、更新前データから更新後データへデータを書き換えるための差分データを生成する差分データ生成方法であって、前記更新前データ及び前記更新後データに関する、データ復元側のデータ格納手段における記憶領域の配置情報を含む記憶領域情報を基に、差分抽出時の更新前データの参照範囲を設定する領域設定ステップと、前記更新後データと、前記設定された参照範囲内の前記更新前データとを比較参照して差分データを生成する差分抽出ステップと、前記生成した差分データに、前記データ復元側のデータ格納手段におけるデータ復元時の対象データのアドレス情報を含むヘッダ情報を付加した差分ファイルを生成する差分ファイル生成ステップと、を有する差分データ生成方法を提供する。
【００４１】
これにより、例えばデータ復元側のデータ格納手段において更新対象のデータを格納する更新可能領域とユーザデータなどを格納する更新不可領域とが混在して更新可能領域が不連続になっている場合であっても、記憶領域情報を基に連続した一つの更新可能領域のみを参照して差分データを生成することが可能となる。また、復元側の装置においても、記憶領域情報を基に連続した一つの更新可能領域のみを参照して更新前データと差分データとから更新後データを正常に復元することが可能である。
【００４２】
また、第７に、前記データ復元側の前記データ格納手段が、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域を有する場合であり、前記記憶領域情報は、前記データ復元側のデータ格納手段における前記更新前データ及び前記更新後データを格納する記憶領域のアドレス情報を含むものであって、前記更新前データまたは前記更新後データをブロック単位で格納する記憶領域において、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域を一つの更新可能領域とし、この更新可能領域ごとの開始アドレス、終了アドレス、及びブロックサイズを含むものである場合に、前記領域設定ステップにおいて、前記更新前データ及び前記更新後データがデータ復元側のデータ格納手段の記憶領域に対応して複数のブロックに分割されている場合に、前記差分抽出時の更新前データの参照範囲として、前記記憶領域情報に基づいて対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを参照するように前記参照範囲を設定し、前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として設定することとする。
【００４３】
これにより、更新前データ及び更新後データが複数のブロックからなり、対象ブロックとその前後のブロックを合わせた複数のブロックを参照して差分データの生成を行う場合において、記憶領域情報を基に他の領域にまたがることなく、連続した一つの更新可能領域のみを参照して差分データを生成することが可能である。またこの場合、複数のブロックを参照することで、差分データのデータ量を削減可能である。したがって、復元側の装置では、データ格納手段の更新可能領域が不連続であっても、複数のブロックを参照しながら正常にデータの復元を行うことが可能となる。
【００４４】
本発明は、第８に、上記第６または第７に記載の差分データ生成方法の手順をコンピュータにより実行するためのプログラムを提供する。
【００４５】
このプログラムの実行により、復元側のデータ格納手段上で更新不可領域と更新可能領域が混在して更新前データや更新後データの格納領域が不連続であったり、異なるブロックサイズの格納領域が混在する場合であっても、データ更新を正しく、かつ単純な計算手順で効率良く実行することが可能となる。
【００４６】
本発明は、第９に、通信手段を介して受信した差分データを用いて、更新前データから更新後データを復元してデータを書き換える更新後データ復元装置であって、前記更新前データ及び前記更新後データを格納するデータ格納手段と、前記通信手段を介して送られてきた差分データ及びデータ復元時の前記データ格納手段における対象データのアドレス情報を受信する受信手段と、前記アドレス情報に基づき指定される前記データ格納手段における参照範囲の更新前データを参照して、この更新前データと前記差分データとから更新後データを復元するデータ復元手段と、前記復元した更新後データを保持するバッファ手段と、前記保持した更新後データを前記アドレス情報に基づき指定される前記データ格納手段における書き込み範囲に書き込むデータ書き込み手段と、を備えた更新後データ復元装置を提供する。
【００４７】
これにより、例えばデータ格納手段において更新対象のデータを格納する更新可能領域とユーザデータなどを格納する更新不可領域とが混在して更新可能領域が不連続になっている場合であっても、データ復元手段ではアドレス情報に基づき連続した一つの更新可能領域のみを参照して更新後データを復元することが可能となる。この場合、復元時にアドレス変換等の処理が不要であり、少ない簡単な手順で復元処理が可能である。
【００４８】
また、第１０に、前記アドレス情報は、前記差分データを生成する差分データ生成装置において、前記更新前データ及び前記更新後データに関する前記データ格納手段における記憶領域の配置情報を含む記憶領域情報が保持され、この記憶領域情報を基に生成されるものであって、前記データ格納手段におけるデータ復元時の更新後データの書き込み範囲を含むものとする。
【００４９】
また、第１１に、前記アドレス情報は、前記データ格納手段におけるデータ復元時の更新前データの参照範囲を含むものとする。
【００５０】
これにより、アドレス情報に基づき、差分データと更新前データの参照による更新後データの復元処理と、復元した更新後データの書き込み処理とを少量のメモリにおいて適切に実行でき、復元時に他の領域にまたがって参照してしまったり、まだ参照範囲にあるブロックに更新後データを書き込んでしまうような不具合を防止可能である。このため、一つのデータ格納メモリ上において正常に更新前データから更新後データへの書き換えが可能となる。
【００５１】
また、第１２に、前記データ格納手段は、前記更新前データをブロック単位で複数のブロックに分割して格納するもので、このデータ格納手段の記憶領域について、前記差分データ生成装置に保持された記憶領域情報によって、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域が一つの更新可能領域として定義されており、前記データ復元手段は、前記アドレス情報に基づいて前記データ格納手段における対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを前記参照範囲として参照して前記更新後データを復元し、前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として参照して復元するものとする。
【００５２】
これにより、更新前データ及び更新後データが複数のブロックからなり、対象ブロックとその前後のブロックを合わせた複数のブロックを参照して更新データの復元を行う場合に、データ格納手段の更新可能領域が不連続であっても、アドレス情報を基に他の領域にまたがることなく、連続した一つの更新可能領域のみを参照して正常にデータの復元を行うことが可能となる。
【００５３】
また、第１３に、前記バッファ手段は、リングバッファ方式のバッファにより構成され、前記ブロックごとに復元された更新後データをそれぞれ保持する複数の領域を有しており、前記データ書き込み手段は、前記バッファ手段に保持された更新後データの前記データ格納手段における書き込み範囲が、前記データ復元手段によるデータ復元時の参照範囲から外れた場合に、該当する更新後データを前記バッファ手段から前記データ格納手段に書き込み、その後前記バッファ手段における書き込み完了した更新後データの保持領域の開放を指示するものとする。
【００５４】
これにより、リングバッファ方式のバッファ手段を用いることで、データ格納手段を最小限のメモリ容量として、更新後データの復元処理と、復元した更新後データの書き込み処理とを簡単かつ適切に実行でき、一つのデータ格納メモリ上において正常に更新前データから更新後データへの書き換えが可能となる。また、バッファ手段についても、メモリ容量を削減できる。例えば、バッファ手段の各領域のサイズは、データ格納手段における最大ブロックサイズとすればよい。また、バッファ手段の領域数（ブロック数）ｎは、復元時に参照するブロック数をｋとすると、ｋ＝２ｎ−１の関係が成り立つため、ブロック数ｎ＝（ｋ＋１）／２の領域を設けるようにすれば十分である。
【００５５】
本発明は、第１４に、通信手段を介して受信した差分データを用いて、更新前データから更新後データを復元してデータを書き換える更新後データ復元方法であって、前記通信手段を介して送られてきた差分データ及び前記更新前データを格納するデータ格納手段におけるデータ復元時の対象データのアドレス情報を受信する受信ステップと、前記アドレス情報に基づき指定される前記データ格納手段における参照範囲の更新前データを参照して、この更新前データと前記差分データとから更新後データを復元するデータ復元ステップと、前記復元した更新後データを保持するバッファリングステップと、前記保持した更新後データを前記アドレス情報に基づき指定される前記データ格納手段における書き込み範囲に書き込むデータ書き込みステップと、を有する更新後データ復元方法を提供する。
【００５６】
これにより、例えばデータ格納手段において更新対象のデータを格納する更新可能領域とユーザデータなどを格納する更新不可領域とが混在して更新可能領域が不連続になっている場合であっても、アドレス情報に基づき連続した一つの更新可能領域のみを参照して更新後データを復元することが可能となる。この場合、復元時にアドレス変換等の処理が不要であり、少ない簡単な手順で復元処理が可能である。
【００５７】
また、第１５に、前記アドレス情報は、前記差分データを生成する差分データ生成装置において、前記更新前データ及び前記更新後データに関する前記データ格納手段における記憶領域の配置情報を含む記憶領域情報が保持され、この記憶領域情報を基に生成されるものであって、前記データ格納手段におけるデータ復元時の更新後データの書き込み範囲を含むものであり、前記データ格納手段が、前記更新前データをブロック単位で複数のブロックに分割して格納するもので、このデータ格納手段の記憶領域について、前記差分データ生成装置に保持された記憶領域情報によって、前記データ格納手段上のアドレスが連続し、かつ同一のブロックサイズの一つまたは複数のブロックからなる記憶領域が一つの更新可能領域として定義されている場合に、前記データ復元ステップにおいて、前記アドレス情報に基づいて前記データ格納手段における対象のブロックとその前後の一つまたは複数のブロックとを合わせた複数のブロックを前記参照範囲として参照して前記更新後データを復元し、前記対象のブロックから求めた前記参照範囲が前記更新可能領域に収まらない場合は、前記参照範囲内であり、かつ前記更新可能領域内である領域を新たに前記参照範囲として参照して復元することとする。
【００５８】
また、第１６に、前記アドレス情報は、前記データ格納手段におけるデータ復元時の更新前データの参照範囲を含むものとする。
【００５９】
これにより、更新前データ及び更新後データが複数のブロックからなり、対象ブロックとその前後のブロックを合わせた複数のブロックを参照して更新データの復元を行う場合に、データ格納手段の更新可能領域が不連続であっても、アドレス情報を基に他の領域にまたがることなく、連続した一つの更新可能領域のみを参照して正常にデータの復元を行うことが可能となる。
【００６０】
また、第１７に、前記バッファリングステップにおいて、リングバッファ方式のバッファにより構成され複数の領域を有するバッファ手段を用いて、前記ブロックごとに復元された更新後データを前記バッファ手段の複数の領域のうちの一つに保持し、前記データ書き込みステップにおいて、前記バッファ手段に保持された更新後データの前記データ格納手段における書き込み範囲が、前記データ復元ステップにおけるデータ復元時の参照範囲から外れた場合に、該当する更新後データを前記バッファ手段から前記データ格納手段に書き込み、その後前記バッファ手段における書き込み完了した更新後データの保持領域の開放を指示することとする。
【００６１】
これにより、リングバッファ方式のバッファ手段を用いることで、データ格納手段を最小限のメモリ容量として、更新後データの復元処理と、復元した更新後データの書き込み処理とを簡単かつ適切に実行でき、一つのデータ格納メモリ上において正常に更新前データから更新後データへの書き換えが可能となる。
【００６２】
本発明は、第１８に、上記第１４〜第１７のいずれかに記載の更新後データ復元方法の手順をコンピュータにより実行するためのプログラムを提供する。
【００６３】
このプログラムの実行により、復元側のデータ格納手段上で更新不可領域と更新可能領域が混在して更新前データや更新後データの格納領域が不連続であったり、異なるブロックサイズの格納領域が混在する場合であっても、データ更新を正しく、かつ単純な計算手順で効率良く実行することが可能となる。
【００６４】
【発明の実施の形態】
以下、図面を参照して本発明の実施形態を説明する。
図１は本発明の実施形態に係るデータ更新方法を実現するデータ更新装置の機能的構成を示すブロック図である。本実施形態では、データ更新装置の一例として、携帯電話機等の端末装置に格納されている動作プログラム等を含むデータのバージョンを更新する場合の構成及び動作の例を説明する。
【００６５】
本実施形態のデータ更新装置は、サーバ装置において設けられる差分データ生成送出部１１０と、携帯電話機等の端末装置において設けられる差分データ復元部１２０とが通信用の有線または無線のネットワーク１３０を介して接続されて構成されている。このデータ更新装置は、例えば、移動体通信システムの無線通信網によるネットワークを介して、差分データをサーバ装置から端末装置へ転送することによって、通信回線経由で端末装置内のデータを更新する場合などに用いられる。
【００６６】
差分データ生成送出部１１０は、更新前データ１０１及び更新後データ１０２を格納するハードディスク等からなるデータ格納部１１１と、更新前データ１０１と更新後データ１０２との差分を抽出して差分データを生成する差分抽出部１１２と、生成した差分データを結合した送信用の結合ファイル１０５を格納する送信バッファ１１３と、結合ファイル１０５等のデータをネットワーク１３０を経由して差分データ復元部１２０に対して送信する送信部１１４とを備えている。また、受信側の端末装置のメモリにおけるコード領域（更新可能領域）のブロック配置情報を含むコード領域情報ファイル１１５を記憶する領域情報記憶部１１８と、コード領域情報ファイル１１５の内容に基づき差分抽出時の参照範囲を設定して差分抽出部１１２に対して指示するコード領域設定部１１６と、各部の制御を行う制御部１１７とを備えている。
【００６７】
ここで、コード領域設定部１１６、領域情報記憶部１１８及び制御部１１７が特許請求の範囲に記載の領域設定手段の機能を実現する。また、コード領域情報ファイル１１５が特許請求の範囲に記載の記憶領域情報に相当し、領域情報記憶部１１８が特許請求の範囲に記載の記憶領域情報保持手段に相当する。また、差分抽出部１１２及び制御部１１７が特許請求の範囲に記載の差分抽出手段の機能を実現する。また、差分抽出部１１２、送信バッファ１１３及び制御部１１７が特許請求の範囲に記載の差分ファイル生成手段の機能を実現する。
【００６８】
差分データ復元部１２０は、更新するプログラム等のデータを格納する書換え可能不揮発メモリ（フラッシュＲＯＭなど）等によるデータ格納メモリ１２１を備えている。また、差分データ生成送出部１１０から送られた結合ファイル１０５等のデータを受信する受信部１２２と、受信した結合ファイル１０５を格納する受信バッファ１２３と、結合ファイル１０５とデータ格納メモリ１２１内の更新前データとを参照しながらブロック毎に更新後データを復元する復元部１２４と、復元された更新後データを一旦保持する復元バッファ１２５と、復元バッファ１２５に格納された更新後データをデータ格納メモリ１２１に対して書き込むメモリ書き込み部１２６と、各部の制御を行う制御部１２７とを備えている。
【００６９】
ここで、データ格納メモリ１２１が特許請求の範囲に記載のデータ格納手段に相当し、復元バッファ１２５が特許請求の範囲に記載のバッファ手段に相当する。また、受信部１２２及び受信バッファ１２３が特許請求の範囲に記載の受信手段の機能を実現する。また、復元部１２４及び制御部１２７が特許請求の範囲に記載のデータ復元手段の機能を実現する。また、メモリ書き込み部１２６及び制御部１２７が特許請求の範囲に記載のデータ書き込み手段の機能を実現する。
【００７０】
本実施形態では、データ格納メモリ１２１において、ユーザ領域２０１、コード領域２０２、ユーザ領域２０３、コード領域２０４…のように、プログラム等の更新対象のデータを保持するコード領域（更新可能領域）２０２，２０４と、ユーザデータ等の更新しないデータを保持するユーザ領域（更新不可領域）２０１，２０３とが混在し、かつ、コード領域２０２とコード領域２０４でブロックサイズが異なる場合を示す。
【００７１】
次に、データ更新時のデータの流れについて概略を説明する。差分データ生成送出部１１０のデータ格納部１１１において、更新前データ１０１及び更新後データ１０２はそれぞれ連続したデータの状態で格納される。すなわち、図１のように端末装置のデータ格納メモリ１２１においてコード領域２０２，２０４が不連続であっても、これに対応する複数のコード領域１０３，１０４のデータが結合された状態で格納される。それぞれのコード領域１０３，１０４は、更新前データ及び更新後データをメモリ上に格納した時の連続する同じサイズのブロック群を示している。
【００７２】
ここでは、端末装置のデータ格納メモリ１２１におけるコード領域のブロックａ，ｂ，ｃ，ｄ，ｅ，ｆ，ｇにそれぞれ対応する複数ブロックのデータとして、更新前データ１０１はａ１〜ｇ１、更新後データ１０２はａ２〜ｇ２を格納するものとする。このように更新前データ１０１、更新後データ１０２、差分データの結合ファイル１０５などはブロックという単位で区切られている。ブロックは、差分データ復元部１２０のデータ格納メモリ１２１における一括消去時の単位である。なお、更新前データ１０１及び更新後データ１０２は、他の装置などから提供されるものとする。
【００７３】
差分抽出部１１２は、制御部１１７の指示に基づき、更新前データ１０１と更新後データ１０２との差分を抽出する。このとき、前述したＢｌｏｃｋ−Ｍｏｖｅアルゴリズムにより、データ格納部１１１に格納された更新前データ１０１と更新後データ１０２とを比較して一致するデータ列を検索し、一致するデータ列はそのまま更新前データから更新後データへＭｏｖｅデータとして移動するようにしてコピーし、一致しないデータ列は新たなデータ列をＡｄｄデータとして追加して書き込むことを指示する命令を含む差分データを生成する。この差分データの生成方法については、前記非特許文献１及び非特許文献２に詳しく記載されている。本実施形態では、更新対象のブロックの前後を含めた複数ブロックを比較参照することにより、ブロック毎に差分データを生成する場合の例を説明する。
【００７４】
そして、差分抽出部１１２は、ブロック毎に生成した差分データにヘッダ情報を付け、所定単位の送信用データとしてまとめた結合ファイル１０５にして、これを送信バッファ１１３に格納する。この結合ファイル１０５は、更新前データ１０１から更新後データ１０２への変更箇所を示した差分データａ１２〜ｇ１２を結合したものとなる。そして、送信部１１４より結合ファイル１０５をネットワーク１３０を介して送信する。
【００７５】
差分データ復元部１２０では、差分データ生成送出部１１０から転送された結合ファイル１０５を受信部１２２で受信し、受信バッファ１２３に格納する。復元部１２４は、受信バッファ１２３中の結合ファイル１０５とデータ格納メモリ１２１中の更新前データとを参照しながら更新後データを復元する。本実施形態では、更新対象のブロックの前後を含めた複数ブロックを参照することにより、ブロック毎に更新後データを復元する場合の例を説明する。そして、復元部１２４は、ブロック毎に復元した更新後データを復元バッファ１２５に一時的に格納して蓄積する。
【００７６】
復元バッファ１２５は、複数（図示例では２つ）の領域１２５ａ，１２５ｂに分かれた構成となっており、それぞれの領域のサイズはデータ格納メモリ１２１中の最大のブロックのサイズと同じとする。この復元バッファ１２５は、リングバッファ方式で管理され、データの書き込み、読み出しが順次行われる。リングバッファについては、（石畑清著、「アルゴリズムとデータ構造」、岩波講座ソフトウエア科学、岩波書店、１９８９年、ｐ．４６−４８）が詳しい。
【００７７】
データ格納メモリ１２１は、データの更新が始まる前は更新前データを格納している。復元部１２４は、１つのブロックの復元が終わると、データ格納メモリ１２１中の参照する範囲をアドレスが大きいブロックの側に１ブロック分ずらす。そして、メモリ書き込み部１２６は、データ格納メモリ１２１中のもう参照しないブロックに対して、復元バッファ１２５に保持された復元済みの更新後データを書き込んでいく。データ格納メモリ１２１への更新後データの書き込みが終わると、書き込んだ更新後データが格納されていた復元バッファ１２５の領域を開放する。
【００７８】
次に、図２を参照してコード領域情報ファイル１１５の内容と、データ格納メモリ１２１の構造について説明する。
【００７９】
図２（Ａ）はコード領域情報ファイル１１５の内容の一例を示したものである。なお、この図示例において、行番号１６１は説明を容易にするために便宜的に示したものであり、実際のコード領域情報ファイル１１５内には存在しない。図２（Ｂ）はデータ格納メモリ１２１の構造の一例を示したものである。
【００８０】
現在の端末装置等の組込み機器、例えば携帯電話機では、ソフトウエアプログラム等のデータ格納のためにフラッシュＲＯＭなどの書換え可能不揮発メモリを用いていることが多い。フラッシュＲＯＭは、読み出しは通常のＲＡＭと同様にアドレスの指定のみで参照できるが、データの変更は、ブロックと呼ばれる単位で一度に消去した後に、新たなデータを書き込むという方式を取らなければならない。一つの機器の中でも、アドレス空間の部分によってブロックのサイズが異なることがある。またフラッシュＲＯＭを利用する際に、コード（プログラム）を格納するコード領域とユーザデータを格納するユーザ領域とを、ブロック単位で分けることがある。
【００８１】
図２（Ｂ）の例では、メモリ上のアドレス１５０において、０ｘ１０００から０ｘ５０００−１、及び０ｘ７０００から０ｘ８８００−１まではコード領域２０２，２０４であり、０ｘ０から０ｘ１０００−１、及び０ｘ５０００から０ｘ７０００−１まではユーザ領域２０１，２０３である。コード領域２０２は、アドレス０ｘ１０００〜０ｘ５０００−１、ブロックａ〜ｄの４ブロックに相当する。コード領域２０４は、アドレス０ｘ７０００〜０ｘ８８００−１、ブロックｅ〜ｇの３ブロックに相当する。また、ユーザ領域２０１はアドレス０ｘ０〜０ｘ１０００−１、ユーザ領域２０３はアドレス０ｘ５０００〜０ｘ７０００−１にそれぞれ相当する。
【００８２】
コード領域情報ファイル１１５は、コード領域２０２，２０４のブロック配置に関する情報を示している。一つのコード領域は、コード領域を表す予約語ｃｏｄｅａｒｅａに続く中括弧｛  ｝によって囲まれた範囲によって表現される。中括弧｛  ｝の中には、コード領域の開始アドレスを示すｈｅａｄ、コード領域の最終アドレスを示すｔａｉｌ、コード領域内の各ブロックの大きさを示すｂｌｏｃｋｓｉｚｅにより各要素の値が指定されている。
【００８３】
図２（Ａ）の例では、最初のコード領域２０２が１行目から５行目に示されている。ｈｅａｄよりコード領域の開始アドレスが０ｘ１０００であることが分かる。また、ｔａｉｌよりコード領域の最終アドレスが０ｘ５０００−１であることが分かる。さらに、ｂｌｏｃｋｓｉｚｅよりそのコード領域内ではブロックのサイズがすべて０ｘ１０００であることが分かる。６行目から１０行目に示される２番目のコード領域２０４についても同様に、開始アドレスが０ｘ７０００、最終アドレスが０ｘ８８００−１、ブロックサイズが０ｘ８００であることが分かる。
【００８４】
また、図３を参照して結合ファイル１０５のフォーマットについて説明する。結合ファイル１０５は、データ格納メモリ１２１上の各ブロック毎に更新前データと更新後データとを比較して生成された差分データにヘッダ情報を付け、所定単位ごとまたは全体を結合したファイルとしたものである。なお、このような各ブロックの差分データにヘッダ情報を付加したものを差分ファイルとも呼ぶ。
【００８５】
図３は１つのブロックに対する差分ファイルのフォーマットの一例を示したものである。１ブロックの差分ファイルフォーマット１７０は、ブロックデータ長１７１、書換えアドレス１７２、ブロック差分データ１７３より構成される。ブロックデータ長１７１は、１つのブロックに対する差分ファイルの全体の長さを示す。書換えアドレス１７２は、コード領域情報ファイル１１５を参照して生成されるもので、復元した更新後データがデータ格納メモリ１２１上に格納される領域の先頭アドレスを示す。ブロック差分データ１７３は、差分抽出部１１２によって抽出、生成された１ブロックの差分データである。なお、差分ファイルには、差分データに付加するヘッダ情報として、上記書換えアドレス１７２において、復元した更新後データの書き込み範囲を示すアドレス情報の他に、データ復元時の更新前データの参照範囲を示すアドレス情報を含めるようにして、データ復元側へ転送することも可能である。
【００８６】
さらに、図４を参照して、図２（Ｂ）に示したデータ格納メモリ１２１の構造と図３に示した差分ファイルフォーマットとの関係を説明する。図４はデータ格納メモリ１２１内のコード領域２０２のブロックｂを復元する際のアドレス及び参照範囲を示したものである。ここでは、差分データの生成及び更新後データの復元の際に対象のブロックとその前後の１ブロックの計３ブロックを参照する場合の例を示す。
【００８７】
ブロックｂを復元する際には、このブロックｂと前後１ブロックａ，ｃを参照する。このため、データ格納メモリ１２１のアドレス１５０上での参照範囲１５２はブロックａからブロックｃ、すなわち０ｘ１０００〜０ｘ５０００−１となる。一方、復元した更新後データは同じブロックｂへ書き込むので、書き込み範囲１５３はブロックｂ、すなわち０ｘ２０００〜０ｘ３０００−１となる。更新後データを書き込む際の書換えアドレス１５１は、書き込み範囲１５３の先頭アドレス、すなわち０ｘ２０００となる。この書換えアドレス１５１は、図３に示したように差分ファイルフォーマット１７０においてブロック差分データ１７３の前に設けられ、コード領域設定部１１６から得たコード領域の配置情報に基づき、差分抽出部１１２が付加する。
【００８８】
次に、差分データ生成送出部１１０の動作について、図５を参照しながら説明する。図５は本実施形態の差分データ生成送出部における差分データ生成の動作手順を示すフローチャートである。図５のフローチャートは、すべてのコード領域について処理するための外側のループと、それぞれのコード領域中のすべてのブロックを処理するための内側のループとの二重のループからなる。なお、ここでは差分データを生成する際に更新前データ及び更新後データの対象のブロックとその前後の１ブロックの計３ブロックを参照する場合を説明する。
【００８９】
外側のループ（ステップＳ４０１〜Ｓ４０２）は、コード領域情報ファイル１１５中に定義されているすべてのコード領域について処理を行う。
【００９０】
制御部１１７は、コード領域情報ファイル１１５中に処理すべきコード領域が残っているか否かを確認する（ステップＳ４０１）。ここで、コード領域が残っていなければ動作を終了する。コード領域が残っている場合は、次にコード領域設定部１１６に、コード領域情報ファイル１１５からコード領域を１つ読込むよう指示する（ステップＳ４０２）。そして、制御部１１７は、読込んだ１つのコード領域に関する処理を次のステップＳ４０３からステップＳ４０９の内側のループで行った後、ステップＳ４０１に戻って外側のループの実行を続ける。
【００９１】
内側のループ（ステップＳ４０３〜Ｓ４０９）は、ステップＳ４０２で読込んだ１つのコード領域について処理を行う。
【００９２】
まず、制御部１１７は、処理中のコード領域の中に、処理していないブロックが残っているか否かを判断する（ステップＳ４０３）。ここで、未処理ブロックが残っていなければステップＳ４０１に戻り、次のコード領域の処理に移る。未処理ブロックが残っている場合はステップＳ４０４に進む。
【００９３】
次に、制御部１１７は、差分抽出を行って差分データを生成していないブロック群の中から先頭の、つまり一番開始アドレスの小さいブロックを取り出す（ステップＳ４０４）。そして、制御部１１７は、取り出したブロックがコード領域内の先頭か否かを判断する（ステップＳ４０５）。ここで、コード領域の先頭であれば、ステップＳ４０６に進み、処理中のブロックとその１つ後ろのブロックの計２ブロックを参照しながら差分生成を行うよう、差分抽出部１１２に指示する（ステップＳ４０６）。ただし、コード領域中にブロックが一つしかない場合は、処理中のブロックのみを参照する。次いで、制御部１１７はステップＳ４０６の終了後、ステップＳ４０３に戻り処理を繰り返す。
【００９４】
また、制御部１１７がステップＳ４０５でコード領域の先頭ではないと判断した場合はステップＳ４０７に進み、処理中のブロックがコード領域の最後であるか否かを判断する（ステップＳ４０７）。ここで、コード領域の最後である場合は、１つ前のブロックと処理中のブロックの計２ブロックを参照しながら差分生成を行うよう差分抽出部１１２に指示する（ステップＳ４０８）。次いで、制御部１１７はステップＳ４０８の終了後、ステップＳ４０３に戻り処理を繰り返す。
【００９５】
また、ステップＳ４０７において処理中のブロックがコード領域の最後でない場合は、処理中のブロックと前後の１ブロックの計３ブロックを参照しながら差分生成を行うよう差分抽出部１１２に指示する（ステップＳ４０９）。
【００９６】
上記外側と内側のそれぞれのループは、プログラムで実現する場合は、Ｃ言語、Ｊａｖａ言語におけるｆｏｒ文、ｗｈｉｌｅ文などの繰り返しを示すプログラムで実現することができる。
【００９７】
外側のループにおいて、ステップＳ４０２では、図２（Ａ）におけるコード領域情報ファイル１１５の中の、キーワードｃｏｄｅａｒｅａとそれに続く中括弧で囲まれた部分を、１つのコード領域として先頭から順に読み込むことを意味している。また、ステップＳ４０１では、既に読み込んだコード領域の次に続くコード領域がコード領域情報ファイル１１５の中に残っているか、あるいは、残っておらずに、最後に読み込んだコード領域の後ろにはファイルの最後まで何もデータが入っていない（空白、改行、タブ、注釈などの意味を持たないデータしか入っていない）かを判断する。
【００９８】
内側のループでは、外側のループにおけるステップＳ４０２で読み込んだ１つのコード領域を処理する。図２（Ａ）のように、コード領域情報ファイル１１５中には、コード領域の先頭アドレス、最終アドレス、ブロックサイズが示されている。例えば、Ｃ言語、Ｊａｖａ言語などを用いてプログラムで内側のループを実現する場合には、内側のループは、１つの変数の初期値を先頭アドレス、終了するときの判断に用いる値を最終アドレス、一回のイテレーション（繰り返し）で変数が増加する値をブロックサイズとしたｆｏｒ文で実現することができる。
【００９９】
次に、差分データ復元部１２０の動作について、図６を参照しながら説明する。図６は本実施形態の差分データ復元部における更新後データ復元の動作手順を示すフローチャートである。なお、ここでは更新後データを復元する際に差分ファイルを用いて更新前データの対象のブロックとその前後の１ブロックの計３ブロックを参照する場合を説明する。
【０１００】
制御部１２７は、受信バッファ１２３の中から先頭の差分ファイル（先頭の１ブロック分に相当する）を取り出す（ステップＳ５０１）。この差分ファイルには、ブロック毎の差分データと書換えアドレス（書き込み範囲）の情報が含まれている。なお、書換えアドレスには、復元した更新後データの書き込み範囲を示す情報が含まれるが、この書き込み範囲と共にデータ復元時の更新前データの参照範囲を示す情報を含めるようにしても良い。次に、データ格納メモリ１２１の参照範囲を参照しながら、１ブロックの復元を行うよう復元部１２４に指示する（ステップＳ５０２）。そして、復元した更新後データを復元バッファ１２５に書き込む（ステップＳ５０３）。
【０１０１】
次に、差分ファイルが受信バッファ１２３中に残っているか否かを判断する（ステップＳ５０４）。ここで、差分ファイルが残っていない場合は、ステップＳ５１０に進み、処理中の復元バッファ１２５に書かれている内容をデータ格納メモリ１２１の書き込み先アドレスが指すブロックに対して書き込む（ステップＳ５１０）。また、差分ファイルが残っている場合は、ステップＳ５０５に進み、受信バッファ１２３の中の先頭の差分ファイルを取り出す（ステップＳ５０５）。
【０１０２】
そして、取り出した差分ファイルとデータ格納メモリ１２１の参照範囲を参照しながら、１ブロック分のデータ復元を行うよう復元部１２４に指示する（ステップＳ５０６）。その後、復元した更新後データを復元バッファ１２５の空いている領域に書き込む（ステップＳ５０７）。次に、１回前に復元して復元バッファ１２５に書き込まれている更新後データを、そのデータの書き込み先アドレスに従ってデータ格納メモリ１２１の該当ブロックに対して書き込む（ステップＳ５０８）。次いで、ステップＳ５０８で参照した復元バッファ１２５の領域を開放する（ステップＳ５０９）。その後、ステップＳ５０４に戻り、次の差分ファイルの処理に移る。
【０１０３】
ここで、図６に示したアルゴリズムによるデータ復元時の動作を図７及び図８を参照して具体的に説明する。ここでは簡単のため、データ格納メモリ１２１において連続した４つのブロックａ〜ｄからなるコード領域に適用した場合を示す。
【０１０４】
まず図７（Ａ）に示すように、ブロックａの更新後データの復元を行う。このとき、ブロックａがコード領域の先頭であるため、参照範囲は対象のブロックａと後ろのブロックｂとを合わせたａ〜ｂとなる。この参照範囲のブロックａ〜ｂの更新前データａ１，ｂ１と差分データａ１２とに基づき、更新後データａ２を復元して復元バッファ１２５の一方の領域（第１領域）１２５ａに格納する。
【０１０５】
次いで図７（Ｂ）に示すように、ブロックｂの更新後データの復元を行う。このときの参照範囲は、対象のブロックｂと前後のブロックａ，ｃとを合わせたａ〜ｃとなる。この参照範囲のブロックａ〜ｃの更新前データａ１，ｂ１，ｃ１と差分データｂ１２とに基づき、更新後データｂ２を復元して復元バッファ１２５の他方の領域（第２領域）１２５ｂに格納する。
【０１０６】
そして図７（Ｃ）に示すように、ブロックａの更新後データの書き込みを行う。このときの書き込み範囲は、対象のブロックａであり、復元バッファ１２５の第１領域１２５ａに蓄積された更新後データａ２をデータ格納メモリ１２１のブロックａに書き込む。その後、図７（Ｄ）に示すように、書き込み完了した更新後データａ２が格納されていた復元バッファ１２５の第１領域１２５ａを開放する。
【０１０７】
次に、図７（Ｅ）に示すように、ブロックｃの更新後データの復元を行う。このときの参照範囲は、対象のブロックｃと前後のブロックｂ，ｄとを合わせたｂ〜ｄとなる。この参照範囲のブロックｂ〜ｄの更新前データｂ１，ｃ１，ｄ１と差分データｃ１２とに基づき、更新後データｃ２を復元して前記開放された復元バッファ１２５の第１領域１２５ａに格納する。
【０１０８】
そして図７（Ｆ）に示すように、ブロックｂの更新後データの書き込みを行う。このときの書き込み範囲は、対象のブロックｂであり、復元バッファ１２５の第２領域１２５ｂに蓄積された更新後データｂ２をデータ格納メモリ１２１のブロックｂに書き込む。その後、図８（Ａ）に示すように、書き込み完了した更新後データｂ２が格納されていた復元バッファ１２５の第２領域１２５ｂを開放する。
【０１０９】
次に、図８（Ｂ）に示すように、ブロックｄの更新後データの復元を行う。このとき、ブロックｄがコード領域の最後であるため、参照範囲は対象のブロックｄと前のブロックｃとを合わせたｃ〜ｄとなる。この参照範囲のブロックｃ〜ｄの更新前データｃ１，ｄ１と差分データｄ１２とに基づき、更新後データｄ２を復元して復元バッファ１２５の第２領域１２５ｂに格納する。
【０１１０】
そして図８（Ｃ）に示すように、ブロックｃの更新後データの書き込みを行う。このときの書き込み範囲は、対象のブロックｃであり、復元バッファ１２５の第１領域１２５ａに蓄積された更新後データｃ２をデータ格納メモリ１２１のブロックｃに書き込む。その後、図８（Ｄ）に示すように、書き込み完了した更新後データｃ２が格納されていた復元バッファ１２５の第１領域１２５ａを開放する。
【０１１１】
次に、図８（Ｅ）に示すように、ブロックｄの更新後データの書き込みを行う。このときの書き込み範囲は、対象のブロックｄであり、復元バッファ１２５の第２領域１２５ｂに蓄積された更新後データｄ２をデータ格納メモリ１２１のブロックｄに書き込む。
【０１１２】
なお、上述した実施形態では、処理中の対象のブロック及びその前後のブロックを参照しながら差分データの生成と更新後データの復元を行う例を示したが、参照するブロックをさらに増やすことも可能である。この場合、差分データ生成時には差分抽出部１１２が拡大された参照範囲を参照しながら差分抽出を行うことになり、さらにコード領域の先頭付近及び最終付近のブロックでの参照範囲の制限が変わってくるため、図５のステップＳ４０５、Ｓ４０７における条件分岐を修正する必要がある。
【０１１３】
このように複数のブロックを参照することによって、ブロックをまたがって大きな移動をしているデータについても更新前データから更新後データにコピーすることができ、差分データの量をより減らすことができる。図９は、ある組込み機器に上記差分データ生成方法を適用した場合の参照ブロック数と差分データサイズとの関係を示したグラフである。この図９は、更新前データ、更新後データをそれぞれ１６Ｍバイト（ｂｙｔｅｓ）、１つのブロックのサイズを１２８バイトとしたサンプルデータを用いて、参照ブロック数の増加に対する差分データのデータ量の変化を演算により求めた結果を示したものである。
【０１１４】
１つのブロックのみを参照して１つのブロックを復元する場合は、差分データのデータ量の総和は約６．５Ｍバイトとなり、圧縮率は４０％程度である。この場合には復元バッファは１ブロック分のみでよい。また、上述した例のように前後１ブロックも含めて合計３ブロックを参照した場合は、差分データのデータ量の総和は約３．５Ｍバイトまで小さくなり、圧縮率は２２％程度である。この場合には、復元バッファは２ブロック分の領域を用意すればよい。また、前後２ブロックを含めて合計５ブロックを参照した場合は、差分データのデータ量の総和は約１．７Ｍバイトまで小さくなり、圧縮率は１１％程度である。この場合に必要な復元バッファの領域は３ブロック分である。なお、図９より、参照するブロックを５ブロック以上増やしても、圧縮率はあまり上がらないことが分かる。
【０１１５】
ここで、必要となる復元バッファの領域（ブロック数）ｎは、参照するブロック数をｋとすると、ｋ＝２ｎ−１の関係があるため、必要復元バッファブロック数ｎ＝（ｋ＋１）／２となる。例えば、上記のように参照ブロック数が３のときは２ブロック分、５のときは３ブロック分の復元バッファを設ければよい。
【０１１６】
このように本実施形態では、差分データ生成送出部１１０において、差分データ復元部１２０のデータ格納メモリ１２１におけるコード領域の配置情報に相当するコード領域情報ファイル１１５を設けている。データ更新用の差分データを生成する際には、コード領域情報ファイル１１５を基に参照範囲を設定し、差分データ復元部１２０のデータ格納メモリ１２１においてアドレスが連続しかつ同一ブロックサイズである１つのコード領域ごとにブロック単位で更新前データと更新後データとの差分を抽出する。すなわち、異なるブロックサイズのコード領域やアドレスが不連続のコード領域にまたがって比較参照を行って差分データを生成することのないようにする。またこのとき、コード領域情報ファイル１１５を基に書換えアドレスを生成し、これをヘッダ情報として差分データに付加して差分ファイル（結合ファイル１０５）を生成する。この書換えアドレスは、差分データを用いて復元した更新後データを書き込むための書き込み範囲の情報を含む、データ格納メモリ１２１上のアドレス情報である。なお、書換えアドレスには、差分データを用いて更新後データを復元するための参照範囲の情報を含めるようにしても良い。
【０１１７】
これにより、結合ファイル１０５を受信した差分データ復元部１２０では、結合ファイル１０５のヘッダ情報に基づき指定された参照範囲を参照して、更新前データと差分データとから更新後データを復元することができる。この場合、復元側でアドレス変換などの処理が不要であり、少ない簡単な処理ステップで正しい更新後データの復元が可能である。
【０１１８】
また、差分データ生成送出部１１０では対象のブロックを含む前後のブロックを参照して差分データを生成し、差分データ復元部１２０ではこの差分データを用いて対象のブロックを含む前後のブロックを参照して更新後データを復元し、復元バッファ１２５に書き込むようにする。このようにブロック毎に分割して差分データの生成及び更新後データの復元を行うことで、演算処理の効率を上げることができ、これに加えて、複数のブロックを参照することによって、差分データのデータ量を削減することが可能である。
【０１１９】
また、復元バッファ１２５としてリングバッファ方式のバッファを用いて、復元後の蓄積した更新後データのうち、データ格納メモリ１２１において復元時に参照されなくなった（参照範囲から外れて不要となった）ブロックの更新後データを順次書き込み、更新前データを書き換えるようにする。これにより、更新前データと更新後データをそれぞれ格納するメモリを設けたりする必要がなく、データ格納メモリ１２１は最小限のメモリ容量で済み、少ないハードウェア資源で容易に正しくデータの更新を行うことが可能である。また、復元バッファ１２５についても、リングバッファ方式によりメモリ容量を小さくできる。
【０１２０】
上記のような本実施形態の構成及び動作により、以下のような効果が得られる。
【０１２１】
第１に、データ格納メモリ１２１の容量に制約があり、同一ブロックにおいて更新前データから更新後データに書き換えるような場合であっても、このデータ格納メモリ１２１の最大ブロック長の２倍のサイズ（復元時に前後３ブロックを参照する場合）の復元バッファ１２５と結合ファイル１０５を格納する受信バッファ１２３とをＲＡＭ上に設けるだけで、データ格納メモリ１２１上のデータを更新することができる。
【０１２２】
例えば従来の技術に記載した非特許文献１、非特許文献２に開示されているようなデータ更新方法では、主に、ハードディスクなどの大容量の記憶装置を持つ機器を対象とし、記憶装置において復元時に参照する更新前データを格納している領域と、復元した更新後データを格納する領域とが異なっている場合を想定している。これに対し、携帯電話機のような記憶領域の限られた組込み機器では、復元した更新後データを更新前データとは別の領域に格納する余裕がない。本実施形態ではフラッシュＲＯＭ上に更新前データ及び更新後データを格納することとしているが、両方のデータを格納するためにフラッシュＲＯＭを２倍搭載してプログラムの更新をすることは、コスト的にも実装面積的にも困難である。また、復元した更新後データを一旦ＲＡＭ上に展開し、展開したものをフラッシュＲＯＭに書き込む方式も考えられるが、ＲＡＭの容量に余裕がないと更新後データをすべて展開できないため、これも実現が困難である。また、ＲＡＭの場合には容量向上が消費電力の増大を招くことも大きなデメリットである。
【０１２３】
これに対し、本実施形態では、最小限のハードウェア資源によってデータの更新が可能である。
【０１２４】
第２に、更新対象のプログラム等のデータが格納されているコード領域と、ユーザが任意に格納するユーザデータ等が格納されているユーザ領域とが混在し、コード領域がデータ格納メモリ１２１上で不連続に配置されている場合であっても、複数のブロックを参照しながら正しく更新後データの復元を行うことができる。また、コード領域とユーザ領域とを区別してコード領域のみに対して処理を実行できるため、データ復元時にユーザ領域を参照したり、誤ってユーザ領域にデータを書き込んでしまうことを防止できる。
【０１２５】
コード領域とユーザ領域とが混在している場合、プログラムのバージョンアップの際には、コード領域のデータのみが１つのファイルに結合されて提供されることが多い。図１４や図１５に示した従来例のように、コード領域とユーザデータ領域が混在している場合に従来の差分生成、復元方法を用いると、コード領域とユーザ領域とを区別して認識せず、単にファイルやメモリ上の位置でしか参照範囲や書き込み範囲を設定できないため、差分生成時とデータ復元時とで参照範囲が異なってしまい、正常に復元することができない。また、更新前データをデータ格納メモリ１２１上に展開したときと同じ配置になるようにダミーデータを挿入した場合は、コード領域が不連続な部分では差分生成時にダミーデータを参照してしまい、データ復元時に参照すべきユーザ領域の内容と異なるため、正常に復元することができない。
【０１２６】
これに対し、本実施形態では、コード領域中の同じサイズの連続したブロック内のみを参照して差分生成及びデータ復元を行えるようにしているため、正常に更新後データの復元を行うことが可能である。また、受信側の機器においてデータ復元時にアドレス変換などの処理が不要であり、簡単な処理ステップで更新後データを復元することができる。
【０１２７】
図１０は比較例として、従来の方法によるデータ復元時の動作を示したものである。この比較例は、図７及び図８に示した本実施形態における動作に対応して記載したものである。ここでは、データ格納メモリ６０１において４つのブロックａ〜ｄの間に図中斜線で示すユーザ領域６０２が存在する場合を示す。
【０１２８】
データ復元の際には、参照範囲のブロックの更新前データと差分データとに基づき、更新後データを復元して復元バッファ６０３に格納し、復元後の更新後データをデータ格納メモリ６０１の書き込み範囲のブロックに書き込んでいくことになる。この比較例においては、図１０（Ｅ）に示すように、ブロックｃの更新後データの復元を行う際に、参照範囲としてユーザ領域６０２を参照してしまい、正常に復元することができない。
【０１２９】
上述したように、本実施形態によれば、書換え可能不揮発性メモリ上にデータを置き、更新対象のコード領域とデータ更新しないユーザ領域が混在し、異なるサイズのブロックが同じメモリ内で混在する場合であっても、データ更新を正しく、かつ単純な計算手順で実行することができる。すなわち、コード領域情報ファイル及びコード領域設定手段を備えることにより、複数ブロックを参照しつつ、少ないメモリの利用のみで、コード領域とユーザ領域の混在する書換え可能不揮発メモリ上のデータを書換えることができ、その実用的効果は大きい。
【０１３０】
なお、本発明は上述した実施形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において種々の態様で実施し得るものである。
【０１３１】
上記実施形態では、メモリ空間上で連続しており、かつサイズが同じブロック群をコード領域として用いているが、これはその定義におけるコード領域の範囲内にデータの移動が限られている時に特に有効であり、単純なアルゴリズムを用いて差分生成、復元を行うことができる。
【０１３２】
メモリ空間上で不連続なブロック間でデータの移動が頻繁に行われるシステムにおいては、データの移動が行われる範囲のブロック群をメモリ空間上の連続性に関わりなく１つの論理的なコード領域として扱うことによって、効率の良い差分生成、復元を行うことも可能である。
【０１３３】
【発明の効果】
以上説明したように本発明によれば、メモリ容量等のハードウェア資源に制約のある機器であっても、メモリ上の同じ領域においてプログラム等のデータを更新前データから更新後データに書き換えて更新することができる。また、メモリ上で更新不可領域と更新可能領域が混在して更新前データや更新後データの格納領域が不連続であったり、異なるブロックサイズの格納領域が混在する場合であっても、データ更新を正しく、かつ単純な計算手順で効率良く実行することができる。
【図面の簡単な説明】
【図１】本発明の実施形態に係るデータ更新方法を実現するデータ更新装置の機能的構成を示すブロック図
【図２】本実施形態に係るコード領域情報ファイルの内容とデータ格納メモリの構造の一例を示した図で、（Ａ）はコード領域情報ファイルの内容、（Ｂ）はデータ格納メモリの構造をそれぞれ示した図
【図３】本実施形態に係る結合ファイルにおける１つのブロックに対する差分ファイルのフォーマットの一例を示す図
【図４】本実施形態に係るデータ格納メモリ内のコード領域のブロックｂを復元する際のアドレス及び参照範囲を示す図
【図５】本実施形態の差分データ生成送出部における差分データ生成の動作手順を示すフローチャート
【図６】本実施形態の差分データ復元部における更新後データ復元の動作手順を示すフローチャート
【図７】図６に示した更新後データ復元アルゴリズムによるデータ復元時の動作の具体例をステップ毎に示した図
【図８】図６に示した更新後データ復元アルゴリズムによるデータ復元時の動作の具体例をステップ毎に示した図
【図９】本実施形態に係る差分データ生成方法を適用した場合の参照ブロック数と差分データサイズとの関係を示したグラフ
【図１０】本実施形態に対する比較例として、従来の方法によるデータ復元時の動作の具体例をステップ毎に示した図
【図１１】差分データ抽出に用いる疑似コードを示す図
【図１２】データ更新を行う際のデータの一例を示したもので、（Ａ）は更新前データ、（Ｂ）は更新後データ、（Ｃ）はこれらの差分データをそれぞれ示す図
【図１３】従来のデータ更新方法を用いて一つの書換え可能不揮発性メモリにおいてデータ更新を行う際に、更新後データの復元と書き込みを並行して行う場合の問題点を説明する図
【図１４】従来のデータ更新方法を用いて一つの書換え可能不揮発性メモリにおいてデータ更新を行う際に、更新可能領域であるコード領域が不連続である場合の問題点を説明する図
【図１５】従来のデータ更新方法を用いて一つの書換え可能不揮発性メモリにおいてデータ更新を行う際に、データ復元時の参照範囲の位置の相違を避けるためにダミーデータを挿入した場合の問題点を説明する図
【符号の説明】
１０１  更新前データ
１０２  更新後データ
１０５  結合ファイル
１１０  差分データ生成送出部
１１１  データ格納部
１１２  差分抽出部
１１３  送信バッファ
１１４  送信部
１１５  コード領域情報ファイル
１１６  コード領域設定部
１１７  制御部
１１８  領域情報記憶部
１２０  差分データ復元部
１２１  データ格納メモリ
１２２  受信部
１２３  受信バッファ
１２４  復元部
１２５  復元バッファ
１２６  メモリ書き込み部
１２７  制御部
１３０  ネットワーク
１５１  書換えアドレス
１５２  参照範囲
１５３  書き込み範囲
２０１，２０３  ユーザ領域
２０２，２０４  コード領域
【図１】
2004234503.tif 000003
【図２】
2004234503.tif 000004
【図３】
2004234503.tif 000005
【図４】
2004234503.tif 000006
【図５】
2004234503.tif 000007
【図６】
2004234503.tif 000008
【図７】
2004234503.tif 000009
【図８】
2004234503.tif 000010
【図９】
2004234503.tif 000011
【図１０】
2004234503.tif 000012
【図１１】
2004234503.tif 000013
【図１２】
2004234503.tif 000014
【図１３】
2004234503.tif 000015
【図１４】
2004234503.tif 000016
【図１５】
2004234503.tif 000017