(57)【要約】【課題】  ガーベッジコレクション中に電源断が発生しても、次回起動時に異常発生した箇所から継続可能とする。【解決手段】  フラッシュメモリ９は、データユニット、データ管理ユニット及びスペアユニットから構成されている。各ユニットのユニットヘッダにブロックコピーフラグを設け、データ管理ユニットにエントリ情報を設け、セクタコピーフラグ、エントリコピーフラグ、有効／無効の判別部を設ける。リカバリ処理では、ブロックコピーフラグの値に基づいて、ガーベッジコレクション途中であったか否か、データユニットのコピー中であったか否かを判断する。そして、セクタコピーフラグの状態により、前回の中断位置を判別し、その箇所からコピーを継続する。一方、エントリコピーフラグの状態により、前回の中断位置が分かるので、その箇所からコピーを継続する。【選択図】    図１
2006126919.tif 000002
【特許請求の範囲】
【請求項１】
セクタ単位毎にデータをアクセスするデータユニットと、該データユニットに記憶されているデータのエントリ情報を記憶するデータ管理ユニットとから構成されるフラッシュメモリのデータ管理装置であって、
ガーベッジコレクション動作中におけるデータアクセス状況を記録するアクセス状況記録手段と、
システム立上時に、前記データアクセス状況に基づいて、データアクセスの中断位置を認知し、該中断位置からデータアクセスを継続するデータアクセス制御手段と
を備えたことを特徴とするフラッシュメモリのデータ管理装置。
【請求項２】
前記アクセス状況記録手段は、ガーベッジコレクション動作中におけるセクタコピーの中断位置を、前記データ管理ユニットに設けられたセクタコピーフラグの値として記録し、
前記データアクセス制御手段は、システム立上時に、前記セクタコピーフラグの値に基づいて、セクタコピーの中断位置を認知し、該中断位置からセクタコピーを継続することを特徴とする請求項１記載のフラッシュメモリのデータ管理装置。
【請求項３】
前記アクセス状況記録手段は、ガーベッジコレクション動作中におけるエントリコピーの中断位置を、前記データ管理ユニットに設けられたエントリコピーフラグの値として記録し、
前記データアクセス制御手段は、システム立上時に、前記エントリコピーフラグの値に基づいて、エントリコピーの中断位置を認知し、該中断位置からエントリコピーを継続することを特徴とする請求項１記載のフラッシュメモリのデータ管理装置。
【請求項４】
ガーベッジコレクション中におけるデータユニット間のコピー状態を、前記データユニットヘッダに設けられたブロックコピーフラグの値として記録するブロックコピー制御手段を具備し、
前記データアクセス制御手段は、前記ブロックコピーフラグの値に基づいて、前記セクタコピーフラグの値に基づいて、中断位置からセクタコピーを継続するか、前記エントリコピーフラグの値に基づいて、中断位置からエントリコピーを継続するかを判断することを特徴とする請求項１記載のフラッシュメモリのデータ管理装置。
【請求項５】
セクタ単位毎にデータをアクセスする複数のデータユニットと、該データユニットに記憶されているデータのエントリ情報を記憶するデータ管理ユニットとから構成されるフラッシュメモリの制御方法であって、
ガーベッジコレクション動作中におけるデータアクセス状況を記録し、
システム立上時に、前記データアクセス状況に基づいて、データアクセスの中断位置を認知し、該中断位置からデータアクセスを継続することを特徴とするフラッシュメモリの制御方法。
【請求項６】
ガーベッジコレクション動作中におけるセクタコピーの中断位置を、前記データ管理ユニットに設けられたセクタコピーフラグの値として記録し、
システム立上時に、前記セクタコピーフラグの値に基づいて、セクタコピーの中断位置を認知し、該中断位置からセクタコピーを継続することを特徴とする請求項５記載のフラッシュメモリの制御方法。
【請求項７】
ガーベッジコレクション動作中におけるエントリコピーの中断位置を、前記データ管理ユニットに設けられたエントリコピーフラグの値として記録し、
電源起動時に、前記エントリコピーフラグの値に基づいて、エントリコピーの中断位置を認知し、該中断位置からエントリコピーを継続することを特徴とする請求項５記載のフラッシュメモリの制御方法。
【請求項８】
ガーベッジコレクション中におけるデータユニット間のコピー状態を、前記データユニットヘッダに設けられたブロックコピーフラグの値として記録し、
前記ブロックコピーフラグの値に基づいて、前記セクタコピーフラグの値に基づいて中断位置からセクタコピーを継続するか、前記エントリコピーフラグの値に基づいて、中断位置からエントリコピーを継続するかを判断することを特徴とする請求項５記載のフラッシュメモリの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュメモリを備えた電子機器に係り、フラッシュメモリのデータ管理装置およびフラッシュメモリの制御方法に関する。
【背景技術】
【０００２】
従来からセクタ管理情報とブロック管理情報とに基づいてブロック単位でのデータの書き込み及びセクタ単位でのデータの一括消去を含むアクセス制御を行い、セクタ消去回数に基づいてデータの書き込み対象のセクタを選択するフラッシュメモリ制御方法が知られている（例えば、特許文献１参照）。フラグ値「セクタ消去開始（０００００）」、「セクタ消去中（１１１１１）」、および「ガーベッジコレクション中（００１１１）」は、セクタのデータの処理途中であり、データの真偽性が定かでないので、セクタのブロックデータ部の内容を再度消去する。
【特許文献１】特開２０００−３３０８５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、特許文献１に示す制御方法にあっては、ガーベッジコレクションを起動すると、「セクタ消去開始」、「セクタ消去中」、および「ガーベッジコレクション中」状態に一時的になる。この状態でパワーロス（電源断）が発生した場合、データの真偽性が定かでないので、途中までデータコピーが完了しているセクタであっても、再度消去しなければならない。これは、システムにとって短くない時間を要してなされるセクタ消去を強いる結果となる。また、フラッシュメモリのセクタ消去回数を増やすことにもなり、デバイスの寿命を短縮してしまうという問題がある。
【０００４】
本発明は、このような事情を考慮してなされたものであり、その目的は、ガーベッジコレクション中に電源断が発生しても、次回起動時に異常発生した箇所から継続することができるフラッシュメモリのデータ管理装置およびフラッシュメモリの制御方法を提供することにある。
【課題を解決するための手段】
【０００５】
本発明は、セクタ単位毎にデータをアクセスする複数のデータユニットと、該データユニットに記憶されているデータのエントリ情報を記憶するデータ管理ユニットとから構成されるフラッシュメモリのデータ管理装置であって、ガーベッジコレクション動作中におけるデータアクセス状況を記録するアクセス状況記録手段と、システム立上時に、前記データアクセス状況に基づいて、データアクセスの中断位置を認知し、該中断位置からデータアクセスを継続するデータアクセス制御手段とを備えたことを特徴とする。
【０００６】
また本発明は、前記アクセス状況記録手段は、ガーベッジコレクション動作中におけるセクタコピーの中断位置を、前記データ管理ユニットに設けられたセクタコピーフラグの値として記録し、前記データアクセス制御手段は、システム立上時に、前記セクタコピーフラグの値に基づいて、セクタコピーの中断位置を認知し、該中断位置からセクタコピーを継続することを特徴とする。
【０００７】
また本発明は、前記アクセス状況記録手段は、ガーベッジコレクション動作中におけるエントリコピーの中断位置を、前記データ管理ユニットに設けられたエントリコピーフラグの値として記録し、前記データアクセス制御手段は、システム立上時に、前記エントリコピーフラグの値に基づいて、エントリコピーの中断位置を認知し、該中断位置からエントリコピーを継続することを特徴とする。
【０００８】
また本発明は、ガーベッジコレクション中におけるデータユニット間のコピー状態を、前記データユニットヘッダに設けられたブロックコピーフラグの値として記録するブロックコピー制御手段を具備し、前記データアクセス制御手段は、前記ブロックコピーフラグの値に基づいて、前記セクタコピーフラグの値に基づいて、中断位置からセクタコピーを継続するか、前記エントリコピーフラグの値に基づいて、中断位置からエントリコピーを継続するかを判断することを特徴とする。
【０００９】
また本発明は、セクタ単位毎にデータをアクセスする複数のデータユニットと、該データユニットに記憶されているデータのエントリ情報を記憶するデータ管理ユニットとから構成されるフラッシュメモリの制御方法であって、ガーベッジコレクション動作中におけるデータアクセス状況を記録し、システム立上時に、前記データアクセス状況に基づいて、データアクセスの中断位置を認知し、該中断位置からデータアクセスを継続することを特徴とする。
【００１０】
また本発明は、ガーベッジコレクション動作中におけるセクタコピーの中断位置を、前記データ管理ユニットに設けられたセクタコピーフラグの値として記録し、システム立上時に、前記セクタコピーフラグの値に基づいて、セクタコピーの中断位置を認知し、該中断位置からセクタコピーを継続することを特徴とする。
【００１１】
また本発明は、ガーベッジコレクション動作中におけるエントリコピーの中断位置を、前記データ管理ユニットに設けられたエントリコピーフラグの値として記録し、システム立上時に、前記エントリコピーフラグの値に基づいて、エントリコピーの中断位置を認知し、該中断位置からエントリコピーを継続することを特徴とする。
【００１２】
また本発明は、ガーベッジコレクション中におけるデータユニット間のコピー状態を、前記データユニットヘッダに設けられたブロックコピーフラグの値として記録し、前記ブロックコピーフラグの値に基づいて、前記セクタコピーフラグの値に基づいて中断位置からセクタコピーを継続するか、前記エントリコピーフラグの値に基づいて、中断位置からエントリコピーを継続するかを判断することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、アクセス状況記録手段により、ガーベッジコレクション動作中におけるデータアクセス状況を記録し、データアクセス制御手段により、システム立上時に、前記データアクセス状況に基づいて、データアクセスの中断位置を認知し、該中断位置からデータアクセスを継続するようにしたため、ガーベッジコレクション中に電源断が発生しても、次回起動時に異常発生した箇所から継続することができるという利点が得られる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の一実施形態による電子機器を、図面を参照して説明する。
図１は、本発明の実施形態の構成を示すブロック図である。ここでは、電子機器の一例として、携帯電話端末を例にして説明する。図１において、符号１は、基地局との間で通信回線を確立して通信をする無線部である。符号２は、携帯電話端末の動作を統括して制御を行う制御部である。符号３は、ユーザ特有の情報やデータを一時的に記憶するＲＡＭ、および携帯電話端末を動作させるためのプログラム等が予め記憶されたＲＯＭである。符号５は、通話音声を集音するマイクと通話音声を発音させるスピーカである。符号６は、ダイヤルキーやファンクションキー等から構成されるキー操作部である。符号７は、液晶のディスプレイで構成される表示部である。符号８は、フラッシュメモリ９に対してデータのアクセスを行うフラッシュメモリドライバである。
【００１５】
ここで、図２を参照して、図１に示すフラッシュメモリ９における記憶領域の構成を説明する。図２は、図１に示すフラッシュメモリ９の記憶領域の構成を示す説明図である。フラッシュメモリ９内は、ブロック消去単位毎にユニットに分かれている。ここでは、６つのデータユニットと、１つのデータ管理ユニット及び１つのスペアユニットから構成され、各ユニットは８ｋバイトの容量を有しているものとして説明する。データユニットは、名称のとおりデータを格納するユニットであり、各データユニットは６４バイトで区切られたセクタを有している。このセクタがデータとしての書き込み単位となる。
【００１６】
データ管理ユニットは、データユニットを管理するユニットであり、８バイト単位としてエントリ情報を有する。また、各ユニットの先頭１セクタ分にユニットヘッダを設けてある。このユニットヘッダには、ユニット識別マーク、ブロックイレーズカウンタ、および後述するブロックコピーフラグを設ける。ユニット識別マークは、そのユニットがデータ管理ユニットかスペアユニットか、あるいはデータユニットかを識別するために使用する。所定のブロックがその時点での用途により、このマークはその都度書き換えられる。フォーマット時には、データ管理ユニットは先頭ブロック、スペアユニットは末尾ブロックに割り当てられる。ブロックイレーズカウンタは、そのブロックが消去された回数を記録しておくものであり、フォーマット時は００ｈにする。各ユニットヘッダには、００ｈからＦＦｈの値が格納され、制御によりＦＦｈの次には００ｈに戻る。
【００１７】
スペアユニットは、ガーベッジコレクションやウエアレベリングの実行の際に使用するユニットである。データ管理ユニットのエントリ情報には、６４バイトセクタの先頭アドレス、ユニット番号（データ格納のブロック番号）、セクタ番号、セクタコピーフラグ、エントリコピーフラグ、有効／無効の判別部、無効エントリのdirty／clean判別部を有する。有効／無効の判別部は、データ削除されたときに００ｈに上書きする。データは無効であるが、この時点では無効エントリのdirty／cleanの判別部がまだdirtyである。すなわち、フラッシュメモリシステム上、管理された無効セクタを示す。dirty／cleanの判別部は、ガーベッジコレクションされたときに００ｈに上書きする。すなわち、データは無効であり、かつ、cleanである。データ管理上、完全に削除された状態になる。エントリの更新は、新エントリを空き領域に書き込み、旧エントリを無効にすることにより行う。エントリ情報を含むデータ管理ユニットをガーベッジコレクションするときは、dirtyのエントリはスペアユニットにコピーするが、cleanのエントリのユニットは既にガーベッジコレクション済みであるためcleanのエントリはコピーしない。
【００１８】
次に、ガーベッジコレクションについて説明する。ガーベッジコレクションとは、データを削除／編集等することによりデータユニットに無効セクタが生じ、それを除いて有効セクタのみをスペアユニットにコピーして、コピー元のユニットをブロックイレーズして、このイレーズしたユニットを次のスペアユニットとすることである。コピーすると同時に、新エントリ情報を書き込んで旧エントリ情報を無効化することにより、データ管理ユニットのエントリ情報も更新する。ガーベッジコレクションの対象ユニットは、最も無効セクタの多いユニットである。また、ガーベッジコレクションの起動条件は、書き込み時（書き込み前）にどのユニットも空きがないと判断したとき、あるいは、書き込み終了時／待機時に無効セクタ数が所定の閾値を超えたときである。
【００１９】
ガーベッジコレクションを実行する場合の手順は以下の通りとする。
（１）データ管理ユニットをサーチしてガーベッジコレクションの対象ブロックを選択する。
（２）有効セクタをスペアユニットにコピーする。
（３）上記（２）に連動して順次、新エントリをライトする。
（４）上記（２）、（３）に連動して順次、旧エントリを無効化する。
（５）不要となったブロックを消去する。
【００２０】
データ管理ユニットもガーベッジコレクションの対象になり、起動条件は、データ管理ユニットに追加可能な空きエントリー数がある一定値よりも少なくなったと判定したときである。動作は、エントリ上の有効／無効セクタをスペアユニットヘコピーし、clean部はコピーしない。そして、不要となった元のエントリのブロックを消去し、次のスペアユニットとする。
【００２１】
データ管理ユニットのガーベッジコレクションを実行する場合の手順は以下の通りとする。
（１）データ管理ユニットに追加可能な空きエントリ数がある一定値よりも少なくなったことを判定する。
（２）エントリ上の有効／無効セクタをスペアユニットへコピーする（clean部はコピーしない）。
（３）上記（２）に連動して順次、エントリコピーフラグを操作する。
（４）不要となった元のブロックを消去する。
【００２２】
次に、ウエアレベリングについて説明する。ウエアレベリングは、消去回数が制限されるフラッシュメモリ９において、全てのブロックを平均的に使用するように管理することで、特定のブロックのみを繰り返し消去して先に寿命が尽きてしまうようなことがないように、メモリ全体を有効に活用するものである。ウエアレベリングの起動については、各ブロックイレーズカウンタをチェックし、ウエアレベリング起動の閾値以上になっていたら、そのカウンタ値が最小であるブロックを選定する。そして、このブロックの全データをスペアユニットにコピーすると同時に、新エントリ情報を書き込み、旧エントリ情報を無効化して、最後に、コピー元をブロック消去し、次のスペアユニットとする。各ブロックイレーズカウンタの値（最小と最大）が、ウエアレベリング起動の閾値以上に差が開くまでウエアレベリングを実行しない。
【００２３】
ウエアレベリングの手順は以下の通りです。
（１）各ブロックイレーズカウンタをチェックし、ウエアレベリング起動閾値以上になっていたら、そのカウンタ値が最小のブロックを選定する。
（２）そのブロックの全データをスペアユニットにコピーする。
（３）コピー元とコピー先のユニット番号が分かるので、上記（２）に連動して新エントリをライトし、旧エントリを無効化する。
（４）コピー元をブロック消去する。
【００２４】
書き込み終了時／待機時に起動する、ガーベッジコレクションまたはウエアレベリングには、優先順位を設け、第１はデータ管理ユニットのガーベッジコレクション、第２はデータユニットのガーベッジコレクション、第３はウエアレベリングとする。１回の起動では、優先順位に従っていずれか１つを実行する。
【００２５】
次に、図３を参照して、図１に示すフラッシュメモリドライバ８の構成を説明する。図３は、図１に示すフラッシュメモリドライバ８の構成を示すブロック図である。アプリケーションＩ／Ｆ部８１は、アプリケーション側からの書き込み／読み出し要求等を受け付け、シーケンス制御部８４に送る。シーケンス制御部８４は、フラッシュメモリに対して実行したい操作、すなわち、アプリケーション側からの要求操作を順に手順を踏んでアクセス部を実行制御する。ユニットヘッダアクセス部８５は、ユニットヘッダをアクセスするためのものであり、ユニット識別マーク、ブロックイレーズカウンタ、ブロックコピーフラグを書き込み／読み出す。実際のアクセスは、後述するデバイスＩ／Ｆ部８９を実行することにより行われる。
【００２６】
エントリアクセス部８６は、ユニット番号、セクタ番号、有効／無効の判別部等を書き込み／読み出しする。実際のアクセスは、後述するデバイスＩ／Ｆ部８９を実行することにより行われる。セクタデータアクセス部８７は、６４バイトセクタのデータを書き込み／読み出しするである。エントリ検索部８８は、データ管理ユニットを検索して無効セクタ数が最大のユニットを取得するなど、エントリ情報を検索する。デバイスＩ／Ｆ部８９は、直接フラッシュメモリに対して書き込み／読み出し等を実行する。
【００２７】
次に、本実施形態のフラッシュメモリシステムを復旧可能とする仕組みについて説明する。端末のシステム立上時に、フラッシュメモリの内容が正常な状態であるかをチェックする。もし、正常な状態でないならば、リカバリ処理を実行して復旧／修復を行う。
【００２８】
前回使用時において、ガーベッジコレクション中に電源断が発生した場合には、次回の端末電源起動時にフラッシュメモリの内容が不正であることが確認され、ガーベッジコレクションを再開して完了させる。そして、データ管理ユニットとデータ部とを正常な状態に戻す。
【００２９】
ユニットヘッダに設けるブロックコピーフラグは、ガーベッジコレクションやウエアレベリング時のブロックコピーを制御するために使用する。このブロックコピーフラグは、通常、ＦＦｈであるが、ブロックコピーが発生するときに上書きのかたちで使用する。ブロックコピーフラグの値とそのときの状態は次の通りである。
【００３０】
ＦＦｈ：ブロックコピーに関わりのないユニットである。
１Ｅｈ：ブロックコピー先のユニットでスペアユニットに相当する。
１６ｈ：コピーが終了した時点でコピー先のユニットの１Ｅｈを１６ｈに上書きする。
０６ｈ：コピー元ユニットをイレーズ（消去）後にコピー先ユニットを１６ｈから０６ｈにする。
０４ｈ：ブロックコピー元のユニットである（データ管理ユニットの場合）。
０２ｈ：ブロックコピー元のユニットである（データユニットの場合）。
【００３１】
ブロックコピーフラグの設定順序は、
（１）スペアユニットをＦＦｈから１Ｅｈにする。
（２）コピー元ユニットをデータユニットの場合、０２ｈに、データ管理ユニットの場合、０４ｈにする（０２ｈ／０４ｈに上書きしてからコピーを開始する）。
（３）スペアユニットを１Ｅｈから１６ｈにする（そのユニットの全データのコピーが終了した時点で１６ｈに上書きする）。
（４）コピー元ユニットをイレーズ（消去）する。
（５）コピー先ユニットを１６ｈから０６ｈにする。
【００３２】
ここで、図４は、ブロックコピーフラグの制御の一例を示す説明図である。図において、コピー元を「ＦＦ／０６」と記述しているが、「ＦＦ」はフラッシュメモリがイレーズ後の初期状態であることを示し、「０６」は以前のガーベッジコレクションで一度コピー先ブロックになっていることを示している。
【００３３】
コピー先スペアユニットのブロックコピーフラグを１Ｅｈにしている状態で電源断が発生したときのリカバリは、まだコピーを開始していないので何もしなくてよい。ブロックコピーフラグを１Ｅｈにした後であるが、次回使用時に同じ値を上書きするためそのままでよい。
【００３４】
コピー中の状態で電源断が発生したときのリカバリは、データ管理ユニットのエントリ情報をチェックすることで、どこまでコピーしたかを知ることが可能である。これにより、続きの処理を実行できる。なお、データユニットをコピー中のときはセクタコピーフラグを、データ管理ユニットをコピー中のときはエントリコピーフラグをチェックする。
【００３５】
コピー終了の状態で電源断が発生したときのリカバリは、コピーは終了したが無効となったブロックの消去がまだ実行されていないと認識する。そこで、コピー元ブロック、すなわちブロックコピーフラグが０２ｈか０４ｈのブロックの消去を実行できる。
【００３６】
コピー元ブロックを消去後の状態で電源断が発生したときのリカバリは、まず、コピー先のブロックコピーフラグが１６ｈであるため、コピー元のそれが０２ｈか０４ｈのブロックを探す。しかし、コピー元は消去後であるため、ブロックコピーフラグが０２ｈか０４ｈのものは存在せず、既に消去済みと認識し、コピー先のブロックコピーフラグを０６ｈにするだけでリカバリに対応できる。
【００３７】
データユニットをコピー中の時点でセクタコピーフラグを制御する。セクタコピーフラグは、データ管理ユニット中の各エントリに存在する。セクタコピーフラグの値とそのときの状態は次の通りである。
【００３８】
ＦＦｈ：コピー元の１セクタからフラッシュメモリへライトする前の状態である。
０Ｆｈ：フラッシュメモリにライトする直前に０Ｆｈにする。フラッシュメモリにライト中と見なせる。
０３ｈ：全バイトがフラッシュメモリへデータライト済み（コピー済み）になったら０３ｈにする。
００ｈ：古いエントリを無効とした後に、この新エントリのセクタコピーフラグを００ｈにする。
【００３９】
ここで、図５は、セクタコピーフラグの制御の一例を示す説明図である。図において、旧エントリを「００／ＦＦ」と記述しているが、「ＦＦ」はフラッシュメモリがイレーズ後の初期状態であることを示し、「００」は以前のガーベッジコレクションで一度新エントリになったことを示している。
【００４０】
ライト中の状態で電源断が発生したときのリカバリは、セクタコピーフラグが０Ｆｈ（エントリが指すセクタにコピー中）の新エントリを無効にし、新規にエントリを作り直してコピーを再開する。
【００４１】
ライト終了の状態で電源断が発生したときのリカバリは、まずこの時点では２つのエントリが有効になっている。しかし、セクタコピーフラグは異なり、旧エントリでは００ｈで、新エントリでは０３ｈである。つまり、セクタコピーフラグが０３ｈであることを検出し、そのアドレスが分かり、同じアドレスの古いエントリが認識可能で、それを無効化できる。
【００４２】
旧エントリ無効化後の状態で電源断が発生したときのリカバリは、新エントリのセクタコピーフラグを００ｈにするだけでよい。
【００４３】
データ管理ユニットをコピー中の時点で、エントリコピーフラグを制御する。エントリコピーフラグは、データ管理ユニット中の各エントリに存在するフラグで、コピー元エントリ、またはコピー先エントリ上で操作する。エントリコピーフラグの値とそのときの状態は次の通りである。
【００４４】
ＦＦｈ：コピー前の状態である。
０Ｆｈ：コピー先へエントリライトする直前に旧エントリを０Ｆｈにする。ライト開始となる。
ＣＦｈ：コピー先へエントリライトする直前に新エントリをＣＦｈにする。フラッシュにライト中と見なせる。
８Ｆｈ：コピー先へエントリライト終了後に新エントリを８Ｆｈにする。
【００４５】
ここで、図６は、エントリコピーフラグの制御の一例を示す説明図である。図において、旧エントリを「ＦＦ／８Ｆ」と記述しているが、「ＦＦ」はフラッシュメモリがイレーズ後の初期状態であることを示し、「８Ｆ」はガーベッジコレクションで一度新エントリになったことを示している。
【００４６】
コピー前の状態で電源断が発生したときのリカバリは、最後に０Ｆｈにした旧エントリを探し、あれば、その次のエントリからコピーする。
【００４７】
ライト開始の状態で電源断が発生したときのリカバリは、旧エントリを０Ｆｈにした直後であり、実際にはまだ書き込んでいないので、新エントリをコピー先の空き終端領域にライトする。
【００４８】
ライト中の状態で電源断が発生したときのリカバリは、中途半端な新エントリを無効にする（この場合、厳密には新エントリはclean化が必要）。
【００４９】
ライト終了の状態で電源断が発生したときのリカバリは、ライト終了したので、次のエントリコピーへ進む。
【００５０】
補足として、旧エントリのエントリコピーフラグを０Ｆｈにしてからライト（コピー）するが、ライト直前の電源断ならば（すなわち、新エントリ側のフラグ値はＦＦｈ）、「真の」ライト中になっていない。つまり、新エントリのユニット番号はＦＦｈである。このときは、新エントリはないので何も無効化にしてはいけない。ライト最中に電源断ならば（すなわち、新エントリ側のフラグ値はＣＦｈ）、ユニット番号はＦＦｈでなく中途半端にライトされているので無効化する。
【００５１】
ガーベッジコレクション中に電源断した場合のリカバリに関しては次のようになる。ガーベッジコレクションでデータコピー中に電源断となると、次のパワーオン時、セクタコピーフラグが０Ｆｈ（エントリが指すセクタにコピー中）の新エントリを無効にし、新規にエントリを作り直してコピーを再開する。まず、ユニットヘッダにあるブロックコピーフラグをチェックして、コピー元ブロック（ブロックコピーフラグ：０２ｈ）とコピー先ブロック（ブロックコピーフラグ：１Eｈ）を確認する。ガーベッジコレクション中、セクタコピーと連動して新旧エントリの更新を行うので、コピー元ユニットのエントリがどこまで無効にされているかをチェックすることで続きのコピー対象セクタが分かる。
【００５２】
データ管理ユニットのガーベッジコレクション中に電源断となると、次のパワーオン時、残りのエントリのユニット間コピーを実行し、ガーベッジコレクションを完了させる。まず、ユニットヘッダにあるブロックコピーフラグをチェックして、コピー元ブロック（ブロックコピーフラグ：０４ｈ）とコピー先ブロック（ブロックコピーフラグ：１Ｅｈ）を確認する。エントリコピーフラグによりコピー元ユニットのエントリがどこまでコピーされたか分かる（０Ｆｈをチェック）。１エントリ（８バイト）分のコピーが途中まで実行され、コピーが終了していないエントリに対して、コピー先ユニットのその不完全なエントリを無効化（clean化）してから次の領域にコピーを行い、最終エントリまでコピーが終了したらコピー元ユニットを消去してガーベッジコレクションを完了させる。
【００５３】
ウエアレベリング中に電源断した場合には、ガーベッジコレクション中の電源断と同様の処理になる。
【００５４】
次に、フラッシュメモリシステムの復旧方法の具体例について説明する。端末の電源を起動したときに実行される初期化処理の中で、フラッシュメモリシステムのリカバリ処理も実行する。ここで、図７ないし図９は、本実施形態によるリカバリ処理を説明するためのフローチャートである。
【００５５】
まず、ブロックコピーフラグ（ＢＣＦ）をリードし（Ｓ１０）、ユニットヘッダ内のブロックコピーフラグが０２ｈ、あるいは０４ｈのユニットが存在するか否かを判断する（Ｓ１２）。ここで、このようなユニットが存在する場合には、ガーベッジコレクション中に電源断が発生したことになる。そして、このようなユニットが存在しない場合には、通常処理へリターンする。
【００５６】
一方、ブロックコピーフラグが０２ｈ、あるいは０４ｈのユニットが存在した場合には、データユニットコピー中であるか、すなわち、ブロックコピーフラグが０２ｈであるか、０４ｈであるかを判断する（Ｓ１４）。そして、ブロックコピーフラグが０２ｈである場合には、データユニットのガーベッジコレクション再開復旧処理を実行し（Ｓ１６）、ブロックコピーフラグが０４ｈである場合には、データ管理ユニットのガーベッジコレクション再開復旧処理を実行する（Ｓ１８）。
【００５７】
上述したステップＳ１４で、ブロックコピーフラグが０２ｈである場合には、復旧処理として、その０２ｈのユニットから１Ｅｈのユニットにコピーする。どこまでセクタコピーが終了したかは、データ管理ユニットのコピー元ユニット番号を有するエントリがどこまで無効化されているか、セクタコピーフラグの状態で判断可能である。つまり、セクタコピーの中断位置が分かるので、その箇所から続きをコピーすればよく、コピー先ブロックを再度消去して最初からコピーする必要がない。以下、図８を参照して詳細に説明する。
【００５８】
図８に示すデータユニットのガーベッジコレクション再開復旧処理では、まず、セクタコピーフラグ（ＳＣＦ）がライト中であるか否か、すなわちデータ管理ユニット内のセクタコピーフラグが０Ｆｈのものがあるか否かを判断し（Ｓ３０）、ライト中であれば、ライトされたエントリの指すデータが６４バイトあるうち、全てのコピーが終了したわけではないので、一旦、その中断したセクタに対応するデータ管理ユニット内のエントリを無効化し（Ｓ３２）、新規にエントリを作成し（Ｓ３４）、セクタコピーを繰り返す（Ｓ４０）。
【００５９】
一方、セクタコピーフラグが０Ｆｈのものがないとき、ライト終了を意味しているので、旧エントリが無効化済みであるか否かを判断し（Ｓ３６）、無効化済みであれば、そのままセクタコピーを繰り返す（Ｓ４０）。また、旧エントリが無効化済みでなければ、それを無効化し（Ｓ３８）、セクタコピーを繰り返す（Ｓ４０）。
【００６０】
また、セクタコピーフラグが０Ｆｈでユニット番号やセクタ番号がＦＦｈであれば、データの実体はフラッシュ上のデータとして存在していないことになる。リカバリ処理として、データ管理ユニットのこのエントリを無効にするだけでよい。既存のエントリがそのまま有効になっている。
【００６１】
また、上述したステップＳ１４で、ブロックコピーフラグが０４ｈである場合には、データ管理ユニットのガーベッジコレクションとしてコピー実行中であることを示し、０４ｈのユニットから１Ｅｈのユニットにエントリコピーを再開する。どこまでエントリコピーが終了したかは、エントリコピーフラグを見て判断することが可能である。つまり、エントリコピーの中断位置が分かるので、その箇所から続きをコピーすればよく、コピー先ブロックを再度消去して最初からコピーする必要はない。以下、図９を参照して詳細に説明する。
【００６２】
図９に示すデータ管理ユニットのガーベッジコレクション再開復旧処理では、まず、エントリコピーフラグ（ＥＣＦ）がライト開始時であるか否かを判断する（Ｓ５０）。そして、エントリコピーフラグがライト開始時を示すときには、新エントリをライトし（Ｓ５２）、エントリコピーを繰り返す（Ｓ６０）。一方、エントリコピーフラグがライト開始時を示さないときは、エントリコピーフラグ（ＥＣＦ）がライト中を示すか否かを判断する（Ｓ５４）。そして、エントリコピーフラグがライト中を示すときには、中断されたエントリを無効化し（Ｓ５６）、続きのエントリを作成し（Ｓ５８）、エントリコピーを繰り返す（Ｓ６０）。また、エントリコピーフラグがライト中を示さない場合、すなわち、ライト終了を示すときには、１つのエントリコピーが終結したことを意味するので、そのまま残りのエントリコピーを繰り返す（Ｓ６０）。
【００６３】
ここで、ブロックコピーフラグが１Ｅｈでなく、１６ｈであれば、そのユニットへのコピーは終了しているので、０２ｈまたは０４ｈのユニットをブロック消去する。
【００６４】
上述した実施形態によれば、前回操作で不正終了することによりフラッシュメモリがメモリ管理上、破壊された状態になった場合でも、次回の端末起動時に復旧処理を実行することでフラッシュメモリを正常化することができる。また、ガーベッジコレクション中に電源断が発生しても、ブロックコピーを最初からでなく、異常が発生した途中から継続することができ、端末の起動時間も高速化することができる。また、最初からガーベッジコレクションを実行せずに途中からコピーを継続すればよいので、中途半端に書き込まれたブロックを消去する必要がなく、ブロック消去時間だけ待たされず、また、ブロック消去によるフラッシュメモリのデバイス寿命への悪影響を避けることができる。
【００６５】
また、図１における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりフラッシュメモリ９制御処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００６６】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
また、システム立ち上げ時は、上述の実施形態では電源を起動した場合を説明したが、その他にリセット操作によってシステムがリセットされた場合も含まれる。
【図面の簡単な説明】
【００６７】
【図１】本発明の実施形態の構成を示すブロック図である。
【図２】フラッシュメモリ９の記憶領域の構成を示す説明図である。
【図３】フラッシュメモリドライバ８の構成を示すブロック図である。
【図４】ブロックコピーフラグの制御の一例を示す説明図である。
【図５】セクタコピーフラグの制御の一例を示す説明図である。
【図６】エントリコピーフラグの制御の一例を示す説明図である。
【図７】本実施形態によるリカバリ処理を説明するためのフローチャートである。
【図８】本実施形態によるリカバリ処理を説明するためのフローチャートである。
【図９】本実施形態によるリカバリ処理を説明するためのフローチャートである。
【符号の説明】
【００６８】
１・・・無線部、２・・・制御部、３・・・メモリ部、５・・・マイク／スピーカ、６・・・キー操作部、７・・・表示部、８・・・フラッシュメモリドライバ、９・・・フラッシュメモリ、８１・・・アプリケーションＩ／Ｆ部、８４・・・シーケンス制御部（データアクセス制御手段）、８５・・・ユニットヘッダアクセス部（アクセス状況記録手段）、８６・・・エントリアクセス部（アクセス状況記録手段）、８７・・・セクタデータアクセス部（アクセス状況記録手段）、８８・・・エントリ検索部、８９・・・デバイスＩ／Ｆ部
【図１】
2006126919.tif 000003
【図２】
2006126919.tif 000004
【図３】
2006126919.tif 000005
【図４】
2006126919.tif 000006
【図５】
2006126919.tif 000007
【図６】
2006126919.tif 000008
【図７】
2006126919.tif 000009
【図８】
2006126919.tif 000010
【図９】
2006126919.tif 000011