(57)【特許請求の範囲】
【請求項１】
不揮発性メモリ部、制御部およびインターフェースを有し、
前記制御部は、
書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込みの対象か否かを前記インターフェースを通してホスト機器に明示させ、書き込み領域の割り当て管理もホストが行い、
前記シーケンシャル管理の書き込み対象の場合に、前記消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
前記シーケンシャル管理の書き込み対象とならない場合に、前記消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ装置。
【請求項２】
書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込み対象か否かが前記インターフェースを通してホスト機器によって明示され、書き込み領域の割り当て管理もホストが行い、
前記シーケンシャル管理の書き込み対象の場合に、前記消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
前記シーケンシャル管理の書き込み対象とならない場合に、前記消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ制御装置。
【請求項３】
書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込み対象か否かが前記インターフェースを通してホスト機器によって明示され、書き込み領域の割り当て管理もホストが行い、
前記シーケンシャル管理の書き込み対象の場合に、前記消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
前記シーケンシャル管理の書き込み対象とならない場合に、前記消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本開示は、小さいサイズのアクセスによって速度低下が生じることを防止することができる不揮発性メモリ装置、不揮発性メモリ制御装置および不揮発性メモリ制御方法に関する。
【背景技術】
【０００２】  近年、不揮発性メモリとしてＮＡＮＤフラッシュが広く用いられている。ＮＡＮＤフラッシュを用いたストレージデバイスにおいて、電子データの書き込み速度は、書き込みサイズに依存して変動する。その変動に大きな影響を与える要因がガベージコレクションと呼ばれる処理である（特許文献１および特許文献２参照）。この操作は、ＮＡＮＤフラッシュへの書き込みを行うホスト機器によるアクセスとは別個に行われるため、アクセス速度の瞬間的な急低下を伴う。したがって、パフォーマンスを維持するためにはガベージコレクションの頻度を減少させることが必要となる。【０００３】  一般的なフラッシュメモリ装置では、フラッシュメモリに書きこまれたデータをブロック単位とページ単位の２種類に分けて管理している。ブロック単位管理では、フラッシュメモリのブロックサイズの整数倍（以下ブロックユニットと称する）を１つの単位とした管理が行われ、ページ単位管理では、同メモリのページサイズの整数倍（以下ページユニットと称する）を１つの単位とした管理が行われる。ブロックは複数のページによって構成されているため、通常、（ブロックユニット＞ページユニット）となる。【０００４】  ガベージコレクションはページユニットによって管理されている領域を集めてブロックユニットによる管理に昇格する操作である。このため、最初からブロックユニットによる管理となるように書き込みを行えば、ガベージコレクションの発生を防ぐことができる。これは、ブロックユニットの整数倍で書き込みを行うことで実現できる。このため、高速書き込みが必要な場合、従来はブロックユニットの整数倍単位でアクセスを行うという方法を用いていた。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−１９３８８３号公報
【特許文献２】特開２００７−５８８４０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】  しかしながら、近年のフラッシュベンダーの動向によると、ブロックサイズやブロック内のページ数は年々増大する傾向にある。このため、ホスト機器のバッファサイズ（１回で可能な最大アクセスサイズ）が、近い将来ブロックユニットのサイズを下回ることが予測されている。このバッファサイズは、既存機種に関しては変更することが困難であり、今後の機種においても増大させるには相応のコストがかかるため、小サイズの書き込みによる速度低下を抑制する技術が必要となる。【０００７】  この課題は、ＮＡＮＤフラッシュメモリ特有のものではなく、ホスト機器のバッファサイズが不揮発性メモリ装置の管理単位を下回る可能性のある全ての不揮発性メモリに共通のものである。【０００８】  したがって、本開示は、小さいサイズのアクセスによってガベージコレクションが発生し、その結果速度低下が生じることを防止することができる不揮発性メモリ装置、不揮発性メモリ制御装置および不揮発性メモリ制御方法の提供を目的とする。
【課題を解決するための手段】
【０００９】
上述の課題を解決するために、本開示は、不揮発性メモリ部、制御部およびインターフェースを有し、
制御部は、
書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込みの対象か否かをインターフェースを通してホスト機器に明示させ、書き込み領域の割り当て管理もホストが行い、
シーケンシャル管理の書き込み対象の場合に、消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
シーケンシャル管理の書き込み対象とならない場合に、消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ装置である。
【００１０】
本開示は、書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込み対象か否かがインターフェースを通してホスト機器によって明示され、書き込み領域の割り当て管理もホストが行い、
シーケンシャル管理の書き込み対象の場合に、消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
シーケンシャル管理の書き込み対象とならない場合に、消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ制御装置および制御方法である。
【発明の効果】
【００１１】  本開示は、シーケンシャル書き込み対象と判定される消去の管理単位より小さいサイズのデータを特定の領域にシーケンシャルに書き込むので、ガベージコレクションの頻度を少なくして速度低下を防止することができる。
【図面の簡単な説明】
【００１２】  図１は、本開示を適用できるフラッシュメモリ装置の一例のブロック図である。  図２は、フラッシュメモリの記憶領域の説明のための略線図である。  図３は、並列化されたフラッシュメモリの記憶領域（Ｐブロックユニット）の説明のための略線図である。  図４は、並列化されたフラッシュメモリの記憶領域（Ｐページユニット）の説明のための略線図である。  図５は、フラッシュメモリの物理アドレス空間の説明のための略線図である。  図６は、論理アドレス空間の説明のための略線図である。  図７は、Ｐブロックユニット管理されたデータのデータ構造の説明のための略線図である。  図８は、シーケンシャル管理されたデータのデータ構造の説明のための略線図である。  図９は、Ｐページユニット管理されたデータのデータ構造の説明のための略線図である。  図１０は、管理データを保持するＰブロックユニットのデータ構造の説明のための略線図である。  図１１は、Ｐブロックユニット管理に用いる管理データのデータ構造の説明のための略線図である。  図１２は、シーケンシャル管理に用いる管理データのデータ構造の説明のための略線図である。  図１３は、Ｐページユニット管理に用いる第１の管理データのデータ構造の説明のための略線図である。  図１４は、Ｐページユニット管理に用いる第２の管理データのデータ構造の説明のための略線図である。  図１５は、書き込み処理の全体の流れを示すフローチャートである。  図１６は、Ｐブロックユニット内書き込みの説明のためのフローチャートである。  図１７は、フラッシュメモリによってなされるシーケンシャル書き込みの対象の判定方法を説明するためのフローチャートである。  図１８は、シーケンシャル管理登録コマンド用テーブルの一例の略線図である。  図１９は、シーケンシャル管理登録コマンドの処理のフローチャートである。  図２０は、書き込みのシーケンシャル性をホストに明示させる方法であって、ホスト機器がシーケンシャル管理登録コマンド用テーブルを管理しない場合の方法の処理のフローチャートである。  図２１は、書き込みコマンドが過去のシーケンシャル管理登録コマンドと整合しているか否かを判定する処理のフローチャートである。  図２２は、ホスト機器がシーケンシャル管理登録コマンド用テーブルを管理する場合の方法において、シーケンシャル管理登録コマンドの処理のフローチャートである。  図２３は、ホスト機器がシーケンシャル管理登録コマンド用テーブルを管理する場合の方法において、シーケンシャル管理登録削除コマンドの処理のフローチャートである。  図２４は、Ｐブロックユニット管理書き込みの処理のフローチャートである。  図２５は、シーケンシャル管理書き込みの処理のフローチャートである。  図２６は、Ｐページユニット管理書き込みの処理のフローチャートである。  図２７は、各判定方法を比較するための表を示す略線図である。  図２８は、従来の方法と本開示の判定方法を比較するための表を示す略線図である。  図２９は、書き込み方法の例１を説明するための略線図である。  図３０は、書き込み方法の例２を説明するための略線図である。  図３１は、書き込み方法の例３を説明するための略線図である。  図３２は、書き込み方法の��４を説明するための略線図である。  図３３は、読み出し時のＬブロックユニットの扱いの説明のための略線図である。  図３４は、読み出し時のＬブロックユニットの扱いの説明のための略線図である。  図３５は、読み出し時のＬブロックユニットの扱いの説明のための略線図である。  図３６は、読み出し時のＬブロックユニットの扱いの説明のための略線図である。  図３７は、読み出し時のＬブロックユニットの扱いの説明のための略線図である。  図３８は、シーケンシャル書き込みを途中終了する場合のＬブロックユニットの扱いの説明のための略線図である。  図３９は、シーケンシャル書き込みを途中終了する場合のＬブロックユニットの扱いの説明のための略線図である。  図４０は、シーケンシャル書き込みを途中終了する場合のＬブロックユニットの扱いの説明のための略線図である。  図４１は、シーケンシャル書き込みを途中終了する場合のＬブロックユニットの扱いの説明のための略線図である。  図４２は、シーケンシャル管理登録コマンドテーブルの構成方法の説明のための略線図である。
【発明を実施するための形態】
【００１３】  以下に説明する実施の形態は、本開示の好適な具体例であり、技術的に好ましい種々の限定が付されている。しかしながら、本開示の範囲は、以下の説明において、特に本開示を限定する旨の記載がない限り、これらの実施の形態に限定されないものとする。  以下の説明は、下記の順序にしたがってなされる。＜１．本開示の一実施の形態＞＜２．その他応用について＞＜３．変形例＞
【００１４】＜１．本開示の一実施の形態＞「概略」  以下、図面を参照して本開示の一実施の形態について説明する。図１に示すように、本開示の一実施の形態において、フラッシュメモリ装置１は、フラッシュメモリ部２とメモリ制御部３と外部インターフェース４とを有する。フラッシュメモリ部２にシーケンシャル管理書き込み専用の特定領域が用意される。フラッシュメモリ部２のブロックサイズよりも小さい複数回のシーケンシャル管理書き込み要求をホスト機器１１から外部インターフェース４が受信した場合に、特定領域に受信データをシーケンシャルに書き込む機構をメモリ制御部３が有する。
【００１５】  一般的なフラッシュメモリ装置では、消去の管理単位として、ブロックによる管理単位（以下ブロックユニットと称する）が用いられ、書き込み管理単位として、ページによる管理単位（以下ページユニットと称する）が用いられる。ブロックユニット未満のサイズの書き込みは、ページユニットごとに管理される。通常、これらの管理は書き込みアクセス毎に独立して行われる。したがって、複数回の論理的に連続したブロックユニット未満の書き込み要求がホスト機器から発行されたとしても、これらのデータが同一のブロックユニットに連続的に書き込まれるとは限らない。すなわち、一般的なフラッシュメモリ装置においては、論理的なシーケンシャルアクセスが物理的なシーケンシャルアクセスになるとは限らない。したがって、ページユニットで管理されているこれらのデータをまとめてブロックユニットで管理する場合、断片化したデータをコピーして同一のブロックユニットに集める操作が必要となる。この操作をガベージコレクションという。ガベージコレクションの操作はホスト機器による要求とは独立して行われるため、ホスト機器からはアクセス速度の瞬間的な低下として観測される。
【００１６】  しかしながら、もし複数回のコマンドに渡ってブロックユニットサイズ未満のデータがシーケンシャルに書き込まれるということがあらかじめ分かっていれば、それらの書き込みを同一のブロックユニットにシーケンシャル管理書き込みしておくことにより、後に書き込んだデータをブロックユニット管理に昇格させるときのガベージコレクションを回避することができる。本開示ではこのことに注目し、ホスト機器１１からの書き込み要求のシーケンシャル性を判断して物理的な書き込み先を選択する機構をフラッシュメモリ装置１のメモリ制御部３に構成する。
【００１７】「データ構造」・物理アドレス空間と論理アドレス空間  はじめに、本開示のフラッシュメモリ装置１で構成するフラッシュメモリ上のアドレス空間（物理アドレス空間）と、外部インターフェース４を通じたホスト機器１１とのデータのやり取りに用いる仮想的なアドレス空間（論理アドレス空間）について説明する。
【００１８】  図２に示すように、フラッシュメモリの記憶領域は複数の物理ブロックからなり、１つの物理ブロックは複数の物理ページからなる。物理ブロックは消去の最小単位、物理ページは書き込みの最小単位である。この物理構成を考慮して、フラッシュメモリのアドレシングには、物理ブロックに通し番号をつけた物理ブロックアドレスと、各物理ブロック内の物理ページに通し番号をつけた物理ページアドレスが用いられる。
【００１９】  高速化のために複数のフラッシュが並列化される。このような並列動作を想定して、本開示では図３に示すように、各フラッシュから１つずつ物理ブロックを選択してまとめたものを物理ブロックユニット（Ｐブロックユニットと適宜称する）とし、これに番号をつけたものを物理ブロックユニットアドレスとする。同様に、図４に示すように、各フラッシュから同一Ｐブロックユニット内の物理ページを１つずつ集めたものを物理ページユニット（Ｐページユニットと適宜称する）とし、これに番号をつけたものを物理ページユニットアドレスとする。
【００２０】  フラッシュメモリには個体差があり、特定のブロックの読み書き消去が機能しない場合がある（不良ブロック）。このようなブロックに操作を行うことを回避するために、Ｐブロックユニットは不良でない物理ブロックばかりを集めて構成するものとする。このため、同一Ｐブロックユニットに含まれる物理ブロック群の物理ブロックアドレスは互いに異なっていても良い。なお、並列数が１の場合、Ｐブロックユニットと物理ブロックとのそれぞれのサイズが一致し、Ｐページユニットと物理ページとのそれぞれのサイズが一致する。
【００２１】  上述した要素を用いて物理アドレス空間を構成したものを図５に示す。この空間は複数（ｂ個）のＰブロックユニットからなり、あるＰブロックユニットは複数（ｐ個）のＰページユニットからなる。論理アドレス空間の最小サイズと対応を取るため、Ｐページユニットを複数（ｓ個）の物理セクタ（Ｐセクタと適宜称する）に分割する。これらのアドレスを用いてフラッシュメモリ上の物理的な位置を特定するためには、Ｐブロックユニットアドレス、Ｐページユニットアドレス、Ｐセクタアドレスを指定すれば良い。
【００２２】  図６に示すように、上述した物理アドレス空間と整合の取りやすいように論理アドレス空間が構成される。この空間は複数（ｂ個）の論理ブロックユニット（Ｌブロックユニットと適宜称する）からなり、あるＬブロックユニットは複数（ｐ個）の論理ページユニット（Ｌページユニットと適宜称する）からなる。Ｌページユニットをアドレシングの最小サイズで分割したものを論理セクタ（Ｌセクタと適宜称する）とし、このＬセクタに対してアドレシングを行う。図６に示すように、ある論理アドレスを指定すると、対応するＬセクタ、Ｌページユニット、Ｌブロックユニットの組が一意に定まる。
【００２３】・ユーザデータを保持するＰブロックユニットのデータ構造  論理空間上のデータを物理空間上で保持するためのデータ構造について説明する。本開示では、このデータ構造として、Ｐブロックユニット管理、シーケンシャル管理、Ｐページユニット管理という３種類の構造を用意する。
【００２４】（１）Ｐブロックユニット管理されたデータのデータ構造  図７は、Ｐブロックユニット管理されたデータを保持する物理ブロックユニットを示す。特定のＬブロックユニットがオフセット０から最後までデータで埋まっており、かつそのＬブロックユニットのデータが全て同一のＰブロックユニットに保持されている場合にこの管理が可能となる。図７に示すように、このＰブロックユニットに含まれる各物理ページはメタデータ、メタデータに対するＥＣＣ（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｎｇ  Ｃｏｄｅ）情報、ユーザデータ、ユーザデータに対するＥＣＣ情報を持つ。メタデータはＰブロックユニット管理であることを示すブロックタイプ、自分の世代を示すリビジョン、自分に対応するＬブロックユニットアドレスとＬページユニットアドレスを持つ。上述したＰブロックユニット管理の性質より、ＬブロックユニットアドレスはＰブロックユニット内の全物理ページに渡って同一となり、Ｌページユニットアドレスは自分が属しているＰページユニットアドレスと同一となる。
【００２５】（２）シーケンシャル管理されたデータのデータ構造  図８は、シーケンシャル管理されたデータを保持する物理ブロックユニットを示す。特定のＬブロックユニットがオフセット０から途中までデータで埋まっており、かつそのデータが全て同一のＰブロックユニットにオフセット０からシーケンシャルに保持されていて、さらにそれ以外のデータが同じＰブロックユニットに存在しない場合にこの管理が可能となる。図８に示すように、このＰブロックユニットに含まれる書きこみ済の各物理ページはメタデータ、メタデータに対するＥＣＣ情報、ユーザデータ、ユーザデータに対するＥＣＣ情報を持つ。メタデータはシーケンシャル管理であることを示すブロックタイプ、自分の世代を示すリビジョン、自分に対応するＬブロックユニットアドレスとＬページユニットアドレスを持つ。上述したシーケンシャル管理の性質より、Ｐブロックユニット内の全書きこみ済物理ページに渡ってＬブロックユニットアドレスは同一となり、Ｌページユニットアドレスは自分が属しているＰページユニットアドレスと同一となる。また未書き込み物理ページは１で埋められる。
【００２６】（３）Ｐページユニット管理されたデータのデータ構造  図９は、Ｐページユニット管理されたデータを保持する物理ブロックユニットを示す。Ｐブロックユニット管理、シーケンシャル管理のいずれもできない場合にこの管理が行われる。図９に示すように、このＰブロックユニットに含まれる書きこみ済の各物理ページはメタデータ、メタデータに対するＥＣＣ情報、ユーザデータ、ユーザデータに対するＥＣＣ情報を持つ。メタデータはＰページユニット管理であることを示すブロックタイプ、自分の世代を示すリビジョン、自分に対応するＬブロックユニットアドレスとＬページユニットアドレスを持つ。また未書き込み物理ページは１で埋められる。
【００２７】・管理データを保持するＰブロックユニットのデータ構造  上述したユーザデータを管理するためのデータ（管理データ）を物理空間上で保持するためのデータ構造について説明する。まず、図１０は、管理データを保持するＰブロックユニットを示す。図１０に示すように、このＰブロックユニットに含まれる各物理ページはメタデータ、メタデータに対するＥＣＣ情報、管理データ、管理データに対するＥＣＣ情報を持つ。メタデータは管理データであることを示すブロックタイプ、自分の世代を示すリビジョンからなる。以下、上述した３種類のユーザデータを管理するための管理データ部の構成方法をそれぞれ示す。
【００２８】（１）Ｐブロックユニット管理に用いる管理データのデータ構造  図１１は、Ｐブロックユニット管理のための管理データを示す。管理データは０からｌｂ−１までのＬブロックユニットアドレスと、それぞれのアドレスに対応するＰブロックユニットアドレスの組から構成される。あるＬブロックユニットがＰブロックユニット管理されていない場合は、そのＬブロックユニットに対応するＰブロックユニットには０ｘＦＦＦＦ（０ｘは、１６進表記であることを表す）が格納される。
【００２９】（２）シーケンシャル管理に用いる管理データのデータ構造  図１２は、シーケンシャル管理のための管理データを示す。管理データは最大ｅ個のＬブロックユニットアドレスと、それぞれのアドレスに対応するＰブロックユニットアドレス、そのアドレスに対するシーケンシャル書き込み済最終Ｐページユニットアドレスの組から構成される。ガベージコレクション等によってシーケンシャル管理されなくなったエントリの各アドレスには０ｘＦＦＦＦが格納される。
【００３０】（３）Ｐページユニット管理に用いる管理データのデータ構造  図１３および図１４は、Ｐページユニット管理のための管理データを示す。管理データは２種類に分かれている。第１の管理データは最大ｄ個のＬブロックユニットアドレスと、それぞれのアドレスに対応するＰブロックユニットアドレス列の組からなる（Ｐページユニット管理においては単一のＬブロックユニットアドレスのデータを保持するＰブロックユニットが複数に渡る可能性があることに注意）。ガベージコレクション等によってＰページユニット管理されなくなったエントリの各アドレスには０ｘＦＦＦＦが格納される。第２の管理データは同一のＬブロックユニットに属する各Ｌページユニットアドレスと、それぞれのアドレスに対応するＰブロックユニットアドレス、Ｐページユニットアドレスの組から構成される（この管理データは第１の管理データで管理されているそれぞれのＬブロックユニットに対して１つ作られる）。データが存在しないエントリの各アドレスには０ｘＦＦＦＦが格納される。
【００３１】・各データ構造におけるブロックユニット数の制限とガベージコレクション  上述した（２）および（３）において、管理可能な最大ブロックユニットアドレス数をそれぞれｅ、ｄ個と制限した理由について述べる。Ｐブロックユニット管理されたデータでは、ＬブロックユニットとＰブロックユニットが一対一対応し、かつ中身がデータで埋まっているため、論理空間での書き込み量と物理空間の消費量がほぼ一致する（管理データが必要なため、完全には一致しない）。
【００３２】  しかしながら、シーケンシャル管理やＰページユニット管理においては、論理空間での書き込み量がＰブロックユニットサイズに達していなくても１つのＰブロックユニットが確保される。すなわち、論理空間での書き込み量よりも物理空間の消費量の方が大きくなる。その比は最大で（Ｌブロックユニットサイズ／Ｌセクタサイズ）程度である。
【００３３】  したがって、ホスト機器がどのような論理空間の使い方をしても全データがフラッシュメモリ内に保持できることを保証するためには、保証する領域サイズに応じてシーケンシャル管理やＰページユニット管理が可能なＰブロックユニット数を制限する必要がある。これが上述した（２）および（３）において課した制限の由来である。
【００３４】  この制限一杯まで管理データのエントリがあるときに、さらにＰブロックユニットサイズ未満の書き込みを行う場合、すでにあるエントリをＰブロックユニット管理に昇格する操作が必要となる。この操作をガベージコレクションという。本開示はＰブロックユニット管理とＰページユニット管理のみで構成された一般的なフラッシュメモリコントローラにシーケンシャル管理を加え、ガベージコレクションの頻度を削減することを目的としている。その具体的な内容に関しては、以下のアルゴリズムにおいて説明する。
【００３５】「アルゴリズム」  ここまでに説明したデータ構造を用いて書き込みを行うアルゴリズムを述べる。図１５のフローチャートを参照して、書き込み処理の全体の処理の流れについて説明する。
【００３６】  ステップＳＴ１：フラッシュメモリ装置１はホスト機器１１から書き込みコマンドを受信する。  ステップＳＴ２：書き込み先の論理アドレスから管理データを用いて書き込み先のＰブロックユニット群を得る。  ステップＳＴ３：シーケンシャル管理登録コマンドを用いる制御方法（後述の判定方法２および３）の場合は得られたＰブロックユニット群が過去のシーケンシャル管理登録コマンドと整合しているかを判断する。  ステップＳＴ４：Ｐブロックユニット群が過去のシーケンシャル管理登録コマンドと整合していない場合は書き込みコマンドを不受理として終了する。
【００３７】  ステップＳＴ５：Ｐブロックユニット群が過去のシーケンシャル管理登録コマンドと整合している場合、またはシーケンシャル管理登録コマンドを用いない制御方法（後述の判定方法１）の場合は、取得したＰブロックユニット群から未書き込みのＰブロックユニットを一つ取り出す。  ステップＳＴ６：Ｐブロックユニット内の書き込み処理を行う。  ステップＳＴ７：全てのデータを書き終えたかどうかが判定される。書き終えていないと判定される場合には、処理がステップＳＴ５に戻り、Ｐブロックユニット内書き込み処理がなされる。  ステップＳＴ８：ステップＳＴ７において、全てのデータを書き終えたと判定されると、処理が終了する。  なお、シーケンシャル管理登録コマンドと整合性判定に関しては後述する。
【００３８】  図１６のフローチャートは、Ｐブロックユニット内書き込みの内容を示す。Ｐブロックユニット内書き込みはＰブロックユニット管理書き込み、シーケンシャル書き込み、Ｐページユニット管理書き込みの三種類に分かれる。
【００３９】  ステップＳＴ１１：書きこみサイズがＰブロックユニットサイズに一致しているかどうかを判定する。一致している場合、Ｐブロックユニット管理書き込みの処理を行う。  ステップＳＴ１２：ステップＳＴ１１において、一致していないと判定される場合、シーケンシャル管理の対象となる書き込みか否かが判定される。この判定方法については後述する。対象となると判定された場合、シーケンシャル管理書き込みを行う。それ以外の場合、Ｐページユニット管理書き込みを行う。
【００４０】  本開示の一実施の形態では、シーケンシャル書き込みの対象判定方法を３種類提案する。これらはそれぞれに特有のメリットとデメリットがあり、制御の目的に応じて使い分けることが望ましい。・判定方法１  フラッシュメモリ装置１が自動的に判断する方法である。図１７は、この方法の流れを示すフローチャートである。  ステップＳＴ１３：まず管理テーブルより当該書き込みの対象Ｐブロックユニットが既にシーケンシャル管理されているか否かを判定する。  ステップＳＴ１４：ステップＳＴ１３において、管理されていると判定される場合、その続きにシーケンシャルにデータを追記可能かどうかの判定を行う。この判定方法には実装により任意性があるが、例えば最終書き込み済物理ページの次の物理ページから書き込みが始まっている場合に追記可能という判定が考えられる。  ステップＳＴ１５：ステップＳＴ１４における判定結果が可能であることを示す場合、シーケンシャル管理書き込み対象と判断し、肯定を返す。
【００４１】  ステップＳＴ１６：ステップＳＴ１４において、追記可能でないと判定される場合はシーケンシャル管理の終了処理を行う。終了処理とは、当該書き込みの対象ＰブロックユニットをＰページユニット管理に降格する処理である。すなわち、シーケンシャル管理テーブルから当該Ｐブロックユニットのエントリを消去し、Ｐページユニット管理テーブルに新しく当該Ｐブロックユニットのエントリを作成する。なお、ここでＰページユニット管理テーブルに空きが無かった場合は、ガベージコレクションを用いてＰページユニット管理ブロックをＰブロックユニット管理に昇格し、空きを作る。ガベージコレクションの方法は後述する。  ステップＳＴ１８：シーケンシャル管理書き込み対象でないと判断した場合には否定を返す。
【００４２】  ステップＳＴ１７：当該書き込みの対象Ｐブロックユニットがまだシーケンシャル管理されていなかった場合は、シーケンシャル管理可能な新規書き込みかどうかを判定する。この判定方法にも実装により任意性があるが、例えばＰブロックユニットサイズの１／４以上の新規書き込みをシーケンシャル管理可能とするという判定が考えられる。  もし可能であった場合、シーケンシャル管理書き込み対象と判断し、ステップＳＴ１５に処理が移行し、肯定を返す。そうでない場合はシーケンシャル管理書き込み対象でないと判断し、ステップＳＴ１８に処理が移行し、否定を返す。
【００４３】・判定方法２  書き込みのシーケンシャル性をホストに明示させる方法である。この方法はシーケンシャル管理テーブルをホスト機器が管理するかどうかで２種類に分けられる。ホスト機器が管理しないものを方法２とし、ホスト機器が管理するものを方法３とする。最初に方法２について述べる。
【００４４】  方法２では、シーケンシャル書き込みを行う前にＬブロックユニットをシーケンシャル管理登録コマンドによってシーケンシャル管理登録コマンド用テーブルに登録する。図１８は、この管理テーブルを示す。このテーブルはデータ構造の管理テーブルの節で述べたものと同じ構造（図１０参照）で保持される。この管理テーブルはＬブロックユニット０からｌｂ−１のそれぞれに対して、それがシーケンシャル管理登録コマンドによって登録されたかどうかを示す。シーケンシャル管理登録コマンドによって登録されている場合には１、登録されていない場合には０がそれぞれ対応するエントリとして格納される。
【００４５】  図１９は、シーケンシャル管理登録コマンドの処理フローチャートを示す。  ステップＳＴ２１：フラッシュメモリ装置１はホスト機器１１から登録コマンドを受信する。  ステップＳＴ２２：登録コマンドはパラメータとしてＬブロックユニットをとり、そのＬブロックユニットが未登録であるか否かが判定される。  ステップＳＴ２３：Ｌブロックユニットが未登録であればシーケンシャル管理登録コマンド用テーブルに登録する。ステップＳＴ２４で処理が終了する。  ステップＳＴ２５：Ｌブロックユニットが既登録であればコマンドを不受理として終了する。
【００４６】  図２０は、方法２の判定の処理を示すフローチャートである。  ステップＳＴ２６：シーケンシャル管理登録コマンド用テーブルを走査し、登録されているか否かが判定される。  ステップＳＴ２７：登録されている場合はシーケンシャル管理書き込み対象と判断し、シーケンシャル管理書き込みの対象であるとの判定結果を返す。  ステップＳＴ２８：登録されていない場合はシーケンシャル管理書き込み対象でないと判断し、否定の結果を返す。
【００４７】  シーケンシャル管理登録コマンドを用いる場合、図１５におけるステップＳＴ３について説明したように、書き込みコマンド毎にその書き込みが過去のシーケンシャル管理登録コマンドと整合しているかを判定する必要がある。図２１は、判定のフローチャートを示す。
【００４８】  ステップＳＴ３１：書き込み対象となるＰブロックユニット群から、シーケンシャル管理登録コマンド用テーブルに登録されているＬブロックユニットに対応するＰブロックユニットを一つ取り出す。  ステップＳＴ３２：既にシーケンシャル管理されているＰブロックユニットかどうかが判定される。  ステップＳＴ３３：ステップＳＴ３２の判定の結果が否定の場合にシーケンシャル管理可能な新規書き込みかどうかが判定される。  ステップＳＴ３４：全ての登録済Ｐブロックユニットを調べ終えたかどうかが判定される。  ステップＳＴ３５：調べ終えたと判定される場合には、整合性があると判定し、肯定を返す。
【００４９】  ステップＳＴ３６：ステップＳＴ３２において、既にシーケンシャル管理されているＰブロックユニットと判定されると、シーケンシャル管理のまま追記可能かどうかが判定される。追記可能と判定されると、ステップＳＴ３４に処理が移る。  ステップＳＴ３７：ステップＳＴ３３において、シーケンシャル管理可能な新規書き込みでないと判定されると、整合性がないと判定され、否定を返す。同様に、ステップＳＴ３６において、シーケンシャル管理のまま追記可能でないと判定されると、整合性がないと判定され、否定を返す。
【００５０】  このように、書き込み対象となるＰブロックユニット群から、シーケンシャル管理登録コマンド用テーブルに登録されているＬブロックユニットに対応するＰブロックユニットを一つずつ取り出し、それが引き続きシーケンシャル管理可能であるかを判定している。全ての調査対象が引き続きシーケンシャル管理可能な場合に整合性があると判断し、そうでない場合は整合性がないと判断する。
【００５１】・判定方法３  書き込みのシーケンシャル性をホストに明示させる方法のうち、シーケンシャル管理テーブルをホスト機器が管理するものである。判定方法２と判定方法３との違いは、シーケンシャル管理登録コマンド用テーブルに登録可能なエントリ数が図１２のｅ個に制限される点である。既にエントリがｅ個ある時点でさらにシーケンシャル管理登録コマンドを発行すると、コマンドを受理しない。図２２は判定方法３におけるシーケンシャル管理登録コマンドの処理フローチャートを示す。  ステップＳＴ４１：登録コマンドを受信する。  ステップＳＴ４２：未登録のＬブロックユニットかどうかが判定される。  ステップＳＴ４３：未登録のＬブロックユニットでない場合には、コマンドが受理されない。
【００５２】  ステップＳＴ４４：未登録のＬブロックユニットである場合には、シーケンシャル管理テーブルに空きがあるかどうかが調べられる。空きがないと判定されると、コマンドが受理されない（ステップＳＴ４３）。  ステップＳＴ４５：ステップＳＴ４４において、シーケンシャル管理テーブルに空きがあると判定されると、シーケンシャル管理登録コマンドテーブルにＬブロックユニットが登録される。  ステップＳＴ４６：登録コマンドに対する処理が終了する。
【００５３】  この方法を用いる場合、シーケンシャル管理登録削除コマンドをさらに設ける。図２３は、削除コマンドに関する処理の流れを示すフローチャートである。  ステップＳＴ５１：削除コマンドを受信する。  ステップＳＴ５２：登録済のＬブロックユニットかどうかが判定される。  ステップＳＴ５３：登録済のＬブロックユニットでない場合には、コマンドが受理されない。
【００５４】  ステップＳＴ５４：最終物理ページまでデータが埋まっている（書き込み済み）かどうかが調べられる。  ステップＳＴ５５：最終物理ページまでデータが埋まっていないと判定されると、Ｐブロックユニット管理への昇格処理がなされる。すなわち、昇格のためのガベージコレクションが必要となる。  ステップＳＴ５６：ステップＳＴ５４において、最終物理ページまでデータが埋まっていると判定されるか、またはステップＳＴ５５の処理の後に、シーケンシャル管理登録コマンドテーブルからＬブロックユニットが削除される。  ステップＳＴ５７：登録削除コマンドに対する処理が終了する。
【００５５】・Ｐブロックユニット管理書き込み  上述した判定方法１乃至３の方法を用いることにより、対象の書き込みがＰブロックユニット管理書き込み、シーケンシャル書き込み、Ｐページユニット管理書き込みのいずれであるかが判定できる。以下、これら三種類の書き込みの方法を述べる。最初にＰブロックユニット管理書き込みの方法を述べる。図２４は、Ｐブロックユニット管理書き込みの方法の処理のフローチャートである。
【００５６】  ステップＳＴ６０：Ｐブロックユニット管理書き込みでは、新しく未書き込みのＰブロックユニットを取得する。  ステップＳＴ６１：取得したＰブロックユニットに対してデータの書き込みを行う。  ステップＳＴ６２：書き込みが終わると、Ｐブロックユニット管理テーブルに書き込み対象Ｐブロックユニットを登録して終了する。
【００５７】・シーケンシャル管理書き込み  図２５は、シーケンシャル管理書き込みの処理の流れを示すフローチャートである。  ステップＳＴ７０：既にシーケンシャル管理されているＰブロックユニットかどうかが判定される。すなわち、書き込みが新規書き込みであるか追記書き込みであるかが判断される。
【００５８】  ステップＳＴ７１：もし新規書き込みであった場合はシーケンシャル管理テーブルを走査して空きを探す。  ステップＳＴ７２：空きがない場合はガベージコレクションを用いてシーケンシャル管理ブロックをＰブロックユニット管理に昇格し、空きを作る。なお、方法３を用いた場合、空きがない書き込みはコマンドの段階で弾かれるため、この段階では必ず空きが存在する。  ステップＳＴ７３：以上の操作で取得した空きエントリに新しくＰブロックユニットを登録する。  ステップＳＴ７４：データを新規に書き込む。  ステップＳＴ７５：書き込みを終えるとシーケンシャル管理テーブルを更新し、終了する。
【００５９】  ステップＳＴ７６：ステップＳＴ７０において、追記書き込みと判定された場合、データをシーケンシャルに追記する。シーケンシャル管理テーブルを更新する。  ステップＳＴ７７：最終物理ページまでデータが埋まったかどうかが判定される。  ステップＳＴ７８：最終物理ページまでデータが埋まったと判定される場合は、Ｐブロックユニット管理への昇格処理を行い、終了する。すなわち、シーケンシャル管理テーブルの該当エントリを削除し、Ｐブロックユニット管理テーブルに書き込み済Ｐブロックユニットを登録する。  ステップＳＴ７７において、最終物理ページまでデータが埋まっていないと判定される場合は、処理がステップＳＴ７５に移り、シーケンシャル管理テーブルが更新されて終了する。
【００６０】・Ｐページユニット管理書き込み  図２６は、Ｐページユニット管理書き込みの処理の流れを示すフローチャートである。  ステップＳＴ８０：この書き込みでは、まず書き込み先が既にＰページユニット管理されているかどうかを判定する。  ステップＳＴ８１：もしＰページユニット管理されていなかった場合はＰページユニット管理テーブルを走査して空きを探す。  ステップＳＴ８２：空きがない場合はガベージコレクションを用いてＰページユニット管理ブロックをＰブロックユニット管理に昇格し、空きを作る。  ステップＳＴ８３：空きエントリに新しくＰブロックユニットを登録する。  ステップＳＴ８４：データを新規書き込む。  ステップＳＴ８５：書き込みを終えるとＰページユニット管理テーブルを更新し、終了する。  ステップＳＴ８６：既に管理されている書き込みであった場合、データをさらに書き込み、Ｐページユニット管理テーブルを更新し、終了する。
【００６１】・ガベージコレクション  ガベージコレクションについて説明する。ガベージコレクションとはシーケンシャル管理およびＰページユニット管理されているデータをＰブロックユニット管理に昇格し、それらの管理テーブルに空きを作る操作である。この操作が必要となる理由はデータ構造の項で説明した。
【００６２】  まずＰページユニット管理をＰブロックユニット管理に昇格するガベージコレクションを説明する。まずＰページユニット管理テーブルから昇格するＬブロックユニットを選択し、各管理テーブルを走査して対象のＬブロックユニットのデータを保持しているＰブロックユニット群を取得する。これらのＰブロックユニット群から、新しいＰブロックユニットに、昇格対象のＬブロックユニットに対応するデータをコピーし、各管理テーブルを更新する。
【００６３】  次にシーケンシャル管理をＰブロックユニット管理に昇格するガベージコレクションを説明する。まずシーケンシャル管理テーブルから昇格するＬブロックユニットを選択し、それに対応するＰブロックユニットと書き込み済最終Ｐページユニットを得る。その後、各管理テーブルを走査して書き込み済最終Ｐページユニット以降の未書き込み領域にデータを保持しているＰブロックユニット群を取得する。以上の操作によって得たＰブロックユニット群から、新しいＰブロックユニットに、昇格対象のＬブロックユニットに対応するデータをコピーし、各管理テーブルを更新する。
【００６４】  なお、この方法の構成から容易に推察されるように、昇格対象のＬブロックユニットがデータで埋まっている場合（書き込み済最終Ｐページユニットが当該Ｐブロックユニットの最終Ｐページユニットに一致する場合）、コピー対象となるＰブロックユニットはただひとつ、シーケンシャル管理されていた当のＰブロックユニットに定まる。すなわち、昇格対象のＬブロックユニットのデータを保持している他のＰブロックユニットが存在しないため、ガベージコレクションが不要となる。この性質によりガベージコレクションを削減し、パフォーマンス低下を抑制することが本開示の狙いである。
【００６５】・方法１〜３の比較  上述した判定方法１〜３の違いを述べる。図２７は、比較の表である。従来手法とは、本開示におけるシーケンシャル管理を行わない場合である。まず、書き込みがシーケンシャルであるかどうかを判断する主体は方法１ではフラッシュメモリ装置であるのに対し、方法２および方法３ではホスト機器である。
【００６６】  方法２ではホスト機器はシーケンシャル管理テーブルの登録のみを行い、その制御はフラッシュメモリ装置が行う。これに対して方法３では、シーケンシャル管理テーブルの削除（登録数の制御）までホスト機器が行う。すなわち、方法１および方法２ではシーケンシャル管理テーブルを制御できる主体はフラッシュメモリ装置のみであるのに対し、方法３ではホスト機器もシーケンシャル管理テーブルを制御できる。
【００６７】  これら３種類の方法のいずれかを用いることにより、シーケンシャル書き込みに対するガベージコレクションを防ぐことができる。ただし、シーケンシャル書き込みが途中で破れた場合や、シーケンシャル管理テーブルに空きがない場合はこの限りではない。方法１では、いずれの場合においてもガベージコレクションを行う。方法２では、シーケンシャル性が破れるような書き込みをコマンドの段階で受理しないため、この場合のガベージコレクションも防ぐことができる。しかしながら、シーケンシャル管理テーブルに空きがない場合はガベージコレクションを行う。方法３では、シーケンシャル管理テーブルに空きがない場合もコマンドの段階で受理しないため、この場合におけるガベージコレクションも防ぐことができる。
【００６８】「一実施の形態の効果」  本開示を用いることにより、Ｐブロックユニット未満の書き込みに対しても、それがシーケンシャルなアクセスである限り、ガベージコレクションによる速度低下を回避することができる。よって、ホスト機器が小刻みに連続的にデータを書き込むような場合にも、アクセスパターンを変更せずに安定したパフォーマンスでのアクセスを提供することが可能になる。また、バッファサイズの制限されたホスト機器では、そもそもＰブロックユニット単位でアクセスを行うことができない。このようなホスト機器に関しては従来連続書き込みでのガベージコレクションは不可避であった。しかしながら、本開示を用いることにより、こうしたホスト機器に対しても、安定したパフォーマンスでのアクセスを提供することが可能となる。
【００６９】  さらに、本開示によれば、部分的にシーケンシャルなアクセスであっても、シーケンシャル部分に関して本手法を用いることにより、やはりこの部分のガベージコレクションを抑制できる。したがって、数回単位でデータとメタデータが交互に書き込まれるような、ファイルシステムに固有のアクセスに対しても、本手法は有効である。ＦＡＴに代表される多くのファイルシステムは通常このようなアクセスパターンで書き込みを行うため、本開示を用いることでパフォーマンスの改善が期待できる。
【００７０】  本開示は、シーケンシャル管理されるＰブロックユニットの個数を１つに限定していない。したがって、複数のデータを交互にシーケンシャル書き込みするような局面にも適用可能である。このことを応用すると、データの他にメタデータもシーケンシャル書き込みするような制御を行って、メタデータ書き込みにおけるパフォーマンス低下を防ぐようなことも可能であると考えられる。
【００７１】  本開示の方法３を用いると、ホスト機器が部分的にフラッシュメモリ装置のガベージコレクションを制御できる。これを応用すると、確実に速度低下が起こらないことが望まれる重要な書き込みに対してシーケンシャル指定を行うことによって、選択的にガベージコレクションを回避するような制御も可能である。
【００７２】  本開示と従来手法との相違をより明らかにするために、この相違が現れるような書き込みの例について以下に説明する。例えば４種類の書き込み方法に対して従来手法と本開示の手法がどのように動作するかを説明する。以下に説明する動作例の一覧を図２８に示す。
【００７３】「各書き込み方法の説明」  以下、書き込み方法の例１〜例４について説明する。なお、簡単のため、以下の例１〜例４の書き込みは全て、過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定する。また、シーケンシャル管理テーブル、Ｐページユニット管理テーブルは共に４つ以上のエントリを保持できるものと仮定する（ｄ≧４、ｅ≧４と仮定したことに相当する）。
【００７４】・書き込み方法の例１  図２９は、書き込み方法の例１を示す。例１では、シーケンシャル管理テーブル（図１２参照）、Ｐページユニット管理テーブル（図１３参照）が共に空の状態で、あるＬブロックユニットに対して（Ｌブロックユニット／４）のサイズの書き込みを４回、（１）、（２）、（３）、（４）の順に行う。
【００７５】・書き込み方法の例２  図３０は、書き込み方法の例２を示す。例２では、シーケンシャル管理テーブル（図１２参照）が空、Ｐページユニット管理テーブル（図１３参照）が満たん（空きがない）状態で、あるＬブロックユニットに対して（Ｌブロックユニット／４）のサイズの書き込みを４回、（１）、（２）、（３）、（４）の順に行う。
【００７６】・書き込み方法の例３  図３１は、書き込み方法の例３を示す。例３では、シーケンシャル管理テーブル（図１２参照）が空、Ｐページユニット管理テーブル（図１３参照）が満たん（空きがない）状態で、あるＬブロックユニットに対して（Ｌブロックユニット／４）のサイズの書き込みを２回、（１）、（２）の順に行う。書き込み方法の例１および例２と異なり、（１）、（２）はシーケンシャルな書き込みではない。
【００７７】・書き込み方法の例４  図３２は、書き込み方法の例４を示す。例４では、シーケンシャル管理テーブル（図１２参照）およびＰページユニット管理テーブル（図１３参照）が共に満たん（空きがない）状態で、あるＬブロックユニットに対して（Ｌブロックユニット／４）のサイズの書き込みを４回、（１）、（２）、（３）、（４）の順に行う。
【００７８】・動作の説明  上述した各書き込み方法に対して従来手法および本手法を適用した場合の動作について説明する。・書き込み方法１の場合〔従来手法〕  １．書き込み（１）のコマンドを発行すると、図１５に示すフローチャートの処理に入る。従来手法ではシーケンシャル管理を行わないので、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は、肯定となる。そして、図１５の諸動作を経てＰブロック内書き込み処理に処理が移る。
【００７９】  ２．図１６がＰブロック書き込み処理である。書き込み（１）はＰブロックユニットサイズに満たないので、最初の分岐のステップＳＴ１１（書き込みサイズがＰブロックユニットサイズに一致）は否定である。さらに、従来手法ではシーケンシャル管理を行わないので、次の分岐のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は否定である。よって、３のＰページユニット管理書き込み処理に移る。
【００８０】  ３．図２６がＰページユニット管理書き込みである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は否定である。Ｐページユニット管理テーブルは空なので、ステップＳＴ８１（Ｐページユニット管理テーブルが空いているか）の結果が肯定であり、ガベージコレクションを行わずにＰページユニット管理テーブルに書き込み（１）の内容を登録し（ステップＳＴ８３）、その後の諸動作を経て書き込み（１）を終了する。
【００８１】  ４．書き込み（２）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、上述した１および２と同様の動作を経て図２６のＰページユニット管理書き込みに移る。書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われるかどうかは従来手法の実装方法に依存する。もし行われる場合は、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は肯定である。この場合、書き込み（１）と同じＰブロックユニットに対して追加で書き込みを行い、その後の諸動作を経て書き込み（１）を終了する。
【００８２】  もし書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われない場合は、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は否定である。（ｄ≧４）と仮定したため、ステップＳＴ８１（Ｐページユニット管理テーブルが空いているか）の結果は肯定であり、ガベージコレクションを行わずにＰページユニット管理テーブルに書き込み（２）の内容を登録し（ステップＳＴ８３）、その後の諸動作を経て書き込み（２）を終了する。
【００８３】  ５．書き込み（３）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、上述した４と同様の動作を経て書き込み（３）を終了する。  ６．書き込み（４）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、上述した４と同様の動作を経て書き込み（４）を終了する。  以上により、従来手法では、制御方法によりＰページユニット管理テーブルを１〜４個消費して書き込みを終了する。
【００８４】〔手法１〕  １．書き込み（１）のコマンドを発行すると、図１５のフローチャートの処理に入る。手法１ではシーケンシャルコマンドを用いたシーケンシャル管理を行わないので、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は肯定に入り、図１５の諸動作を経てＰブロック内書き込み処理（ステップＳＴ６）に処理が移る。
【００８５】  ２．図１６がＰブロック書き込み処理である。書き込み（１）はＰブロックユニットサイズに満たないので、最初の分岐のステップＳＴ１１（書き込みサイズがＰブロックユニットサイズに一致）の結果は否定である。次の分岐のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の判定結果を得るため、図１７のフローチャートの処理に入る。
【００８６】  ３．書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ１３（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。次の分岐のステップＳＴ１７（シーケンシャル管理可能な書き込みか）の判定方法は実装により任意性があるが、例示した判定方法（Ｐブロックユニットサイズの１／４以上の新規書き込みをシーケンシャル管理対象とする）を用いることにする。よって、この分岐のステップＳＴ１７の判定結果は肯定である。したがって、最終的に肯定を得て図１６に処理が戻る。これにより、図１６のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は肯定となり、シーケンシャル管理書き込みに移行する。
【００８７】  ４．図２５のフローチャートがシーケンシャル管理書き込みのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ７０（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。シーケンシャル管理テーブルは空なので、ステップＳＴ７１（シーケンシャル管理テーブルが空いているか）の結果は肯定であり、ガベージコレクションを行わずにシーケンシャル管理テーブルに書き込み（１）の内容を登録し（ステップＳＴ７３）、その後の諸動作を経て書き込み（１）を終了する。
【００８８】  ５．書き込み（２）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。上述の１、２と同様の動作を経て図１７のフローチャートの処理に入る。書き込み（２）は書き込み（１）と同じＬブロックユニットの書き込みのため、シーケンシャル管理テーブルを参照すると、書き込み（２）を含むＬブロックユニットが登録されていることが確認できる。よって、最初の分岐のステップＳＴ１３（既にシーケンシャル管理されているＰブロックユニットか）の結果は肯定である。
【００８９】  書き込み（２）は書き込み（１）のシーケンシャルな続きのため、ステップＳＴ１４（シーケンシャル管理のまま追記可能か）の結果も肯定である。したがって、最終的に肯定を得て図１６に処理が戻る。これにより、図１６のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は肯定となり、図２５のシーケンシャル管理書き込みのフローチャートの処理に入る。
【００９０】  書き込み（２）は書き込み（１）と同じＬブロックユニットの書き込みのため、最初の分岐のステップＳＴ７０（既にシーケンシャル管理されているＰブロックユニットか）の結果は肯定である。したがって、書き込み（１）と同一のＰブロックユニットにシーケンシャルに書き込み（２）を追記する（ステップＳＴ７６）。書き込み（１）、（２）は合わせてもＰブロックユニットサイズに満たないため、次の分岐のステップＳＴ７７（最終物理ページまでデータが埋まったか）の結果は否定となり、その後の諸動作を経て書き込み（２）を終了する。
【００９１】  ６．書き込み（３）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、５と同様の動作を経て書き込み（３）を終了する。
【００９２】  ７．書き込み（４）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、５と同様の動作を経るが、書き込み（１）、（２）、（３）、（４）を合わせるとＰブロックユニットサイズとなるため、５の最後の分岐のステップＳＴ７７（最終物理ページまでデータが埋まったか）の結果は肯定となり、Ｐブロックユニット管理への昇格処理（ステップＳＴ７８）を行なってから書き込み（４）を終了する。  以上により、この手法では、シーケンシャル管理テーブルを１個、書き込み（１）〜（４）の間に使用し、最後のＰブロックユニット管理への昇格処理でシーケンシャル管理テーブルを開放して書き込みを終了する。
【００９３】〔手法２〕  前処理．この手法２では、書き込みを行う前にシーケンシャル管理登録コマンドを用いて書き込み（１）を含むＬブロックユニットがシーケンシャル管理されることを明示する。図１９のフローチャートがシーケンシャル管理登録コマンドのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ２２（未登録のＬブロックユニットか）の結果は肯定である。よって、シーケンシャル管理登録コマンドテーブル（図１８参照）にＬブロックユニットを登録する（ステップＳＴ２３）。
【００９４】  １．書き込み（１）のコマンドを発行すると、図１５のフローチャートの処理に入る。最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）を判定するために図２１の判定フローの処理に入る。
【００９５】  ２．前処理で書き込み（１）を含むＬブロックユニットをシーケンシャル管理登録コマンドテーブルに登録したため、書き込み（１）に対応するＰブロックユニットが取り出される。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ３２（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。
【００９６】  書き込み（１）はＬブロックユニットの先頭から始まっているため、次の分岐のステップＳＴ３３（シーケンシャル管理可能な新規書き込みか）の結果は肯定である。さらに書き込み（１）のサイズはＰブロックユニットサイズ未満のため、書き込み（１）のアクセス先にこれ以外の登録済Ｐブロックユニットは存在しない。よって、ステップＳＴ３４（全ての登録済Ｐブロックユニットを調べ終えた）の結果は肯定となり、最終的に肯定を返却する（ステップＳＴ３５）。したがって、図１５のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は肯定となり、諸動作を経てＰブロック内書き込み処理（ステップＳＴ６）に移行する。
【００９７】  ３．図１６がＰブロック内書き込み処理である。書き込み（１）はＰブロックユニットサイズに満たないので、最初の分岐のステップＳＴ１１（書き込みサイズがＰブロックユニットサイズに一致）の結果は否定である。書き込み（１）を含むＬブロックユニットはシーケンシャル管理登録コマンドテーブルに登録されているため、次の分岐のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は肯定となり、シーケンシャル管理書き込みに移行する。
【００９８】  ４．図２５がシーケンシャル管理書き込みのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ７０（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。シーケンシャル管理テーブルは空なので、ステップＳＴ７１（シーケンシャル管理テーブルが空いているか）は肯定であり、ガベージコレクションを行わずにシーケンシャル管理テーブルに書き込み（１）の内容を登録し、その後の諸動作を経て書き込み（１）を終了する。
【００９９】  ５．書き込み（２）のコマンドを発行すると、再度図１５のフローチャートの処理に入り、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）を判定するために図２１の判定フローチャートの処理に入る。前処理で書き込み（１）を含むＬブロックユニットをシーケンシャル管理登録コマンドテーブルに登録したため、書き込み（１）に対応するＰブロックユニットが取り出される。
【０１００】  書き込み（１）でシーケンシャル管理テーブルへの登録を行ったため、最初の分岐のステップＳＴ３２（既にシーケンシャル管理されているＰブロックユニットか）の結果は肯定である。書き込み（２）は書き込み（１）の直後から始まっているため、ステップＳＴ３６（シーケンシャル管理のまま追記可能か）の結果も肯定である。
【０１０１】  書き込み（２）のサイズはＰブロックユニットサイズ未満のため、書き込み（２）のアクセス先にこれ以外の登録済Ｐブロックユニットは存在しない。よって、ステップＳＴ３４（全ての登録済Ｐブロックユニットを調べ終えた）の結果は肯定となり、最終的に肯定を返却する。したがって、図１５のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は肯定となり、諸動作を経てＰブロック内書き込み処理（ステップＳＴ６）に移行する。
【０１０２】  ６．図１６がＰブロック内書き込み処理である。書き込み（２）はＰブロックユニットサイズに満たないので、最初の分岐のステップＳＴ１１（書き込みサイズがＰブロックユニットサイズに一致）の結果は否定である。書き込み（２）を含むＬブロックユニットはシーケンシャル管理登録コマンドテーブルに登録されているため、次の分岐のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は肯定となり、シーケンシャル管理書き込みに移行する。
【０１０３】  ７．図２５がシーケンシャル管理書き込みのフローである。書き込み（２）は書き込み（１）と同じＬブロックユニットの書き込みのため、最初の分岐のステップＳＴ７０（既にシーケンシャル管理されているＰブロックユニットか）の結果は肯定である。したがって、書き込み（１）と同一のＰブロックユニットにシーケンシャルに書き込み（２）を追記する。書き込み（１）、（２）は合わせてもＰブロックユニットサイズに満たないため、次の分岐のステップＳＴ７７（最終物理ページまでデータが埋まったか）の結果は否定となり、その後の諸動作を経て書き込み（２）を終了する。
【０１０４】  ８．書き込み（３）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、５、６、７と同様の動作を経て書き込み（３）を終了する。  ９．書き込み（４）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、５、６、７と同様の動作を経るが、書き込み（１）、（２）、（３）、（４）を合わせるとＰブロックユニットサイズとなるため、７の最後の分岐のステップＳＴ７７（最終物理ページまでデータが埋まったか）の結果は肯定となり、Ｐブロックユニット管理への昇格処理を行なってから書き込み（４）を終了する。この昇格処理とは、シーケンシャル管理テーブルおよびシーケンシャル管理登録コマンドテーブルから、書き込み（１）を含むＬブロックユニットを削除する操作のことである。
【０１０５】  以上により、この手法では、シーケンシャル管理テーブルを１個、書き込み（１）〜（４）の間に使用し、最後のＰブロックユニット管理への昇格処理でシーケンシャル管理テーブルおよびシーケンシャル管理登録コマンドテーブルから、書き込み（１）を含むＬブロックユニットを削除して書き込みを終了する。
【０１０６】〔手法３〕  前処理．手法３では、書き込みを行う前にシーケンシャル管理登録コマンドを用いて書き込み（１）を含むＬブロックユニットがシーケンシャル管理されることを明示する。図２２がシーケンシャル管理登録コマンドのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ４２（未登録のＬブロックユニットか）の結果は肯定である。シーケンシャル管理テーブルは空なので、ステップＳＴ４４（シーケンシャル管理テーブルに空きがあるか）の結果も肯定である。よって、シーケンシャル管理登録コマンドテーブルにＬブロックユニットを登録する（ステップＳＴ４５）。
【０１０７】  以降の書き込み処理は、手法２と全く同じである。ただし、シーケンシャル管理登録コマンドテーブルからのエントリ削除は後処理で行う。
【０１０８】  後処理．手法３では、書き込みを行った後、シーケンシャル管理登録コマンドテーブルから前処理で登録したＬブロックユニットを削除する。図２３がシーケンシャル管理削除コマンドのフローである。書き込み（１）を含むＬブロックユニットは前処理で登録したので最初の分岐のステップＳＴ５２（登録済みのＬブロックユニットか？）の結果は肯定である。書き込み（１）〜（４）でＰブロックユニットサイズ分の書き込みを終えたので、ステップＳＴ５４（最終物理ページまでデータが埋まっているか？）の結果は肯定である。よって昇格処理を行わずにシーケンシャル管理登録コマンドテーブルから書き込み（１）を含むＬブロックユニットを削除する（ステップＳＴ５６）。
【０１０９】  以上により、この手法では、シーケンシャル管理テーブルを１個、書き込み（１）〜（４）の間に使用し、最後のＰブロックユニット管理への昇格処理でシーケンシャル管理テーブルから、書き込み（１）を含むＬブロックユニットを削除し、後処理でシーケンシャル管理登録コマンドテーブルから書き込み（１）を含むＬブロックユニットを削除して書き込みを終了する。
【０１１０】・書き込み方法２の場合  〔従来手法〕  １．書き込み（１）のコマンドを発行すると、図１５のフローチャートの処理に入る。従来手法ではシーケンシャル管理を行わないので、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は肯定に入り、図１５の諸動作を経てＰブロック内書き込み処理（ステップＳＴ６）に移る。
【０１１１】  ２．図１６がＰブロック内書き込み処理である。書き込み（１）はＰブロックユニットサイズに満たないので、最初の分岐ステップＳＴ１１（書き込みサイズがＰブロックユニットサイズに一致）の結果は否定である。さらに、従来手法ではシーケンシャル管理を行わないので、次の分岐のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は否定である。よって、３のＰページユニット管理書き込み処理に移る。
【０１１２】  ３．図２６がＰページユニット管理書き込みである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は否定である。書き込み方法２ではＰページユニット管理テーブルは満たんなので、ステップＳＴ８１（Ｐページユニット管理テーブルが空いているか）の結果は否定であり、ガベージコレクション（ステップＳＴ８２）を行ってＰページユニット管理テーブルに空きを作ってから、Ｐページユニット管理テーブルに書き込み（１）の内容を登録し、その後の諸動作を経て書き込み（１）を終了する。
【０１１３】  ４．書き込み（２）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、１、２と同様の動作を経て図２６のＰページユニット管理書き込みに移る。書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われるかどうかは実装方法に依存する。もし行われる場合は、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は肯定である。この場合、書き込み（１）と同じＰブロックユニットに対して追加で書き込みを行い、その後の諸動作を経て書き込み（１）を終了する。
【０１１４】  もし書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われない場合は、分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は否定である。この場合、書き込み（１）によってＰページユニット管理テーブルは再度満たんになっているので、ステップＳＴ８１（Ｐページユニット管理テーブルが空いているか）の結果は否定であり、ガベージコレクション（ステップＳＴ８２）を行ってＰページユニット管理テーブルに空きを作ってから、Ｐページユニット管理テーブルに書き込み（２）の内容を登録し、その後の諸動作を経て書き込み（２）を終了する。
【０１１５】  ５．書き込み（３）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、４と同様の動作を経て書き込み（３）を終了する。  ６．書き込み（４）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、４と同様の動作を経て書き込み（４）を終了する。  以上により、この手法では、制御方法により１〜４回のガベージコレクションが発生する。
【０１１６】  〔手法１〕  手法１は書き込み方法１の場合と全く同じである。したがって、この手法では、シーケンシャル管理テーブルを１個、書き込み（１）〜（４）の間に使用し、最後のＰブロックユニット管理への昇格処理でシーケンシャル管理テーブルを開放して書き込みを終了する。
【０１１７】  〔手法２〕  手法２は書き込み方法１の場合と全く同じである。したがって、この手法では、シーケンシャル管理テーブルを１個、書き込み（１）〜（４）の間に使用し、最後のＰブロックユニット管理への昇格処理でシーケンシャル管理テーブルを開放して書き込みを終了する。
【０１１８】  〔手法３〕  手法３は書き込み方法１の場合と全く同じである。したがって、この手法では、シーケンシャル管理テーブルを１個、書き込み（１）〜（４）の間に使用し、最後のＰブロックユニット管理への昇格処理でシーケンシャル管理テーブルを開放して書き込みを終了する。
【０１１９】・書き込み方法３の場合  〔従来手法〕  １．書き込み（１）のコマンドを発行すると、図１５のフローチャートの処理に入る。従来手法ではシーケンシャル管理を行わないので、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は肯定に入り、図１５の諸動作を経てＰブロック内書き込み処理（ステップＳＴ１６）に移る。
【０１２０】  ２．図１６がＰブロック内書き込み処理である。書き込み（１）はＰブロックユニットサイズに満たないので、最初の分岐のステップＳＴ１１（書き込みサイズがＰブロックユニットサイズに一致）の結果は否定である。さらに、従来手法ではシーケンシャル管理を行わないので、次の分岐のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は否定である。よって、３のＰページユニット管理書き込み処理に移る。
【０１２１】  ３．図２６がＰページユニット管理書き込みである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は否定である。書き込み方法３ではＰページユニット管理テーブルは満たんなので、ステップＳＴ８１（Ｐページユニット管理テーブルが空いているか）の結果は否定であり、ガベージコレクション（ステップＳＴ８２）を行ってＰページユニット管理テーブルに空きを作ってから、Ｐページユニット管理テーブルに書き込み（１）の内容を登録し、その後の諸動作を経て書き込み（１）を終了する。
【０１２２】  ４．書き込み（２）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、１、２と同様の動作を経て図２６のＰページユニット管理書き込みに移る。書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われるかどうかは実装方法に依存する。もし行われる場合は、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は肯定である。この場合、書き込み（１）と同じＰブロックユニットに対して追加で書き込みを行い、その後の諸動作を経て書き込み（１）を終了する。
【０１２３】  もし書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われない場合は、分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は否定である。この場合、書き込み（１）によってＰページユニット管理テーブルは再度満たんになっているので、ステップＳＴ８１（Ｐページユニット管理テーブルが空いているか）の結果は否定であり、ガベージコレクション（ステップＳＴ８２）を行ってＰページユニット管理テーブルに空きを作ってから、Ｐページユニット管理テーブルに書き込み（２）の内容を登録し、その後の諸動作を経て書き込み（２）を終了する。  以上により、この手法では、制御方法により１〜２回のガベージコレクションが発生する。
【０１２４】  〔手法１〕  １．書き込み（１）のコマンドを発行すると、図１５のフローチャートの処理に入る。手法１ではシーケンシャルコマンドを用いたシーケンシャル管理を行わないので、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は肯定に入り、図１５の諸動作を経てＰブロック内書き込み処理（ステップＳＴ６）に移る。
【０１２５】  ２．図１６がＰブロック内書き込み処理である。書き込み（１）はＰブロックユニットサイズに満たないので、最初の分岐のステップＳＴ１１（書き込みサイズがＰブロックユニットサイズに一致）の結果は否定である。次の分岐のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の判定結果を得るため、図１７のフローチャートの処理に入る。
【０１２６】  ３．書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ１３（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。次の分岐のステップＳＴ１７（シーケンシャル管理可能な書き込みか）の判定方法は実装により任意性があるが、例示した判定方法（Ｐブロックユニットサイズの１／４以上の新規書き込みをシーケンシャル管理対象とする）を用いることにする。よって、この分岐の結果は肯定である。したがって、最終的に肯定を得て図１６に戻る。これにより、図１６のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は肯定となり、シーケンシャル管理書き込みに移行する。
【０１２７】  ４．図２５がシーケンシャル管理書き込みのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ７０（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。シーケンシャル管理テーブルは空なので、ステップＳＴ７１（シーケンシャル管理テーブルが空いているか）の結果は肯定であり、ガベージコレクションを行わずにシーケンシャル管理テーブルに書き込み（１）の内容を登録し、その後の諸動作を経て書き込み（１）を終了する。
【０１２８】  ５．書き込み（２）のコマンドを発行すると、再度図１５のフローチャートの処理に入る。以降、１、２と同様の動作を経て図１７のフローチャートの処理に入る。書き込み（２）は書き込み（１）と同じＬブロックユニットの書き込みのため（図３１参照）、シーケンシャル管理テーブルを参照すると、書き込み（２）を含むＬブロックユニットが登録されていることが確認できる。よって、最初の分岐のステップＳＴ１３（既にシーケンシャル管理されているＰブロックユニットか）の結果は肯定である。
【０１２９】  書き込み（２）は書き込み（１）のシーケンシャルな続きではないため、ステップＳＴ１４（シーケンシャル管理のまま追記可能か）の結果は否定である。したがって、シーケンシャル管理終了処理（ステップＳＴ１６）を行う。この処理はシーケンシャル管理されている書き込み（１）をＰページユニット管理に降格する処理である。シーケンシャル管理テーブルから書き込み（１）を含むＬブロックユニットを削除し、Ｐページユニット管理テーブルに書き込み（１）を含むＬブロックユニットを登録するが、書き込み方法３ではＰページユニット管理テーブルは満たんなので、一旦ガベージコレクションを行ってＰページユニット管理テーブルに空きを作ってからＰページユニット管理テーブルに書き込み（１）の内容を登録する。その後、最終的に否定を得て図１６に戻る。これにより、図１６のステップＳＴ１２（シーケンシャル管理の対象となる書き込みか）の結果は否定となり、図２６のＰページユニット管理書き込みに移る。
【０１３０】  ６．書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われるかどうかは実装方法に依存する。もし行われる場合は、最初の分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は肯定である。この場合、書き込み（１）と同じＰブロックユニットに対して追加で書き込みを行い、その後の諸動作を経て書き込み（１）を終了する。
【０１３１】  もし書き込み（２）が書き込み（１）と同じＰブロックユニットに対して行われない場合は、分岐のステップＳＴ８０（既にＰページユニット管理されているＰブロックユニットか）の結果は否定である。この場合、書き込み（１）によってＰページユニット管理テーブルは再度満たんになっているので、ステップＳＴ８１（Ｐページユニット管理テーブルが空いているか）の結果は否定であり、ガベージコレクション（ステップＳＴ８２）を行ってＰページユニット管理テーブルに空きを作ってから、Ｐページユニット管理テーブルに書き込み（２）の内容を登録し、その後の諸動作を経て書き込み（２）を終了する。  以上により、この手法では、制御方法により１〜２回のガベージコレクションが発生する。
【０１３２】  〔手法２〕  前処理．書き込み方法１の手法２における前処理とまったく同じである。  １．書き込み（１）は書き込み方法１の手法２における書き込み（１）とまったく同じである。
【０１３３】  ２．書き込み（２）のコマンドを発行すると、再度図１５のフローに入り、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）を判定するために図２１の判定フローチャートの処理に入る。前処理で書き込み（１）を含むＬブロックユニットをシーケンシャル管理登録コマンドテーブルに登録したため、書き込み（１）に対応するＰブロックユニットが取り出される。書き込み（１）でシーケンシャル管理テーブルへの登録を行ったため、最初の分岐のステップＳＴ３２（既にシーケンシャル管理されているＰブロックユニットか）の結果は肯定である。しかしながら、書き込み（２）は書き込み（１）の直後から始まっていないため、ステップＳＴ３６（シーケンシャル管理のまま追記可能か）の結果は否定である。したがって、否定が返却されるため、図１５のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は否定となり、コマンドは非受理となる。  以上により、この手法では、コマンドは受理されない。
【０１３４】  〔手法３〕  前処理．書き込み方法１の手法３における前処理とまったく同じである。  １．書き込み（１）は書き込み方法１の手法３における書き込み（１）とまったく同じである。
【０１３５】  ２．書き込み（２）のコマンドを発行すると、再度図１５のフローに入り、最初の分岐のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）を判定するために図２１の判定フローチャートの処理に入る。前処理で書き込み（１）を含むＬブロックユニットをシーケンシャル管理登録コマンドテーブルに登録したため、書き込み（１）に対応するＰブロックユニットが取り出される。書き込み（１）でシーケンシャル管理テーブルへの登録を行ったため、最初の分岐のステップＳＴ３２（既にシーケンシャル管理されているＰブロックユニットか）の結果は肯定である。しかしながら、書き込み（２）は書き込み（１）の直後から始まっていないため、ステップＳＴ３６（シーケンシャル管理のまま追記可能か）の結果は否定である。したがって、否定が返却されるため、図１５のステップＳＴ３（過去のシーケンシャルコマンドと整合性があるか？）の結果は否定となり、コマンドは非受理となる。  以上により、この手法では、コマンドは受理されない。
【０１３６】・書き込み方法４の場合  〔従来手法〕  従来手法は書き込み方法２の場合と全く同じである。よって、この手法では、制御方法により１〜４回のガベージコレクションが発生する。
【０１３７】  〔手法１〕  １〜３．書き込み方法１の手法１における１〜３とまったく同じである。
【０１３８】  ４．図２５がシーケンシャル管理書き込みのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ７０（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。シーケンシャル管理テーブルは満たんなので、ステップＳＴ７１（シーケンシャル管理テーブルが空いているか）の結果は否定であり、ガベージコレクション（ステップＳＴ７２）を行ってシーケンシャル管理テーブルに空きを作ってから、書き込み（１）の内容を登録し、その後の諸動作を経て書き込み（１）を終了する。  ５．以降は書き込み方法１の手法１とまったく同じである。  以上により、この手法では、１回のガベージコレクションが発生する。
【０１３９】  〔手法２〕  前処理．書き込み方法１の手法２における前処理とまったく同じである。  １〜３．書き込み方法１の手法２における１〜３とまったく同じである。
【０１４０】  ４．図２５がシーケンシャル管理書き込みのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ７０（既にシーケンシャル管理されているＰブロックユニットか）の結果は否定である。シーケンシャル管理テーブルは満たんなので、ステップＳＴ７１（シーケンシャル管理テーブルが空いているか）の結果は否定であり、ガベージコレクション（ステップＳＴ７２）を行ってシーケンシャル管理テーブルに空きを作ってから、書き込み（１）の内容を登録し、その後の諸動作を経て書き込み（１）を終了する。  ５．以降は書き込み方法１の手法１とまったく同じである。  以上により、この手法では、１回のガベージコレクションが発生する。
【０１４１】  〔手法３〕  前処理．手法３では、書き込みを行う前にシーケンシャル管理登録コマンドを用いて書き込み（１）を含むＬブロックユニットがシーケンシャル管理されることを明示する。図２２がシーケンシャル管理登録コマンドのフローである。書き込み（１）は過去に管理されたことのない新規Ｐブロックユニットへの書き込みと仮定したため、最初の分岐のステップＳＴ４２（未登録のＬブロックユニットか）の結果は肯定である。しかしながら、シーケンシャル管理テーブルは満たんなので、ステップＳＴ４４（シーケンシャル管理テーブルに空きがあるか）の結果は否定である。したがって、コマンドは非受理となる（ステップＳＴ４３）。以上により、この手法では、コマンドは受理されない。
【０１４２】  以上で図２８の全ての場合について説明した。以下、これらの効果について説明する。  書き込み方法１で従来手法を用いるとＰページユニット管理テーブルが１〜４つ消費されるのに対し、手法１〜３ではシーケンシャル管理テーブルが一時的に使用されるだけで消費はされない。管理テーブルが満たんになるとガベージコレクションを誘発するため、書き込み方法１では本手法により、従来手法と比べてガベージコレクションが抑制されていると言える。
【０１４３】  なお、シーケンシャル管理テーブル（図１２参照）は自身で完結しているが、Ｐページユニット管理テーブル（図１３参照）は、テーブルの各エントリが図１４のテーブルを伴っており、保持するためにより大きな領域を必要とする。このため、シーケンシャル管理テーブルの方がエントリ数を大きくしやすい（一例として、ｄ≧４、ｅ≧４）と仮定したが、ｅの方が大きくしやすい）。このことを鑑みても、本手法により、従来手法と比べてガベージコレクションが抑制されていることがわかる。
【０１４４】  書き込み方法２で従来手法を用いるとガベージコレクションが発生するのに対し、手法１〜３ではシーケンシャル管理テーブルが一時的に使用されるだけで消費はされず、ガベージコレクションも起こらない。このため、書き込み方法２でも本手法により、従来手法と比べてガベージコレクションが抑制されていると言える。
【０１４５】  書き込み方法３で従来手法を用いるとガベージコレクションが発生する。書き込み方法３はシーケンシャルな書き込みではないため、手法１でもガベージコレクションが発生するが、手法２〜３を用いるとコマンドを非受理にすることができる。このため、書き込み方法３でも本手法は、ガベージコレクションを抑制する手段を提供可能である。
【０１４６】  書き込み方法４で従来手法を用いるとガベージコレクションが発生する。書き込み方法４ではシーケンシャル管理テーブルが埋まっているため、手法１、２でもガベージコレクションが発生するが、その回数は従来手法以下に抑えられる。また、手法３を用いるとコマンドを非受理にすることができる。このため、書き込み方法４でも本手法は、ガベージコレクションを抑制する手段を提供していると言える。
【０１４７】＜２．その他応用について＞  書き込み方法３においては、特定のＬブロックユニットがシーケンシャル書き込みを行なっている途中であるかどうかを、図１８のシーケンシャル管理登録コマンドテーブルによって判断可能である。シーケンシャル管理登録コマンドが行われたＬブロックユニットは図１８のシーケンシャル管理登録コマンドテーブルに登録され、シーケンシャル書き込みが完了するとそのＬブロックユニットは削除コマンドによって図１８のシーケンシャル管理登録コマンドテーブルから削除されるからである。
【０１４８】  したがって、シーケンシャル書き込み中のデータ領域をホスト機器が読み出そうとした場合、「シーケンシャル書き込みが完了するまでは、書き込み内容を確定させず、シーケンシャル書き込みを行う前に元々書かれていたデータを返す」という制御が可能である。このことを用いると、シーケンシャル書き込み中のＬブロックユニットの扱いを、状況に応じて使い分けることができる。図を用いてこのことを説明する。
【０１４９】  まず、読み出し時のＬブロックユニットの扱いについて説明する。図３３は、既にデータを書き込み済のあるＬブロックユニットに対してシーケンシャル管理登録コマンドを発行し、シーケンシャル書き込み（１）、（２）を行った状況を表している。この状況で、シーケンシャル管理削除コマンドを発行せずに、同じＬブロックユニットに対して図３４の読み出し要求を行った場合を考える。
【０１５０】  このとき、読み出し要求のあったＬブロックユニットに対応するデータには、書き込み済みデータと、シーケンシャル書き込み中のデータの２種類が存在する。このため、フラッシュメモリ装置がホストに返すべきデータとしてその２種類をどのように用いるかには、任意性がある。図３５、図３６、図３７にその例を示す。
【０１５１】  図３５はシーケンシャル書き込み中のデータが存在する部分に関してはシーケンシャル書き込み中のデータを返し、それ以外の部分に関しては書き込み済みのデータを返す方法である。図３６は、シーケンシャル書き込み中のデータを無視して書き込み済みのデータを返す方法である。図３７は、シーケンシャル書き込み中のデータが存在する部分に関してはシーケンシャル書き込み中のデータを返し、それ以外の部分に関しては空白データ（０ｘＦＦ）を返す方法である。
【０１５２】  以上３種類の方法は、状況により適、不適が異なる。例えば、ファイルシステムの管理データをシーケンシャル書き込みする場合、書いたデータは常に最新であることが必要なため、シーケンシャル書き込みの完了を待たずに即座に反映されることが望ましく、図３５や図３７に示す制御が望ましい。一方で、本来一度に書かれるべき大サイズのデータを分割して書き込んでいるような状況では、分割されたデータが全て書き込まれて初めてそれらが反映されることが望ましく、図３６に示す制御が適している。
【０１５３】  次に、シーケンシャル書き込みを途中終了する場合のＬブロックユニットの扱いについて説明する。図３８のように、シーケンシャル書き込みが完了していない状況でシーケンシャル管理削除コマンドを発行する場合について考える。この場合、図２３のシーケンシャル管理削除コマンドに示されている分岐のステップＳＴ５４（最終物理ページまでデータが埋まっているか）の結果が否定となり、Ｐブロックユニット管理への昇格処理（ステップＳＴ５５）が発生する。この昇格処理で、シーケンシャル書き込み中のＬブロックユニットの内容を確定してＰブロックユニット管理とするのであるが、その際に書き込み済みデータと、シーケンシャル書き込み中のデータの２種類をどのように用いるかには、やはり任意性がある。図３９、図４０、図４１にその例を示す。
【０１５４】  図３９は、シーケンシャル書き込み中のデータが存在する部分に関してはシーケンシャル書き込み中のデータを用い、それ以外の部分に関しては書き込み済みのデータを用いて新しいＬブロックユニットを構成し、これをＰブロックユニット管理とする方法である。図４０は、シーケンシャル書き込み中のデータが存在する部分に関してはシーケンシャル書き込み中のデータを用い、それ以外の部分に関しては空白データ（０ｘＦＦ）を用いて新しいＬブロックユニットを構成し、これをＰブロックユニット管理とする方法である。図４１は、シーケンシャル書き込み中のデータを無視して、書き込み済みのデータのみで新しいＬブロックユニットを構成し、これをＰブロックユニット管理とする方法である。
【０１５５】  以上３種類の方法は、やはり状況により適、不適が異なる。例えば、シーケンシャル書き込みの途中終了後に、できるだけデータを多く残したい場合には図３９の方法が適している。大サイズのデータを分割して書き込んでいるような状況では、シーケンシャル書き込み中のＬブロックユニットに古いデータが混じると、書き込んでいた大サイズのデータと区別がつけにくくなり混乱するため、図４０の方法が適している。シーケンシャル書き込みが完了していない状況での半端なデータを一切残したくない場合には、図４１の方法が適している。
【０１５６】  以上に述べたように、シーケンシャル書き込み中のＬブロックユニットの扱いには、読み出しおよび途中終了に関して任意性があり、本開示では、そのうち一つを実装時に選択し、運用時はそれを固定的に利用することを想定していた。しかしながら、方法３においては、シーケンシャル書き込み中のＬブロックユニットの扱いを、シーケンシャル管理登録コマンドにパラメータとして与えることで、運用時に動的に制御することが可能である。図４２にその場合のシーケンシャル管理登録コマンドテーブルの構成方法を示す。
【０１５７】  図４２は図１８を拡張したものである。「シーケンシャル管理登録コマンドによって登録されたか否か」を表す列の他に、読み出しの方法と途中終了の方法を与える２つのパラメータを表す列が追加されている。シーケンシャル管理登録コマンドを実行する際に、この２種類のパラメータを指定し、シーケンシャル管理登録コマンドテーブルに登録しておくことで、読み出し時および途中終了時に図３５、図３６、図３７および図３９、図４０、図４１のうちどの制御方法を使用するか、判定することができる。
【０１５８】  この判定方法を用いると、シーケンシャル書き込み中のＬブロックユニットの扱いを、運用時に動的に制御することが可能である。例えば、ホスト機器としてビデオカメラを考え、このカメラで動画データを撮影して保存するような場合に、撮影データの部分は図３６の方法で制御し、撮影データを管理するためのファイルシステムの管理データは図３５の方法で制御するというような応用が可能となる。
【０１５９】
なお、本開示は、以下のような構成もとることができる。
（１）
不揮発性メモリ部、制御部およびインターフェースを有し、
前記制御部は、
書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込みの対象か否かを前記インターフェースを通してホスト機器に明示させ、書き込み領域の割り当て管理もホストが行い、
前記シーケンシャル管理の書き込み対象の場合に、前記消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
前記シーケンシャル管理の書き込み対象とならない場合に、前記消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ装置。
（２）
書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込み対象か否かが前記インターフェースを通してホスト機器によって明示され、書き込み領域の割り当て管理もホストが行い、
前記シーケンシャル管理の書き込み対象の場合に、前記消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
前記シーケンシャル管理の書き込み対象とならない場合に、前記消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ制御装置。
（３）
書き込み要求を受信し、書き込みサイズが消去の管理単位より小さいサイズの受信データの場合に、シーケンシャル管理の書き込み対象か否かが前記インターフェースを通してホスト機器によって明示され、書き込み領域の割り当て管理もホストが行い、
前記シーケンシャル管理の書き込み対象の場合に、前記消去の管理単位よりも小さいサイズの受信データをシーケンシャルに書き込む第１の書き込み処理を行い、
前記シーケンシャル管理の書き込み対象とならない場合に、前記消去の管理単位よりも小さいサイズの受信データを書き込みの管理単位で書き込む第２の書き込み処理を行う不揮発性メモリ制御方法。
【０１６０】＜３．変形例＞  以上、本開示の実施形態について具体的に説明したが、上述の各実施の形態に限定されるものではなく、本開示の技術的思想に基づく各種の変形が可能である。例えば、上述の実施の形態において挙げた構成、方法、工程、形状、材料および数値などはあくまでも例に過ぎず、必要に応じてこれと異なる構成、方法、工程、形状、材料および数値などを用いても良い。
【０１６１】  以上、本開示の実施の形態について、不揮発性メモリとしてフラッシュメモリを利用した場合の実施例を具体的に説明した。しかしながら、上述の不揮発性メモリはフラッシュメモリに限定されるものではなく、消去単位となるサイズが書き込み単位となるサイズ以上となるように物理アドレス空間を構成可能な全ての不揮発性メモリに適用可能である。本開示をフラッシュメモリ以外の不揮発性メモリに適用する場合、本開示におけるＰブロックユニットを適用対象となる不揮発性メモリにおける消去単位、本開示におけるＰページユニットを適用対象となる不揮発性メモリにおける書き込み単位で置き換えればよい。
【符号の説明】
【０１６２】１・・・フラッシュメモリ装置２・・・フラッシュメモリ部３・・・メモリ制御部４・・・外部インターフェース
【図１】
0005983739.tif 000002
【図２】
0005983739.tif 000003
【図３】
0005983739.tif 000004
【図４】
0005983739.tif 000005
【図５】
0005983739.tif 000006
【図６】
0005983739.tif 000007
【図７】
0005983739.tif 000008
【図８】
0005983739.tif 000009
【図９】
0005983739.tif 000010
【図１０】
0005983739.tif 000011
【図１１】
0005983739.tif 000012
【図１２】
0005983739.tif 000013
【図１３】
0005983739.tif 000014
【図１４】
0005983739.tif 000015
【図１５】
0005983739.tif 000016
【図１６】
0005983739.tif 000017
【図１７】
0005983739.tif 000018
【図１８】
0005983739.tif 000019
【図１９】
0005983739.tif 000020
【図２０】
0005983739.tif 000021
【図２１】
0005983739.tif 000022
【図２２】
0005983739.tif 000023
【図２３】
0005983739.tif 000024
【図２４】
0005983739.tif 000025
【図２５】
0005983739.tif 000026
【図２６】
0005983739.tif 000027
【図２７】
0005983739.tif 000028
【図２８】
0005983739.tif 000029
【図２９】
0005983739.tif 000030
【図３０】
0005983739.tif 000031
【図３１】
0005983739.tif 000032
【図３２】
0005983739.tif 000033
【図３３】
0005983739.tif 000034
【図３４】
0005983739.tif 000035
【図３５】
0005983739.tif 000036
【図３６】
0005983739.tif 000037
【図３７】
0005983739.tif 000038
【図３８】
0005983739.tif 000039
【図３９】
0005983739.tif 000040
【図４０】
0005983739.tif 000041
【図４１】
0005983739.tif 000042
【図４２】
0005983739.tif 000043