(57)【特許請求の範囲】
【請求項１】
フラッシュメモリが有する複数のブロックを一次ブロック群と二次ブロック群とに分けて設定するブロック設定手段と、
前記各ブロックが有する複数のセクタエリアの個々のセクタエリアにデータを書き込むセクタデータ書き込み手段と、
前記一次ブロック群から確保された一次ブロック内の全セクタエリアがデータ書き込み済みである場合には、当該一次ブロックの拡張ブロックとして前記二次ブロック群から確保した二次ブロックを用いるブロック拡張手段と、
このブロック拡張手段により拡張された二次ブロック内の全セクタエリアがデータ書き込み済みである場合には、前記データ書き込み済みである一次ブロックと二次ブロック内の有効なセクタデータを整理して新たな一次ブロックを生成するブロック整理手段と、
このブロック整理手段によるデータ整理後の元の一次ブロックと二次ブロックそれぞれの全セクタエリアのデータを消去するブロック解放手段と、
を備えたことを特徴とするフラッシュメモリ管理装置。
【請求項２】
前記フラッシュメモリが有する各ブロックには、空き、データ書き込み中、データ書き込み終了、処理完了の各状態を示すブロック状態情報を記憶させ、このブロック状態情報に基づきブロック単位の制御を行うことを特徴とする請求項１に記載のフラッシュメモリ管理装置。
【請求項３】
前記各ブロックが有する複数のセクタエリアには、空き、データ書き込み中、書き込み完了の各状態を示すセクタ状態情報を記憶させ、このセクタ状態情報に基づきセクタ単位の制御を行うことを特徴とする請求項１に記載のフラッシュメモリ管理装置。
【請求項４】
フラッシュメモリが有する複数のブロックを一次ブロック群と二次ブロック群とに分けて設定管理するフラッシュメモリ管理装置に、
前記各ブロックが有する複数のセクタエリアの個々のセクタエリアにデータを書き込むセクタデータ書き込みステップと、
前記一次ブロック群から確保された一次ブロック内の全セクタエリアがデータ書き込み済みである場合には、当該一次ブロックの拡張ブロックとして前記二次ブロック群から確保した二次ブロックを用いるブロック拡張ステップと、
このブロック拡張ステップにて拡張された二次ブロック内の全セクタエリアがデータ書き込み済みである場合には、前記データ書き込み済みである一次ブロックと二次ブロック内の有効なセクタデータを整理して新たな一次ブロックを生成するブロック整理ステップと、
このブロック整理ステップによるデータ整理後の元の一次ブロックと二次ブロックそれぞれの全セクタエリアのデータを消去するブロック解放ステップと、
を実行させるためのプログラムを記録したことを特徴とするコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フラッシュメモリに対するデータの書き込みを制御するためのフラッシュメモリ管理装置及び記録媒体に関する。
【０００２】
【従来の技術】
一般に、パーソナルコンピュータなどの情報処理装置では、半導体メモリからなるＲＯＭ，ＲＡＭの他に、ハードディスクが内蔵の記憶装置として使用され、さらに、フロッピディスク、ＣＤＲＯＭ、ＲＯＭカード、ＲＡＭカードなどが外部記憶装置として使用される。
【０００３】
さらに最近では、書き替え可能な読み出し専用メモリであるフラッシュメモリも内蔵あるいは外部記憶装置として使用されるようになっている。
【０００４】
このフラッシュメモリは、セクタ単位で読み込みや書き込みが行えるメモリであり、ハード的にコントローラがない場合は、ソフトウエアにより読み書きの制御を行う。
【０００５】
通常、このフラッシュメモリを組み込んだ情報処理装置におけるＯＳ（オペレーションシステム）のファイルシステムが、該メモリの読み書きを行う単位（セクタ）は、フラッシュメモリの消去単位であるブロックのサイズより小さく、１セクタあたりの書き込み速度をあげるために、１セクタだけの書き換えの場合、ブロック全体の書き換えはなるべく起こらないような仕組としている。
【０００６】
図１１はフラッシュメモリにおける従来のメモリ管理構造を示す図である。
【０００７】
フラッシュメモリは、消去単位である複数のブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎのそれぞれにおいて読み書き単位となるセクタエリアｓ１，ｓ２，〜，ｓｊを有すると共に、各ブロック毎にそのセクタエリアｓ１，ｓ２，〜，ｓｊの物理アドレスを管理し、また、各セクタエリアｓ１，ｓ２，〜，ｓｊのデータが有効であるか無効であるかを管理するためのセクタ情報エリアｓｉを有している。
【０００８】
そして、フラッシュメモリの最終ブロックＢｌｏｃｋ．ｎは、新たなデータの書き込み対象となるブロックの各セクタエリアが全て書き込み済み（ダーティ）である場合に、その中で有効なセクタエリアのデータだけを残して新たなブロックを生成し新たなデータの書き込みを行うための書き込み操作用予備ブロックとして設定される。
【０００９】
図１２はフラッシュメモリの読み書きをコントロールするソフトウエアドライバの構成を示す図である。
【００１０】
すなわち、アプリケーション（ａ）がフラッシュメモリ（ｆ）上のデータをアクセスする際には、ＡＰＩ（ｂ）を介して行われる。このＡＰＩ（ｂ）を介してデータアクセスの情報を受け取ったＯＳ（ｃ）では、前記ＡＰＩ（ｂ）の情報からファイルの読み書きの要求であることを認知すると、これをファイルシステム（ｄ）へ伝える。ファイルシステム（ｄ）では、ファイルの置かれている論理アドレスを管理しており、アプリケーション（ａ）から要求を受けたファイルの論理アドレスに対して読み書きを行う。よって、ファイルシステム（ｄ）では、ファイルの読み書きを、論理アドレスのセクタ単位でのデータのリードライトに変換して、フラッシュメモリドライバ（ｅ）に対して物理的な読み書きの要求を出す。
【００１１】
この場合、例えばファイルシステム（ｄ）の管理している論理アドレスと、フラッシュメモリドライバ（ｅ）の物理アドレスが固定で決まっているとすると、フラッシュメモリ（ｆ）では、個々のセクタエリアを対象としたデータの書き換えを行うことができないので、１セクタの書き換え毎にブロックを消去しての書き換え作業が必要となってまう。
【００１２】
これを回避するために、ファイルシステム（ｄ）の論理アドレスに対応したフラッシュメモリドライバ（ｅ）の物理アドレスは、データ書き込みのたびに変更できるようになっている。
【００１３】
図１３はフラッシュメモリのデータ既存セクタに対するデータ書き替え要求に際し同ブロック内に未使用セクタがある場合の新データの書き込み状態を示す図である。
【００１４】
例えば図１３（Ａ）に示すように、ブロックｍの既にデータの書き込まれている各セクタエリアｓ１〜ｓ５のうちの２番目のセクタエリアｓ２にデータ書き換えの要求ができた場合は、図１３（Ｂ）及び図１３（Ｃ）に示すように、該当するブロックｍのセクタ情報エリアｓｉにおいて、当該書き換え対象の古いセクタエリアｓ２を無効状態に設定すると共に、新たな物理アドレスの未使用のセクタエリアｓ６にデータを書き込み、このセクタエリアｓ６を有効状態に設定する。
【００１５】
フラッシュメモリドライバ（ｅ）では、随時このセクタ情報エリアｓｉの管理情報を書き換えながら、ブロック内の新たなセクタエリアへデータを書き足す形で、書き込みを行う。こうすることで、ブロック内の全てのセクタエリアｓ１〜ｓｊが書き込み済みになるまで、該ブロック全体の消去は行われず、書き込み速度を上げることができている。
【００１６】
図１４はフラッシュメモリに対する従来のデータ書き込み制御方式において未使用セクタがないブロックに対するデータ追記要求に伴う新データの書き込み状態を示す図である。
【００１７】
例えば図１４（Ａ）に示すように、未使用のセクタエリアがなくなったブロックｍへのセクタデータの追記要求が起きた場合は、まず、ブロック全体を整理して別のブロックへ書き写す。すなわち、当該ブロックｍのセクタ情報エリアＳｉにて管理される各セクタエリアｓ１〜ｓｊそれぞれの有効／無効の情報に基づき、無効になっているセクタデータはすべて捨てて、有効なセクタデータだけを残し、図１４（Ｂ）に示すように、予備ブロックｎから確保した新たなブロック１に対してその有効なセクタデータだけを転送して記憶させる。こうすることにより、新しいブロック１には未使用のセクタエリアができ、この未使用のセクタエリアへ、追記要求されたデータの書き込みを行う。
【００１８】
この際にも、図１４（Ｃ）に示すように、通常のセクタデータの書き込みと同様に、セクタ情報エリアｓｉにおける各セクタ情報の書き換えを行い、各セクタエリアの物理アドレスとその有効／無効の状態を更新して管理する。
【００１９】
そして、前記データ整理の対象となったブロックｍ内の全セクタデータを消去し、図１４（Ｄ）に示すように、新たなブロック書き換えのための予備ブロックｎに設定する。
【００２０】
【発明が解決しようとする課題】
このように、フラッシュメモリにおける従来のデータ書き込み制御方式では、ブロック内の各セクタエリアが全て書き込み済み、つまりダーティになった状態でのセクタデータの書き換え要求、あるいはセクタデータの追記要求に伴い、そのブロック全体の書き換えが発生するため、メモリ内の各ブロックにおいて、一度その殆どのセクタがダーティ状態となると、それ以降、新たなデータ書き換え要求やデータ追記要求が来た場合に、かなりの割合で前記ブロック全体の書き換え処理が頻発する状況となってしまう。
【００２１】
したがって、フラッシュメモリおいて、一度使用可能領域の全てがダーティ状態となると、それ以降はブロック全体の書き換えが頻発し、データ書き込み速度が遅くなるという問題がある。
【００２２】
また、フラッシュメモリにおける従来のデータ書き込み制御方式では、前記ブロック全体の書き換え処理の発生に伴い、全てのセクタがダーティとなったブロックから新たなブロックへのデータの書き換えが行われている最中に、ハード的なリセットが掛かって新たなブロックへの書き込みが中断されると、書き込み途中にあるセクタのデータが、リセットが掛かる前までのデータしか有効になってなく、残りのセクタエリアに書き換えるべきデータを全く失ってしまう問題がある。
【００２３】
本発明は、前記のような問題に鑑みなされたもので、その第１の目的は、ブロック全体の書き換えが頻繁に発生するのを防ぎ、データ書き込み速度の低下を防止することが可能になるフラッシュメモリ管理装置及び記録媒体を提供することにある。
【００２４】
また、本発明の第２の目的は、データ書き込みの過程においてハードウエアリセットが掛かった場合でも、データの修復を容易に行うことが可能になるフラッシュメモリ管理装置を提供することにある。
【００２５】
【課題を解決するための手段】
すなわち、本発明の請求項１に係るフラッシュメモリ管理装置は、フラッシュメモリが有する複数のブロックを一次ブロック群と二次ブロック群とに分けて設定するブロック設定手段と、前記各ブロックが有する複数のセクタエリアの個々のセクタエリアにデータを書き込むセクタデータ書き込み手段と、前記一次ブロック群から確保された一次ブロック内の全セクタエリアがデータ書き込み済みである場合には、当該一次ブロックの拡張ブロックとして前記二次ブロック群から確保した二次ブロックを用いるブロック拡張手段と、このブロック拡張手段により拡張された二次ブロック内の全セクタエリアがデータ書き込み済みである場合には、前記データ書き込み済みである一次ブロックと二次ブロック内の有効なセクタデータを整理して新たな一次ブロックを生成するブロック整理手段と、このブロック整理手段によるデータ整理後の元の一次ブロックと二次ブロックそれぞれの全セクタエリアのデータを消去するブロック解放手段とを備えたことを特徴とする。
【００２６】
このようなフラッシュメモリ管理装置では、一次ブロック内の全セクタエリアがデータ書き込み済みとなった時点ではブロックの整理は行われず、拡張メモリとしての二次ブロック内の全セクタエリアがデータ書き込み済みとなってはじめて一次，二次ブロック内の有効なセクタデータが整理されて新たな一次ブロックが生成され、これと共に、データ整理後の元の一次ブロックと二次ブロックは、それぞれの全セクタエリアのデータが消去されて解放されるので、ブロック全体の書き換えが頻繁に起こらない構成となる。
【００２７】
また、本発明の請求項２に係るフラッシュメモリ管理装置は、前記請求項１に係るフラッシュメモリ管理装置にあって、前記フラッシュメモリが有する各ブロックに対し、空き、データ書き込み中、データ書き込み終了、処理完了の各状態を示すブロック状態情報を記憶させ、このブロック状態情報に基づきブロック単位の制御を行うことを特徴とする。
【００２８】
このようなフラッシュメモリ管理装置では、フラッシュメモリが有する各ブロックにおいて、空き、データ書き込み中、データ書き込み終了、処理完了の各状態を示すブロック状態情報が記憶されて管理されることで、例えばハードウエアリセットが発生した場合に、最もデータ消失の少ないブロック状態に制御できることになる。
【００２９】
また、本発明の請求項３に係るフラッシュメモリ管理装置は、前記請求項１に係るフラッシュメモリ管理装置にあって、前記各ブロックが有する複数のセクタエリアに対し、空き、データ書き込み中、書き込み完了の各状態を示すセクタ状態情報を記憶させ、このセクタ状態情報に基づきセクタ単位の制御を行うことを特徴とする。
【００３０】
このようなフラッシュメモリ管理装置では、フラッシュメモリの各ブロックが有する複数のセクタエリアにおいて、空き、データ書き込み中、書き込み完了の各状態を示すセクタ状態情報が記憶されて管理されることで、例えばハードウエアリセットが発生した場合に、最もデータ消失の少ないセクタ状態に制御できることになる。
【００３１】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態について説明する。
【００３２】
（第１実施形態）
図１は本発明の実施形態に係るフラッシュメモリ管理装置を搭載したパーソナルコンピュータの電子回路の構成を示すブロック図である。
【００３３】
このパーソナルコンピュータは、制御部（ＣＰＵ）１１、記憶装置１２、ＲＡＭ１３、キーボード１４、マウス１５、表示部１６、記憶媒体読み取り部１８、伝送制御部１９より構成され、バス１７を介して相互に接続されている。
【００３４】
制御部（ＣＰＵ）１１は、キーボード１４やマウス１５からの入力信号に応じて、記憶装置１２に予め記憶されている制御プログラム、あるいはフロッピディスクＦＤなどの外部記憶媒体１８ａからフロッピディスクドライブＦＤＤなどの記憶媒体読み取り部１８を介して記憶装置１２に読み込まれた制御プログラム、あるいは外部のコンピュータ端末（プログラムサーバ２１）の記憶装置２２から通信ネットワーク２０を経由し伝送制御部１９を介して記憶装置１２に読み込まれた制御プログラムを起動させ、ＲＡＭ１３をワークメモリとして回路各部の動作を制御する。
【００３５】
記憶装置１２は、半導体メモリのＲＯＭやフラッシュメモリ（Ｆｌａｓｈ），ハードディスク装置（ＨＤ）等で構成し、本パーソナルコンピュータの電源投入直後に制御部（ＣＰＵ）１１により読み出される前述の制御プログラムを予め格納している他に、各種制御処理の実行に伴い設定されるフォーマットデータや保存の必要な処理データなどを格納している。
【００３６】
ＲＡＭ１３は、前述の制御プログラムを実行する際に制御部（ＣＰＵ）１１が使用するワークメモリである。
【００３７】
図２は前記パーソナルコンピュータの記憶装置１２に内蔵されるフラッシュメモリ（Ｆｌａｓｈ）のメモリ管理構造を示す図である。
【００３８】
このフラッシュメモリ（Ｆｌａｓｈ）は、複数のブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎに区切られて該ブロック単位でデータの消去が管理され、また、各ブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎはそのそれぞれに複数のセクタエリアｓ１〜ｓｊと当該セクタエリアｓ１〜ｓｊのアドレス管理情報及び有効／無効情報を格納するセクタ情報エリアｓｉを有し、該セクタ単位でデータの読み書きが管理される。
【００３９】
なお、各セクタエリアｓ１〜ｓｊにおいてデータの書き換えは行えないため、あるセクタエリアに対するデータの書き換え要求が来た場合には、未使用のセクタエリアに新たなデータを書き込み、セクタ情報エリアｓｉにおけるアドレス管理情報と有効／無効情報を変更することにより行う。
【００４０】
また、このフラッシュメモリで用意されている複数のブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎは、全ブロックの中でｍ個のブロックＢｌｏｃｋ．ｎ−ｍ〜Ｂｌｏｃｋ．ｎ−１が書き込み用二次ブロックｘとして設定されると共に、最終ブロックｎが書き込み操作用予備ブロックとして設定され、Ｂｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎ−ｍ−１が一次ブロックとして設定される。
【００４１】
前記二次ブロックｘは、各一次ブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎ−ｍ−１においてその全セクタエリアｓ１〜ｓｊがダーティ（書き込み済み）となった状態で、データ書き換え要求あるいはデータ書き込み要求があった際に、当該全ダーティとなった一次ブロックの書き換えはせずに、この一次ブロックに組み合わせて続けて新たなデータを書き込んでいくためのブロックとして使用される。
【００４２】
そして、ブロックの書き換えは、一次ブロック及びこの一次ブロックに続けて割り当てられた二次ブロックの全セクタエリアがダーティとなった状態で、データの書き換えあるいは書き込み要求があった際に、その一次，二次ブロックにおける有効なセクタエリアのデータが予備ブロックｎから確保した新たな一次ブロックに書き換えられて整理され、その未使用のセクタエリアに新たなデータが書き込まれる。そして、データ整理された旧一次ブロックはその全内容が消去されて予備ブロックｎとして戻され、二次ブロックもその全内容が消去されて空き二次ブロックＢｌｏｃｋ．ｎ−ｍ〜Ｂｌｏｃｋ．ｎ−１のプールに戻される。
【００４３】
次に、前記構成によるパーソナルコンピュータのフラッシュメモリに対するデータ書き込み制御機能について説明する。
【００４４】
図３は前記パーソナルコンピュータのフラッシュメモリに対するデータ書き込み制御処理を示すフローチャートである。
【００４５】
例えば図２に示すように、未使用のセクタエリアｓ６〜ｓｊがある一次ブロックＢｌｏｃｋ．０に対して、セクタデータの書き換え要求あるいは新たなデータの追記要求があった場合には、当該一次ブロック“０”の未使用のセクタエリアが先頭セクタから順次検索され、ダーティ状態（書き込み済み）ではないセクタエリアｓ６が検索されるので、当該検索された未使用のセクタエリアｓ６に対して書き換えあるいは追記となる新たなデータが書き込まれる（Ｓ１→Ｓ２→Ｓ３）。
【００４６】
ここで、前記セクタエリアｓ６に書き込まれた新たなデータが書き換えのデータであった場合には、該当ブロック“０”のセクタ情報エリアｓｉで管理されるアドレス情報が古いセクタエリアのアドレスから新たなセクタエリアｓ６のアドレスへ変更されると共に、古いセクタエリアが有効に、新たなセクタエリアｓ６が有効に設定される。
【００４７】
図４は前記フラッシュメモリに対するデータ書き込み制御処理において一次ブロックに未使用セクタがない場合のデータ書き換え要求に伴う新データの書き込み状態を示す図である。
【００４８】
例えば図４（Ａ）に示すように、フラッシュメモリの未使用のセクタエリアがなくなった一次ブロックａ１のセクタエリアｓ５に対してデータ書き換え要求が来た場合には、まず、当該一次ブロックａ１の未使用のセクタエリアが検索されて全てダーティ（書き込み済み）であると判断され、この一次ブロックａ１に対しＩＤ（識別情報）が一致する二次ブロックが割り当てられているか否か判断される（ステップＳ１，Ｓ２→Ｓ４）。
【００４９】
ここで、前記データ書き換え要求のあった一次ブロックａ１に対しＩＤの一致する二次ブロックが存在しないと判断されると、図４（Ｂ）（Ｃ）に示すように、二次ブロックｘのプール（Ｂｌｏｃｋ．ｎ−ｍ〜Ｂｌｏｃｋ．ｎ−１）の中から空きブロックが検索され（ステップＳ４→Ｓ５）、前記一次ブロックａ１に対する二次ブロックａ２としてＩＤが付されて割り当てられ（ステップＳ６→Ｓ７）、当該割り当てられた二次ブロックａ２のセクタエリアｓ１に対して新たなデータが書き込まれる（ステップＳ８）。
【００５０】
この場合、前記データ書き換えの対象となった一次ブロックａ１のセクタ情報エリアｓｉにおいて、セクタエリアｓ５が無効に変更され、また、二次ブロックａ２のセクタ情報エリアｓｉにおいて、セクタエリアｓ１の物理アドレスが管理され有効セクタに設定される。
【００５１】
この後、前記一次ブロックａ１及び二次ブロックａ２に対するデータ書き換え要求あるいはデータ追記要求があった場合には、当該二次ブロックａ２内に未使用のセクタエリアが存在している限り、その未使用のセクタエリアに対し新たなデータが書き込まれるようになる（ステップＳ１，Ｓ２→Ｓ４→Ｓ９，Ｓ１０→Ｓ８）。
【００５２】
よって、この場合には、二次ブロックａ２に未使用のセクタエリアがなくなるまで、一次及び二次ブロック全体ａ１，ａ２を対象とするブロックの書き換えは起こらないようになる。
【００５３】
図５は前記フラッシュメモリに対するデータ書き込み制御処理において一次，二次ブロックに未使用セクタがない場合のデータ書き換え要求に伴う新データの書き込み状態を示す図である。
【００５４】
例えば図５（Ａ）（Ｂ）に示すように、フラッシュメモリの未使用のセクタエリアがなくなった一次，二次ブロックａ１，ａ２における該一次ブロックａ１のセクタエリアｓ２に対してデータ書き換え要求が来た場合には、一次ブロックａ１はその全セクタエリアｓ１〜ｓｊがダーティ状態と判断され（ステップＳ１，Ｓ２）、これに割り当てられた二次ブロックａ２も全セクタエリアｓ１〜ｓｊがダーティ状態と判断されるので（ステップＳ４→Ｓ９，Ｓ１０）、当該一次，二次ブロックａ１，ａ２の整理処理（書き換え処理）が行われる（ステップＳ１１）。
【００５５】
この一次，二次ブロックａ１，ａ２の整理処理では、まず、図５（Ｅ）（Ｄ）に示すように、データの整理先（書き換え先）となる新たなブロックが予備ブロックｎから確保されて当該一次，二次ブロックａ１，ａ２と同一グループであることを識別するためのＩＤ（ａ３）として割り当てられる。
【００５６】
すると、図５（Ａ）（Ｂ）（Ｅ）に示すように、前記一次，二次ブロックａ１，ａ２それぞれのセクタ情報エリアｓｉにて管理される有効／無効のセクタ情報に基づき、当該各ブロックａ１，ａ２中の有効セクタのデータのみが読み出され、新ブロックｎ（ａ３）に対して整理されて書き込まれる（ステップＳ１１）。
【００５７】
そして、この新ブロックｎ（ａ３）の未使用セクタエリアに対して前記書き換え要求に伴う新たなデータが書き込まれ（ステップＳ１２）、当該新ブロックｎ（ａ３）のセクタ情報エリアｓｉにて管理されるアドレス情報及び有効／無効情報が各セクタデータの書き換え及び書き込みアドレスに応じて新たに設定される。
【００５８】
このように、前記一次，二次ブロックａ１，ａ２全体の書き換え整理がなされると、各ブロックａ１，ａ２の内容はブロック毎に消去され、図５（Ａ）（Ｄ）に示すように、古い一次ブロックａ１は予備ブロックｎとして戻され、また、図５（Ｂ）（Ｃ）に示すように、古い二次ブロックａ２は二次ブロックｘのプールに戻される。
【００５９】
そして、前記新ブロックｎ（ａ３）が新たな一次ブロックａ１として有効になる。
【００６０】
したがって、前記構成のパーソナルコンピュータのフラッシュメモリに対するデータ書き込み制御機能によれば、フラッシュメモリ内のデータ消去単位である複数のブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎを、一次ブロック群Ｂｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎ−ｍ−１と二次ブロック群ｎ−ｍ〜ｎ−１と予備ブロックｎに分けて設定し、ある一次ブロックに対するデータ書き込み要求に際しその一次ブロックの全セクタエリアｓ１〜ｓｊがダーティ状態（書き込み済み）である場合には、前記二次ブロック群ｎ−ｍ〜ｎ−１中の空いている二次ブロックを前記全ダーティな一次ブロックの拡張ブロックとして使用し、この二次ブロックの全セクタエリアｓ１〜ｓｊまでもがダーティ状態となった場合には、当該一次ブロックと二次ブロックの有効なセクタデータのみを整理して前記予備ブロックｎを用いた新たな一次ブロックへ書き換え、未使用のセクタエリアを確保すると共に、有効セクタ整理済みの古い一次ブロックはその内容を消去して予備ブロックｎとして設定変更し、同有効セクタ整理済みの二次ブロックもその内容を消去して前記二次ブロック群ｎ−ｍ〜ｎ−１中に戻すようにしたので、ブロック全体の書き換え整理が発生する頻度が大幅に削減されるようになり、当該ブロック全体の書き換え整理に起因するデータ書き込み速度の低下を防止できるようになる。
【００６１】
なお、前記フラッシュメモリに対するデータ書き込み制御機能において、各ブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎそれぞれのセクタ情報エリアｓｉには、該当ブロックが次で説明するような４つの状態の何れかであることを表すブロック状態情報（フラグ）を書き込み、ブロック整理の途中でのリセット発生などに伴うブロック移動中のメモリ破壊に対するデータの修復が容易に行える構成としている。
【００６２】
▲１▼ＢＬＯＣＫ  ＦＲＥＥ：ブロックの空き状態を表す。二次ブロック群ｎ−ｍ〜ｎ−１のプールにある場合や予備ブロックｎがこの状態となる。
【００６３】
▲２▼ＢＬＯＣＫ  ＯＮ  ＷＲＩＴＥ：ブロックのデータ書き込み途中を表す。一次，二次ブロックの整理に伴いセクタデータが移動途中にある新ブロックがこの状態となる。
【００６４】
▲３▼ＢＬＯＣＫ  ＤＩＲＴＹ：ブロックのデータ書き込みが終了し、且つ同じグループＩＤを有する他の有効ブロックが存在する状態を表す。
【００６５】
▲４▼ＢＬＯＣＫ  ＣＯＭＰＬＥＴＥ：ブロックのデータ書き込みが終了し、且つ古いブロックが削除された状態を表す。
【００６６】
図６は前記フラッシュメモリに対するデータ書き込み制御処理において一次，二次ブロックに未使用セクタがない場合のデータ書き込み要求に伴うデータ整理の過程とブロック状態情報の遷移（その１）を示す図である。
【００６７】
図７は前記フラッシュメモリに対するデータ書き込み制御処理において一次，二次ブロックに未使用セクタがない場合のデータ書き込み要求に伴うデータ整理の過程とブロック状態情報の遷移（その２）を示す図である。
【００６８】
図６（Ａ）に示すように、通常は、一次ブロックａ１，二次ブロックａ２共に、そのセクタ情報エリアｓｉにセットされるブロック状態情報（フラグ）は、“ＣＯＭＰＬＥＴＥ”となる。
【００６９】
ここで、一次ブロックａ１，二次ブロックａ２共に未使用のセクタエリアがない状態で、データの書き込み要求が来ると、前述したように当該一次，二次ブロックａ１，ａ２の書き換え整理が行われる。
【００７０】
すなわち、図６（Ｂ）に示すように、はじめに予備ブロックｎが同一グループの新たなブロックｎ（ａ３）として獲得され、そのブロック状態情報は“ＦＲＥＥ”にセットされる。
【００７１】
すると、図６（Ｃ）に示すように、新たなブロックｎ（ａ３）のブロック状態情報は“ＯＮ  ＷＲＩＴＥ”に変更セットされ、一次，二次ブロックａ１，ａ２から有効なセクタデータのみを抽出して書き換えるブロック全体の整理が開始される。この際、新たなブロックｎ（ａ３）へのデータ書き込み途中は、当該ブロック状態情報は常に“ＯＮ  ＷＲＩＴＥ”となっている。
【００７２】
そして、図６（Ｄ）に示すように、前記一次，二次ブロックａ１，ａ２から新たなブロックｎ（ａ３）に対する有効データの書き換え整理が終了すると、新ブロックｎ（ａ３）のブロック状態情報は“ＤＩＲＴＹ”に変更される。なお、この時点では、整理対象ブロックａ１，ａ２は未だ消去されないで残っている。
【００７３】
この後、図７（Ｅ）（Ｆ）に示すように、整理対象の一次ブロックａ１，二次ブロックａ２の内容は順次消去され、一次ブロックａ１は予備ブロックｎとされてそのブロック状態情報は“ＦＲＥＥ”に変更セットされ、また、二次ブロックａ２は空き二次ブロックｘのプールへ返されてそのブロック状態情報も“ＦＲＥＥ”に変更セットされる。この間、新ブロックｎ（ａ３）のブロック状態情報は“ＤＩＲＴＹ”にセットされたままとなる。
【００７４】
そして、図７（Ｇ）に示すように、前記一次ブロックａ１，二次ブロックａ２の消去が完全に終了した際に、その新ブロックｎ（ａ３）は新たな一次ブロックａ１として有効になり、ブロック状態情報は“ＣＯＭＰＬＥＴＥ”に変更セットされる。
【００７５】
図８は前記フラッシュメモリのデータ書き込み制御処理に伴うリセット発生対応処理を示すフローチャートである。
【００７６】
すなわち、フラッシュメモリに対するデータ書き込み中にリセットが発生した場合、データ自体が書き込み途中であるのと同時に、フラッシュメモリドライバ（ｅ）の書き込み手順自体も途中である可能性があるため、リセット時には、まずデータ書き込みが完了しているかどうかを判断し、完了していない場合には、その後の動作に不具合がないように修正を行う。
【００７７】
ハードウエアリセットが発生すると、はじめに、ブロック状態情報が“ＯＮ  ＷＲＩＴＥ”にセットされているブロックが存在するか否か、つまり、前記図６（Ｃ）で示したように、データ整理途中で有効セクタデータの書き込み途中にあるブロックが存在するか否か検索される（ステップＡ１）。
【００７８】
この場合、新ブロックｎ（ａ３）に対し書き込むべき有効セクタデータは一次，二次ブロックａ１，ａ２に存在し、“ＯＮ  ＷＲＩＴＥ”である新ブロックｎ（ａ３）には未だ書き込まれていないデータも存在するので、旧ブロックである一次，二次ブロックａ１，ａ２が優先され、“ＯＮ  ＷＲＩＴＥ”にセットされている新ブロックｎ（ａ３）の内容は削除される（ステップＡ１→Ａ２）。
【００７９】
これにより、新ブロックｎ（ａ３）は、前記図６（Ｂ）で示したように、一次，二次ブロックａ１，ａ２からの有効セクタデータの書き込みが行われる前の状態に戻り、そのブロック状態情報は“ＦＲＥＥ”にセットされる。
【００８０】
一方、前記ステップＡ１において、ブロック状態情報が“ＯＮ  ＷＲＩＴＥ”にセットされているデータ書き込み途中のブロックが存在しないと判断された場合には、次に、ブロック状態情報が“ＤＩＲＴＹ”にセットされているブロックが検索される（ステップＡ１→Ａ３）。
【００８１】
つまり、このステップＡ３では、前記図６（Ｄ）で示したように、一次，二次ブロックａ１，ａ２からの有効セクタデータの書き換え整理が終了したものの、該旧ブロックである一次，二次ブロックａ１，ａ２の削除は未だ行われていない状態での新ブロックｎ（ａ３）が検索されるもので、この場合には、同じグループＩＤ（この場合「ａ」）が割り当てられているブロックのなかで、そのブロック状態情報が“ＣＯＭＰＬＥＴＥ”にセットされている一次，二次ブロックａ１，ａ２が検索され、前記図７（Ｅ）（Ｆ）で示したように、各ブロック毎に順次その内容が消去されると共に、内容消去後の一次ブロックａ１は予備ブロックｎとされ、同内容消去後の二次ブロックａ２は未使用の二次ブロックｘのプールに戻される（ステップＡ４〜Ａ６）。
【００８２】
すると、前記“ＤＩＲＴＹ”検索された新ブロックのブロック状態情報が、前記図７（Ｇ）で示したように、“ＣＯＭＰＬＥＴＥ”に変更される（ステップＡ７）。
【００８３】
したがって、前記構成のパーソナルコンピュータのフラッシュメモリに対するデータ書き込み制御機能によれば、各ブロック毎のセクタ情報エリアｓｉにおいて、当該ブロックが空きである場合には“ＦＲＥＥ”、データ書き込み途中である場合には“ＯＮ  ＷＲＩＴＥ”、データ書き込み終了で旧ブロック未削除である場合には“ＤＩＲＴＹ”、データ書き込み完了で旧ブロック削除後の場合には“ＣＯＭＰＬＥＴＥ”とするブロック状態情報（フラグ）をセットし、ハードウエアリセットが発生した際に、“ＯＮ  ＷＲＩＴＥ”のブロックが検索された場合には、当該“ＯＮ  ＷＲＩＴＥ”のブロックを削除してデータ書き込み前のブロック状態に戻し、また、“ＤＩＲＴＹ”のブロックが検索された場合には、同一グループＩＤを有する“ＣＯＭＰＬＥＴＥ”のブロックを順次検索して削除し、当該ブロック状態情報“ＤＩＲＴＹ”を“ＣＯＭＰＬＥＴＥ”に変更セットするようにしたので、一次，二次ブロック全体の書き換え整理途中にリセットが起きた場合でも、必要データを消失させることなく、その後の動作に支障が生じないよう容易にブロックデータを修復することができる。
【００８４】
なお、前記第１実施形態のフラッシュメモリに対するデータ書き込み制御機能では、各ブロックＢｌｏｃｋ．０〜Ｂｌｏｃｋ．ｎそれぞれのセクタ情報エリアｓｉに対し、該当ブロックの状態を表すブロック状態情報（フラグ）をセットすることで、リセット発生などに伴う各ブロックの状態を明確にしてデータの修復が容易に行える構成としたが、次の第２実施形態において説明するように、ブロック内の各セクタエリアｓ１〜ｓｊのヘッダに対し当該各セクタそれぞれの状態を表すセクタ状態情報をセットすることで、セクタ単位の書き足し途中におけるリセット発生などに伴うデータの損失を防止する構成としてもよい。
【００８５】
（第２実施形態）
ブロック内の各セクタエリアｓ１〜ｓｊそれぞれのヘッダにセットされ、該当セクタの状態を表すセクタ状態情報としては、次の３つのセクタ状態情報が用意される。
【００８６】
▲１▼ＳＥＣＴＯＲ  ＦＲＥＥ：未使用のセクタを表す。
【００８７】
▲２▼ＳＥＣＴＯＲ  ＯＮ  ＷＲＩＴＥ：データ書き込み途中のセクタを表す。
【００８８】
▲３▼ＳＥＣＴＯＲ  ＣＯＭＰＬＥＴＥ：データが書き込まれているセクタを表す。
【００８９】
図９はフラッシュメモリに対する第２実施形態のデータ書き込み制御処理に伴うデータ書き込み過程とセクタ状態情報の遷移を示す図である。
【００９０】
例えば図９（Ａ）に示すように、既にデータが書き込まれていてセクタ状態情報が“ＣＯＭＰＬＥＴＥ”にセットされている２番目のセクタエリアのデータＳｅｃｔｏｒ０２に対しデータの書き換え要求があると、セクタ状態情報が“ＦＲＥＥ”にセットされている４番目のセクタエリアが新たなデータ書き込みエリアとして指定され、図９（Ｂ）に示すように、そのセクタ状態情報が“ＯＮ  ＷＲＩＴＥ”に変更セットされる。
【００９１】
そして、この４番目のセクタエリアに対し新たなデータが書き込まれ、そのデータ書き込みが終了すると、図９（Ｃ）に示すように、前記データ書き換えの対象となった２番目のセクタエリアにおける次セクタの指定エリアｉ２ａに対し、４番目のセクタエリアを示す次セクタ指定情報がセットされ、さらに、そのセクタ状態情報が“ＣＯＭＰＬＥＴＥ”に変更セットされる。
【００９２】
この際、２番目のセクタエリアは、正しいセクタエリアを指すためだけに使用され、データ自体は無効となる。
【００９３】
図１０はフラッシュメモリに対する第２実施形態のデータ書き込み制御処理に伴うリセット発生時のデータ修復過程を示す図である。
【００９４】
例えば図１０（Ａ）に示すように、２番目のセクタエリアのデータＳｅｃｔｏｒ０２に対するデータ書き換え要求に応じて、未使用セクタ“ＦＲＥＥ”であった４番目のセクタエリアのセクタ状態情報が“ＯＮ  ＷＲＩＴＥ”にセットされて新たなデータの書き込み途中にある状態で、ハードウエアリセットが発生した場合には、図１０（Ｂ）に示すように、データ書き込み中であるの４番目のセクタエリアのセクタ状態情報は“ＯＮ  ＷＲＩＴＥ”のまま保持され、データ読み込みの際には、そのセクタ状態情報が“ＯＮ  ＷＲＩＴＥ”に保持されている４番目のセクタエリアは無視される。
【００９５】
よって、データＳｅｃｔｏｒ０２を読み出す場合には、２番目のセクタエリアから読み出されることになるので、前記４番目のセクタエリアに書き込み途中の半端なデータが残ることはなく、書き換え前のデータが保持されるようになる。そして、次回のデータ書き込みの際には、セクタ状態情報が“ＯＮ  ＷＲＩＴＥ”にセットされている４番目のセクタエリアは、ダーティ（書き込み済み）エリアと等価に判断されて無視され、図１０（Ｃ）に示すように、新たな書き換えデータＳｅｃｔｏｒ０２は、“ＦＲＥＥ”であった５番目のセクタエリアに書き込まれるようになる。
【００９６】
そして、前記データ書き換えの対象となった２番目のセクタエリアにおける次セクタの指定エリアｉ２ａには、５番目のセクタエリアを示す次セクタ指定情報がセットされ、５番目のセクタエリアのセクタ状態情報が“ＣＯＭＰＬＥＴＥ”に変更セットされる。
【００９７】
したがって、前記構成のパーソナルコンピュータのフラッシュメモリに対する第２実施形態のデータ書き込み制御機能によれば、各セクタ毎のヘッダにおいて、当該ブロックが未使用（空き）である場合には“ＦＲＥＥ”、データ書き込み途中である場合には“ＯＮ  ＷＲＩＴＥ”、データ書き込み完了である場合には“ＣＯＭＰＬＥＴＥ”とするセクタ状態情報（フラグ）をセットし、ハードウエアリセットが発生した際には、“ＯＮ  ＷＲＩＴＥ”で保持されているセクタエリアを無視し、データ書き換え前のセクタエリアを有効にしたままデータの読み出しを行うようにしたので、意図しないハードウエアリセットが発生した場合のデータ欠損を最小限に抑えることができる。
【００９８】
なお、前記各実施形態において記載した手法、すなわち、図３のフローチャートに示すフラッシュメモリに対するデータ書き込み制御処理、図６乃至図８に示すブロック状態情報を設定したブロック管理処理とリセット対応処理、図９，図１０に示すセクタ状態情報を設定したセクタ管理処理とリセット対応処理等の各手法は、コンピュータに実行させることができるプログラムとして、メモリカード（ＲＯＭカード２０、ＲＡＭカード等）、磁気ディスク（フロッピディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ等）、半導体メモリ等の外部記憶媒体１８ａに格納して配布することができる。そして、コンピュータは、この外部記憶媒体１８ａに記憶されたプログラムを記憶媒体読み取り部１８を介して記憶装置１２やＲＡＭ１３に読み込み、この読み込んだプログラムによって動作が制御されることにより、前記各実施形態において説明したフラッシュメモリの管理機能を実現し、前述した手法による同様の処理を実行することができる。
【００９９】
また、前記各手法を実現するためのプログラムのデータは、プログラムコードの形態として通信ネットワーク２０上を伝送させることができ、このネットワーク２０に接続された伝送制御部１９によって前記のプログラムデータを外部のプログラムサーバ２１の記憶装置２２から取り込み、前述したフラッシュメモリの管理機能を実現することもできる。
【０１００】
【発明の効果】
以上のように、本発明の請求項１に係るフラッシュメモリ管理装置によれば、一次ブロック内の全セクタエリアがデータ書き込み済みとなった時点ではブロックの整理は行われず、拡張メモリとしての二次ブロック内の全セクタエリアがデータ書き込み済みとなってはじめて一次，二次ブロック内の有効なセクタデータが整理されて新たな一次ブロックが生成され、これと共に、データ整理後の元の一次ブロックと二次ブロックは、それぞれの全セクタエリアのデータが消去されて解放されるので、ブロック全体の書き換えが頻繁に起こらない構成になる。
【０１０１】
よって、ブロック全体の書き換えが頻繁に発生するのを防ぎ、データ書き込み速度の低下を防止することが可能になる。
【０１０２】
また、本発明の請求項２に係るフラッシュメモリ管理装置によれば、フラッシュメモリが有する各ブロックにおいて、空き、データ書き込み中、データ書き込み終了、処理完了の各状態を示すブロック状態情報が記憶されて管理されることで、例えばハードウエアリセットが発生した場合に、最もデータ消失の少ないブロック状態に制御できるようになる。
【０１０３】
また、本発明の請求項３に係るフラッシュメモリ管理装置によれば、フラッシュメモリの各ブロックが有する複数のセクタエリアにおいて、空き、データ書き込み中、書き込み完了の各状態を示すセクタ状態情報が記憶されて管理されることで、例えばハードウエアリセットが発生した場合に、最もデータ消失の少ないセクタ状態に制御できるようになる。
【０１０４】
よって、データ書き込みの過程においてハードウエアリセットが掛かった場合でも、データの修復を容易に行うことが可能になる。
【図面の簡単な説明】
【図１】本発明の実施形態に係るフラッシュメモリ管理装置を搭載したパーソナルコンピュータの電子回路の構成を示すブロック図。
【図２】前記パーソナルコンピュータの記憶装置に内蔵されるフラッシュメモリ（Ｆｌａｓｈ）のメモリ管理構造を示す図。
【図３】前記パーソナルコンピュータのフラッシュメモリに対するデータ書き込み制御処理を示すフローチャート。
【図４】前記フラッシュメモリに対するデータ書き込み制御処理において一次ブロックに未使用セクタがない場合のデータ書き換え要求に伴う新データの書き込み状態を示す図。
【図５】前記フラッシュメモリに対するデータ書き込み制御処理において一次，二次ブロックに未使用セクタがない場合のデータ書き換え要求に伴う新データの書き込み状態を示す図。
【図６】前記フラッシュメモリに対するデータ書き込み制御処理において一次，二次ブロックに未使用セクタがない場合のデータ書き込み要求に伴うデータ整理の過程とブロック状態情報の遷移（その１）を示す図。
【図７】前記フラッシュメモリに対するデータ書き込み制御処理において一次，二次ブロックに未使用セクタがない場合のデータ書き込み要求に伴うデータ整理の過程とブロック状態情報の遷移（その２）を示す図。
【図８】前記フラッシュメモリのデータ書き込み制御処理に伴うリセット発生対応処理を示すフローチャート。
【図９】フラッシュメモリに対する第２実施形態のデータ書き込み制御処理に伴うデータ書き込み過程とセクタ状態情報の遷移を示す図。
【図１０】フラッシュメモリに対する第２実施形態のデータ書き込み制御処理に伴うリセット発生時のデータ修復過程を示す図。
【図１１】フラッシュメモリにおける従来のメモリ管理構造を示す図。
【図１２】フラッシュメモリの読み書きをコントロールするソフトウエアドライバの構成を示す図。
【図１３】フラッシュメモリのデータ既存セクタに対するデータ書き替え要求に際し同ブロック内に未使用セクタがある場合の新データの書き込み状態を示す図。
【図１４】フラッシュメモリに対する従来のデータ書き込み制御方式において未使用セクタがないブロックに対するデータ追記要求に伴う新データの書き込み状態を示す図。
【符号の説明】
１１  …制御部（ＣＰＵ）
１２  …記憶装置
１３  …ＲＡＭ
１４  …キーボード
１５  …マウス
１６  …表示部
１７  …バス
１８  …記憶媒体読み取り部
１８ａ…外部記憶媒体
１９  …伝送制御部
２０  …ネットワーク
２１  …プログラムサーバ（外部のコンピュータ端末）
２２  …外部端末の記憶装置
【図１】
0003793868.tif 000002
【図２】
0003793868.tif 000003
【図３】
0003793868.tif 000004
【図４】
0003793868.tif 000005
【図５】
0003793868.tif 000006
【図６】
0003793868.tif 000007
【図７】
0003793868.tif 000008
【図８】
0003793868.tif 000009
【図９】
0003793868.tif 000010
【図１０】
0003793868.tif 000011
【図１１】
0003793868.tif 000012
【図１２】
0003793868.tif 000013
【図１３】
0003793868.tif 000014
【図１４】
0003793868.tif 000015