(57)【要約】      （修正有）【課題】フラッシュメモリに書き込み要求のデータを書き込むための処理効率を向上できるデータ記憶装置を提供する。【解決手段】書き込みデータ処理モジュール１３は、ホスト装置２３からの書き込みデータが所定サイズ未満の場合に、フラッシュメモリ２２から書き込みデータと同一のアドレスで管理されている所定サイズのデータを読み出し、バッファメモリ内で書き込みデータを含む所定サイズのデータをセットするためのマージ処理を実行する。さらに、書き込みデータ処理モジュール１３は、フラッシュメモリ２２からのデータの読み出し時または読み出し完了時に、バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、新書き込みデータをマージ対象データとしてバッファメモリ内でのマージ処理を実行する。【選択図】図１
2013061814.tif 000002
【特許請求の範囲】
【請求項１】
所定サイズのデータを書き込み単位とするフラッシュメモリと、
ホスト装置からの書き込みデータを順次格納するバッファメモリと、
前記バッファメモリに格納された前記所定サイズのデータを前記フラッシュメモリに書き込むコントローラと、
ホスト装置からの書き込みデータが前記所定サイズ未満の場合に、前記フラッシュメモリから前記書き込みデータと同一のアドレスで管理されている前記所定サイズのデータを読み出し、前記バッファメモリ内で前記書き込みデータを含む前記所定サイズのデータをセットするためのマージ処理を実行する書き込みデータ処理手段とを有し、
前記書き込みデータ処理手段は、
前記フラッシュメモリからのデータの読み出し時または読み出し完了時に、前記バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、前記新書き込みデータをマージ対象データとして前記バッファメモリ内でのマージ処理を実行するデータ記憶装置。
【請求項２】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了前に、前記新書き込みデータ前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送する前に前記バッファメモリ内でのマージ処理を先行して実行する手段と
を含む請求項１に記載のデータ記憶装置。
【請求項３】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了後に、前記新書き込みデータが前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送した後に前記バッファメモリ内でのマージ処理を実行する手段と
を含む請求項１に記載のデータ記憶装置。
【請求項４】
前記書き込みデータ処理手段は、
前記ホスト装置からの書き込みデータが前記所定サイズとしてクラスタサイズのクラスタデータであるか否かを判定し、
前記書き込みデータが前記クラスタサイズ未満の場合に、前記フラッシュメモリから前記旧書き込みデータと同一のアドレスで管理されている前記クラスタデータを読み出し、前記バッファメモリに前記穴埋め用データを転送する請求項１に記載のデータ記憶装置。
【請求項５】
前記書き込みデータ処理手段は、
前記書き込みデータを順次格納するバッファメモリのアドレスをエントリ番号で管理するバッファエントリ管理手段を含み、
前記新書き込みデータと前記旧書き込みデータのアドレス付け替え処理を実行して前記バッファメモリ内でのマージ処理を実行する請求項１から請求項４のいずれか１項に記載のデータ記憶装置。
【請求項６】
所定サイズのデータを書き込み単位とするフラッシュメモリを有するデータ記憶装置のメモリ制御装置において、
ホスト装置からの書き込みデータを順次格納するバッファメモリと、
前記バッファメモリに格納された前記所定サイズのデータを前記フラッシュメモリに書き込むコントローラと、
ホスト装置からの書き込みデータが前記所定サイズ未満の場合に、前記フラッシュメモリから前記書き込みデータと同一のアドレスで管理されている前記所定サイズのデータを読み出し、前記バッファメモリ内で前記書き込みデータを含む前記所定サイズのデータをセットするためのマージ処理を実行する書き込みデータ処理手段とを有し、
前記書き込みデータ処理手段は、
前記フラッシュメモリからのデータの読み出し時または読み出し完了時に、前記バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、前記新書き込みデータをマージ対象データとして前記バッファメモリ内でのマージ処理を実行するメモリ制御装置。
【請求項７】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了前に、前記新書き込みデータ前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送する前に前記バッファメモリ内でのマージ処理を先行して実行する手段と
を含む請求項６に記載のメモリ制御装置。
【請求項８】
前記書き込みデータ処理手段は、
前記フラッシュメモリから前記所定サイズのデータを穴埋め用データとして読み出す穴埋めリード処理手段と、
前記穴埋めリード処理手段の穴埋めリード処理の完了を判定する手段と、
前記穴埋めリード処理の完了後に、前記新書き込みデータ前記バッファメモリ内に格納された場合に、前記穴埋め用データを前記バッファメモリに転送した後に前記バッファメモリ内でのマージ処理を実行する手段と
を含む請求項６に記載のメモリ制御装置。
【請求項９】
前記書き込みデータ処理手段は、
前記書き込みデータを順次格納するバッファメモリのアドレスをエントリ番号で管理するバッファエントリ管理手段を含み、
前記新書き込みデータと前記旧書き込みデータのアドレス付け替え処理を実行して前記バッファメモリ内でのマージ処理を実行する請求項６から請求項８のいずれか１項に記載のメモリ制御装置。
【請求項１０】
所定サイズのデータを書き込み単位とするフラッシュメモリを有するデータ記憶装置に適用するメモリ制御方法であって、
ホスト装置からの書き込みデータをバッファメモリに順次格納し、
前記バッファメモリに格納された前記所定サイズのデータを前記フラッシュメモリに書き込み、
ホスト装置からの書き込みデータが前記所定サイズ未満の場合に、前記フラッシュメモリから前記書き込みデータと同一のアドレスで管理されている前記所定サイズのデータを読み出し、
前記バッファメモリ内で前記書き込みデータを含む前記所定サイズのデータをセットするためのマージ処理を実行し、
前記マージ処理は、
前記フラッシュメモリからのデータの読み出し時または読み出し完了時に、前記バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、前記新書き込みデータをマージ対象データとして前記バッファメモリ内でのマージ処理を実行するメモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを使用するデータ記憶装置、メモリ制御装置及び方法に関する。
【背景技術】
【０００２】
従来から、データ記憶装置として、書き換え可能な不揮発性メモリであるNAND型フラッシュメモリ（以下、単にフラッシュメモリと表記する場合がある）を記憶媒体とするＳＳＤ（solid state drive）が開発されている。
【０００３】
ＳＳＤでは、フラッシュメモリに対して、クラスタ（cluster）と呼ぶ論理的なアクセス単位でデータの書き込み、読み出し動作が実行される。即ち、クラスタは、フラッシュメモリに一度にアクセスできるデータサイズの単位である。通常では、１クラスタは、物理的なアクセス単位であるセクタを複数セクタ分まとめたものであり、例えば８セクタ分から構成される。以下、クラスタ単位のデータをクラスタデータと呼び、セクタ単位のデータをセクタデータと呼ぶことがある。
【０００４】
一方、ホストからは、クラスタ未満サイズのデータが書き込み要求として転送されることがある。なお、ホストからはセクタ単位のデータが転送されて、ＳＳＤのバッファメモリに格納される。ＳＳＤは、セクタデータをクラスタデータにまとめてフラッシュメモリに書き込む。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−６２３２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ホストからの書き込み要求としてクラスタ未満サイズのデータがある場合に、当該データの論理アドレスが既存の記録データ（フラッシュメモリに書き込まれたデータ）と重複するような場合がある（ＷＡＷ：Write After Write）。即ち、フラッシュメモリに書き込まれたクラスタデータの一部を書き換える動作である。この場合、いわゆるＲＭＷ（read modify write）動作と呼ぶ処理が必要となる。このため、フラッシュメモリからデータを読み出す処理、クラスタデータにまとめる処理、及びフラッシュメモリに書き込む処理などの一連の処理プロセスが発生し、フラッシュメモリに書き込み要求のデータを書き込むための処理効率の向上が課題である。
【０００７】
本発明の目的は、フラッシュメモリに書き込み要求のデータを書き込むための処理効率を向上できるデータ記憶装置を提供することにある。
【課題を解決するための手段】
【０００８】
実施形態によれば、データ記憶装置は、所定サイズのデータを書き込み単位とするフラッシュメモリと、バッファメモリと、コントローラと、書き込みデータ処理手段とを具備する。バッファメモリは、ホスト装置からの書き込みデータを順次格納する。コントローラは、前記バッファメモリに格納された前記所定サイズのデータを前記フラッシュメモリに書き込む。書き込みデータ処理手段は、ホスト装置からの書き込みデータが前記所定サイズ未満の場合に、前記フラッシュメモリから前記書き込みデータと同一のアドレスで管理されている前記所定サイズのデータを読み出し、前記バッファメモリ内で前記書き込みデータを含む前記所定サイズのデータをセットするためのマージ処理を実行する。さらに、書き込みデータ処理手段は、前記フラッシュメモリからのデータの読み出し時または読み出し完了時に、前記バッファメモリ内での旧書き込みデータと同一のアドレスで管理される新書き込みデータが存在した場合に、前記新書き込みデータをマージ対象データとして前記バッファメモリ内でのマージ処理を実行する。
【図面の簡単な説明】
【０００９】
【図１】実施形態に関するデータ記憶装置の構成を説明するためのブロック図。
【図２】実施形態に関するライトデータ処理モジュールの構成を説明するためのブロック図。
【図３】実施形態に関するＷＢＥバッファの格納情報を示す図。
【図４】実施形態に関するＷＢＥコントローラによるプロセスを説明するための図。
【図５】実施形態に関する穴埋めリード用バッファにクラスタデータ転送中のマージ処理を説明するための図。
【図６】実施形態に関するクラスタデータの転送中のマージ処理を説明するためのフローチャート。
【図７】実施形態に関する穴埋めリード用バッファにクラスタデータ転送完了時のマージ処理を説明するための図。
【図８】図５の実施形態に関する穴埋めリード処理とマージ処理との第１の関連を説明するための図。
【図９】図５の実施形態に関する穴埋めリード処理とマージ処理との第２の関連を説明するための図。
【発明を実施するための形態】
【００１０】
以下図面を参照して、実施形態を説明する。
【００１１】
［データ記憶装置の構成］
図１は、実施形態のデータ記憶装置の要部を示すブロック図である。
【００１２】
実施形態のデータ記憶装置は、NAND型フラッシュメモリ（フラッシュメモリ）を記憶媒体として使用するＳＳＤ（solid state drive）である。図１に示すように、ＳＳＤは大別して、フラッシュメモリコントローラ１０と、マイクロプロセッサ（ＣＰＵ）１９と、メモリ（ＤＲＡＭ：dynamic random access memory）２０と、ブート用ＲＯＭ（read only memory）２１と、フラッシュメモリ２２とを有する。
【００１３】
ブート用ＲＯＭ２１はＳＳＤに対して外部のホストデバイス２３からのアクセスを可能とするための起動用プログラムが格納されている。フラッシュメモリコントローラ１０は、ＣＰＵ１９からの命令に応じて、フラッシュメモリ２２とホストデバイス２３間のデータ転送を制御する。システム電源の投入後に、ブート用ＲＯＭ２１からのプログラムがＣＰＵ１９の内部メモリに転送されると、フラッシュメモリコントローラ１０はソフトウエア（ＣＰＵ１９）からの制御が可能となる。
【００１４】
フラッシュメモリコントローラ１０は、コントロールバス１１と、ホストインターフェースコントローラ（ホストＩ／Ｆコントローラ）１２と、ライトデータ処理モジュール１３と、リードデータ処理モジュール１４と、アドレス管理モジュール１５と、ＥＣＣ処理及びログ生成モジュール１６と、NANDコントローラ（以下単にコントローラ）１７と、データバス１８とを有する。
【００１５】
ホストＩ／Ｆコントローラ１２は、ホストデバイス２３との間でデータ又はコマンドの転送を制御する。ホストデバイス２３は、例えばパーソナルコンピュータとＳＳＤとを接続するインターフェース（例えば、ＳＡＴＡ（Serial ATA）規格のインターフェース）である。ライトデータ処理モジュール１３は、後述するように、ホストＩ／Ｆコントローラ１２から転送されるデータ（ライトデータ）をフラッシュメモリ２２に書き込むための処理を実行する。リードデータ処理モジュール１４は、フラッシュメモリ２２から読み出されるデータ（リードデータ）をホストＩ／Ｆコントローラ１２に転送するための処理を実行する。
【００１６】
アドレス管理モジュール１５は、論理アドレスと物理アドレス間を変換するアドレス変換テーブル（またはＬＵＴ：look up table）を有し、フラッシュメモリ２２に対する物理的な書き込み先（アドレス）を管理している。ＥＣＣ処理及びログ生成モジュール１６は、フラッシュメモリ２２からの読み出し時には、データのエラー検出訂正（ＥＣＣ：error checking and correcting）処理を実行する。また、ＥＣＣ処理及びログ生成モジュール１６は、フラッシュメモリ２２への書き込み時には、エラー訂正符号をクラスタデータに付加する。また、モジュール１６は、クラスタデータに付加する属性情報などのログを生成する。コントローラ１７は、フラッシュメモリ２２に対してクラスタデータの書き込み、または読み出しを実行する。
【００１７】
図２は、ライトデータ処理モジュール１３の要部を示すブロック図である。
【００１８】
図２に示すように、ライトデータ処理モジュール１３は、ライトバッファメモリ（ライトバッファと表記する場合がある）３０と、ＷＢＥ管理情報バッファメモリ（ＷＢＥバッファと表記する場合がある）３１と、ＷＢＥステート遷移コントローラ（ＷＢＥコントローラと表記する場合がある）３２と、キュー（Queue）管理モジュール３３と、穴埋めリード完了待ちキュー（Queue）モジュール３４と、穴埋めリード用バッファメモリ（穴埋めリード用バッファと表記する場合がある）３５とを有する。
【００１９】
ライトバッファ３０は、ホストＩ／Ｆコントローラ１２で受信したデータ（セクタ単位）を格納する。ＷＢＥバッファ３１は、ＣＰＵ１９の指定により、そのデータの格納先アドレス（ＷＢＡ）をＷＢＥ（write buffer entry）管理情報（以下、単にＷＢＥと表記する場合がある）で管理する。ＷＢＥコントローラ３２は、後述するように、ＷＢＥのステート遷移を制御する。
【００２０】
キュー（Queue）管理モジュール３３、穴埋めリード完了待ちキュー（Queue）モジュール３４、及び穴埋めリード用バッファ３５はそれぞれ、後述するように、セクタ単位のデータをクラスタ単位のデータ（クラスタデータ）にまとめる併合処理（マージ処理）を行なうための構成である。
【００２１】
［データ書き込み処理］
以下、本実施形態のフラッシュメモリコントローラ１０において、主としてライトデータ処理モジュール１３の動作によるデータ書き込み処理を説明する。
【００２２】
まず、ホストデバイス２３から転送される書き込み要求のデータ（ライトデータ）は、ホストＩ／Ｆコントローラ１２で受信されて、ライトデータ処理モジュール１３に送られる。ホストデバイス２３は、論理ブロックアドレス（ＬＢＡ）によりアクセスし、セクタ単位のライトデータを転送する。なお、１クラスタを８セクタ構成とした場合に、ＬＢＡを８で割った商がＬＣＡとなる。
【００２３】
ライトデータ処理モジュール１３は、要するに、当該セクタ単位のライトデータを他のセクタ単位のデータと併合（マージ）して、クラスタ単位のデータ（クラスタデータ）にセットし（まとめ直し）、ＥＣＣ処理及びログ生成モジュール１６及びコントローラ１７に転送する。コントローラ１７は、フラッシュメモリ２２に対して、１回のアクセスでクラスタデータを書き込む制御を実行する。
【００２４】
ここで、アドレス管理モジュール１５は、論理と物理のアドレス変換テーブル（ＬＵＴ）を有し、フラッシュメモリ２２に対する物理的な書き込み先（物理アドレス）を管理している。書き込み対象のクラスタデータは、論理アドレスとしては、論理クラスタアドレス（ＬＣＡ：Logical Cluster Address）により管理されている。ライトデータ処理モジュール１３は、受信したセクタデータ（ライトデータ）のＬＣＡを認識した時点で、アドレス管理モジュール１５に対してアドレス解決処理を要求する。
【００２５】
アドレス解決処理とは、クラスタデータにまとめる（セットする）ためのマージ元データ（併合元データ）の位置（アドレス）を求める処理である。具体的には、アドレス管理モジュール１５は、当該ライトデータに対応するＬＣＡの最新位置(端的には１世代前のクラスタデータ)がフラッシュメモリ２２上に存在する場合に、その最新位置（物理アドレス）をライトデータ処理モジュール１３に返信する（解決処理結果１）。この最新位置は、図３に示すＷＢＥバッファ３１に最新位置情報４２としてセットされる。また、アドレス管理モジュール１５は、当該ライトデータに対応するＬＣＡと同一のＬＣＡを有する別のエントリを示すＷＢＥが示された場合、後述するように、ＷＢＥ内でライトバッファ３０のアドレス（ＷＢＡ）のアドレス付け替え処理を行う（解決処理結果２）。なお、アドレス付け替え後に、未書き込み部が残った場合には、ライトデータ処理モジュール１３は、後述する解決処理結果３に応じた処理を行う。
【００２６】
ここで、ライトデータ処理モジュール１３は、書き込み要求のライトデータが未書き込みＬＣＡに対応する場合には、それを示すコードをアドレス管理モジュール１５から受信する（解決処理結果３）。この場合には、クラスタデータにまとめるためのマージ元データは存在しない。このため、ライトデータ処理モジュール１３は、ユーザ定義のデータ（ダミーデータ、例えばオール０）をマージ元データとして使用し、クラスタ単位の空き領域を埋める処理を行なう。また、ホストデバイス２３は、書き戻し処理により、当該ダミーデータを埋める処理を行なう方法でもよい。なお、本実施形態では、書き込み要求のライトデータが未書き込みＬＣＡに対応する場合の説明は省略する。
【００２７】
以下、図３と図４を参照して、本実施形態のライトデータ処理モジュール１３の処理を説明する。
【００２８】
ホストデバイス２３から転送される書き込み要求のライトデータが、クラスタサイズ未満の場合には、ライトデータ処理モジュール１３は、前述したように、アドレス管理モジュール１５からのアドレス解決処理結果に応じて、マージ処理を実行してクラスタデータにセットするための処理を行う。即ち、ライトデータ処理モジュール１３は、当該ライトデータに対応するＬＣＡの１世代前のクラスタデータがフラッシュメモリ２２上に存在する場合に、フラッシュメモリ２２から当該クラスタデータを読み出す。ライトデータ処理モジュール１３は、読み出したクラスタデータをライトバッファ３０に格納する。
【００２９】
ライトバッファ３０での格納先アドレス（ＷＢＡ：Write Buffer Address）は、ＷＢＥバッファ３１で管理される。図３は、ＷＢＥバッファ３１の格納情報を示す。図３に示すように、ＷＢＥバッファ３１は、ＷＢＥ番号（ＷＢＥ#X、ＷＢＥ#Y）毎に、ＬＣＡ領域４０、セクタ情報領域４１、最新位置情報４２、セクタバリッドフラグ（SECT-VF）とWBEステータス（WBE-Status）の領域４３、セクタ管理情報領域４４、予備管理領域（Fw管理）４５を有する。
【００３０】
ＬＣＡ領域４０は、ＬＣＡ（ＬＢＡの４８ビットを右に３ビットシフトした下位３２ビットで示す）を格納する。セクタ情報領域４１は、セクタデータのＷＢＡを示す。SECT-VFは、８セクタの中で有効なセクタデータのＷＢＡを示す。即ち、ホストデバイス２３から転送されるライトデータは、最終セクタアドレスによりセクタ数が認識される。このセクタ数に対応する有効なＷＢＡは、セクタバリッドフラグ（SECT-VF）により指示される。WBE-Statusは、図４で示す状態５０〜５５示す。セクタ管理情報領域４４は、リードコマンドやライトコマンドの種類を示す。
【００３１】
図４は、ＷＢＥコントローラ３２によるデータ処理のステート遷移の様子を示す。
【００３２】
図４に示すように、ホストＩ／Ｆコントローラ１２により、ホストデバイス２３からのデータ受信処理が開始されると、ＷＢＥコントローラ３２は、キュー管理モジュール３３のWBE invalid Queueから新規のＷＢＥを選択する。ＷＢＥコントローラ３２は、新規のＷＢＥにあるライトバッファ３０の格納先アドレスに格納していく。ＷＢＥコントローラ３２は並行して、invalidのステートにあった状態を、データ受信中のエントリ状態５０（current）に遷移させる。ＷＢＥコントローラ３２は、エントリ状態５０（current）に遷移したＷＢＥを、キュー管理モジュール３３のWBE Valid Queueにセットする。ＷＢＥコントローラ３２は、前述したように、アドレス管理モジュール１５に対してアドレス解決処理を要求し、当該アドレス解決処理結果（３は除く１、２）を受け付ける。
【００３３】
ＷＢＥコントローラ３２は、ＬＣＡが変化するまで、エントリ状態５０（current）に滞留し、ＬＣＡが変化したときにデータ受信完了後のエントリ状態５１（fresh）に遷移する。ＷＢＥコントローラ３２は、エントリ状態５１（fresh）に遷移した時点で、そのＷＢＥのセクタデータの受信状態を、ＷＢＥバッファ３１のセクタバリッドフラグ（SECT-VF）で確認する。
【００３４】
ＷＢＥコントローラ３２は、セクタデータ（ライトデータ）の受信状態に応じて、ライトバッファ３０に格納されたデータがクラスタサイズに満たない場合には、エントリ状態５３（read）に遷移する。ＷＢＥコントローラ３２は、エントリ状態５３（read）に遷移するとき、穴埋め処理（マージ処理）のためのクラスタデータのリードコマンド（穴埋めリードコマンド）を発行する。これにより、穴埋めリード用バッファ３５に格納されたデータをマージする。
【００３５】
一方、セクタデータの受信状態がクラスタサイズの場合には、クラスタデータがセットされた状態５４（ready）に遷移する。この状態５４（ready）のＷＢＥのクラスタデータは、ＥＣＣ処理及びログ生成モジュール１６及びコントローラ１７に転送される。コントローラ１７は、フラッシュメモリ２２に対して、１回のアクセスで当該クラスタデータを書き込む。
【００３６】
フラッシュメモリ２２にクラスタデータが書き込まれた後に、当該ＷＢＥの無効化が可能になると、アドレス管理モジュール１５からライトデータ処理モジュール１３に通知される。これにより、当該ＷＢＥは、キュー管理モジュール３３のWBE invalid Queueにセットされて（状態５５）、新たなＷＢＥとして再利用される。
【００３７】
次に、図５から図９を参照して、エントリ状態５３（read）において、バッファメモリ３０内でのマージ処理（併合処理）を説明する。ここで、マージ元エントリ（古いエントリ）をＷＢＥ#Xとし、マージ対象エントリ（新しいエントリ）をＷＢＥ#Yとする。
【００３８】
本実施形態は、同一ＬＣＡの１世代前のクラスタデータの穴埋めリード処理を実行しているときに、当該ライトデータに対応するＬＣＡと同一のＬＣＡを有する新たなエントリを示すＷＢＥが示された場合のマージ処理を実行する。この場合、バッファメモリ３０内において、古いエントリＷＢＥ#Xを新しいエントリＷＢＥ#Yに更新し、アドレス（ＷＢＡ）のアドレス付け替え処理を行う。
【００３９】
ライトバッファ３０内でのマージ処理は、マージ対象エントリ（新しいエントリ）の有効でないセクタデータについて、マージ元エントリ（古いエントリ）のセクタデータのバッファアドレス（ＷＢＡ）の付け替えを行うことで、エントリ（ＷＢＥ）に関連付けされたデータを論理的に入れ替える処理である。
【００４０】
図８及び図９は、図２に示す穴埋めリード完了待ちキュー（Queue）３４と、図５に示すマージ処理との関連を示す。
【００４１】
図８及び図９に示すように、穴埋めリード処理は、フラッシュメモリ２２からクラスタ単位のデータ（クラスタデータ）を穴埋めリード用バッファ３５に格納し、アドレスの付け替え処理によりライトバッファ３０のエントリ（ＷＢＥ）に関連付けることで完了する。
【００４２】
図８に示すように、アドレスの付け替え処理を実行する場合、ＷＢＥコントローラ３２は、マージ元のエントリ（古いエントリＷＢＥ#15とする）に対して穴埋めリード処理によりクラスタデータの転送が終了しているか否かをチェックする（処理９０１）。ここでは、同じＬＣＡ（１００）のマージ対象エントリ（新しいエントリ）をＷＢＥ#20として、古いエントリＷＢＥ#15に対するアドレスの付け替え処理（処理９０２）を実行する場合である。即ち、処理９０２は、ＬＣＡ（１００）を重複して受け取り、ＷＢＥ#20はＷＢＥ#15がマージ元であることを認識していることを意味します。
【００４３】
ＷＢＥコントローラ３２は、穴埋めリード完了待ちキュー３４を参照して、穴埋めリードコマンドの発行または完了のチェックを実行する。この場合、当該穴埋めリードTagIDおよびそれに対応するＷＢＥ#を消去する。穴埋めリード完了待ちキュー３４は、穴埋めリードコマンドの発行順に、穴埋めリード処理の完了を待つエントリ番号（ＷＢＥ#）を記録する。ＷＢＥコントローラ３２は、クラスタデータの転送が完了したら、穴埋めリード完了待ちキュー３４の当該穴埋めリードコマンドを消去する。
【００４４】
図８に示すように、ＷＢＥコントローラ３２は、古いエントリＷＢＥ#15に対するクラスタデータの転送が未終了であるため、先行してライトバッファ３０内でのマージ処理を実行する。但し、新しいエントリＷＢＥ#20の有効でないセクタデータについて、古いエントリＷＢＥ#15のセクタデータのバッファアドレス（ＷＢＡ）の付け替えを行うアドレスの付け替え処理（処理９０２）は、穴埋めリード用バッファ３５と古いエントリＷＢＥ#15間でのアドレス付け替え処理を同時には実行できない。
【００４５】
次に、図９に示すように、ＷＢＥコントローラ３２は、穴埋めリード完了待ちキュー３４の古いエントリＷＢＥ#15を、新しいエントリＷＢＥ#20に更新し、エントリ状態５３（read）に遷移する。即ち、ＷＢＥコントローラ３２は、穴埋めリードコマンドを発行し、新しいエントリＷＢＥ#20に対するライトバッファ３０内でのマージ処理を実行する(処理９０４)。一方、ＷＢＥコントローラ３２は、古いエントリＷＢＥ#15をキュー管理モジュール３３のWBE invalid Queueにセットし、新たなＷＢＥとして再利用する(処理９０３)。
【００４６】
さらに図５から図７を参照して、穴埋めリード処理によるクラスタデータの転送中と転送完了時とに分けて、ライトバッファ３０内でのマージ処理を説明する。
【００４７】
図５と図６は、穴埋めリード処理によりクラスタデータの転送中でのマージ処理を示す図である。ここで、図５は、図６に示すブロック１０４〜１１１の処理に対応します。
【００４８】
まず、ＷＢＥコントローラ３２は、古いエントリＷＢＥ#Xのデータ受信状態がクラスタサイズの場合には、図４に示すように、クラスタデータがセットされた状態（ready）に遷移する（ブロック１０１のＮＯ）。この場合、コントローラ１７は、フラッシュメモリ２２に対して１回のアクセスで当該クラスタデータを書き込む。
【００４９】
ＷＢＥコントローラ３２は、クラスタサイズに満たない場合には、穴埋め処理（マージ処理）のための穴埋めリードコマンドを発行し、図５に示すread状態６０に遷移する（ブロック１０２）。ここで、古いエントリＷＢＥ#X及び新しいエントリＷＢＥ#Yは、同一のＬＣＡ（Ｘ０）である。コントローラ１７は、フラッシュメモリ２２からＬＣＡ（Ｘ０）のクラスタデータを読み出し（状態６１）、穴埋めリード用バッファ３５に格納する。
【００５０】
ＷＢＥコントローラ３２は、穴埋めリード完了待ちキュー３４を参照し、マージ元のエントリ番号ＷＢＥ#Xのリードコマンドが存在すれば、当該クラスタデータが転送中と判定する（ブロック１０３のＮＯ）。この時点で、同一のＬＣＡ（Ｘ０）の新しいエントリＷＢＥ#Yのデータを受信すると（状態７０）、ＷＢＥコントローラ３２は、穴埋めリード完了待ちキュー３４を参照し、古いエントリＷＢＥ#Xの存在を確認する（ブロック１０４のＹＥＳ）。
【００５１】
ＷＢＥコントローラ３２は、古いエントリＷＢＥ#X及び新しいエントリＷＢＥ#Yのアドレス付け替え処理を実行する（ブロック１０５）。これにより、穴埋めリード完了待ちキュー３４の古いエントリＷＢＥ#Xは、新しいエントリＷＢＥ#Yに更新される（ブロック１０６）。即ち、ライトバッファ３０内では、新しいエントリＷＢＥ#Yに対するライトバッファ３０内でのマージ処理が実行される(状態６３)。但し、この間，クラスタデータの転送が完了しても、穴埋め完了処理を実行しない。
【００５２】
ＷＢＥコントローラ３２は、マージ処理完了後に、新しいエントリＷＢＥ#Yをエントリ状態６３（read）に遷移し、古いエントリＷＢＥ#Xをキュー管理モジュール３３のWBE invalid Queueにセットする（ブロック１０７、状態６４）。
【００５３】
次に、ＷＢＥコントローラ３２は、穴埋めリード完了待ちキュー３４を参照し、エントリ番号ＷＢＥ#Yのクラスタデータが転送完了であるか否かを判定する（ブロック１０８）。クラスタデータの転送完了後であれば、ＷＢＥコントローラ３２は、穴埋めリード完了待ちキュー３４を更新し、ＷＢＥ#Yを消去する（ブロック１０９）。
【００５４】
ＷＢＥコントローラ３２は、古いエントリＷＢＥ#Xの穴埋め処理を完了し、アドレス付け替え処理を実行する（ブロック１１０）。ＷＢＥコントローラ３２は、マージ処理完了後に、新しいエントリＷＢＥ#Yをクラスタデータがセットされた状態（ready）に遷移する（ブロック１１１）。
【００５５】
次に、図６と図７を参照して、穴埋めリード処理によるクラスタデータの転送完了時でのマージ処理を説明する。ここで、図７は、図６に示すブロック１１２〜１１６の処理に対応します。なお、処理１１７はＷＡＷ処理が発生しない場合である。
【００５６】
ＷＢＥコントローラ３２は、クラスタデータ転送完了を待って、穴埋めリード完了待ちキュー３４を更新し、エントリＷＢＥ#Xを消去する（ブロック１１２）。ＷＢＥコントローラ３２は、エントリＷＢＥ#Xの穴埋め処理を完了し、アドレス付け替え処理を実行する（ブロック１１３）。この時点で、同一のＬＣＡ（Ｘ０）の新しいエントリＷＢＥ#Yのデータを受信すると（状態７０）、ＷＢＥコントローラ３２は、古いエントリＷＢＥ#X及び新しいエントリＷＢＥ#Yのアドレス付け替え処理を実行する（ブロック１１４のＹＥＳ，１１５）。
【００５７】
ＷＢＥコントローラ３２は、マージ処理完了後に、新しいエントリＷＢＥ#Yをクラスタデータがセットされた状態（ready）に遷移し、古いエントリＷＢＥ#Xをキュー管理モジュール３３のWBE invalid Queueにセットする（ブロック１１６）。また、ＷＢＥコントローラ３２は、エントリＷＢＥ#Yのデータを受信しない場合、エントリＷＢＥ#Xをクラスタデータがセットされた状態（ready）に遷移する（ブロック１１７）。
【００５８】
以上のように本実施形態によれば、ホストデバイス２３から転送される書き込み要求のライトデータがクラスタサイズ未満の場合には、ライトデータ処理モジュール１３は穴埋めリード処理により、クラスタ単位のデータにセットする。このため、フラッシュメモリ２２に対して１回のアクセスで書き込むことが可能である。ここで、ホストデバイス２３からＬＣＡが重複する古いエントリＷＢＥ#Xと新しいエントリＷＢＥ#Yのライトデータが転送された場合でも、穴埋めリード処理とフラッシュメモリ２２に対する書き込み処理をそれぞれ１回で行なうことができる。従って、必要最小限のフラッシュメモリ２２に対するアクセスでクラスタデータをセットし、効率的なフラッシュメモリに対する書き込み動作を実現できる。
【００５９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６０】
１０…フラッシュメモリコントローラ、
１２…ホストインターフェースコントローラ（ホストＩ／Ｆコントローラ）、
１３…ライトデータ処理モジュール、１４…リードデータ処理モジュール、
１５…アドレス管理モジュール、１６…ＥＣＣ処理及びログ生成モジュール、
１７…NANDコントローラ、１９…マイクロプロセッサ（ＣＰＵ）、
２２…フラッシュメモリ、３０…ライトバッファメモリ、
３１…ＷＢＥ管理情報バッファメモリ、３２…ＷＢＥステート遷移コントローラ、
３３…キュー（Queue）管理モジュール、
３４…穴埋めリード完了待ちキュー（Queue）モジュール、
３５…穴埋めリード用バッファメモリ。
【図１】
2013061814.tif 000003
【図２】
2013061814.tif 000004
【図３】
2013061814.tif 000005
【図４】
2013061814.tif 000006
【図５】
2013061814.tif 000007
【図６】
2013061814.tif 000008
【図７】
2013061814.tif 000009
【図８】
2013061814.tif 000010
【図９】
2013061814.tif 000011