(57)【特許請求の範囲】
【請求項１】
フラッシュメモリの記憶領域にパケット単位でデータを記憶する装置であって、
前記パケットは、当該パケットの管理に関する管理データを格納する管理部と、記憶すべきデータを格納するデータ部とを有し、
前記管理部には、前記管理データとして、前記パケットの異なる４つの状態を示す状態情報が格納可能となっており、
データを記憶するときは、記憶すべきデータを格納するパケットを前記記憶領域に生成し、データ書込開始時に前記パケットの状態情報をデータの新規書込中であることを示す第１の状態に設定し、前記パケットのデータ部に前記記憶すべきデータを書き込み、データ書込完了時に前記パケットの状態情報をデータの新規書込が完了したことを示す第２の状態に設定し、
前記パケットのデータを更新するときは、更新すべきデータを格納する新たなパケットを前記記憶領域に生成し、データ書込開始時に前記パケットの状態情報をデータの更新中であることを示す第３の状態に且つ前記新たなパケットの状態情報を前記第１の状態に設定し、前記新たなパケットのデータ部に前記更新すべきデータを書き込み、データ書込完了時に前記新たなパケットの状態情報を前記第２の状態に且つ前記パケットの状態情報をデータの更新が完了したことを示す第４の状態に設定し、
前記状態情報が前記第２の状態又は前記第３の状態であるパケットを有効なパケットであると判定し、前記状態情報が前記第１の状態又は前記第４の状態であるパケットを無効なパケットであると判定するようになっていることを特徴とするフラッシュメモリのデータ管理装置。
【請求項２】
請求項１において、
前記パケットは、可変長であり、
前記管理部には、前記管理データとして、当該パケットのデータ長を示すデータ長情報が格納可能となっており、
前記データ長情報に基づいて、前記パケットの格納位置を特定するようになっていることを特徴とするフラッシュメモリのデータ管理装置。
【請求項３】
請求項１又は２のいずれかに記載のフラッシュメモリのデータ管理装置により前記記憶領域にパケット単位でデータを記憶し、前記記憶領域とは異なる別の記憶領域を用いて当該記憶領域を更新する装置であって、
前記記憶領域は、当該記憶領域の管理に関する領域管理データを格納する領域管理部と、パケットを格納するパケット部とを有し、
前記領域管理部には、前記領域管理データとして、前記記憶領域の異なる４つの状態を示す領域状態情報が格納可能となっており、
前記記憶領域を更新するときは、データ書込開始時に前記記憶領域の領域状態情報をデータの更新中であることを示す第３の状態に且つ前記別の記憶領域の領域状態情報をデータの新規書込中であることを示す第１の状態に設定し、前記記憶領域の有効なパケットのデータを前記別の記憶領域のパケット部に書き込み、データ書込完了時に前記別の記憶領域の領域状態情報をデータの新規書込が完了したことを示す第２の状態に且つ前記記憶領域の領域状態情報をデータの更新が完了したことを示す第４の状態に設定し、
前記領域状態情報が前記第２の状態又は前記第３の状態である記憶領域を有効な記憶領域であると判定し、前記領域状態情報が前記第１の状態又は前記第４の状態である記憶領域を無効な記憶領域であると判定するようになっていることを特徴とするフラッシュメモリのデータ管理装置。
【請求項４】
請求項３において、
前記領域状態情報が前記第１の状態又は前記第４の状態である記憶領域を前記別の記憶領域として用いるようになっていることを特徴とするフラッシュメモリのデータ管理装置。
【請求項５】
請求項３又は４のいずれかにおいて、
前記記憶領域の領域状態情報及び前記別の記憶領域の領域状態情報の状態に応じて前記記憶領域又は前記別の記憶領域に対する処理を割り当てた処理定義テーブルを参照して、
前記記憶領域又は前記別の記憶領域に対する処理を実行するようになっていることを特徴とするフラッシュメモリのデータ管理装置。
【請求項６】
請求項１乃至５のいずれかにおいて、
前記記憶領域は、フラッシュメモリのデータ初期化単位からなることを特徴とするフラッシュメモリのデータ管理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュメモリの記憶領域にパケット単位でデータを記憶する装置に係り、特に、フラッシュメモリのデータ初期化単位からなる記憶領域に可変長のパケット単位でデータを記憶する装置に関する。さらに詳しくは、フラッシュメモリの初期化回数を少なくして、フラッシュメモリの寿命の低下を防止するとともにデータの書換を高速に行い、しかもデータの更新を高い信頼性をもって行うのに好適なフラッシュメモリのデータ管理装置に関する。
【０００２】
【従来の技術】
従来、フラッシュメモリの記憶領域にパケット単位でデータを記憶する装置としては、例えば、特開平5-233426号公報に開示されたフラッシュメモリの使用方法がある。これは、フラッシュメモリを複数のセクタで区切り、各セクタに論理アドレス部分と、消去管理表示部分と、データ部分とを設け、論理アドレスによりセクタを検索する。そして更新するとき、セクタの消去管理表示部分の消去可能フラグをオンにし、空きセクタにその論理アドレスを付加し、更新データを書き込む。
【０００３】
これにより、フラッシュメモリ上でのデータの消去は、消去対象となるデータが格納されているセクタの消去管理部にデータが無効であることを示す無効フラグを設定することにより行われるので、フラッシュメモリの初期化回数が少なくなり、フラッシュメモリの寿命の低下を防止するとともにデータの書換が高速に行える。
【０００４】
【発明が解決しようとする課題】
しかしながら、上記従来のフラッシュメモリの使用方法にあっては、セクタのデータを更新する場合は、更新すべきデータを新たなセクタに書き込み、更新前のセクタの消去管理部に無効フラグを設定するため、例えば、停電やシステムのハングアップまたはリセットスイッチの誤投入といった事態がデータの更新中に生じた場合は、更新前のセクタと新たなセクタの消去管理部にデータが有効であることを示す有効フラグがともに設定されたまま、データの更新が中断されてしまい、どちらが正しいデータであるかを識別することが困難であるという問題があった。
【０００５】
こうした問題に対処するためには、更新前のセクタが属するブロックを一旦初期化し、その上で、更新すべきデータを新たなセクタに書き込むということをしなければならず、結局、フラッシュメモリの初期化回数を少なくすることができない。なお、この場合は、初期化したブロックのうち更新前のセクタ以外のものを、元の状態に書き換え直す必要がある。
【０００６】
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、フラッシュメモリの初期化回数を少なくして、フラッシュメモリの寿命の低下を防止するとともにデータの書換を高速に行い、しかもデータの更新を高い信頼性をもって行うのに好適なフラッシュメモリのデータ管理装置を提供することを目的としている。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、本発明に係る第１のフラッシュメモリのデータ管理装置は、フラッシュメモリの記憶領域にパケット単位でデータを記憶する装置であって、前記パケットは、当該パケットの管理に関する管理データを格納するための管理部と、記憶すべきデータを格納するためのデータ部とからなり、前記管理部には、前記管理データとして、前記パケットの異なる４つの状態を示す状態情報が格納可能となっており、データを記憶するときは、記憶すべきデータを格納するためのパケットを前記記憶領域に生成し、データ書込開始時に前記パケットの状態情報をデータの新規書込中であることを示す第１の状態に設定し、前記パケットのデータ部に前記記憶すべきデータを書き込み、データ書込完了時に前記パケットの状態情報をデータの新規書込が完了したことを示す第２の状態に設定し、前記パケットのデータを更新するときは、更新すべきデータを格納する新たなパケットを前記記憶領域に生成し、データ書込開始時に前記パケットの状態情報をデータの更新中であることを示す第３の状態に且つ前記新たなパケットの状態情報を前記第１の状態に設定し、前記新たなパケットのデータ部に前記更新すべきデータを書き込み、データ書込完了時に前記新たなパケットの状態情報を前記第２の状態に且つ前記パケットの状態情報をデータの更新が完了したことを示す第４の状態に設定し、前記状態情報が前記第２の状態又は前記第３の状態であるパケットを有効なパケットであると判定し、前記状態情報が前記第１の状態又は前記第４の状態であるパケットを無効なパケットであると判定するようになっている。
【０００８】
このような構成であれば、データを記憶するときは、まず、記憶すべきデータを格納するためのパケットが記憶領域に生成され、データ書込開始時には、パケットの状態情報が第１の状態に設定される。そして、パケットのデータ部に記憶すべきデータが書き込まれ、データ書込完了時には、パケットの状態情報が第２の状態に設定される。また、パケットのデータを更新するときは、まず、更新すべきデータを格納するための新たなパケットが記憶領域に生成され、データ書込開始時には、更新前のパケットの状態情報が第３の状態にかつ新たなパケットの状態情報が第１の状態に設定される。そして、新たなパケットのデータ部に更新すべきデータが書き込まれ、データ書込完了時には、新たなパケットの状態情報が第２の状態にかつ更新前のパケットの状態情報が第４の状態に設定される。
【０００９】
例えば、何らかの原因によりデータの書込が中断された場合は、状態情報が第２の状態であるパケットが有効なパケットであると判定され、状態情報が第１の状態であるパケットが無効なパケットであると判定される。また、例えば、何らかの原因によりデータの更新が中断された場合は、状態情報が第２の状態または第３の状態であるパケットが有効なパケットであると判定され、状態情報が第１の状態または第４の状態であるパケットが無効なパケットであると判定される。
【００１０】
したがって、データの書込が完了するまでは、有効なパケットとして識別されない。例えば、データを更新する場合は、更新すべきデータが新たなパケットに書き込まれるが、新たなパケットはデータの書込が完了するまでは、有効なパケットして識別されないので、データの書込が完了するまでの間に何らかの原因によりデータの書込が中断されても、更新前のパケットの方が正しいデータであると識別される。また、データの更新が完了するまでは、新たなパケットは、有効なパケットとして識別されない。
【００１１】
ここで、パケットは、どのようなデータ長であってもよく、固定長であってもよいし、可変長であってもよい。
【００１６】
ここで、新たなパケットの状態情報を第２の状態にかつ更新前のパケットの状態情報を第４の状態に設定する順番は、どちらが先であってもよいが、新たなパケットの状態情報を第２の状態に設定してから、更新前のパケットの状態情報を第４の状態に設定する順番の方が好ましい。これは、新たなパケットの状態情報を変更した後、更新前のパケットの状態情報を変更する前に、何らかの原因によりデータの更新が中断された場合でも、更新前のパケットが有効なパケットであると判定されるからである。
【００１７】
また、パケットの状態情報をデータの更新中であることを示す第３の状態にかつ新たなパケットの状態情報を第１の状態に設定する順番は、どちらが先であってもよい。
【００１８】
さらに、本発明に係る第２のフラッシュメモリのデータ管理装置は、前記パケットは、可変長であり、前記管理部には、前記管理データとして、当該パケットのデータ長を示すデータ長情報が格納可能となっており、前記データ長情報に基づいて、前記パケットの格納位置を特定するようになっている。
【００１９】
このような構成であれば、記憶領域には、可変長のパケットが記憶され、パケットの格納位置は、データ長情報に基づいて特定される。
【００２０】
さらに、本発明に係る第３のフラッシュメモリのデータ管理装置は、前記第１乃至第３のフラッシュメモリのデータ管理装置により前記記憶領域にパケット単位でデータを記憶し、前記記憶領域とは異なる別の記憶領域を用いて当該記憶領域を更新する装置であって、前記記憶領域は、当該記憶領域の管理に関する領域管理データを格納するための領域管理部と、パケットを格納するためのパケット部とからなり、前記領域管理部には、前記領域管理データとして、前記記憶領域の異なる４つの状態を示す領域状態情報が格納可能となっており、前記記憶領域を更新するときは、データ書込開始時に前記記憶領域の領域状態情報をデータの更新中であることを示す第３の状態にかつ前記別の記憶領域の領域状態情報をデータの新規書込中であることを示す第１の状態に設定し、前記記憶領域の有効なパケットのデータを前記別の記憶領域のパケット部に書き込み、データ書込完了時に前記別の記憶領域の領域状態情報をデータの新規書込が完了したことを示す第２の状態にかつ前記記憶領域の領域状態情報をデータの更新が完了したことを示す第４の状態に設定し、前記領域状態情報が前記第２の状態または前記第３の状態である記憶領域を有効な記憶領域であると判定し、前記領域状態情報が前記第１の状態または前記第４の状態である記憶領域を無効な記憶領域であると判定するようになっている。
【００２１】
このような構成であれば、記憶領域にデータを書き込む領域がなくなった等の理由により、記憶領域を更新するときは、データ書込開始時には、更新前の記憶領域の領域状態情報が第３の状態にかつ更新先となる別の記憶領域の領域状態情報が第１の状態に設定される。そして、更新前の記憶領域の有効なパケットのデータが別の記憶領域のパケット部に書き込まれ、データ書込完了時には、別の記憶領域の領域状態情報が第２の状態にかつ更新前の記憶領域の領域状態情報が第４の状態に設定される。
【００２２】
例えば、何らかの原因により記憶領域の更新が中断された場合は、状態情報が第２の状態または第３の状態である記憶領域が有効な記憶領域であると判定され、状態情報が第１の状態または第４の状態である記憶領域が無効なパケットであると判定される。
【００２３】
したがって、記憶領域の更新が完了するまでは、更新先となる別の記憶領域は、有効な記憶領域として識別されない。
【００２４】
ここで、フラッシュメモリが複数の記憶領域からなる場合は、更新先となる別の記憶領域は、それら記憶領域のうち記憶領域の更新を同時に行う数だけあればよい。記憶領域の更新を同時に行う数は、システムの設計内容によるが、一般的には、記憶領域の更新を同時に複数行わないので、更新先となる別の記憶領域は、フラッシュメモリの記憶領域のうち一つあれば足りる。
【００２５】
また、記憶領域を更新するときは、記憶領域の有効なパケットのデータを別の記憶領域のパケット部に書き込むようになっているが、別の記憶領域を有効に利用する観点からは、記憶領域の有効なパケットのデータを、その配置位置が整順されるように、別の記憶領域のパケット部に書き込むようになっているのが好ましい。
【００２６】
ここで、別の記憶領域の領域状態情報を第２の状態にかつ記憶領域の領域状態情報を第４の状態に設定する順番は、どちらが先であってもよい。また、記憶領域の領域状態情報を第３の状態にかつ別の記憶領域の領域状態情報を第１の状態に設定する順番は、どちらが先であってもよい。
【００２７】
さらに、本発明に係る第４のフラッシュメモリのデータ管理装置は、前記第４のフラッシュメモリのデータ管理装置において、前記領域状態情報が前記第１の状態または前記第４の状態である記憶領域を前記別の記憶領域として用いるようになっている。
【００２８】
このような構成であれば、記憶領域の更新が少なくとも１回行われた後は、領域状態情報が第１の状態または第４の状態である記憶領域が別の記憶領域として用いられる。
【００２９】
さらに、本発明に係る第５のフラッシュメモリのデータ管理装置は、前記第３又は第４のいずれかに記載のフラッシュメモリのデータ管理装置において、前記記憶領域の領域状態情報および前記別の記憶領域の領域状態情報の状態に応じて前記記憶領域または前記別の記憶領域に対する処理を割り当てた処理定義テーブルを参照して、前記記憶領域または前記別の記憶領域に対する処理を実行するようになっている。
【００３０】
このような構成であれば、処理定義テーブルを参照して、更新前の記憶領域または更新先となる別の記憶領域に対する処理が実行される。
【００３１】
ここで、処理定義テーブルの内容は、具体的に次のようになる。更新前の記憶領域の領域状態情報が第４の状態でありかつ更新先となる別の記憶領域の領域状態情報が第１の状態であるときは、更新前の記憶領域の有効なパケットのデータを別の記憶領域のパケット部に書き込む。更新前の記憶領域の領域状態情報が第４の状態でありかつ別の記憶領域の領域状態情報が第２の状態であるときは、更新前の記憶領域を初期化する。なお、更新前の記憶領域の領域状態情報と別の記憶領域の領域状態情報とが逆の場合は、記憶領域または別の記憶領域に対する処理も逆になる。
【００３２】
また、領域状態情報は、記憶領域の異なる４つの状態を示すようになっているが、記憶領域のさらに異なる２つの状態、すなわち、記憶領域が初期化されていないことを示す第５の状態、および記憶領域が初期化されていることを示す第６の状態を示すようにしておけば、処理定義テーブルの内容は、具体的に次のようになる。
【００３３】
更新前の記憶領域の領域状態情報が第３の状態でありかつ更新先となる別の記憶領域の領域状態情報が第１の状態であるときは、別の記憶領域を初期化する。更新前の記憶領域の領域状態情報が第４の状態でありかつ別の記憶領域の領域状態情報が第２の状態であるときは、更新前の記憶領域を初期化する。更新前の記憶領域の領域状態情報が第３の状態でありかつ別の記憶領域の領域状態情報が第５の状態であるときは、別の記憶領域を初期化する。更新前の記憶領域の領域状態情報が第３の状態でありかつ別の記憶領域の領域状態情報が第６の状態であるときは、更新前の記憶領域の有効なパケットのデータを別の記憶領域のパケット部に書き込む。なお、更新前の記憶領域の領域状態情報と別の記憶領域の領域状態情報とが逆の場合は、記憶領域または別の記憶領域に対する処理も逆になる。
【００３４】
このような構成であれば、更新前の記憶領域の初期化中、別の記憶領域の更新中、および別の記憶領域へのデータ書込中のいずれかに処理が中断されても、システムを再起動すると、中断時から行われるべき処理が実行されるので、記憶領域の更新が適切に行われる。したがって、データの更新をさらに高い信頼性をもって行うことができる。
【００３５】
さらに、本発明に係る第６のフラッシュメモリのデータ管理装置は、前記第１乃至第５のいずれかに記載のフラッシュメモリのデータ管理装置において、前記記憶領域は、フラッシュメモリのデータ初期化単位からなる。
【００３６】
このような構成であれば、フラッシュメモリの記憶領域にパケット単位でデータを記憶・更新するときは、データ初期化単位からなる記憶領域内でそれらが行われる。また、記憶領域を更新するときは、データ初期化単位からなる記憶領域ごとにそれが行われる。
【００３７】
【発明の実施の形態】
以下、本発明の実施の形態を図面を参照しながら説明する。図１ないし図１３は、本発明に係るフラッシュメモリのデータ管理装置の実施の形態を示す図である。
【００３８】
この実施の形態は、本発明に係るフラッシュメモリのデータ管理装置を、図１に示すように、フラッシュメモリであるフラッシュＲＯＭ５２のデータ初期化単位からなるブロックに、コンピュータ１００の設定に必要なデータ（例えば、ＩＰアドレス、アクセスすべきＷＷＷ（World Wide Web）サーバのＵＲＬ（Universal Resource Locater））を、可変長のパケット単位で記憶する場合について適用したものである。
【００３９】
まず、本発明に係るフラッシュメモリのデータ管理装置を適用するコンピュータの構成を図１を参照しながら説明する。図１は、コンピュータ１００の構成を示すブロック図である。
【００４０】
コンピュータ１００は、図２に示すように、制御プログラムに基づいて演算およびシステム全体を制御するＣＰＵ５０と、所定領域にあらかじめＣＰＵ５０の制御プログラム等を格納しているフラッシュＲＯＭ５２と、フラッシュＲＯＭ５２等から読み出したデータやＣＰＵ５０の演算過程で必要な演算結果を格納するためのＲＡＭ５４と、ＶＲＡＭ５５に格納されているデータを画像信号に変換して出力するグラフィックチップ５６と、外部装置に対してデータの入出力を媒介するＩ／Ｆ５８とで構成されており、これらは、データを転送するための信号線であるバス５９で相互にかつデータ授受可能に接続されている。
【００４１】
Ｉ／Ｆ５８には、外部装置として、ヒューマンインターフェースとしてデータの入力が可能でかつ画像信号に基づいて画面を表示するＬＣＤ（Liquid Crystal Display）からなるタッチパネル６０が接続されており、その他、図示しないが、音を出力するスピーカと、インターネットに接続するための信号線等が接続されている。
【００４２】
グラフィックチップ５６は、ＶＲＡＭ５５に格納されている表示用データを先頭アドレスから所定周期で順次読み出し、読み出した表示用データを画像信号に変換してタッチパネル６４に出力するようになっている。
【００４３】
次に、フラッシュＲＯＭ５２の構成を図２ないし図８を参照しながら説明する。図２は、ブロックＡ，Ｂのデータ構造を示す図である。
【００４４】
フラッシュＲＯＭ５２は、データ書換可能な不揮発性の記憶素子からなり、図２に示すように、その記憶領域をデータ初期化単位からなる複数のブロックに論理的に区分し、それらブロックのうち２つのブロックＡ，Ｂが、データの書込を行うためのデータ書込用領域、およびブロックの更新時に用いるデータ更新用領域として利用される。なお、フラッシュＲＯＭ５２は、例えば、初期化状態（初期化されてデータが書き込まれていない状態）では記憶領域のデータビットが「１」となるものである。
【００４５】
ブロックＡ，Ｂは、いずれも、ブロックの管理に関する領域管理データを格納するための領域管理部７０と、パケットを格納するためのパケット部７２とからなっており、一方がデータ書込用領域となっているときは、他方がデータ更新用領域となり、逆に、他方がデータ書込用領域となっているときは、一方がデータ更新用領域となる。データの書込は、データ書込用領域となるブロックに対して行う。これに対し、ブロックの更新は、データ書込用領域となるブロックのパケット部７２にデータを書き込むための領域が不足したときに行うものであって、データ書込用領域となるブロックのパケット部７２の有効なパケットのデータを、その配置位置が整順されるように、データ更新用領域となるブロックのパケット部７２に書き込むことにより行う。そして、パケット部７２へのデータの書込が完了した時点で、データ更新用領域となっているブロックをデータ書込用領域とし、データ書込用領域となっているブロックをデータ更新用領域とする。
【００４６】
領域管理部７０は、図３に示すように、ブロックの初期化回数を示す初期化回数情報を格納する領域７０ａと、ブロックの異なる５つの状態を示す領域状態情報１〜５を格納する領域７０ｂ〜７０ｆとからなっており、各領域７０ａ〜７０ｆは、フラッシュＲＯＭ５２のデータ読出単位（例えば、４バイト（３２ビット））の記憶容量を有している。図３は、領域管理部７０のデータ構造を示す図である。
【００４７】
各領域状態情報１〜５は、図４に示すように構成されている。図４は、領域状態情報の内容を示す図である。
【００４８】
領域状態情報１は、図４の上１段目の項目に示すように、ブロックが初期化されていること（初期化完了状態）を示す情報であって、「ＩＮＩＴ」という４バイトの書込情報として領域７０ｂに書き込まれる。また、領域状態情報２は、図４の上２段目の項目に示すように、ブロックへのデータ書込中であること（データ書込中状態）を示す情報であって、「ＳＴＵＰ」という４バイトの書込情報として領域７０ｃに書き込まれる。また、領域状態情報３は、図４の上３段目の項目に示すように、ブロックへのデータ書込が完了し、さらにブロックのパケット部７２にデータの追記が可能であること（データ書込完了状態）を示す情報であって、「ＮＯＲＭ」という４バイトの書込情報として領域７０ｄに書き込まれる。
【００４９】
領域状態情報４は、図４の上４段目の項目に示すように、ブロックのデータを更新するため、ブロックからのデータ移動中であること（データ移動中）を示す情報であって、「ＭＯＶＥ」という４バイトの書込情報として領域７０ｅに書き込まれる。また、領域状態情報５は、図４の上５段目の項目に示すように、ブロックからのデータ移動が完了したこと（データ移動完了状態）を示す情報であって、「ＭＦＩＮ」という４バイトの書込情報として領域７０ｆに書き込まれる。
【００５０】
領域状態情報１〜５は、その順序で各領域７０ｂ〜７０ｆに書き込まれるものである。したがって、例えば、領域状態情報３は、領域状態情報１，２が書き込まれていない状態では、書き込まれないし、領域状態情報４，５が書き込まれている状態でも、書き込まれない。なお、領域状態情報１〜５がいずれも書き込まれていない状態、または領域状態情報１〜５がその順序で書き込まれていない状態は、ブロックが一度も初期化されたことがないもの（未初期化状態）として定義し、取り扱う。
【００５１】
パケット部７２は、フラッシュＲＯＭ５２のデータ読出単位（例えば、４バイト）の倍数からなる所定容量の記憶領域を有し、図５に示すように、可変長の複数のパケットＰ1〜Ｐnを格納可能となっており、各パケットＰ1〜Ｐnは、パケットの管理に関する管理データを格納するための管理部８０と、記憶すべきデータを格納するためのデータ部８２とからなり、パケット部７２の先頭アドレスから末尾アドレスに向けて順次生成されていく。図５は、パケット部７２のデータ構造を示す図である。
【００５２】
管理部８０は、図６に示すように、パケットの異なる５つの状態を示す状態情報を格納する領域８０ａと、パケットを識別するためのＩＤを示すＩＤ情報を格納する領域８０ｂと、パケットが生成された順に付す連続番号を示す連続番号情報を格納する領域８０ｃと、データ部８２のデータ長を示すデータ長情報を格納する領域８０ｄとからなり、各領域８０ａ〜８０ｄは、１バイト（８ビット）の記憶容量を有し、管理部８０全体として、フラッシュＲＯＭ５２のデータ読出単位（例えば、４バイト（３２ビット））の記憶容量を有している。図６は、管理部８０のデータ構造を示す図である。
【００５３】
状態情報は、上記領域状態情報と異なり、領域８０ａに格納される１つのデータによりパケットの異なる５つの状態を示すものであって、図７に示すように構成されている。図７は、状態情報の内容を示す図である。
【００５４】
状態情報は、第１の状態として、パケットへのデータ書込中であること（データ書込中状態）を示し、この場合、「７ＦＨ」という１バイトの書込情報として領域８０ａに書き込まれる。また、第２の状態として、パケットへのデータ書込が完了したこと（データ書込完了状態）を示し、この場合、第１の状態を示す書込情報の「１」の最上位ビットを「０」に設定した「３ＦＨ」という１バイトの書込情報として領域８０ａに書き込まれる。また、第３の状態として、パケットのデータ更新中であること（データ更新中状態）を示し、この場合、第２の状態を示す書込情報の「１」の最上位ビットを「０」に設定した「１ＦＨ」という１バイトの書込情報として領域８０ａに書き込まれる。
【００５５】
状態情報は、第４の状態として、パケットのデータ更新が完了したこと（データ更新完了状態）を示し、この場合、第３の状態を示す書込情報の「１」の最上位ビットを「０」に設定した「０ＦＨ」という１バイトの書込情報として領域８０ａに書き込まれる。また、第５の状態として、パケットが未使用であること（未使用状態）を示し、この場合、「ＦＦＨ」という１バイトの書込情報（すなわち、初期化状態のまま）として領域８０ａに書き込まれる。
【００５６】
状態情報は、第５の状態、第１の状態、第２の状態、第３の状態および第４の状態の順序で領域８０ａに書き込まれるものである。したがって、例えば、状態情報が第３の状態であるときは、そのパケットが属するブロックが初期化されない限り、第１の状態または第２の状態になることはない。
【００５７】
また、フラッシュＲＯＭ５２には、図８に示すように、ブロックＡ，Ｂの領域状態情報の状態に応じてブロックＡ，Ｂに対する処理を割り当てた処理定義テーブルが格納されている。図８は、処理定義テーブルのデータ構造を示す図である。
【００５８】
処理定義テーブルは、図８に示すように構成されている。
【００５９】
ブロックＡの状態がデータ移動中でありかつブロックＢの状態が未初期化またはデータ書込中であるときは、ブロックＢを初期化する。ブロックＡの状態がデータ移動中でありかつブロックＢの状態が初期化完了であるときは、ブロックＡの有効なパケットのデータをブロックＢのパケット部７２に書き込むことにより、ブロックＡをブロックＢに更新する。ブロックＡの状態がデータ書込中でありかつブロックＢの状態が未初期化若しくは初期化完了であるとき、ブロックＡの状態がデータ移動中でありかつブロックＢの状態がデータ書込完了であるとき、またはブロックＡの状態がデータ移動完了でありかつブロックＢの状態が未初期化、初期化完了、データ書込中若しくはデータ書込完了であるときは、ブロックＡを初期化する。ブロックＡの状態がデータ書込完了でありかつブロックＢの状態が未初期化、初期化完了若しくはデータ書込中であるときは、ブロックＡをデータ書込用領域とする。
【００６０】
また、ブロックＢの状態がデータ移動中でありかつブロックＡの状態が未初期化またはデータ書込中であるときは、ブロックＡを初期化する。ブロックＢの状態がデータ移動中でありかつブロックＡの状態が初期化完了であるときは、ブロックＢの有効なパケットのデータをブロックＡのパケット部７２に書き込むことにより、ブロックＢをブロックＡに更新する。ブロックＢの状態がデータ書込中でありかつブロックＡの状態が未初期化若しくは初期化完了であるとき、ブロックＢの状態がデータ移動中でありかつブロックＡの状態がデータ書込完了であるとき、またはブロックＢの状態がデータ移動完了でありかつブロックＡの状態が未初期化、初期化完了、データ書込中若しくはデータ書込完了であるときは、ブロックＢを初期化する。ブロックＢの状態がデータ書込完了でありかつブロックＡの状態が未初期化、初期化完了若しくはデータ書込中であるときは、ブロックＢをデータ書込用領域とする。
【００６１】
また、ブロックＡの状態が未初期化若しくは初期化完了でありかつブロックＢの状態が未初期化または初期化完了であるときは、ブロックＡ，Ｂに対する初期化処理を行う。
【００６２】
一方、図１に戻り、ＣＰＵ５０は、マイクロプロセッシングユニットＭＰＵ等からなり、フラッシュＲＯＭ５２の所定領域に格納されている所定のプログラムを起動させ、そのプログラムに従って、図９ないし図１３のデータ書込処理、データ読込処理およびブロック更新処理を並列に実行するようになっている。
【００６３】
まず、データ書込処理を図９を参照しながら説明する。図９は、データ書込処理を示すフローチャートである。
【００６４】
データ書込処理は、ブロックＡ，Ｂに対してデータの新規書込または更新をパケット単位で行うときに実行され、初期状態ではブロックＡをデータ書込用領域とし、ブロックＡに対してデータの書込を行い、それ以降は処理に応じてデータ書込用領域となるブロックに対してデータの書込を行う処理であって、ＣＰＵ５０において実行されると、図９に示すように、まず、ステップＳ１００に移行する。
【００６５】
ステップＳ１００では、フラッシュＲＯＭ５２に対してデータの書込を行おうとする他の処理（図９ないし図１３のフローチャートに示す処理以外のもの）からのデータ書込要求が、データの新規書込要求であるかパケットのデータの更新要求であるかを判定し、データの新規書込要求であると判定したとき(Yes)は、ステップＳ１０１に移行して、ブロックの更新が完了したか否かを判定し、ブロックの更新が完了したと判定されたとき(Yes)は、ステップＳ１０２に移行するが、そうでないと判定されたとき(No)は、ブロックの更新が完了するまでステップＳ１０１で待機する。
【００６６】
ステップＳ１０２では、記憶すべきデータを格納するためのパケットを生成するための領域がパケット部７２に不足しているか否かを判定し、パケットを生成するための十分な領域がパケット部７２にあると判定されたとき(No)は、ステップＳ１０４に移行する。
【００６７】
ステップＳ１０４では、記憶すべきデータを格納するためのパケットをパケット部７２に生成し、ステップＳ１０８に移行する。このステップＳ１０４では、具体的に、パケット部７２にパケットが１つも生成されていないときは、パケット部７２の先頭アドレスからパケットを生成し、パケット部７２に既にパケットが生成されているときは、パケット部７２の先頭アドレスから数えて末尾にあるパケットの末尾アドレスの次のアドレスからパケットを生成する。また、パケットを生成するときは、他のパケットに与えられたＩＤとは異なるＩＤを示すＩＤ情報、このパケットが生成される順番を示す連続番号、記憶すべきデータのデータ長を示すデータ長情報をそれぞれ管理部８０に書き込み、状態情報を第１の状態に設定する。
【００６８】
ステップＳ１０８では、記憶すべきデータを、生成したパケットのデータ部８２に書き込み、ステップＳ１１０に移行して、生成したパケットの状態情報を第２の状態に設定し、一連の処理を終了する。
【００６９】
一方、ステップＳ１００で、上記他の処理からのデータ書込要求が、パケットのデータの更新要求であると判定したとき(No)は、ステップＳ１１３に移行して、ブロックの更新が完了したか否かを判定し、ブロックの更新が完了したと判定されたとき(Yes)は、ステップＳ１１４に移行するが、そうでないと判定されたとき(No)は、ブロックの更新が完了するまでステップＳ１１３で待機する。
【００７０】
ステップＳ１１４では、更新すべきデータを格納するためのパケットを生成するための領域がパケット部７２に不足しているか否かを判定し、パケットを生成するための十分な領域がパケット部７２にあると判定されたとき(No)は、ステップＳ１１６に移行する。
【００７１】
ステップＳ１１６では、更新すべきデータを格納するための新たなパケットをパケット部７２に生成し、ステップＳ１１８に移行する。このステップＳ１１６では、具体的に、パケットを生成するときは、更新前のパケットに与えられたＩＤと同一のＩＤを示すＩＤ情報、このパケットが生成される順番を示す連続番号、および更新すべきデータのデータ長を示すデータ長情報をそれぞれ管理部８０に書き込み、状態情報を第１の状態に設定する。なお、パケットの生成場所については、上記ステップＳ１０４と同様である。
【００７２】
ステップＳ１１８では、更新前のパケットの状態情報を第３の状態に設定し、ステップＳ１２２に移行して、更新すべきデータを新たなパケットのデータ部８２に書き込み、ステップＳ１２４に移行して、新たなパケットの状態情報を第２の状態に設定し、ステップＳ１２６に移行して、更新前のパケットの状態情報を第４の状態に設定し、一連の処理を終了する。
【００７３】
一方、ステップＳ１１４で、更新すべきデータを格納するためのパケットを生成するための領域がパケット部７２に不足していると判定されたとき(Yes)は、ステップＳ１３２に移行して、ブロックの更新をすべきブロック更新要求を出力し、ステップＳ１３４に移行して、ブロックの更新が完了したか否かを判定し、ブロックの更新が完了したと判定されたとき(Yes)は、ステップＳ１１６に移行するが、そうでないと判定されたとき(No)は、ブロックの更新が完了するまでステップＳ１３４で待機する。
【００７４】
一方、ステップＳ１０２で、記憶すべきデータを格納するためのパケットを生成するための領域がパケット部７２に不足していると判定されたとき(Yes)は、ステップＳ１２８に移行して、ブロックの更新をすべきブロック更新要求を出力し、ステップＳ１３０に移行して、ブロックの更新が完了したか否かを判定し、ブロックの更新が完了したと判定されたとき(Yes)は、ステップＳ１０４に移行するが、そうでないと判定されたとき(No)は、ブロックの更新が完了するまでステップＳ１３０で待機する。
【００７５】
次に、データ読込処理を図１０を参照しながら説明する。図１０は、データ読込処理を示すフローチャートである。
【００７６】
データ読込処理は、ブロックＡ，Ｂに対してデータの読込をパケット単位で行うときに実行される処理であって、ＣＰＵ５０において実行されると、図１０に示すように、まず、ステップＳ２００に移行する。
【００７７】
ステップＳ２００では、パケットの管理部８０からデータ長情報を取得し、ステップＳ２０２に移行して、取得したデータ長情報に基づいて、フラッシュＲＯＭ５２に対してデータの読込を行おうとする他の処理（図９ないし図１３のフローチャートに示す処理以外のもの）から与えられたＩＤ情報と一致するＩＤ情報を有するパケットの格納位置を特定し、ステップＳ２０４に移行する。
【００７８】
ステップＳ２０４では、格納位置を特定したパケットが有効であるか否かを判定し、パケットが有効であると判定されたとき(Yes)は、ステップＳ２０６に移行する。このステップＳ２０４では、パケットの有効・無効を次のように判定する。パケットの状態情報が第２の状態または第３の状態であるときは、そのパケットが有効であると判定し、パケットの状態情報が第１の状態または第４の状態であるときは、そのパケットが無効であると判定する。
【００７９】
ステップＳ２０６では、格納位置を特定したパケットのデータ部８２からデータを読み出し、ステップＳ２０８に移行して、格納位置を特定したパケットがパケット部７２の先頭アドレスから数えて末尾のものであるか否かを判定し、パケットが末尾のものではないと判定されたとき(No)は、ステップＳ２００に移行するが、そうでないと判定されたとき(Yes)は、一連の処理を終了する。
【００８０】
一方、ステップＳ２０４で、格納位置を特定したパケットが無効であると判定されたとき(No)は、ステップＳ２０８に移行する。
【００８１】
次に、ブロック更新処理を図１１を参照しながら説明する。図１１は、ブロック更新処理を示すフローチャートである。
【００８２】
ブロック更新処理は、上記ステップＳ１２８で出力されるブロック更新要求を受けてブロックＡ，Ｂを更新する処理であって、ＣＰＵ５０において実行されると、図１１に示すように、まず、ステップＳ３００に移行する。
【００８３】
ステップＳ３００では、図８に示す処理定義テーブルを参照して、ブロックＡ，Ｂに対する処理を実行し、ステップＳ３０２に移行して、上記ステップＳ１２８によりブロック更新要求があるか否かを判定し、ブロック更新要求があると判定されたとき(Yes)は、ステップＳ３０４に移行する。
【００８４】
ステップＳ３０４では、ブロックＡが有効であるか否かを判定し、ブロックＡが有効であると判定されたとき(Yes)は、ステップＳ３０６に移行する。このステップＳ３０４では、ブロックの有効・無効を次のように判定する。ブロックの領域管理部７０に領域状態情報３，４が格納されているときは、そのブロックが有効であると判定し、ブロックの領域管理部７０に領域状態情報１，２，５が格納されているとき、またはブロックの状態が未初期化であるときは、そのブロックが無効であると判定する。
【００８５】
ステップＳ３０６では、ブロックＡの領域管理部７０に領域状態情報４を書き込み、ステップＳ３００に移行する。
【００８６】
一方、ステップＳ３０４で、ブロックＡが無効であると判定されたとき(No)（この場合、ブロックＢが有効であるはずなので、すなわちブロックＢが有効であると判定されたとき）は、ステップＳ３０８に移行して、ブロックＢの領域管理部７０に領域状態情報４を書き込み、ステップＳ３００に移行する。
【００８７】
一方、ステップＳ３０２で、上記ステップＳ１２８によりブロック更新要求がないと判定されたとき(No)は、ステップＳ３００に移行する。
【００８８】
次に、上記ステップＳ３００の処理定義テーブルに基づく処理を図１２および図１３を参照しながら説明する。図１２および図１３は、ステップＳ３００の処理定義テーブルに基づく処理を示すフローチャートである。
【００８９】
ステップＳ３００の処理定義テーブルに基づく処理は、上記ステップＳ３００において実行されると、図１２に示すように、まず、ステップＳ４００に移行する。
【００９０】
ステップＳ４００では、ブロックＡ，Ｂの領域状態情報を取得し、ステップＳ４０２に移行して、図８に示す処理定義テーブルを参照して、取得した領域状態情報からブロックＡ，Ｂに対する処理を選択する。
【００９１】
ステップＳ４０２の選択の結果、ブロックＡを初期化する処理が選択されたとき(▲１▼)は、ステップＳ４０４に移行して、ブロックＡを初期化し、ステップＳ４０６に移行して、ブロックＡの初期化回数を「１」加算してブロックＡの領域管理部７０にその初期化回数情報を書き込み、ステップＳ４０８に移行して、ブロックＡの領域管理部７０に領域状態情報１を書き込み、一連の処理を終了する。
【００９２】
一方、ステップＳ４０２の選択の結果、ブロックＢを初期化する処理が選択されたとき(▲２▼)は、ステップＳ４１０に移行して、ブロックＢを初期化し、ステップＳ４１２に移行して、ブロックＢの初期化回数を「１」加算してブロックＢの領域管理部７０にその初期化回数情報を書き込み、ステップＳ４１４に移行して、ブロックＢの領域管理部７０に領域状態情報１を書き込み、一連の処理を終了する。
【００９３】
一方、ステップＳ４０２の選択の結果、ブロックＢをブロックＡに更新する処理が選択されたとき(▲３▼)は、ステップＳ４１６に移行して、ブロックＡの領域管理部７０に領域状態情報２を書き込み、ステップＳ４１８に移行して、ブロックＢの有効なパケットのデータを、その格納位置が整順されるように、ブロックＡのパケット部７２に書き込み、ステップＳ４２０に移行して、ブロックＡの領域管理部７０に領域状態情報３を書き込み、ステップＳ４２２に移行して、ブロックＢの領域管理部７０に領域状態情報５を書き込み、一連の処理を終了する。
【００９４】
一方、ステップＳ４０２の選択の結果、ブロックＡをブロックＢに更新する処理が選択されたとき(▲４▼)は、ステップＳ４２４に移行して、ブロックＢの領域管理部７０に領域状態情報２を書き込み、ステップＳ４２６に移行して、ブロックＡの有効なパケットのデータを、その格納位置が整順されるように、ブロックＢのパケット部７２に書き込み、ステップＳ４２８に移行して、ブロックＢの領域管理部７０に領域状態情報３を書き込み、ステップＳ４３０に移行して、ブロックＡの領域管理部７０に領域状態情報５を書き込み、一連の処理を終了する。
【００９５】
一方、ステップＳ４０２の選択の結果、ブロックＡをデータ書込用領域とする処理が選択されたとき(▲５▼)は、ステップＳ４３２に移行して、ブロックＡをデータ書込領域とし、ステップＳ４３３に移行して、ブロック更新要求を解除し、一連の処理を終了する。
【００９６】
一方、ステップＳ４０２の選択の結果、ブロックＢをデータ書込用領域とする処理が選択されたとき(▲６▼)は、ステップＳ４３４に移行して、ブロックＢをデータ書込領域とし、ステップＳ４３５に移行して、ブロック更新要求を解除し、一連の処理を終了する。
【００９７】
一方、ステップＳ４０２の選択の結果、ブロックＡ，Ｂに対する初期化処理を行う処理が選択されたとき(▲７▼)は、ステップＳ４３６に移行して、ブロックＡ，Ｂを初期化し、ステップＳ４３８に移行して、ブロックＡの領域管理部７０に領域状態情報１を書き込み、一連の処理を終了する。
【００９８】
一方、ステップＳ４０２の選択の結果、上記いずれの処理も選択されないとき(×)は、一連の処理を終了する。
【００９９】
次に、上記実施の形態の動作を図面を参照しながら説明する。
【０１００】
まず、ブロックＡ，Ｂに対してデータの新規書込をパケット単位で行う場合を説明する。
【０１０１】
初期状態では、ブロックＡをデータ書込用領域とし、ブロックＡに対してデータの書込が行われる。フラッシュＲＯＭ５２に対してデータの書込を行おうとする他の処理からデータ新規書込要求を受けると、データ書込用領域となるブロックＡに対してデータの新規書込が開始される。このとき、データ新規書込要求と併せて、記憶すべきデータおよびＩＤ情報が与えられる。
【０１０２】
データの新規書込は、次のように行われる。ＣＰＵ５０により、ステップＳ１００〜ステップＳ１１０を経て、記憶すべきデータを格納するためのパケットがブロックＡのパケット部７２に生成される。このとき、取得されたＩＤ情報、このパケットが生成される順番を示す連続番号、および記憶すべきデータのデータ長を示すデータ長情報がそれぞれ管理部８０に書き込まれ、状態情報が第１の状態（データ書込中）に設定される。そして、記憶すべきデータが、生成されたパケットのデータ部８２に書き込まれ、生成されたパケットの状態情報が第２の状態（データ書込完了）に設定される。
【０１０３】
データの書込が中断されない通常の状態では、このようにブロックＡのパケット部７２にデータがパケットとして書き込まれるのであるが、例えば、何らかの原因によりデータの書込が中断された場合は、次のように動作する。
【０１０４】
データの書込が中断された場合は、システムを再起動した後、フラッシュＲＯＭ５２に対してデータの読込を行おうとする他の処理からデータ読込要求を受けると、ここではまだブロックＡがデータ書込用領域となっているので、ブロックＡに対してデータの読込が開始される。このとき、データ読込要求と併せて、上記他の処理からは上記同一のＩＤ情報が与えられたとする。
【０１０５】
データの読込は、次のように行われる。ＣＰＵ５０により、ステップＳ２００，Ｓ２０２を経て、パケットの管理部８０からデータ長情報が取得され、取得されたデータ長情報に基づいて、上記他の処理から与えられたＩＤ情報と一致するＩＤ情報を有するパケットの格納位置が特定される。このとき、格納位置が特定されたパケットは、先程データの書込が中断され、その状態情報が第１の状態となっているので、ステップＳ２０４，Ｓ２０８を経て、無効なパケットであると判定され、データの読込が行われない。
【０１０６】
なお、データの書込が中断されず、正常にデータの書込が完了した場合は、データ読込要求を受けると、ステップＳ２００，Ｓ２０２を経て、パケットの管理部８０からデータ長情報が取得され、取得されたデータ長情報に基づいて、上記他の処理から与えられたＩＤ情報と一致するＩＤ情報を有するパケットの格納位置が特定される。このとき、格納位置が特定されたパケットは、その状態情報が第２の状態となっているので、ステップＳ２０４，Ｓ２０６を経て、有効なパケットであると判定され、格納位置が特定されたパケットのデータ部８２からデータが読み出される。
【０１０７】
また、以上では、ブロックＡに対してデータの新規書込を行う場合を説明したが、ブロックＢに対してデータの新規書込を行う場合も、上記同様の要領で動作する。
【０１０８】
次に、ブロックＡ，Ｂに対してデータの更新をパケット単位で行う場合を説明する。なお、ブロックＡには、すでにいくつかのパケットが生成されており、ここでは、それらのパケットのうちいずれかのデータを更新する。
【０１０９】
初期状態では、ブロックＡをデータ書込用領域とし、ブロックＡに対してデータの書込が行われる。フラッシュＲＯＭ５２に対してデータの更新を行おうとする他の処理からデータ更新要求を受けると、データ書込用領域となるブロックＡに対してデータの更新が開始される。このとき、データ更新要求と併せて、更新すべきデータおよび更新対象となるパケットのＩＤ情報が与えられる。
【０１１０】
データの更新は、次のように行われる。ＣＰＵ５０により、ステップＳ１１２〜ステップＳ１２６を経て、更新すべきデータを格納するための新たなパケットがブロックＡのパケット部７２に生成される。このとき、取得されたＩＤ情報、このパケットが生成される順番を示す連続番号、および更新すべきデータのデータ長を示すデータ長情報がそれぞれ管理部８０に書き込まれ、状態情報が第１の状態（データ書込中）に設定される。そして、更新前のパケットの状態情報が第３の状態（データ更新中）に設定され、更新すべきデータが新たなパケットのデータ部８２に書き込まれ、新たなパケットの状態情報が第２の状態（データ書込完了）に設定されるとともに更新前のパケットの状態情報が第４の状態（データ更新完了）に設定される。
【０１１１】
データの更新が中断されない通常の状態では、このようにブロックＡのパケット部７２にデータがパケットとして書き込み更新されるのであるが、例えば、何らかの原因によりデータの更新が中断された場合は、次のように動作する。
【０１１２】
データの更新が中断された場合は、システムを再起動した後、フラッシュＲＯＭ５２に対してデータの読込を行おうとする他の処理からデータ読込要求を受けると、ここではまだブロックＡがデータ書込用領域となっているので、ブロックＡに対してデータの読込が開始される。このとき、データ読込要求と併せて、上記他の処理からは上記同一のＩＤ情報が与えられたとする。
【０１１３】
データの読込は、次のように行われる。ＣＰＵ５０により、ステップＳ２００，Ｓ２０２を経て、パケットの管理部８０からデータ長情報が取得され、取得されたデータ長情報に基づいて、上記他の処理から与えられたＩＤ情報と一致するＩＤ情報を有するパケットの格納位置が特定される。このとき、新たなパケットよりも更新前のパケットの方がパケット部７２の先頭アドレス側に格納されているので、更新前のパケットの格納位置が先に特定されるが、この更新前のパケットは、先程データの更新が中断され、その状態情報が第３の状態となっているので、ステップＳ２０４，Ｓ２０６を経て、有効なパケットであると判定され、そのパケットのデータ部８２からデータが読み出される。一方、新たなパケットには、更新すべきデータが途中までしか書き込まれていないので、新たなパケットのデータ部８２からは、データの読込が行われない。
【０１１４】
なお、データの更新が中断されず、正常にデータの更新が完了した場合は、データ読込要求を受けると、ステップＳ２００，Ｓ２０２を経て、パケットの管理部８０からデータ長情報が取得され、取得されたデータ長情報に基づいて、上記他の処理から与えられたＩＤ情報と一致するＩＤ情報を有するパケットの格納位置が特定される。このとき、新たなパケットよりも更新前のパケットの方がパケット部７２の先頭アドレス側に格納されているので、更新前のパケットの格納位置が先に特定されるが、この更新前のパケットは、その状態情報が第４の状態となっているので、ステップＳ２０４，Ｓ２０８を経て、無効なパケットであると判定され、データの読込が行われない。
【０１１５】
次いで、他の処理から与えられたＩＤ情報と一致するＩＤ情報を有する次のパケットの格納位置が特定される。このとき、新たなパケットの格納位置が特定されるが、この新たなパケットは、その状態情報が第２の状態となっているので、ステップＳ２０４，Ｓ２０６を経て、有効なパケットであると判定され、そのパケットのデータ部８２からデータが読み出される。
【０１１６】
また、以上では、ブロックＡに対してデータの更新を行う場合を説明したが、ブロックＢに対してデータの更新を行う場合も、上記同様の要領で動作する。
【０１１７】
次に、ブロックＡ，Ｂを更新する場合を図１４を参照しながら説明する。図１４は、ブロックＡをブロックＢに更新する場合を説明するための図である。
【０１１８】
ブロックＡをデータ書込用領域として、ブロックＡに対してデータの書込・更新を続けていくと、ブロックＡのパケット部７２は、図１４に示すように、有効なパケットと無効なパケットが混在する状態となる。図１４の例では、ＩＤが「０１」である有効なパケットとＩＤが「０３」である有効なパケットとの間には、データの更新により無効となった２つのパケットが存在する。このようにブロックＡのパケット部７２に無効なパケットが多数存在すると、データの新規書込・更新を行うことができなくなる。
【０１１９】
そこで、フラッシュＲＯＭ５２に対してデータの更新を行おうとする他の処理からデータ新規書込要求またはデータ更新要求を受けたときに、記憶・更新すべきデータを格納するためのパケットを生成するための領域がブロックＡのパケット部７２に不足していると、ステップＳ１２８において、ブロック更新要求が出力される。ブロック更新要求を受けると、ブロックＡからブロックＢへの更新が開始される。なお、ブロックＢは、すでに初期化されているものとし、すなわち、ブロックＢの領域管理部７０には、領域状態情報１（初期化完了）が書き込まれている。
【０１２０】
ブロックＡからブロックＢへのブロックの更新は、次のように行われる。ＣＰＵ５０により、ステップＳ３００〜Ｓ３０４を経て、処理定義テーブルが参照されてブロックＡ，Ｂに対する処理が実行され、ブロックＡが有効であるか否かが判定される。このとき、ブロックＡが有効であるので、ステップＳ３０６において、ブロックＡの領域管理部７０に領域状態情報４（データ移動中）が書き込まれる。
【０１２１】
次いで、ブロックＡの領域管理部７０に領域状態情報４が、ブロックＢの領域管理部７０に領域状態情報１が書き込まれると、ステップＳ３００，Ｓ４００，Ｓ４０２，Ｓ４２４〜Ｓ４３０を経て、処理定義テーブルが参照されて、ブロックＢの領域管理部７０に領域状態情報２（データ書込中）が書き込まれ、図１４に示すように、ブロックＡの有効なパケットのデータが、その格納位置が整順されるように、ブロックＢのパケット部７２に書き込まれ、ブロックＢの領域管理部７０に領域状態情報３（データ書込完了）が書き込まれるとともにブロックＡの領域管理部７０に領域状態情報５（データ移動完了）が書き込まれる。このようにブロックの更新が完了すると、ブロックＡは、データ更新用領域となり、ブロックＡに代わって今度はブロックＢがデータ書込用領域となる。
【０１２２】
そして、ブロックＡの領域管理部７０に領域状態情報５が、ブロックＢの領域管理部７０に領域状態情報３が書き込まれると、ステップＳ３００，Ｓ４００，Ｓ４０２〜Ｓ４０８を経て、処理定義テーブルが参照されて、ブロックＡが初期化され、ブロックＡの初期化回数が「１」加算されてブロックＡの領域管理部７０にその初期化回数情報が書き込まれ、ブロックＡの領域管理部７０に領域状態情報１が書き込まれる。
【０１２３】
ブロックの更新が中断されない通常の状態では、このようにブロックＡの有効なパケットのデータがブロックＢのパケット部７２に書き込まれるのであるが、例えば、何らかの原因によりブロックの更新が中断された場合は、次のように動作する。
【０１２４】
まず、データの更新のうちブロックＢにデータを書き込んでいる最中に中断された場合は、システムを再起動すると、ブロックＡの領域管理部７０に領域状態情報４が、ブロックＢの領域管理部７０に領域状態情報２が書き込まれているので、ステップＳ３００，Ｓ４００，Ｓ４０２，Ｓ４１０〜Ｓ４１４を経て、処理定義テーブルが参照されて、ブロックＢが初期化され、ブロックＢの初期化回数が「１」加算されてブロックＢの領域管理部７０にその初期化回数情報が書き込まれ、ブロックＢの領域管理部７０に領域状態情報１が書き込まれる。
【０１２５】
そして、ブロックＡの領域管理部７０に領域状態情報４が、ブロックＢの領域管理部７０に領域状態情報１が書き込まれると、ステップＳ３００，Ｓ４００，Ｓ４０２，Ｓ４２４〜Ｓ４３０を経て、処理定義テーブルが参照されて、ブロックＢの領域管理部７０に領域状態情報２が書き込まれ、図１４に示すように、ブロックＡの有効なパケットのデータが、その格納位置が整順されるように、ブロックＢのパケット部７２に書き込み直され、ブロックＢの領域管理部７０に領域状態情報３が書き込まれるとともにブロックＡの領域管理部７０に領域状態情報５が書き込まれる。その後は、ブロックＡが初期化され、ブロックＡの領域管理部７０に領域状態情報１が書き込まれる。
【０１２６】
次に、データの更新のうちブロックＡを初期化している最中に中断された場合は、システムを再起動すると、ブロックＡの領域管理部７０に領域状態情報５が、ブロックＢの領域管理部７０に領域状態情報３が書き込まれているので、ステップＳ３００，Ｓ４００，Ｓ４０２〜Ｓ４０８を経て、処理定義テーブルが参照されて、ブロックＡが初期化し直され、ブロックＡの初期化回数が「１」加算されてブロックＡの領域管理部７０にその初期化回数情報が書き込まれ、ブロックＡの領域管理部７０に領域状態情報１が書き込まれる。
【０１２７】
なお、以上では、ブロックＡからブロックＢへの更新を行う場合を説明したが、ブロックＢからブロックＡへの更新を行う場合も、上記同様の要領で動作する。
【０１２８】
このようにして、本実施の形態では、データを記憶するときは、記憶すべきデータを格納するためのパケットをブロックのパケット部７２に生成し、データ書込開始時にパケットの状態情報を第１の状態に設定し、パケットのデータ部８２に記憶すべきデータを書き込み、データ書込完了時にパケットの状態情報を第２の状態に設定し、状態情報が第２の状態であるパケットを有効なパケットであると判定し、状態情報が第１の状態であるパケットを無効なパケットであると判定するようにした。
【０１２９】
これにより、データの書込が完了するまでは、有効なパケットとして識別されないので、データの書込が完了するまでの間に何らかの原因によりデータの書込が中断されても、データ書込途中のパケットのデータが正しいデータとして取り扱われることはない。また、フラッシュＲＯＭ５２上でのデータの消去は、消去対象となるデータが格納されているパケットの状態情報を第１の状態に設定することにより行えばよいので、フラッシュＲＯＭ５２の初期化回数が少なくなる。したがって、従来に比して、フラッシュＲＯＭ５２の寿命の低下を防止するとともにデータの書換を高速に行うことができ、しかもデータの書込を高い信頼性をもって行うことができる。
【０１３０】
さらに、本実施の形態では、パケットのデータを更新するときは、更新すべきデータを格納するための新たなパケットをブロックのパケット部７２に生成し、データ書込開始時にパケットの状態情報を第３の状態に設定するとともに新たなパケットの状態情報を第１の状態に設定し、新たなパケットのデータ部８２に更新すべきデータを書き込み、データ書込完了時に新たなパケットの状態情報を第２の状態に設定するとともにパケットの状態情報を第４の状態に設定し、状態情報が第２の状態または第３の状態であるパケットを有効なパケットであると判定し、状態情報が第１の状態または第４の状態であるパケットを無効なパケットであると判定するようにした。
【０１３１】
これにより、データの更新が完了するまでは、新たなパケットは、有効なパケットとして識別されないので、データの更新が完了するまでの間に何らかの原因によりデータの更新が中断されても、データ書込途中の新たなパケットのデータが正しいデータとして取り扱われることはない。この場合は、更新前のパケットのデータが正しいデータとして取り扱われる。したがって、従来に比して、データの更新を高い信頼性をもって行うことができる。
【０１３２】
さらに、本実施の形態では、データ長情報に基づいて、パケットの格納位置を特定するようにした。
【０１３３】
これにより、パケット部７２の記憶容量を超えない任意のデータ長のデータを区分することなく一つのパケットとしてブロックのパケット部７２に記憶することができるので、可変長のデータの管理が容易になる。
【０１３４】
さらに、本実施の形態では、ブロックを更新するときは、データ書込開始時にブロックＡ，Ｂのうち一方のブロックの領域管理部７０に領域状態情報４を書き込むとともに他方のブロックの領域管理部７０に領域状態情報２を書き込み、一方のブロックのパケット部７２の有効なパケットのデータを他方のブロックのパケット部７２に書き込み、データ書込完了時に一方のブロックの領域管理部７０に領域状態情報５を書き込むとともに他方のブロックの領域管理部７０に領域状態情報３を書き込み、領域管理部７０に領域状態情報３，４が書き込まれているブロックを有効なブロックであると判定し、領域管理部７０に領域状態情報１，２，５が書き込まれているブロックを無効なブロックであると判定するようにした。
【０１３５】
これにより、ブロックの更新が完了するまでは、更新先となる他方のブロックは、有効なブロックとして識別されないので、ブロックの更新が完了するまでの間に何らかの原因によりブロックの更新が中断されても、データ書込途中の他方のブロックのデータが正しいデータとして取り扱われることはない。この場合は、更新前の一方のブロックのデータが正しいデータとして取り扱われる。したがって、データの更新をさらに高い信頼性をもって行うことができる。
【０１３６】
さらに、本実施の形態では、領域管理部７０に領域状態情報１，２，５が書き込まれているブロックをデータ更新用領域として用いるようにした。
【０１３７】
これにより、ブロックを更新するたびに新たなブロックがデータ更新用領域となることがないので、フラッシュＲＯＭ５２の記憶領域を有効に利用することができる。
【０１３８】
さらに、本実施の形態では、ブロックＡ，Ｂの領域状態情報の状態に応じてブロックＡ，Ｂに対する処理を割り当てた処理定義テーブルを参照して、ブロックＡ，Ｂに対する処理を実行するようにした。
【０１３９】
これにより、ブロックＡ，Ｂの領域状態情報の状態に応じて、ブロックＡ，Ｂに対する処理を逐次判定する必要がなくなるので、データの書換に関する処理を簡素化することができる。
【０１４０】
さらに、本実施の形態では、ブロックは、フラッシュＲＯＭ５２のデータ初期化単位からなる。
【０１４１】
これにより、フラッシュＲＯＭ５２の初期化回数を最小限に抑えることができる。
【０１４２】
さらに、本実施の形態では、一方のブロックの領域管理部７０に領域管理情報４が書き込まれ、かつ、他方のブロックの領域管理部７０に領域管理情報２が書き込まれているときは、他方のブロックを初期化するようにした。
【０１４３】
これにより、何らかの原因により他方のブロックのパケット部７２にデータを書き込んでいる最中に中断された場合は、システムを再起動すると、他方のブロックが初期化され、他方のブロックのパケット部７２にデータが書き込み直されるので、データの更新をさらに高い信頼性をもって行うことができる。
【０１４４】
さらに、本実施の形態では、一方のブロックの領域管理部７０に領域管理情報５が書き込まれ、かつ、他方のブロックの領域管理部７０に領域管理情報１，２，３が書き込まれているときは、一方のブロックを初期化するようにした。
【０１４５】
これにより、何らかの原因によりデータの更新のうち一方のブロックを初期化している最中に中断された場合は、システムを再起動すると、一方のブロックが初期化し直されるので、データの更新をさらに高い信頼性をもって行うことができる。
【０１４６】
上記実施の形態において、ブロックＡ，Ｂは、請求項１、２、４ないし７記載の記憶領域に対応し、領域状態情報２は、請求項４または５記載の第１の状態に対応し、領域状態情報３は、請求項４記載の第２の状態に対応し、領域状態情報４は、請求項４記載の第３の状態に対応し、領域状態情報５は、請求項４または５記載の第４の状態に対応している。
【０１４７】
なお、上記実施の形態においては、ブロックを、フラッシュＲＯＭ５２のデータ初期化単位から構成したが、これに限らず、データ初期化単位を２以上組み合わせて構成してもよい。このような構成であっても、フラッシュＲＯＭ５２の初期化回数を最小限に抑えることができる。
【０１４８】
また、上記実施の形態においては、ステップＳ１１６からステップＳ１１８に移行する間にデータの更新が中断された場合について特に説明しなかったが、こうした場合に対応するため、状態情報が第２，３の状態であるパケットおよび状態情報が第１の状態であるパケットが併存するときは、状態情報が第２，３の状態であるパケットを有効なパケットであると判定するように構成してもよい。
【０１４９】
また、上記実施の形態においては、ステップＳ１２４からステップＳ１２６に移行する間にデータの更新が中断された場合について特に説明しなかったが、こうした場合に対応するため、状態情報が第３の状態であるパケットおよび状態情報が第２の状態であるパケットが併存するときは、状態情報が第２の状態であるパケットを有効なパケットであると判定するように構成してもよい。
【０１５０】
また、上記実施の形態においては、ステップＳ３０６からステップＳ４２４に移行する間、またはステップＳ３０８からステップＳ４１６に移行する間にブロックの更新が中断された場合について特に説明しなかったが、こうした場合に対応するため、領域管理部７０に領域状態情報４が書き込まれているブロックおよび領域管理部７０に領域状態情報１が書き込まれているブロックが併存するときは、領域管理部７０に領域状態情報４が書き込まれているブロックを有効なブロックであると判定するように構成してもよい。
【０１５１】
また、上記実施の形態においては、ステップＳ４２８からステップＳ４３０に移行する間、またはステップＳ４２０からステップＳ４２２に移行する間にブロックの更新が中断された場合について特に説明しなかったが、こうした場合に対応するため、領域管理部７０に領域状態情報３が書き込まれているブロックおよび領域管理部７０に領域状態情報４が書き込まれているブロックが併存するときは、領域管理部７０に領域状態情報３が書き込まれているブロックを有効なブロックであると判定するように構成してもよい。
【０１５２】
また、上記実施の形態においては、データ書込用領域としてのブロックおよびデータ更新用領域としてのブロックをそれぞれ１つずつ用いて構成したが、これに限らず、データ更新用領域としてのブロックを１つ、データ書込用領域としてのブロックを複数用いて構成してもよい。この場合は、ブロックの更新を同時に複数行わないことが条件となる。ブロックの更新を同時に複数行う場合は、データ更新用領域としてのブロックを、記憶領域の更新を同時に行う数だけ用意すればよい。
【０１５３】
また、上記実施の形態において、図９ないし図１３のフローチャートに示す動作処理を実行するにあたっては、フラッシュＲＯＭ５２にあらかじめ格納されているプログラムを実行する場合について説明したが、これに限らず、これらの手順を示したプログラムが記録された記録媒体から、そのプログラムをＲＡＭ５４に読み込んで実行するようにしてもよい。
【０１５４】
ここで、記憶媒体とは、ＲＡＭ、ＲＯＭ等の半導体記憶媒体、ＦＤ、ＨＤ等の磁気記憶型記憶媒体、ＣＤ、ＣＤＶ、ＬＤ、ＤＶＤ等の光学的読取方式記憶媒体、ＭＯ等の磁気記憶型／光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、あらゆる記憶媒体を含むものである。
【０１５５】
また、上記実施の形態においては、本発明に係るフラッシュメモリのデータ管理装置を、フラッシュＲＯＭ５２のデータ初期化単位からなるブロックに、コンピュータ１００の設定に必要なデータを可変長のパケット単位で記憶する場合について適用したが、これに限らず、本発明の主旨を逸脱しない範囲で他の場合についても適用可能である。
【０１５６】
【発明の効果】
以上説明したように、本発明に係る請求項１ないし７記載のフラッシュメモリのデータ管理装置によれば、データの書込が完了するまでは、有効なパケットとして識別されないので、データの書込が完了するまでの間に何らかの原因によりデータの書込が中断されても、データ書込途中のパケットのデータが正しいデータとして取り扱われることはない。また、フラッシュメモリ上でのデータの消去は、消去対象となるデータが格納されているパケットの状態情報を第１の状態に設定することにより行えばよいので、フラッシュメモリの初期化回数が少なくなる。したがって、従来に比して、フラッシュメモリの寿命の低下を防止するとともにデータの書換を高速に行うことができ、しかもデータの書込を高い信頼性をもって行うことができるという効果が得られる。
【０１５７】
さらに、本発明に係る請求項２記載のフラッシュメモリのデータ管理装置によれば、データの更新が完了するまでは、新たなパケットは、有効なパケットとして識別されないので、データの更新が完了するまでの間に何らかの原因によりデータの更新が中断されても、データ書込途中の新たなパケットのデータが正しいデータとして取り扱われることはない。したがって、従来に比して、データの更新を高い信頼性をもって行うことができるという効果も得られる。
【０１５８】
さらに、本発明に係る請求項３記載のフラッシュメモリのデータ管理装置によれば、記憶領域の記憶容量を超えない任意のデータ長のデータを区分することなく一つのパケットとして記憶領域に記憶することができるので、可変長のデータの管理が容易になるという効果も得られる。
【０１５９】
さらに、本発明に係る請求項４記載のフラッシュメモリのデータ管理装置によれば、記憶領域の更新が完了するまでは、更新先となる別の記憶領域は、有効な記憶領域として識別されないので、記憶領域の更新が完了するまでの間に何らかの原因により記憶領域の更新が中断されても、データ書込途中の更新先となる別の記憶領域のデータが正しいデータとして取り扱われることはない。したがって、データの更新をさらに高い信頼性をもって行うことができるという効果も得られる。
【０１６０】
さらに、本発明に係る請求項５記載のフラッシュメモリのデータ管理装置によれば、記憶領域を更新するたびに新たな記憶領域が別の記憶領域となることがないので、フラッシュメモリの記憶領域を有効に利用することができるという効果も得られる。
【０１６１】
さらに、本発明に係る請求項６記載のフラッシュメモリのデータ管理装置によれば、更新前の記憶領域および更新先となる別の記憶領域の領域状態情報の状態に応じて、更新前の記憶領域および更新先となる別の記憶領域に対する処理を逐次判定する必要がなくなるので、データの書換に関する処理を簡素化することができるという効果も得られる。
【０１６２】
さらに、本発明に係る請求項７記載のフラッシュメモリのデータ管理装置によれば、フラッシュメモリの初期化回数を最小限に抑えることができるという効果も得られる。
【図面の簡単な説明】
【図１】コンピュータ１００の構成を示すブロック図である。
【図２】ブロックＡ，Ｂのデータ構造を示す図である。
【図３】領域管理部７０のデータ構造を示す図である。
【図４】領域状態情報の内容を示す図である。
【図５】パケット部７２のデータ構造を示す図である。
【図６】管理部８０のデータ構造を示す図である。
【図７】状態情報の内容を示す図である。
【図８】処理定義テーブルのデータ構造を示す図である。
【図９】データ書込処理を示すフローチャートである。
【図１０】データ読込処理を示すフローチャートである。
【図１１】ブロック更新処理を示すフローチャートである。
【図１２】ステップＳ３００の処理定義テーブルに基づく処理を示すフローチャートである。
【図１３】ステップＳ３００の処理定義テーブルに基づく処理を示すフローチャートである。
【図１４】ブロックＢに対してデータを更新する場合を説明するための図である。
【符号の説明】
１００                    コンピュータ
５０                      ＣＰＵ
５２                      ＲＯＭ
５４                      ＲＡＭ
５５                      ＶＲＡＭ
５６                      グラフィックチップ
５７                      ＲＴＣ
５８                      Ｉ／Ｆ
５９                      バス
６０                      タッチパネル
７０                      領域管理部
７２                      パケット部
８０                      管理部
８２                      データ部
Ｐ1〜Ｐn                  パケット
【図１】
0003858538.tif 000002
【図２】
0003858538.tif 000003
【図３】
0003858538.tif 000004
【図４】
0003858538.tif 000005
【図５】
0003858538.tif 000006
【図６】
0003858538.tif 000007
【図７】
0003858538.tif 000008
【図８】
0003858538.tif 000009
【図９】
0003858538.tif 000010
【図１０】
0003858538.tif 000011
【図１１】
0003858538.tif 000012
【図１２】
0003858538.tif 000013
【図１３】
0003858538.tif 000014
【図１４】
0003858538.tif 000015