(57)【特許請求の範囲】
【請求項１】
変更前のデータである旧版データに対する前記旧版データの変更後のデータである新版データの変更内容を示す差分データを作成する差分データ作成装置と、
前記差分データ作成装置により作成された前記差分データを前記旧版データに適用することにより、前記旧版データを書き換えて前記新版データを作成し、作成された前記新版データを使用する新版データ作成装置と
を備えたデータ書き換えシステムにおいて、
前記差分データ作成装置は、
前記新版データと前記旧版データとから前記差分データを作成する差分データ作成部と、
前記新版データを圧縮するとともに、前記新版データを圧縮するときに前記新版データの圧縮の規則を示す圧縮規則情報を作成する圧縮規則情報作成部と
を備え、
前記新版データ作成装置は、
圧縮された前記旧版データを格納する圧縮データ格納部と、
前記差分データ作成装置により作成された前記差分データと前記圧縮規則情報とが入力される差分データ入力部と、
前記圧縮データ格納部に格納されている圧縮された前記旧版データを読み込んで展開する展開部と、
前記展開部により展開された前記旧版データに前記差分データ入力部に入力された前記差分データを適用することにより、前記新版データを作成する差分適用部と、
前記差分適用部により作成された前記新版データを前記差分データ入力部に入力された前記圧縮規則情報に基づいて圧縮し、圧縮された前記新版データを前記圧縮データ格納部に格納する圧縮部と
を備えたことを特徴とするデータ書き換えシステム。
【請求項２】
前記差分データ作成部は、
前記新版データと前記旧版データとを対応する所定の物理的な単位で区切り、区切られた単位ごと前記差分データを作成することを特徴とする請求項１に記載のデータ書き換えシステム。
【請求項３】
前記圧縮規則情報作成部は、
前記差分データ作成部により作成された前記差分データと、圧縮された前記新版データとのデータサイズの大小を判定し、前記差分データのほうが圧縮された前記新版データよりもデータサイズが大きいと判定した場合には、圧縮された前記新版データと圧縮された前記新版データが前記差分データに代替することを示す指標情報とを含む差分データ代替情報を作成し、
前記差分データ入力部は、
前記差分データ作成装置により作成された前記差分データ代替情報と前記差分データ代替情報に含まれる圧縮された前記新版データに対応する前記圧縮規則情報とが入力され、
前記圧縮部は、
前記差分データ入力部に前記差分データ代替情報が入力されると前記差分データ代替情報に含まれる前記指標情報を検出し、前記指標情報を検出すると、前記差分データ代替情報に含まれる圧縮された前記新版データと圧縮された前記新版データに対応する前記圧縮規則情報とを対応付けて前記圧縮データ格納部に格納することを特徴とする請求項１または２のいずれかに記載のデータ書き換えシステム。
【請求項４】
前記圧縮規則情報作成部と前記圧縮部とは、
バイトペア圧縮方式によって前記新版データを圧縮することを特徴とする請求項１〜３のいずれかに記載のデータ書き換えシステム。
【請求項５】
前記圧縮規則情報作成部は、
前記圧縮規則情報として、前記バイトペア圧縮方式における圧縮辞書を作成することを特徴とする請求項４記載のデータ書き換えシステム。
【請求項６】
変更前のデータである旧版データに対する前記旧版データの変更後のデータである新版データの変更内容を示す差分データを前記旧版データに適用することにより、前記旧版データを書き換えて前記新版データを作成し、作成された前記新版データを使用する新版データ作成装置において、
圧縮された前記旧版データを格納する圧縮データ格納部と、
前記新版データと前記旧版データとから前記差分データを作成する差分データ作成装置であって前記新版データを圧縮するとともに前記新版データを圧縮するときに前記新版データの圧縮の規則を示す圧縮規則情報を作成する差分データ作成装置により作成された前記差分データと前記圧縮規則情報とが入力される差分データ入力部と、
前記圧縮データ格納部に格納されている圧縮された前記旧版データを読み込んで展開する展開部と、
前記展開部により展開された前記旧版データに前記差分データ入力部に入力された前記差分データを適用することにより、前記新版データを作成する差分適用部と、
前記差分適用部により作成された前記新版データを前記差分データ入力部に入力された前記圧縮規則情報に基づいて圧縮し、圧縮された前記新版データを前記圧縮データ格納部に格納する圧縮部と
を備えたことを特徴とする新版データ作成装置。
【請求項７】
変更前のデータである旧版データに対する前記旧版データの変更後のデータである新版データの変更内容を示す差分データを作成する差分データ作成装置において、
前記新版データと前記旧版データとから前記差分データを作成する差分データ作成部と、
前記新版データを圧縮するとともに、前記新版データを圧縮するときに前記新版データの圧縮の規則を示す圧縮規則情報を作成する圧縮規則情報作成部と、
前記差分データを用いて前記新版データを作成する新版データ作成装置であって、圧縮された前記旧版データを格納する圧縮データ格納部と、前記差分データ作成装置により作成された前記差分データと前記圧縮規則情報とを受信する差分データ入力部と、前記圧縮データ格納部に格納されている圧縮された前記旧版データを読み込んで展開する展開部と、前記展開部により展開された前記旧版データに前記差分データ入力部に入力された前記差分データを適用することにより、前記新版データを作成する差分適用部と、前記差分適用部により作成された前記新版データを前記差分データ入力部により受信された前記圧縮規則情報に基づいて圧縮し、圧縮された前記新版データを前記圧縮データ格納部に格納する圧縮部とを備えたこと新版データ作成装置に、前記差分データと前記圧縮規則情報とを送信する圧縮規則情報送信部と
を備えたことを特徴とする差分データ作成装置。
【請求項８】
変更前のデータである旧版データに対する前記旧版データの変更後のデータである新版データの変更内容を示す差分データを前記旧版データに適用することにより、前記旧版データを書き換えて前記新版データを作成する新版データ作成プログラムにおいて、
（１）圧縮された前記旧版データを格納する処理と、
（２）前記新版データと前記旧版データとから前記差分データを作成する差分データ作成装置であって前記新版データを圧縮するとともに前記新版データを圧縮するときに前記新版データの圧縮の規則を示す圧縮規則情報を作成する差分データ作成装置により作成された前記差分データと前記圧縮規則情報とを受け付ける処理、
（３）格納されている圧縮された前記旧版データを読み込んで展開する処理と、
（４）展開された前記旧版データに、受け付けられた前記差分データを適用することにより、前記新版データを作成する処理、
（５）作成された前記新版データを受け付けられた前記圧縮規則情報に基づいて圧縮し、圧縮された前記新版データを格納する処理、
をコンピュータに実行させることを特徴とする新版データ作成プログラム。
【請求項９】
変更前のデータである旧版データに対する前記旧版データの変更後のデータである新版データの変更内容を示す差分データを作成する差分データ作成プログラムにおいて、
（１）前記新版データと前記旧版データとから前記差分データを作成する処理、
（２）前記新版データを圧縮するとともに、前記新版データを圧縮するときに前記新版データの圧縮の規則を示す圧縮規則情報を作成する処理、
（３）前記差分データを用いて前記新版データを作成する新版データ作成装置であって、圧縮された前記旧版データを格納する圧縮データ格納部と、前記差分データと前記圧縮規則情報とを受信する差分データ入力部と、前記圧縮データ格納部に格納されている圧縮された前記旧版データを読み込んで展開する展開部と、前記展開部により展開された前記旧版データに前記差分データ入力部により受信された前記差分データを適用することにより、前記新版データを作成する差分適用部と、前記差分適用部により作成された前記新版データを前記差分データ入力部により受信された前記圧縮規則情報に基づいて圧縮し、圧縮された前記新版データを前記圧縮データ格納部に格納する圧縮部とを備えたこと新版データ作成装置に、前記差分データと前記圧縮規則情報とを送信する処理、
をコンピュータに実行させることを特徴とする差分データ作成プログラム。
【請求項１０】
変更前のデータである旧版データに対する前記旧版データの変更後のデータである新版データの変更内容を示す差分データを前記旧版データに適用することにより、前記旧版データを書き換えて前記新版データを作成し、作成された前記新版データを使用する新版データ作成装置において、
圧縮された前記旧版データを格納する圧縮データ格納部と、
前記圧縮データ格納部に格納されている圧縮された前記旧版データの展開に使用する展開辞書を格納する展開辞書格納部と、
前記新版データと前記旧版データとから前記差分データを作成する差分データ作成装置により作成された前記差分データが入力される差分データ入力部と、
前記圧縮データ格納部に格納されている圧縮された前記旧版データと、前記展開辞書格納部に格納されている前記展開辞書とを読み込み、前記展開辞書を使用して、圧縮された前記旧版データを展開する展開部と、
前記展開部により展開された前記旧版データに前記差分データ入力部に入力された前記差分データを適用することにより、前記新版データを作成する差分適用部と、
前記差分適用部により作成された前記新版データを前記展開辞書格納部に格納されている前記展開辞書を使用して圧縮し、圧縮された前記新版データを前記圧縮データ格納部に格納する圧縮部と
を備えたことを特徴とする新版データ作成装置。
【請求項１１】
前記差分データを作成する前記差分データ作成装置は、
前記旧版データを圧縮するとともに前記旧版データを圧縮するときに前記旧版データの圧縮の規則を示す圧縮辞書を作成し、作成した前記圧縮辞書を修正することにより前記旧版データの展開と前記新版データの圧縮とに兼用して使用される圧縮展開兼用辞書を作成し、
前記展開辞書格納部は、
前記展開辞書として、前記圧縮展開兼用辞書を格納していることを特徴とする請求項１０記載の新版データ作成装置。
【請求項１２】
前記差分データ入力部は、
前記差分データを作成するとともに前記展開辞書を前記新版データの圧縮に使用する圧縮辞書に修正する修正規則を示す修正規則情報を作成する差分データ作成装置により作成された前記差分データと前記修正規則情報が入力され、
前記圧縮部は、
前記差分データ入力部に入力された前記修正規則情報に従って、前記展開辞書格納部に格納されている前記展開辞書を前記圧縮辞書に修正し、前記差分適用部により作成された前記新版データを前記展開辞書から修正された前記圧縮辞書を使用して圧縮し、圧縮された前記新版データを前記圧縮データ格納部に格納することを特徴とする請求項１０記載の新版データ作成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、携帯電話などの小型の組み込み機器を対象とするソフトウエアの書き換えに関する。
【背景技術】
【０００２】
情報処理の記憶装置の一つとしてフラッシュメモリ装置があり、携帯電話などの組み込み型の装置に使われている。このフラッシュメモリは一般にＮＡＮＤ型フラッシュメモリとＮＯＲ型フラッシュメモリがある。ＮＯＲ型フラッシュメモリではＸＩＰ（ｅＸｅｃｕｔｅ  Ｉｎ  Ｐｌａｃｅ）という技術があり、ランダムにアクセスできる上、コードもそのまま実行できる。一方ＮＡＮＤ型フラッシュメモリではメモリ上のコードをＲＡＭ上にロードして実行しなければならない。しかしながら、一般に同じ容量であれば、ＮＡＮＤ型フラッシュメモリの方がコストが安くなる。
【０００３】
ＮＡＮＤ型フラッシュメモリの場合は、ＲＡＭ上にコードをロードするため、メモリ上にはデータを圧縮しておく場合がある。メモリ使用量が少なくなることと、処理速度によっては、フラッシュメモリから読むデータ量が少ない方が展開の速度を考えても高速になるケースがあるからである。その場合、展開速度の速い圧縮アルゴリズムを採用することになる。
【０００４】
ソフトウエアの更新においては、一般に元のイメージの差分よりも圧縮したものどうしを比較する方が差分データは大きくなる傾向にある。そのため、差分データを一旦展開して、再度圧縮するという方法が一般的になる。この場合、圧縮には時間がかかることが課題となる。
【０００５】
特開２００７−２９３４６１号公報にはプログラムコードの圧縮率を高め、かつ高速に展開する手法が開示されているが、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の貧弱な機器上で高速に圧縮する点については開示も示唆もされていない。
【０００６】
特開２０００−５１６０５８号公報でも圧縮の効率化に関しての技術開示はあるが、効率化するためには何度もメモリを読む必要があり、その高速化に関しては開示も示唆もされていない。
【０００７】
このように従来は、圧縮の効率化と展開の高速化に主眼が置かれ技術の開発がなされてきた。それは現在のように組み込みソフトウエアの規模が大きくなり不具合が発生するようなケースが少なかったことと、ＮＡＮＤ型フラッシュメモリを使ったデバイスがそれほどなかったことや、携帯電話のように市場に出る台数の規模が大きいものも少なかったからである。
【特許文献１】特開２００７−２９３４６１号公報
【特許文献２】特開２０００−５１６０５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明は、ソフトウエアの更新に関して処理能力の低い組み込み機器上で高速にプログラムの圧縮を行うことを目的とする。
【課題を解決するための手段】
【０００９】
この発明のデータ書き換えシステムは、
変更前のデータである旧版データに対する前記旧版データの変更後のデータである新版データの変更内容を示す差分データを作成する差分データ作成装置と、
前記差分データ作成装置により作成された前記差分データを前記旧版データに適用することにより、前記旧版データを書き換えて前記新版データを作成し、作成された前記新版データを使用する新版データ作成装置と
を備えたデータ書き換えシステムにおいて、
前記差分データ作成装置は、
前記新版データと前記旧版データとから前記差分データを作成する差分データ作成部と、
前記新版データを圧縮するとともに、前記新版データを圧縮するときに前記新版データの圧縮の規則を示す圧縮規則情報を作成する圧縮規則情報作成部と
を備え、
前記新版データ作成装置は、
圧縮された前記旧版データを格納する圧縮データ格納部と、
前記差分データ作成装置により作成された前記差分データと前記圧縮規則情報とが入力される差分データ入力部と、
前記圧縮データ格納部に格納されている圧縮された前記旧版データを読み込んで展開する展開部と、
前記展開部により展開された前記旧版データに前記差分データ入力部に入力された前記差分データを適用することにより、前記新版データを作成する差分適用部と、
前記差分適用部により作成された前記新版データを前記差分データ入力部に入力された前記圧縮規則情報に基づいて圧縮し、圧縮された前記新版データを前記圧縮データ格納部に格納する圧縮部と
を備えたことを特徴とする。
【発明の効果】
【００１０】
この発明により、ソフトウエアの更新に関して処理能力の低い組み込み機器上で高速にプログラムの圧縮を行うことができる。
【発明を実施するための最良の形態】
【００１１】
実施の形態１．
図１〜図１３を参照して実施の形態１を説明する。
【００１２】
（ハードウェア構成）
図１は、実施の形態１における開発環境のＰＣ１０００、あるいは組み込み機器２０００のハードウェア資源を示す図である。開発環境のＰＣ１０００、組み込み機器２０００はいずれもコンピュータである。開発環境のＰＣ１０００、組み込み機器２０００とも同様のハードウェア資源を有するので、図１の説明では開発環境のＰＣ１０００を想定して説明するが、開発環境のＰＣ１０００の説明は組み込み機器２０００にもそのまま当てはまる。
【００１３】
図１において、開発環境のＰＣ１０００は、プログラムを実行するＣＰＵ８１０（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を備えている。ＣＰＵ８１０は、バス８２５を介してＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）８１１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）８１２、液晶ディスプレイなどの表示装置８１３、操作キー８１４、通信ボード８１６、磁気ディスク装置８２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置８２０の代わりに、フラッシュメモリなどの記憶装置でもよい。なお、後述のように、組み込み機器２０００は、ＮＡＮＤ型フラッシュメモリを備えていることが前提である。
【００１４】
ＲＡＭ８１２は、揮発性メモリの一例である。ＲＯＭ８１１、磁気ディスク装置８２０等の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部、格納部の一例である。通信ボード８１６、操作キー８１４などは、入力部、入力装置の一例である。また、通信ボード８１６、表示装置８１３は、出力部、出力装置の一例である。
【００１５】
通信ボード８１６は、ネットワークに接続されており、ネットワークを介して組み込み機器２０００と通信可能である。
【００１６】
磁気ディスク装置８２０には、オペレーティングシステム８２１（ＯＳ）、ウィンドウシステム８２２、プログラム群８２３、ファイル群８２４が記憶されている。プログラム群８２３のプログラムは、ＣＰＵ８１０、オペレーティングシステム８２１により実行される。
【００１７】
上記プログラム群８２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ８１０により読み出され実行される。
【００１８】
ファイル群８２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の算出結果」、「〜の抽出結果」、「〜の生成結果」、「〜の処理結果」として説明する情報や、データや信号値や変数値やパラメータなどが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ８１０によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
【００１９】
また、以下に述べる実施の形態の説明において、「〜部」、として説明するものは、「〜手段」、「〜装置」、「〜回路」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ８１１に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。プログラムはＣＰＵ８１０により読み出され、ＣＰＵ８１０により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。
【００２０】
図２は、組み込み機器２２の一般的なソフトウエア更新システムを示す図である。
【００２１】
ＰＣ１１は、ターゲットなる組み込み機器２２のソフトウエアイメージを作成する開発環境のＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）である。データ転送部１６０は、ＰＣ１１から組み込み機器２２にデータを転送するモジュールである。データ転送部１６０は、例えばＵＳＢケーブルでもよいし、携帯電話網などの無線ネットワークでもよい。
【００２２】
開発環境ＰＣ１１上には、旧版プログラム１５１（旧版プログラムのバイナリイメージ）と新版プログラム１５２（旧版プログラムのバイナリイメージ）とがある。差分抽出部１１０は両者の差分を抽出し、差分データ１５３を生成する。ＰＣ１１は、この差分データ１５３をデータ転送部１６０を利用して組み込み機器２２に転送する。
【００２３】
組み込み機器２２には、ＮＡＮＤ型フラッシュメモリ２６０（ＮＡＮＤ型フラッシュＲＯＭとも呼ばれる）と、ＮＡＮＤ型フラッシュメモリ２６０上にあるプログラム群２８０、およびプログラムを実行するためのＲＡＭ２１０がある。実行プログラム２８１はＲＡＭ２１０上の実行プログラムである。この実行プログラム２８１は、データ展開部１３５が、ＮＡＮＤ型フラッシュメモリ２６０のプログラム群２８０から読み出して展開したものである。ＲＡＭ２１０上で、データ転送部１６０により転送されてきた差分データ１５３を実行プログラム２８１に適用して新版プログラムを作成し、組込側圧縮部２５０にて新版プログラムを圧縮してＮＡＮＤ型フラッシュメモリ２６０上に新たに保存する。
【００２４】
ＮＡＮＤ型フラッシュメモリ２６０上で圧縮された形で保存している場合は、データ展開部２３０が圧縮状態から解凍展開し、一方ＮＡＮＤ型フラッシュメモリ２６０に保存する場合には、組込側圧縮部２５０が圧縮し保存する。
【００２５】
次に図３を用いて、実施の形態１における開発環境のＰＣであるＰＣ１０００の構成を説明する。ＰＣ１０００は、図２における開発環境ＰＣ１１と同様の開発環境ＰＣである。図３には、図２と同様、旧版プログラム１５１、新版プログラム１５２、差分抽出部１１０（差分データ作成部）、出力された差分データ１５３を示している。加えて、ＰＣ側圧縮部１２１と圧縮情報生成部１２２とから構成される圧縮処理部１２０（圧縮規則情報作成部）、及び圧縮処理データ送信部１３０（圧縮規則情報送信部）を備えた構成である。なお差分から新版を作成する対象はプログラムに限らず、プログラムを含む一般的なデータで構わない。
【００２６】
ＰＣ側圧縮部１２１は、バイナリファイルを例えばバイトペアの圧縮アルゴリズムで圧縮する。圧縮の結果得られる新版プログラムの圧縮後データ１５４は、展開する際に使用する圧縮状態情報（圧縮規則情報）と圧縮データとからなる。なお、圧縮状態情報とは、後述のように、組み込み機器２０００が新版プログラムを圧縮する場合にも使用される。圧縮状態情報（圧縮規則情報）とは、新版データの圧縮の規則が示された情報である。
【００２７】
圧縮情報生成部１２２は、ＰＣ側圧縮部１２１により圧縮された圧縮後データ１５４から圧縮状態情報１５５のみを抽出し、圧縮状態情報１５５を出力する。
【００２８】
次に、図４のフローを用いて、図５、図６に示すデータの例を用いながら図３のＰＣ１０００の動作を説明する。図５は、新版データ４０１、旧版データ４０２、新版データ４０１と旧版データ４０２との差分データ４０３とを示している。また、図６は、ＰＣ側圧縮部１２１によるデータ圧縮の例を示している。
【００２９】
まず、差分抽出部１１０は、図４のフローに従って、以下の処理を実行する。
（１）ステップ３０１で、差分抽出部１１０は、新版データ４０１をメモリ（図示していない）上に読み込む。
（２）ステップ３０２で、差分抽出部１１０は、旧版データ４０２をメモリ上に読み込む。
（３）ステップ３０３で、差分抽出部１１０は、バイナリ差分抽出を行う。差分は、例えば、同じ部分と変わった部分と移動した部分といった形で表す。
【００３０】
図５に例示した新版データ４０１、旧版データ４０２の場合、その差分データは、差分データ４０３のようになる。実際には、これは、差分をとる元データは１６バイトのデータであるため、差分で表現することにより新版データを送るよりデータサイズが小さくなっている。これは差分データ４０３では、「ＳＫＩＰ」、「ＣＯＰＹ」等のコマンドを使用しているため、データサイズが少なくなるためである。
【００３１】
次にステップ３０４で、ＰＣ側圧縮部１２１が、新版データ４０１を圧縮する。ここで、圧縮のアルゴリズムの例として、展開を高速にできるアルゴリズムであるバイトペア圧縮を利用する場合を説明する（図６）。なお使用する圧縮方法は、バイトペア圧縮方式に限らず、他の圧縮アルゴリズムであるＬＺＨやＺＩＰなどのアルゴリズムでもかまわない。これらのアルゴリズムを使用した場合にも、圧縮状態情報は生成される。
【００３２】
（バイトペア圧縮）
バイトペア圧縮のアルゴリズムは、例えば文献（情報処理学会研究報告ＳＬＤＭ，Ｖｏｌ．２００１，Ｎｏ，４２（２００１０５１７）ｐｐ．１−６）に示されている。この圧縮方法では、図６に示すように、新版データ４０１は、段階の圧縮操作の繰り返しで圧縮される。また、図６の例では、新版データ４０１の全体を圧縮するのではなく、新版データ４０１を新版データ（４０１−１）と新版データ（４０１−２）とに分割して、それぞれを個別に圧縮する例を示している。図６には、圧縮データ（５０１−１）とこれに対応する圧縮状態情報（５０２−１）、及び圧縮データ（５０１−２）とこれに対応する圧縮状態情報（５０２−２）とを示している。圧縮状態情報（５０２−１）や圧縮状態情報（５０２−２）は圧縮辞書と呼ばれる。なお、圧縮する場合は図６のように分割して圧縮しても良いし、全体をまとめて圧縮してもかまわない。圧縮する場合に限らず、差分抽出する場合も分割して差分を出力してもかまわない。
【００３３】
ステップ３０５では、圧縮情報生成部１２２が、圧縮状態情報のみを取り出す。これは図６に示す例で説明すれば、圧縮情報生成部１２２は、圧縮状態情報（５０２−１）、圧縮状態情報（５０２−２）を取り出す。
【００３４】
以上で、開発環境上のＰＣ１０００の動作は終了し、旧版データに対する新版データの差分データと、圧縮状態情報とが出来たことになる。
【００３５】
なお、ステップ３０３で差分抽出した結果である差分データのサイズが、新版データの圧縮データと圧縮状態情報の合計サイズよりも大きい場合には、差分データとして新版データをそのまま出力し、組み込み機器２０００上でもそのことがわかるようなフラグ情報を一緒に出力する。組み込み機器２０００は、差分データとして新版データをそのまま取得することとなる。この場合、組み込み機器２０００は、この新版データの圧縮状態情報、前記フラグ情報を新版データとともに取得する。そして組み込み機器２０００は、差分を適用することなく、組込側圧縮部２５０が、フラグに従って、取得した圧縮状態情報を参照して、取得した新版データを圧縮し、圧縮状態情報とともにＮＡＮＤ型フラッシュメモリに格納し、圧縮状態情報２７１、圧縮データ２７２を更新する。
【００３６】
（組み込み機器２０００）
次に、図７にソフトウエア更新のターゲットとなる組み込み機器２０００の構成を示す。図７は、組み込み機器２０００の全体構成を示す。ＮＡＮＤ型フラッシュメモリ２６０（圧縮データ格納部）は、実行用プログラム２７０が配置される。実行用プログラム２７０は圧縮された形である。実行用プログラム２７０は、データ展開部２３０が圧縮を解凍するときに使用する圧縮状態情報２７１と圧縮データ２７２とからなる。データ展開部２３０は圧縮状態情報２７１を見ながら圧縮データ２７２を解凍することにより圧縮データ２７２を高速に解凍して旧展開データ２１１の形にできる。
【００３７】
次に差分データ２１３、と圧縮状態情報２１４は、圧縮処理データ送信部１３０により、図２に示したデータ転送部１６０を介して図３にある差分データ１５３と圧縮状態情報１５５とが転送され、ＲＡＭ２１０上に配置されたものである。この圧縮状態情報２１４はＲＡＭ２１０上に配置された後、ＮＡＮＤ型フラッシュメモリ２６０上に一旦保存してもかまわない。
【００３８】
差分適用部２４０がＲＡＭ２１０上の差分データ２１３を旧展開データ２１１に適用することにより、新展開データ２１２を生成する。新展開データ２１２は、開発環境のＰＣ１０００における新版プログラム（新版データ）と同一のものである。このように、差分適用部２４０によりＰＣ環境上の新版プログラム１５２と同じものが作成される。そして、組込側圧縮部２５０は新展開データ２１２を圧縮して、ＮＡＮＤ型フラッシュメモリ２６０に格納することにより、新たに圧縮状態情報２７１，圧縮データ２７２として更新する。すなわち、図７において、ＮＡＮＤ型フラッシュメモリ２６０における圧縮状態情報２７１は圧縮状態情報２１４に更新され、圧縮データ２７２は圧縮された新展開データ２１２に更新される。この新展開データ２１２の圧縮の際に組込側圧縮部２５０が圧縮状態情報２１４を利用して高速に圧縮する点が、組み込み機器２０００の特徴である。
【００３９】
次に、図８のフローと図９のデータの例を利用して組み込み機器２０００における処理の流れを説明する。
【００４０】
まず、ステップ７０１で、データ展開部２３０は、ＮＡＮＤ型フラッシュメモリ２６０上の圧縮状態の旧版プログラムに相当する圧縮データ２７２を圧縮状態情報２７１を見ながら展開する。
【００４１】
図９は具体例を示している。旧版の圧縮状態８０１において、「ＸＷＷＺ」や、「ＺＷＷＸ」が圧縮データ２７２に相当する。「（Ｗ＝ＸＥ、Ｘ＝ＹＤ，Ｙ＝ＺＣ，Ｚ＝ＡＢ）」が「ＸＷＷＺ」の圧縮状態情報であり、「（Ｗ＝ＸＥ、Ｘ＝ＹＺ，Ｙ＝ＡＢ，Ｚ＝ＣＤ）」が「ＺＷＷＸ」の圧縮状態情報である。旧版の圧縮状態８０１を展開したものが旧版データ８０２であるが、この旧版データ８０２が旧展開データ２１１（つまり旧版プログラム）に該当する。
【００４２】
次にステップ７０２で、差分適用部２４０が差分データ２１３を読み込む。具体的には、例えば図５に示した差分データ４０３が転送され、差分データ２１３として格納されていることになる。
【００４３】
ステップ７０３で、差分適用部２４０は、差分データ２１３を旧展開データ２１１（旧版プログラム）に適用し、新展開データ２１２（新版プログラム）を作成する。ＲＡＭ２１０上の新展開データ２１２は、結果としてＰＣ１０００の新版プログラム１５２と全く同じになる。具体例で示せば、差分適用部２４０により作成された新版データが図１０の新版データ９０１とすると、これは、図３についての新版データの具体例として示した図５の新版データ４０１と同じものとなる。
【００４４】
ステップ７０４で、組込側圧縮部２５０は、新展開データ２１２（例えば新版データ９０１とする）を圧縮する際に、圧縮状態情報２１４（新版データ９０１に対応する圧縮状態情報９０２とする）を利用する。これにより、組込側圧縮部２５０は、新版データの圧縮のための文字出現の規則性等の解析処理が不要となり、新版データを高速に圧縮することができる。
【００４５】
ステップ７０５で、組込側圧縮部２５０は、圧縮した新版データと、その圧縮に使用した圧縮状態情報２１４をＮＡＮＤ型フラッシュメモリ２６０に格納し、圧縮状態情報２７１、圧縮状態情報２７１を更新する。
【００４６】
次に、図６の圧縮データの例を用いて、図１１を用いて通常の圧縮フロー（圧縮状態情報を用いない場合の圧縮フロー）を説明し、図１２により、圧縮状態情報を用いた圧縮のフローを説明する。
【００４７】
圧縮状態情報がない場合に圧縮するには、ステップ９０１で、まず全体をサーチし、最も数の多い２バイトペアを見つける。図６の例では、ＡＢが最も多い。ステップ９０２で、使われていない１バイトのコードＺにこれを置き換える。
【００４８】
ステップ９０３でＺが存在したことと、ステップ９０４で置き換えると全体が短くなるため、ステップ９０５で置き換えを実際に行い、次のステップ９０１へ繰り返す。これを図６に示したように繰り返すことにより圧縮を行う。また、図６の例では、全体を２つに分割して圧縮しているため、この全体の処理を２回繰り返す。この例では結果的に全体を５回読んでいることになる。
【００４９】
次に圧縮状態情報を用いる場合のフローを図１２に示し、動作を図１３の例を示しながら説明する。
【００５０】
ステップ１００１で、組込側圧縮部２５０が圧縮状態情報を展開する。例えば、図１３示すデータ（１１０１−１）とデータ（１１０１−２）とが圧縮状態情報であるとする。その場合、組込側圧縮部２５０は、未使用であった１バイトコード（図１３における、Ｖ，Ｗ，Ｘ，Ｙ，Ｚ）を元々使用されていたコード（Ａ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ）のみで構成するように置き換える。その置き換えの結果がデータ１１０２である（データ（１１０１−１）とデータ（１１０１−２）は同じであるため）。
【００５１】
次に、ステップ１００２で、組込側圧縮部２５０は、展開されたデータ（この例ではデータ１１０２）を大きさごとのインデックスをつけた形にする。図１３のデータ１１０３がその例である。これは、文字列から該当する置き換えが可能であるかどうかを判断するために使うことを目的とする。
【００５２】
ステップ１００３では、組込側圧縮部２５０は、圧縮の対象となるデータ１１０４（新版データ４０１に同一）の最初から、データ１１０３の最大の長さのところまでで該当するものがないかを探す。この場合は、最大長６バイトというのがわかっているので、最初から６バイトを見て判断する。この例では、ＡＢＣＤＡＢは該当するものがないので、次に５バイトのＡＢＣＤＡを探す。ここでもないので、次の４バイトのＡＢＣＤを探す。この場合、ＡＢＣＤは置き換え可能である。
【００５３】
このため、ステップ１００４で、組込側圧縮部２５０は、ＡＢＣＤをＸに置き換え、次の５バイト目から同様のことを繰り返す。
【００５４】
ステップ１００５で、組込側圧縮部２５０は、最後であるかどうかを判断する。
【００５５】
この方法では、ワンパスで動作することと、辞書の検索にインデックスなどが利用できるため高速に圧縮を実行できることになる。
【００５６】
このような方法をとることにより、処理能力の低い組み込み機器上でも高速に圧縮することができるという効果を得ることができる。
【００５７】
また、コストの面や性能の面からプログラムコードを圧縮しておいて利用するＮＡＮＤ型フラッシュメモリベースの組み込み機器において、ソフトウエアの更新時間を短くし、かつ差分データを小さく表現することが本技術により可能となる。
【００５８】
実施の形態２．
次に図１４〜図１６を参照して実施の形態２を説明する。実施の形態２は、出荷時に組み込み機器２０００に格納される展開辞書に基づいて、差分データをもとに作成した新版データを圧縮する実施形態を説明する。
【００５９】
図１４は、実施の形態２の開発環境ＰＣ１０００の構成図である。各構成要素の機能は実施の形態１と同じである。図１５は、展開辞書を説明するための図である。図１６は、実施の形態２の組み込み機器２０００の構成図である。各構成要素の機能は実施の形態１と同じである。通常、携帯電話などの組み込み機器上では高速に解凍をするための圧縮辞書情報（展開辞書）が保存されている。これは圧縮を高速に行うための辞書とは異なる。図１５で、トークンとは、例えば図１３で述べた、Ｖ，Ｗ，Ｘ，Ｙ，Ｚ等の未使用であった１バイトコードに同じである。例えばトークンの「００」を「Ｖ」、「０２」を「Ｗ」などとみてよい。展開辞書の第１行目は、「００」が「５０，６０」に置換されることを示している。第２行目は、「０２」が「００，ＦＦ」、つまり「００」は「５０，６０」であるので、「５０，６０，ＦＦ」に置換されることを示している。また左側には「順序情報」（修正規則情報）を示している。ここで、トークンとペアの組み合わせの順序情報は、全く同じ状態に圧縮するためには必要な情報である。展開用の辞書は展開を高速に実行するためにこの順序をトークンでソーティングするなど変更していることが多い。即ち、圧縮用の圧縮辞書と展開用の展開辞書とは目的が違うために保持方法が変わるべきものである。例えばソーティングされた状態から元の状態（圧縮辞書）に戻す（修正する）には、順序情報を差分データに含めてやればよい。このように「順序情報」とは、新版データの圧縮に使用する圧縮辞書に修正する修正規則を示す情報である。この場合、１バイトの順序情報は各トークンとペアの組み合わせの３バイトにごとに必要であるため、辞書を継承することにより、辞書を送るのではなく、辞書の中の３バイトを１バイトの順序情報に置き換えて送る。よって、辞書を送信する場合に比べて送信するべきデータのサイズが１／３になる。
【００６０】
（環境開発ＰＣ１０００の動作）
（１）環境開発ＰＣ１０００は、差分データを作成する必要が生じた場合、実施の形態１と同様に差分データを作成する。
（２）圧縮情報生成部１２２は、差分データが生成された場合には、旧版データの圧縮辞書を取得する。例えば出荷時に組み込み機器２０００に圧縮されたデータ（旧版データ）を格納するため、ＰＣ側圧縮部１２１は旧版データを圧縮し、圧縮情報生成部１２２は圧縮後データから圧縮辞書を抽出する。圧縮情報生成部１２２は、この圧縮辞書を記憶部（図示していない）に記憶しておく。圧縮情報生成部１２２は、記憶部から旧版データの圧縮辞書を取得する。記憶部に圧縮辞書が無い場合は、ＰＣ側圧縮部１２１が旧版データを再度圧縮する。
（３）圧縮情報生成部１２２は、取得した圧縮辞書に基づき前述の順序情報を作成する。
（４）圧縮処理データ送信部１３０が、差分データと順序情報とを組み込み機器２０００に送信する。
【００６１】
（組み込み機器２０００の動作）
（１）ＮＡＮＤ型フラッシュメモリ２６０は圧縮された旧版データ、圧縮された旧版データの展開に使用する展開辞書２７１を格納している。
（２）差分データ入力部２２０は、開発環境ＰＣ１０００（差分データ作成装置）により作成された差分データと順序情報を受信する。
（３）データ展開部２３０は、ＮＡＮＤ型フラッシュメモリ２６０に格納されている圧縮された旧版データと、展開辞書とを読み込み、展開辞書を使用して、圧縮された旧版データを展開する。
（４）差分適用部２４０は、データ展開部２３０により展開された旧版データに差分データ入力部２２０の受信した差分データを適用することにより、新版データを作成する。
（５）組込側圧縮部は、差分データ入力部２２０により受信された順序情報に従って、ＮＡＮＤ型フラッシュメモリ２６０に格納されている展開辞書を圧縮辞書に修正する。
（６）そして、差分適用部２４０により作成された新版データを展開辞書から修正した圧縮辞書を使用して圧縮し、圧縮された新版データをＮＡＮＤ型フラッシュメモリ２６０に格納する。
【００６２】
実施の形態３．
次に図１７、図１８を参照して実施の形態３を説明する。実施の形態３は、実施の形態２で開発環境ＰＣ１０００から組み込み機器２０００に送信した「辞書の順序情報」の送信を不要とする実施形態である。そのための条件は、圧縮用辞書データ（圧縮辞書）が展開用辞書データ（展開辞書）と同一になれば良い。そこで次の手順での実装をする。
【００６３】
（圧縮／展開兼用辞書の格納）
（１）出荷時に組み込み機器２０００に圧縮されたデータ（旧版データ）を格納するため、ＰＣ側圧縮部１２１は旧版データを圧縮し、圧縮情報生成部１２２は圧縮後データから圧縮辞書を抽出する。
（２）圧縮情報生成部１２２は、抽出した圧縮辞書から展開兼用の圧縮／展開兼用辞書を生成する。図１７は、辞書データの置き換えを示す図である。図１７の圧縮辞書は、開発環境ＰＣ１０００の圧縮情報生成部１２２により旧版データの圧縮後データから抽出されたものである。図１７の圧縮／展開兼用辞書は、圧縮情報生成部１２２によって圧縮辞書を、トークンを探しやすいようにトークンを昇順に置き換えたものを示す。ここで、トークンを置き換えると、再帰的に置き換えていたペアの部分に影響が出る。すなわち破線で囲んだ「００」は元の圧縮辞書では「１０」（すなわち「５０、６０」への置き換え）であるが、圧縮／展開兼用辞書でそのまま「１０」とすると「ＡＢＣＤ」となってしまう。破線で囲んだ「１０」についても同様である。そこで、圧縮辞書では２行目のトークン１０は、「５０、６０」への置き換えであるが、右側の圧縮／展開兼用辞書では、５０、６０への置き換えは００であるため、圧縮辞書における「１０」を「００」に置き換える。同様に５行目の「０２」は、「１０」に置き換える。このようにトークンを昇順にした上で、対応するように圧縮辞書の辞書データを変更することで圧縮／展開兼用辞書を作ることができる。ここでトークンを置き換えただけであるため、展開速度には影響しないし、圧縮速度にも影響しない。このようにすることにより、辞書の順序情報も送らずにすむ。更新データは元の差分データと本質的に辞書に追加すべき情報の差分情報のみとなる。
（３）開発環境ＰＣ１０００は、この圧縮／展開兼用辞書及び圧縮された旧版データを組み込み機器２０００のＮＡＮＤ型フラッシュメモリ２６０に格納する。
【００６４】
（環境開発ＰＣ１０００の動作）
環境開発ＰＣ１０００は、差分データを作成する必要が生じた場合、実施の形態１と同様に差分データを作成し、圧縮処理データ送信部１３０により、差分データのみを組み込み機器２０００に送信する。
【００６５】
（組み込み機器２０００の動作）
図１８は実施の形態３の組み込み機器２０００の構成を示す図である。
（１）ＮＡＮＤ型フラッシュメモリ２６０は圧縮された旧版データ、圧縮された旧版データの展開に使用する圧縮／展開兼用辞書を格納している。
（２）差分データ入力部２２０は、開発環境ＰＣ１０００から差分データを受信する。
（３）データ展開部２３０は、ＮＡＮＤ型フラッシュメモリ２６０に格納されている圧縮された旧版データと、圧縮／展開兼用辞書とを読み込み、圧縮／展開兼用辞書を使用して、圧縮された旧版データを展開する。
（４）差分適用部２４０は、データ展開部２３０により展開された旧版データに差分データ入力部２２０の受信した差分データを適用することにより、新版データを作成する。
（６）組込側圧縮部２５０は、差分適用部２４０により作成された新版データを圧縮／展開兼用辞書を使用して圧縮し、圧縮された新版データをＮＡＮＤ型フラッシュメモリ２６０に格納する。
【００６６】
以上の実施の形態２では、開発環境ＰＣ１０００から組み込み機器２０００には、差分データのみを送信するので、送信するべきデータを低減できる。
【００６７】
以上の実施の形態では、
ＮＡＮＤ型フラッシュメモリ上に、プログラムコードの一部を圧縮して保持しており、実行時にＲＡＭに展開ロードし実行する形式の組み込み機器に対して、プログラムのバージョンアップを製品出荷後に行うソフトウエア書き換えシステムにおいて、
プログラム開発環境であるコンピュータ装置は、
新旧プログラムのバイナリ差分を抽出するバイナリ差分抽出部と、
ＮＡＮＤ型フラッシュメモリに格納するイメージを生成ためにプログラムコードを圧縮する圧縮部と、
圧縮の状態を示す圧縮状態情報生成部と、
バイナリ差分情報と圧縮状態情報をプログラム開発環境からターゲットの組み込み機器に転送する転送部と
を備え、
ターゲットとなる組み込み装置は、
既存の旧プログラムをＲＡＭ上に圧縮状態から展開する圧縮解凍部と、
ＲＡＭ上に展開した旧プログラムに転送された差分情報を適用し新プログラムに変更する差分適用部と、
ＲＡＭ上にできた新プログラムを転送された圧縮状態情報を利用して圧縮してＮＡＮＤ型フラッシュメモリに保存する圧縮部と
を備えたソフトウエア書き換えシステムを説明した。
【００６８】
以上の実施の形態では、
前記バイナリ差分抽出部は、
プログラムを一定の物理的な単位で区切り、区切った単位ごとに比較するプログラム開発環境であるコンピュータ装置を説明した。
【００６９】
以上の実施の形態では、
前記バイナリ差分抽出部は、
抽出したバイナリ差分が圧縮状態のプログラムコードより大きいかどうかを判断し、もしバイナリ差分の方が大きい場合は、圧縮状態のプログラムコードを差分データとしてその情報を示すフラグあわせて抽出した差分とするプログラム開発環境であるコンピュータ装置を説明した。
【００７０】
以上の実施の形態では、
前記圧縮部は、
特に、バイトペア圧縮と呼ばれる圧縮方式であるプログラム開発環境のコンピュータ装置を説明した。
【００７１】
以上の実施の形態では、
前記圧縮状態情報生成部は、
圧縮データに特有の圧縮辞書を生成するプログラム開発環境であるコンピュータ装置を説明した。
【００７２】
以上の実施の形態では、
前記圧縮状態情報生成部は、
バイトペア圧縮の圧縮辞書そのものを生成するプログラム開発環境であるコンピュータ装置を説明した。
【００７３】
以上の実施の形態では、
前記圧縮状態情報生成部は、
新版の生成された圧縮状態情報と旧プログラムの圧縮状態情報の差分として出力するプログラム開発環境であるコンピュータ装置を説明した。
【図面の簡単な説明】
【００７４】
【図１】実施の形態１におけるＰＣ１０００、組み込み機器２０００のハードウェア資源の例を示す図。
【図２】実施の形態１における一般的な更新システムを示す図。
【図３】実施の形態１における開発環境のＰＣ１０００のブロック図。
【図４】実施の形態１におけるＰＣ１０００の動作のフローチャート。
【図５】実施の形態１における新旧データの例を示す図。
【図６】実施の形態１における新版データの圧縮の例を示す図。
【図７】実施の形態１における組み込み機器２０００のブロック図。
【図８】実施の形態１における組み込み機器２０００の動作のフローチャート。
【図９】実施の形態１における旧版データの例を示す図。
【図１０】実施の形態１における新版データの例を示す図。
【図１１】実施の形態１における組み込み機器２０００の動作のフローチャート。
【図１２】実施の形態１における組み込み機器２０００の動作のフローチャート。
【図１３】実施の形態１における圧縮状態情報がある場合の圧縮の例を示す図。
【図１４】実施の形態２における開発環境ＰＣ１０００のブロック図。
【図１５】実施の形態２における展開辞書を説明する図。
【図１６】実施の形態２における組み込み機器２０００のブロック図。
【図１７】実施の形態３における圧縮／展開兼用辞書を説明する図。
【図１８】実施の形態３における組み込み機器２０００のブロック図。
【符号の説明】
【００７５】
１１，１０００  ＰＣ、２２，２０００  組み込み機器、１１０  差分抽出部、１２０  圧縮処理部、１２２  圧縮情報生成部、１３０  圧縮処理データ送信部、１５１  旧版プログラム、１５２  新版プログラム、１５３  差分データ、１５５  圧縮状態情報、１６０  データ転送部、２１０  ＲＡＭ、２１１  旧展開データ、２１２  新展開データ、２１３  差分データ、２１４  圧縮状態情報、２３０  データ展開部、２４０  差分適用部、２５０  組込側圧縮部、２６０  ＮＡＮＤ型フラッシュメモリ、２７０  実行用プログラム、２８０  プログラム群、２８１  実行プログラム、４０１  新版データ、４０２  旧版データ、４０３  差分データ。
【図１】
0005100500.tif 000002
【図２】
0005100500.tif 000003
【図３】
0005100500.tif 000004
【図４】
0005100500.tif 000005
【図５】
0005100500.tif 000006
【図６】
0005100500.tif 000007
【図７】
0005100500.tif 000008
【図８】
0005100500.tif 000009
【図９】
0005100500.tif 000010
【図１０】
0005100500.tif 000011
【図１１】
0005100500.tif 000012
【図１２】
0005100500.tif 000013
【図１３】
0005100500.tif 000014
【図１４】
0005100500.tif 000015
【図１５】
0005100500.tif 000016
【図１６】
0005100500.tif 000017
【図１７】
0005100500.tif 000018
【図１８】
0005100500.tif 000019