(57)【要約】【課題】重複排除を実現しつつ、重複排除のために必要な管理データの格納に必要なメモリリソースを節約することができるメモリシステムを実現する。【解決手段】実施形態によれば、メモリシステムは、不揮発性メモリ内の複数の第１ブロックに対応する複数の管理テーブルを管理する。各管理テーブルは対応する第１ブロック内の複数のデータに対応する複数の参照カウントを含む。メモリシステムは、ガベージコレクションのコピー元ブロック内に含まれ且つ第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第１のコピー先ブロックにコピーし、前記コピー元ブロック内に含まれ且つ前記第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第２のコピー先ブロックにコピーする。【選択図】図２１
2019057172.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、前記コントローラは、
前記不揮発性メモリ内の複数の第１ブロックに対応する複数の管理テーブルを管理し、各管理テーブルは対応する第１ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示し、
ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理する第１の変換テーブルを更新して、未使用の第１の中間アドレスを前記ライトデータの論理アドレスに関連付け、前記ライトデータを前記不揮発性メモリに書き込み、前記中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理する第２の変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを前記第１の中間アドレスに関連付け、前記ライトデータに対応する参照カウントを１に設定し、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記第１の変換テーブルを更新して、前記重複データに対応する物理アドレスを保持している前記第２の変換テーブル内のエントリを指す第２の中間アドレスを前記ライトデータの前記論理アドレスに関連付け、前記重複データに対応する参照カウントを１増やし、
前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを１減らし、
前記複数の第１ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第１の管理テーブルに基づいて、前記コピー元ブロック内に含まれ且つ第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第１のコピー先ブロックにコピーし、前記コピー元ブロック内に含まれ且つ前記第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第２のコピー先ブロックにコピーする動作を実行するように構成されている、メモリシステム。
【請求項２】
前記第１のコピー先ブロックは、第１のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられており、
前記第２のコピー先ブロックは、前記第１のビット長よりも長い第２のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられている請求項１記載のメモリシステム。
【請求項３】
前記コントローラは、
前記複数の第１ブロックを、前記第１の参照カウント範囲に属するデータの集合が集められている第１のブロック群と、前記第２の参照カウント範囲に属するデータの集合が集められている第２のブロック群とに分類し、
前記第１のブロック群については、無効データ量が第１の閾値よりも大きいという条件を満たすブロックをガベージコレクションのためのコピー元ブロックの候補として選択し、前記第２のブロック群については、無効データ量が、前記第１の閾値よりも小さい第２の閾値よりも大きいという条件を満たすブロックをガベージコレクションのためのコピー元ブロックの候補として選択するように構成されている請求項１記載のメモリシステム。
【請求項４】
前記コントローラは、前記複数の第１ブロック内の一つの第１ブロック内の第１のデータに対応する参照カウントの値が、前記ホストからの前記第１のデータに一致する第１のライトデータの受信によって、前記一つの第１ブロックに対応する管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、前記第１のデータを、前記一つの第１ブロックに対応する前記管理テーブル内の各参照カウントよりも長いビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられた別の一つの第１ブロックにコピーするように構成されている請求項１記載のメモリシステム。
【請求項５】
前記コントローラは、前記複数の第１ブロック内の一つの第１ブロック内の第１のデータに対応する参照カウントの値が、前記ホストからの前記第１のデータに一致する第１のライトデータの受信によって、前記一つの第１ブロックに対応する管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、前記一つの第１ブロックに対応する前記管理テーブルの前記参照カウント記憶領域のサイズを拡張することによって前記一つの第１ブロックに対応する前記管理テーブルの前記参照カウント記憶領域に格納可能な各参照カウントのビット長を長くするように構成されている請求項１記載のメモリシステム。
【請求項６】
前記コントローラは、前記複数の第１ブロック内の一つの第１ブロック内の第１のデータに対応する参照カウントの値が、前記ホストからの前記第１のデータに一致する第１のライトデータの受信によって、前記一つの第１ブロックに対応する管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、前記第１の変換テーブルを更新して、未使用の中間アドレスを前記第１のライトデータの論理アドレスに関連付け、前記第１のライトデータを前記複数の第１ブロック内の一つに書き込み、前記第２の変換テーブルを更新して、前記第１のライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを、前記第１のライトデータの論理アドレスに関連付けられた前記中間アドレスに関連付け、前記第１のライトデータに対応する参照カウントを１に設定するように構成されている請求項１記載のメモリシステム。
【請求項７】
前記第１のライトデータが書き込まれている前記複数の第１ブロック内の前記一つがデータで満たされた後にガベージコレクションのためのコピー元ブロックとして選択され、且つ前記第１のデータに対応する参照カウントの値が、前記最大値よりも小さい値に減少している場合、前記第１のライトデータ以外の非ゼロの参照カウントに対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーし、前記第１の変換テーブルを更新して、前記第１のデータに対応する物理アドレスを保持している前記第２の変換テーブル内のエントリを指す中間アドレスを前記第１のライトデータの前記論理アドレスに関連付け、前記第１のデータの参照カウントを１増やすように構成されている請求項６記載のメモリシステム。
【請求項８】
不揮発性メモリを制御する制御方法であって、
前記不揮発性メモリ内の複数の第１ブロックに対応する複数の管理テーブルを管理することと、各管理テーブルは対応する第１ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示し、
ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理する第１の変換テーブルを更新して、未使用の第１の中間アドレスを前記ライトデータの論理アドレスに関連付ける動作と、前記ライトデータを前記不揮発性メモリに書き込む動作と、前記中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理する第２の変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを前記第１の中間アドレスに関連付ける動作と、前記ライトデータに対応する参照カウントを１に設定する動作とを実行することと、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記第１の変換テーブルを更新して、前記重複データに対応する物理アドレスを保持している前記第２の変換テーブル内のエントリを指す第２の中間アドレスを前記ライトデータの前記論理アドレスに関連付ける動作と、前記重複データに対応する参照カウントを１増やす動作とを実行することと、
前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを１減らすことと、
前記複数の第１ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第１の管理テーブルに基づいて、前記コピー元ブロック内に含まれ且つ第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第１のコピー先ブロックにコピーし、前記コピー元ブロック内に含まれ且つ前記第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第２のコピー先ブロックにコピーする動作を実行することとを具備する制御方法。
【請求項９】
前記第１のコピー先ブロックは、第１のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられており、
前記第２のコピー先ブロックは、前記第１のビット長よりも長い第２のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられている請求項８記載の制御方法。
【請求項１０】
前記複数の第１ブロックを、前記第１の参照カウント範囲に属するデータの集合が集められている第１のブロック群と、前記第２の参照カウント範囲に属するデータの集合が集められている第２のブロック群とに分類することと、
前記第１のブロック群については、無効データ量が第１の閾値よりも大きいという条件を満たすブロックをガベージコレクションのためのコピー元ブロックの候補として選択し、前記第２のブロック群については、無効データ量が、前記第１の閾値よりも小さい第２の閾値よりも大きいという条件を満たすブロックをガベージコレクションのためのコピー元ブロックの候補として選択することとをさらに具備する請求項８記載の制御方法。
【請求項１１】
前記複数の第１ブロック内の一つの第１ブロック内の第１のデータに対応する参照カウントの値が、前記ホストからの前記第１のデータに一致する第１のライトデータの受信によって、前記一つの第１ブロックに対応する管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、前記一つの第１ブロックに対応する前記管理テーブル内の各参照カウントよりも長いビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられた別の一つの第１ブロックにコピーすることをさらに具備する請求項８記載の制御方法。
【請求項１２】
前記複数の第１ブロック内の一つの第１ブロック内の第１のデータに対応する参照カウントの値が、前記ホストからの前記第１のデータに一致する第１のライトデータの受信によって、前記一つの第１ブロックに対応する管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、前記一つの第１ブロックに対応する前記管理テーブルの前記参照カウント記憶領域のサイズを拡張することによって前記一つの第１ブロックに対応する前記管理テーブルの前記参照カウント記憶領域に格納可能な各参照カウントのビット長を長くすることをさらに具備する請求項８記載の制御方法。
【請求項１３】
前記複数の第１ブロック内の一つの第１ブロック内の第１のデータに対応する参照カウントの値が、前記ホストからの前記第１のデータに一致する第１のライトデータの受信によって、前記一つの第１ブロックに対応する管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、前記第１の変換テーブルを更新して、未使用の中間アドレスを前記第１のライトデータの論理アドレスに関連付ける動作と、前記第１のライトデータを前記複数の第１ブロック内の一つに書き込む動作と、前記第２の変換テーブルを更新して、前記第１のライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを、前記第１のライトデータの論理アドレスに関連付けられた前記中間アドレスに関連付ける動作と、前記第１のライトデータに対応する参照カウントを１に設定する動作とを実行することをさらに具備する請求項８記載の制御方法。
【請求項１４】
前記第１のライトデータが書き込まれている前記複数の第１ブロック内の前記一つがデータで満たされた後にガベージコレクションのためのコピー元ブロックとして選択され、且つ前記第１のデータに対応する参照カウントの値が、前記最大値よりも小さい値に減少している場合、前記第１のライトデータ以外の非ゼロの参照カウントに対応するデータのみを前記コピー元ブロックからコピー先ブロックにコピーする動作と、前記第１の変換テーブルを更新して、前記第１のデータに対応する物理アドレスを保持している前記第２の変換テーブル内のエントリを指す中間アドレスを前記第１のライトデータの前記論理アドレスに関連付ける動作と、前記第１のデータの参照カウントを１増やす動作とを実行することをさらに具備する請求項１３記載の制御方法。
【請求項１５】
不揮発性メモリと、
前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備し、前記コントローラは、
前記不揮発性メモリ内の複数の第１ブロックに対応する複数の管理テーブルを管理し、各管理テーブルは対応する第１ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示し、
ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、前記ライトデータを前記不揮発性メモリに書き込み、中間アドレスそれぞれと前記不揮発性メモリの物理アドレスそれぞれとの対応関係を管理する中間−物理アドレス変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを、前記ライトデータの論理アドレスに付与された第１の中間アドレスに関連付け、前記ライトデータに対応する参照カウントを１に設定し、
前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記重複データに付与されている第２の中間アドレスを前記ライトデータの前記論理アドレスに関連付け、前記重複データに対応する参照カウントを１増やし、
前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを１減らし、
第１の参照カウント範囲に属する参照カウントにそれぞれ対応する第１のデータ集合を前記複数の第１ブロック内の一つ以上の第１ブロックに集め、前記第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応する第２のデータ集合を前記複数の第１ブロック内の一つ以上の別の第１ブロックに集める動作を実行するように構成されている、メモリシステム。
【請求項１６】
前記コントローラは、前記複数の第１ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第１の管理テーブルに基づいて、前記コピー元ブロック内に含まれ且つ前記第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第１のコピー先ブロックにコピーして前記第１のデータ集合を前記一つ以上の第１ブロックに集め、前記コピー元ブロック内に含まれ且つ前記第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第２のコピー先ブロックにコピーして前記第２のデータ集合を前記一つ以上の別の第１ブロックに集める請求項１５記載のメモリシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、不揮発性メモリを制御する技術に関する。
【背景技術】
【０００２】
近年、不揮発性メモリを備えるメモリシステムが広く普及している。
【０００３】
このようなメモリシステムの一つとして、ＮＡＮＤ型フラッシュメモリを備えるソリッドステートドライブ（ＳＳＤ）が知られている。ＳＳＤは、様々なコンピューティングデバイスのメインストレージとして使用されている。
【０００４】
ところで、最近では、大量のデータを効率よくストレージに保存することが要求されている。
【０００５】
ストレージ効率を改善するための技術としては、重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）が知られている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１６−１２６６３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、従来の重複排除技術では、重複排除のために必要な管理データの格納に必要なメモリリソースを節約する技術ついては考慮されていない。
【０００８】
本発明が解決しようとする課題は、重複排除を実現しつつ、重複排除のために必要な管理データの格納に必要なメモリリソースを節約することができるメモリシステムおよび制御方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、ホストに接続可能なメモリシステムは、不揮発性メモリと、前記不揮発性メモリに電気的に接続され、前記不揮発性メモリを制御するコントローラとを具備する。前記コントローラは、前記不揮発性メモリ内の複数の第１ブロックに対応する複数の管理テーブルを管理する。各管理テーブルは対応する第１ブロック内の複数のデータに対応する複数の参照カウントを含み、各参照カウントは対応するデータを参照している論理アドレスの数を示す。前記コントローラは、ホストから受信されるライトデータと一致する重複データが前記不揮発性メモリに存在していない場合、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理する第１の変換テーブルを更新して、未使用の第１の中間アドレスを前記ライトデータの論理アドレスに関連付け、前記ライトデータを前記不揮発性メモリに書き込み、前記中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理する第２の変換テーブルを更新して、前記ライトデータが書き込まれた前記不揮発性メモリ内の位置を示す物理アドレスを前記第１の中間アドレスに関連付け、前記ライトデータに対応する参照カウントを１に設定する。前記コントローラは、前記ライトデータと一致する前記重複データが前記不揮発性メモリに既に存在している場合、前記ライトデータを前記不揮発性メモリに書き込まずに、前記第１の変換テーブルを更新して、前記重複データに対応する物理アドレスを保持している前記第２の変換テーブル内のエントリを指す第２の中間アドレスを前記ライトデータの前記論理アドレスに関連付け、前記重複データに対応する参照カウントを１増やす。前記コントローラは、前記ライトデータが前記不揮発性メモリに既に書き込まれているデータの更新データである場合、前記既に書き込まれているデータに対応する参照カウントを１減らす。前記コントローラは、前記複数の第１ブロックの一つがガベージコレクションのコピー元ブロックとして選択された場合、前記コピー元ブロックに対応する前記複数の管理テーブル内の第１の管理テーブルに基づいて、前記コピー元ブロック内に含まれ且つ第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第１のコピー先ブロックにコピーし、前記コピー元ブロック内に含まれ且つ前記第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第２のコピー先ブロックにコピーする動作を実行する。
【図面の簡単な説明】
【００１０】
【図１】実施形態に係るメモリシステムの構成例を示すブロック図。
【図２】同実施形態のメモリシステムに設けられる不揮発性メモリの構成例を示すブロック図。
【図３】同実施形態のメモリシステムにおいて使用される複数のチャンネルと複数のＮＡＮＤ型フラッシュメモリチップとの関係を示すブロック図。
【図４】同実施形態のメモリシステムにおいて使用される、あるスーパーブロックの構成例を示す図。
【図５】同実施形態のメモリシステムによって管理されるルックアップテーブルと中間ルックアップテーブルとの関係を示すブロック図。
【図６】同実施形態のメモリシステムによって管理される２つのルックアップテーブルと中間ルックアップテーブルとの関係を示すブロック図。
【図７】同実施形態のメモリシステムにおけるアドレス参照構造を説明するためのブロック図。
【図８】同実施形態のメモリシステムによって管理されるスーパーブロック管理テーブルの構成例を示すブロック図。
【図９】同実施形態のメモリシステムによって管理される中間ルックアップテーブル（ｉＬＵＴ）の構成例を示すブロック図。
【図１０】同実施形態のメモリシステムによって管理されるルックアップテーブル（ＬＵＴ）の構成例を示すブロック図。
【図１１】同実施形態のメモリシステムによって管理されるハッシュルックアップテーブル（ＨＡＳＨ  ＬＵＴ）の構成例を示すブロック図。
【図１２】同実施形態のメモリシステムによって実行されるアドレス変換動作を説明するためのブロック図。
【図１３】同実施形態のメモリシステムによって実行されるデータ読み出し動作を説明するための図。
【図１４】同実施形態のメモリシステムによって実行されるユーザデータ管理のための構造を示すブロック図。
【図１５】同実施形態のメモリシステムによって実行されるガベージコレクション動作の一部を示す図。
【図１６】同実施形態のメモリシステムによって実行されるガベージコレクション動作の残り部を示す図。
【図１７】同実施形態のメモリシステムによって実行されるデータ書き込み動作の手順を示すフローチャート。
【図１８】同実施形態のメモリシステムによって実行されるガベージコレクション動作の手順を示すフローチャート。
【図１９】同実施形態のメモリシステムによって実行されるデータリード動作の手順を示すフローチャート。
【図２０】同実施形態のメモリシステムによって管理される各スーパーブロック管理テーブル内の参照カウント記憶領域部の構成例を示す図。
【図２１】同実施形態のメモリシステムによって実行される、大きい参照カウントに対応するデータと小さい参照カウントに対応するデータとを分離するガベージコレクション動作の概要を示す図。
【図２２】同実施形態のメモリシステムによって実行されるガベージコレクション動作に含まれるデータコピー動作と参照カウントコピー動作とを示す図。
【図２３】あるデータに対応する参照カウントがオーバーフローした場合に同実施形態のメモリシステムによって実行されるデータコピー動作の一部を示す図。
【図２４】あるデータに対応する参照カウントがオーバーフローした場合に同実施形態のメモリシステムによって実行されるデータコピー動作の残り部を示す図。
【図２５】あるデータに対応する参照カウントがオーバーフローした場合に同実施形態のメモリシステムによって実行される参照カウント記憶領域拡張動作を示す図。
【図２６】同実施形態のメモリシステムに適用されるガレージコレクション対象ブロック（コピー元ブロック）候補の選択条件を説明するための図。
【図２７】同実施形態のメモリシステムによって実行されるコピー元ブロック候補選択動作を示す図。
【図２８】同実施形態のメモリシステムによって実行されるコピー元ブロック候補選択動作の手順を示すフローチャート。
【図２９】同実施形態のメモリシステムによってスーパーブロック内の各ページに書き込まれるユーザデータと中間アドレス（ｉＬＢＡ）との関係を示す図。
【図３０】あるデータに対応する参照カウントがオーバーフローした場合に同実施形態のメモリシステムによって実行されるデータ書き込み動作を示す図。
【図３１】ガベージコレクション動作中に同実施形態のメモリシステムによって実行される重複排除動作の一部を示す図。
【図３２】ガベージコレクション動作中に同実施形態のメモリシステムによって実行される重複排除動作の残りの一部を示す図。
【図３３】ガベージコレクション動作中の重複排除動作において同実施形態のメモリシステムによって実行される参照カウントコピー動作を示す図。
【図３４】ガベージコレクション動作中の重複排除動作において同実施形態のメモリシステムによって実行される中間ルックアップテーブル（ｉＬＵＴ）更新動作を示す図。
【図３５】大きな参照カウントを有するデータと小さな参照カウントを有するデータを分離するためのＧＣ動作の手順を示すフローチャート。
【図３６】あるデータに対応する参照カウントがオーバーフローする時に実行される重複データコピー処理の手順を示すフローチャート。
【図３７】あるデータに対応する参照カウントがオーバーフローする時に実行される参照カウント記憶領域拡張処理の手順を示すフローチャート。
【図３８】あるデータに対応する参照カウントがオーバーフローする時に実行されるデータ書き込み処理の手順を示すフローチャート。
【図３９】論理アドレスから物理アドレスを直接参照するアドレス参照経路と、中間アドレスを介して論理アドレスから物理アドレスを参照するアドレス参照経路とが混在するアドレス参照構造を説明するための図。
【図４０】すべてのデータに関して中間アドレスを介して論理アドレスから物理アドレスを参照するアドレス参照構造を説明するための図。
【図４１】図４０のアドレス参照構造において使用されるルックアップテーブルの構成例を示す図。
【図４２】ホストの構成例を示すブロック図。
【図４３】ホストと同実施形態のメモリシステムとを含むコンピュータの構成例を示す図。
【発明を実施するための形態】
【００１１】
以下、図面を参照して、実施形態を説明する。  
【００１２】
まず、図１を参照して、実施形態に係るメモリシステムを含む情報処理システム１の構成を説明する。
【００１３】
このメモリシステムは、不揮発性メモリにデータを書き込み、不揮発性メモリからデータを読み込むように構成された半導体ストレージデバイスである。このメモリシステムは、例えば、ＮＡＮＤ型フラッシュメモリを備えたソリッドステートドライブ（ＳＳＤ）３として実現されている。
【００１４】
情報処理システム１は、ホスト（ホストデバイス）２と、ＳＳＤ３とを含む。ホスト２は、サーバ、パーソナルコンピュータのような情報処理装置（コンピューティングデバイス）である。ホスト２がサーバによって実現されるケースにおいては、このホスト（サーバ）２は、ネットワーク５０を介して複数のエンドユーザ端末（クライアント）９０に接続されてもよい。ホスト２は、これらエンドユーザ端末９０に対して様々なサービスを提供することができる。
【００１５】
ホスト（サーバ）２によって提供可能なサービスには、複数のエンドユーザ端末（クライアント）９０に仮想デスクトップ環境を提供するサービスが含まれてもよい。この場合、ホスト（サーバ）２は、仮想デスクトップ基盤（ＶＤＩ）を使用して仮想デスクトップ環境を提供するように構成されたＶＤＩサーバとして機能してもよい。ＶＤＩサーバとして機能するホスト（サーバ）２においては、複数のエンドユーザ端末（クライアント）９０にそれぞれ対応する複数の仮想マシンが実行されてもよい。これら仮想マシンの各々は、ＯＳ（仮想デスクトップＯＳ）と、ＯＳ（仮想デスクトップＯＳ）上で実行されるアプリケーションプログラムを含む。これら仮想マシンに対応する複数のＯＳ／アプリケーションプログラムは、ＳＳＤ３に格納され得る。
【００１６】
ＳＳＤ３は、ホスト２として機能する情報処理装置のメインストレージとして使用され得る。ＳＳＤ３は、この情報処理装置に内蔵されてもよいし、この情報処理装置にケーブルまたはネットワークを介して接続されてもよい。
【００１７】
ホスト２とＳＳＤ３とを相互接続するためのインタフェースとしては、ＳＣＳＩ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）、ＡＴＡ、Ｓｅｒｉａｌ  ＡＴＡ（ＳＡＴＡ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）、Ｅｔｈｅｒｎｅｔ（登録商標）、Ｆｉｂｒｅ  ｃｈａｎｎｅｌ、ＮＶＭ  Ｅｘｐｒｅｓｓ（ＮＶＭｅ）（登録商標）等を使用し得る。
【００１８】
ＳＳＤ３は、コントローラ４および不揮発性メモリ（ＮＡＮＤ型フラッシュメモリ）５を備える。ＳＳＤ３は、ランダムアクセスメモリ、例えば、ＤＲＡＭ６も備えていてもよい。
【００１９】
ＮＡＮＤ型フラッシュメモリ５は、マトリクス状に配置された複数のメモリセルを含むメモリセルアレイを含む。ＮＡＮＤ型フラッシュメモリ５は、２次元構造のＮＡＮＤ型フラッシュメモリであってもよいし、３次元構造のＮＡＮＤ型フラッシュメモリであってもよい。ＮＡＮＤ型フラッシュメモリ５内の領域（記憶領域）は、ユーザデータ領域７と管理領域８とを含む。ユーザデータ領域７は、ホスト２からのデータ（ユーザデータ）を格納するための領域である。管理領域８は、ＳＳＤ３の動作を管理するための管理情報を格納するための領域である。
【００２０】
ＮＡＮＤ型フラッシュメモリ５のメモリセルアレイは、図２に示されているように、複数の物理ブロックＢＬＫ〜ＢＬＫｍ−１を含む。物理ブロックＢＬＫ０〜ＢＬＫｍ−１の各々は多数のページ（ここではページＰ０〜Ｐｎ−１）によって編成される。物理ブロックＢＬＫ０〜ＢＬＫｍ−１は、アドレス指定可能な最小の消去単位として機能する。物理ブロックは、「消去ブロック」、「物理消去ブロック」、または単に「ブロック」と称されることもある。ページＰ０〜Ｐｎ−１の各々は、同一ワード線に接続された複数のメモリセルを含む。ページＰ０〜Ｐｎ−１は、データ書き込み動作およびデータ読み込み動作の単位である。
【００２１】
物理ブロックＢ０〜Ｂｍ−１は限られた消去回数を有している。消去回数は、プログラム／消去サイクル（Ｐｒｏｇｒａｍ／Ｅｒａｓｅ  ｃｙｃｌｅｓ）の数によって表されてもよい。ある物理ブロックの一つのプログラム／消去サイクル（Ｐｒｏｇｒａｍ／Ｅｒａｓｅ  ｃｙｃｌｅｓ）は、この物理ブロック内の全てのメモリセルを消去状態にするための消去動作と、この物理ブロックのページそれぞれにデータを書き込む書き込み動作（プログラム動作）とを含む。物理ブロックＢ０〜Ｂｍ−１は限られた消去回数（限られたプログラム／消去サイクル）を有しているので、物理ブロックＢ０〜Ｂｍ−１のプログラム／消去サイクルをできるだけ均一化することが好ましい。
【００２２】
本実施形態では、図１のコントローラ４は、１以上の物理ブロックを各々が含む複数の第１ブロックを管理し、第１ブロックの単位で消去動作を実行する。したがって、第１ブロックは、実際上、消去単位として機能する。以下、第１ブロックはスーパーブロックとして参照される。なお、スーパーブロックは論理ブロックと称されることもある。
【００２３】
コントローラ４は、Ｔｏｇｇｌｅ、Ｏｐｅｎ  ＮＡＮＤ  Ｆｌａｓｈ  Ｉｎｔｅｒｆａｃｅ（ＯＮＦＩ）のようなＮＡＮＤインタフェース１３を介して、不揮発性メモリであるＮＡＮＤ型フラッシュメモリ５に電気的に接続されている。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５を制御するメモリコントローラ（制御回路）である。このコントローラ４は、システム・オン・ア・チップ（ＳｏＣ）のようなワンチップＬＳＩによって実現されていてもよい。
【００２４】
ＮＡＮＤ型フラッシュメモリ５は、図３に示すように、複数のＮＡＮＤ型フラッシュメモリチップ（ＮＡＮＤ型フラッシュメモリダイ）を含む。個々のＮＡＮＤ型フラッシュメモリチップは独立して動作可能である。このため、ＮＡＮＤ型フラッシュメモリチップは、並列動作可能な単位として機能する。図３においては、ＮＡＮＤインタフェース１３に１６個のチャンネルＣｈ．１〜Ｃｈ．１６が接続されており、１６個のチャンネルＣｈ．１〜Ｃｈ．１６の各々に２つのＮＡＮＤ型フラッシュメモリチップが接続されている場合が例示されている。この場合、チャンネルＣｈ．１〜Ｃｈ．１６に接続された１６個のＮＡＮＤ型フラッシュメモリチップ＃１〜＃１６がバンク＃０として編成されてもよく、またチャンネルＣｈ．１〜Ｃｈ．１６に接続された残りの１６個のＮＡＮＤ型フラッシュメモリチップ＃１７〜＃３２がバンク＃１として編成されてもよい。バンクは、複数のメモリモジュールをバンクインタリーブによって並列動作させるための単位として機能する。図３の構成例においては、１６チャンネルと、２つのバンクを使用したバンクインタリーブとによって、最大３２個のＮＡＮＤ型フラッシュメモリチップを並列動作させることができる。
【００２５】
一つのスーパーブロックは、これに限定されないが、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２から一つずつ選択される計３２個の物理ブロックを含んでいてもよい。なお、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々はマルチプレーン構成を有していてもよい。例えば、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２の各々が、２つのプレーンを含むマルチプレーン構成を有する場合には、一つのスーパーブロックは、ＮＡＮＤ型フラッシュメモリチップ＃１〜＃３２に対応する６４個のプレーンから一つずつ選択される計６４個の物理ブロックを含んでいてもよい。
【００２６】
図４には、３２個の物理ブロック（ここでは、ＮＡＮＤ型フラッシュメモリチップ＃１内の物理ブロックＢＬＫ２、ＮＡＮＤ型フラッシュメモリチップ＃２内の物理ブロックＢＬＫ３、ＮＡＮＤ型フラッシュメモリチップ＃３内の物理ブロックＢＬＫ７、ＮＡＮＤ型フラッシュメモリチップ＃４内の物理ブロックＢＬＫ４、ＮＡＮＤ型フラッシュメモリチップ＃５内の物理ブロックＢＬＫ６、…ＮＡＮＤ型フラッシュメモリチップ＃３２内の物理ブロックＢＬＫ３）を含む一つのスーパーブロック（ＳＢ）が例示されている。
【００２７】
なお、一つのスーパーブロックが一つの物理ブロックのみを含む構成が利用されてもよく、この場合には、一つのスーパーブロックは一つの物理ブロックと等価である。
【００２８】
上述したように、コントローラ４は、スーパーブロックの単位で消去動作を実行する。したがって、同一のスーパーブロックに含まれるこれら３２個の物理ブロックの消去動作は並列に実行される。
【００２９】
また、このスーパーブロックへのデータ書き込みにおいては、コントローラ４は、ＮＡＮＤ型フラッシュメモリチップ＃１内の物理ブロックＢＬＫ２のページ０、ＮＡＮＤ型フラッシュメモリチップ＃２内の物理ブロックＢＬＫ３のページ０、ＮＡＮＤ型フラッシュメモリチップ＃３内の物理ブロックＢＬＫ７のページ０、ＮＡＮＤ型フラッシュメモリチップ＃４内の物理ブロックＢＬＫ４のページ０、ＮＡＮＤ型フラッシュメモリチップ＃５内の物理ブロックＢＬＫ６のページ０、…ＮＡＮＤ型フラッシュメモリチップ＃３２内の物理ブロックＢＬＫ３のページ０という順序でデータを書き込んでもよい。これにより、最大３２ページへのデータ書き込みを並列に実行することができる。また、このスーパーブロックからのデータリードにおいても、最大で３２ページからのデータリードを並列に実行することができる。
【００３０】
次に、図１のコントローラ４の構成について説明する。
【００３１】
コントローラ４は、複数のチャンネル（例えば１６個のチャンネル）を介して複数のＮＡＮＤ型フラッシュメモリチップに電気的に接続される。コントローラ４は、ＮＡＮＤ型フラッシュメモリ５（複数のＮＡＮＤ型フラッシュメモリチップ）を制御する。
【００３２】
コントローラ４は、ＮＡＮＤ型フラッシュメモリ５のデータ管理およびブロック管理を実行するように構成されたフラッシュトランスレーション層（ＦＴＬ）として機能してもよい。このＦＴＬによって実行されるデータ管理には、（１）論理アドレスそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの間の対応関係を示すマッピング情報の管理、（２）ページ単位のリード／ライトとブロック単位（スーパーブロック単位）の消去動作とを隠蔽するための処理、等が含まれる。論理アドレスは、ＳＳＤ３をアドレス指定するためにホストによって使用されるアドレスである。この論理アドレスとしては、ＬＢＡ（logical block address(addressing)）が使用され得る。
【００３３】
通常のＳＳＤにおいて、論理アドレスそれぞれと物理アドレスそれぞれとの間の対応関係（マッピング）の管理は、論理−物理アドレス変換テーブルとして機能するルックアップテーブルのみを用いて実行される。ある論理アドレスに対応する物理アドレスは、この論理アドレスのデータがライトされたＮＡＮＤ型フラッシュメモリ内の最新の位置（最新の物理記憶位置）を示す。
【００３４】
本実施形態においては、ガベージコレクションの効率を維持しつつＳＳＤ３内部で重複排除（Ｄｅ−ｄｕｐｌｉｃａｔｉｏｎ）のための動作を実行できるようにするために新たなアドレス参照経路が利用される。
【００３５】
この新たなアドレス参照経路は、論理アドレスから物理アドレスを直接参照するのではなく、中間アドレスを介して論理アドレスから物理アドレスを参照する。論理アドレスそれぞれと中間アドレスそれぞれとの対応関係は、論理−中間アドレス変換テーブル（第１の変換テーブル）として機能するルックアップテーブル（ＬＵＴ）３２によって管理される。中間アドレスそれぞれと物理アドレスそれぞれとの対応関係は、中間−物理アドレス変換テーブル（第２の変換テーブル）として機能する中間ルックアップテーブル（ｉＬＵＴ）３４によって管理される。
【００３６】
本実施形態においては、ホスト２から新たに受信されたライトデータ（ユーザデータ）と一致するデータ（「重複データ」として参照される）が既にＮＡＮＤ型フラッシュメモリ５に格納されている場合、コントローラ４は、このライトデータをＮＡＮＤ型フラッシュメモリ５に書き込まない。代わりに、コントローラ４は、論理−中間アドレス変換テーブル（ＬＵＴ）３２を更新して、重複データに既に関連付けられている中間アドレス、つまり重複データに対応する物理アドレスを保持している中間−物理アドレス変換テーブル（ｉＬＵＴ）３４内のエントリを指す特定の中間アドレスを、このライトデータの論理アドレスに関連付けられる。
【００３７】
これにより、重複データの論理アドレスおよびライトデータの論理アドレスを含む２つの論理アドレスから同一の中間アドレスを参照でき、この同一の中間アドレスから、重複データが格納されている物理記憶位置の物理アドレスを参照することができる。この結果、重複データの論理アドレスおよびライトデータの論理アドレスの双方からこの重複データを参照することが可能となり、ストレージ効率を高めることができる。
【００３８】
上述の説明から理解されるように、本実施形態では、論理−中間アドレス変換テーブル（ＬＵＴ）３２と中間−物理アドレス変換テーブル（ｉＬＵＴ）３４とを使用して２レベルのアドレス変換が実行される。論理−中間アドレス変換テーブル（ＬＵＴ）３２においては、既に存在するあるデータに一致するライトデータの論理アドレスには、既に存在するデータの中間アドレスと同じ中間アドレスが関連付けられる。したがって、中間−物理アドレス変換テーブル（ｉＬＵＴ）３４においては、あるデータを参照している論理アドレスの数にかかわらず、各物理アドレスは一つの中間アドレスのみに関連付けられている。
【００３９】
よって、複数の論理アドレスから参照されているデータ（重複データ）がガベージコレクションによって別のスーパーブロックにコピーされたケースにおいては、コントローラ４は、この一つの中間アドレスに対応する中間−物理アドレス変換テーブル（ｉＬＵＴ）３４内の一つのエントリのみをコピー先物理アドレスに更新するという動作を行うだけで、これら複数の論理アドレスからこのコピー先物理アドレスを正しく参照できることを保証することができる。
【００４０】
さらに、コントローラ４は、ユーザデータ領域７内の複数のスーパーブロック（ＳＢ）１００−０、１００−１、…１００−ｉにそれぞれ対応する複数のスーパーブロック（ＳＢ）管理テーブル２００−０、２００−１、…２００−ｉを管理する。
【００４１】
これらＳＢ管理テーブル２００−０、２００−１、…２００−ｉの各々は、対応するスーパーブロックに保持されている複数のデータを管理するためのブロック管理情報である。
【００４２】
各ＳＢ管理テーブルは、対応するスーパーブロック内の複数のデータに対応する複数の参照カウントを含む。各ＳＢ管理テーブルにおいては、これら参照カウントは、対応するスーパーブロックの物理アドレスの並び順と同じ順序で配置されている。各参照カウントは、対応するデータ（つまりスーパーブロック内の対応する位置（物理記憶位置）を参照している論理アドレスの数を示す。
【００４３】
例えば、もしあるデータが１つの論理アドレスのみによって参照されているならば、つまり、もしこのデータが格納されている物理記憶位置の物理アドレスに関連付けられた中間アドレスが１つの論理アドレスのみによって独占的に使用されているならば、このデータに対応する参照カウントは１である。
【００４４】
もしあるデータが２つの論理アドレスによって参照されているならば、つまり、もしこのデータが格納されている物理記憶位置の物理アドレスに関連付けられた中間アドレスが２つの論理アドレスによって共有されているならば、このデータに対応する参照カウントは２である。
【００４５】
もしあるデータが３つの論理アドレスによって参照されているならば、つまり、もしこのデータが格納されている物理記憶位置の物理アドレスに関連付けられた中間アドレスが３つの論理アドレスによって共有されているならば、このデータに対応する参照カウントは３である。
【００４６】
コントローラ４は、ＳＢ管理テーブル２００−０、２００−１、…２００−ｉの各々を使用して、各スーパーブロック内の複数のデータに対応する複数の参照カウントを管理する。これらＳＢ管理テーブル２００−０、２００−１、…２００−ｉは、ＳＳＤ３がパワーオンされた時にＮＡＮＤ型フラッシュメモリ５内の管理領域８からＤＲＡＭ６にロードされてもよい。
【００４７】
ＮＡＮＤ型フラッシュメモリ５内の管理領域８においては、他の様々な管理情報、例えば、論理−中間アドレス変換テーブル（ＬＵＴ）３２、ハッシュＬＵＴ３３、および中間−物理アドレス変換テーブル（ｉＬＵＴ）３４も格納されている。これら論理−中間アドレス変換テーブル（ＬＵＴ）３２、ハッシュＬＵＴ３３、および中間−物理アドレス変換テーブル（ｉＬＵＴ）３４も、ＳＳＤ３がパワーオンされた時にＮＡＮＤ型フラッシュメモリ５内の管理領域８からＤＲＡＭ６にロードされてもよい。
【００４８】
通常、ＮＡＮＤ型フラッシュメモリ５においては、ページへのデータ書き込みは、１消去サイクル当たり１回のみ可能である。
【００４９】
このため、コントローラ４は、ある論理アドレスに対応する更新データを、この論理アドレスに対応する以前のデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）ではなく、ＮＡＮＤ型フラッシュメモリ５内の別の位置に書き込む。そして、コントローラ４は、中間−物理アドレス変換テーブル（ｉＬＵＴ）３４を更新して、この別の物理記憶位置の物理アドレスを、この論理アドレスに対応する中間アドレスに関連付ける。
【００５０】
ブロック管理には、バッドブロックの管理と、ウェアレベリングと、ガベージコレクション等が含まれる。ウェアレベリングは、物理ブロックそれぞれの消耗を均一化するための動作である。ガベージコレクションは、データを書き込むことが可能なフリーブロック（フリースーパーブロック）の個数を増やすため、有効データと無効データとが混在する幾つかのコピー元ブロック（コピー元スーパーブロック）内の有効データをコピー先ブロック（コピー先スーパーブロック）にコピーする。ここで、有効データとは、論理アドレスから最新のデータとして紐付けられているデータ、つまり後にホスト２からリードされる可能性があるデータを意味する。無効データとは、もはやホスト２からリードされる可能性が無いデータを意味する。
【００５１】
本実施形態では、スーパーブロック（ＳＢ）１００−０、１００−１、…１００−ｉの各々に含まれる全てのユーザデータの参照カウントは、各スーパーブロックに対応するＳＢ管理テーブルに格納されている。換言すれば、コントローラ４は、各スーパーブロックに対応するＳＢ管理テーブルを使用して、各スーパーブロック内の複数のデータに対応する複数の参照カウントを管理する。したがって、コントローラ４は、ガベージコレクションのためのコピー元ブロックに対応するＳＢ管理テーブル内の参照カウント群のみに基づいて、ガベージコレクションのためのデータコピー動作を実行することができる。すなわち、コントローラ４は、ゼロの参照カウントに対応するデータをコピーせず、非ゼロの参照カウントに対応するデータのみをガベージコレクション対象スーパーブロック（ガベージコレクションのコピー元ブロック）からコピー先ブロックにコピーする。ガベージコレクション対象スーパーブロック（ガベージコレクションのコピー元ブロック）は、ＧＣソーススーパーブロックとしても参照される。また、コピー先ブロックは、ＧＣディスティネーションスーパーブロックとしても参照される。つまり、ゼロの参照カウントに対応するデータはどの論理アドレスからも参照されてないので、無効データとして扱われる。非ゼロの参照カウントに対応するデータは１以上の論理アドレスから参照されているので、有効データとして扱われる。非ゼロの参照カウントに対応するデータがコピー先ブロックに移動されることによってもはや非ゼロの参照カウントに対応するデータが存在しなくなったコピー元ブロックは、フリーブロック（フリースーパーブロック）として解放される。これによって、このフリースーパーブロックはその消去動作が実行された後に再利用することが可能となる。
【００５２】
ガベージコレクションにおいては、コントローラ４は、さらに、コピー元ブロックに対応するＳＢ管理テーブル内の非ゼロの参照カウントそれぞれを、コピー先ブロックに対応するＳＢ管理テーブルにコピーする。これにより、データがコピー元ブロックからコピー先ブロックにコピーされた後においても、コピーされたデータそれぞれに対応する参照カウントの値を正しく管理することが可能となる。
【００５３】
また、各ＳＢ管理テーブルの内容は、そのＳＢ管理テーブルに対応するスーパーブロックの消去動作が実行された時に不要とされる。したがって、あるスーパーブロック内のデータそれぞれが不要となるタイミングとこのスーパーブロックに対応するＳＢ管理テーブル内の参照カウントそれぞれが不要となるタイミングとが同時に起こるので、各スーパーブロック内のデータそれぞれに対応する参照カウントそれぞれを管理するためのコストを低減することができる。
【００５４】
コントローラ４は、ホストインタフェース１１、ＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４等を含んでもよい。これらＣＰＵ１２、ＮＡＮＤインタフェース１３、ＤＲＡＭインタフェース１４は、バス１０を介して相互接続されていてもよい。
【００５５】
ホストインタフェース１１は、ホスト２から様々なコマンド（例えば、ライトコマンド、リードコマンド、アンマップ（ＵＮＭＡＰ）／トリム（Ｔｒｉｍ）コマンド、等）を受信する。
【００５６】
ＣＰＵ１２は、ホストインタフェース１１、ＮＡＮＤインタフェース１３、およびＤＲＡＭインタフェース１４を制御するように構成されたプロセッサである。ＣＰＵ１２は、ＳＳＤ３の電源オンに応答して、ＮＡＮＤ型フラッシュメモリ５または図示しないＲＯＭに格納されている制御プログラム（ファームウェア）をＤＲＡＭ６上にロードし、このファームウェアを実行することによって様々な処理を行う。このＣＰＵ１２は、例えば、上述のＦＴＬの処理に加え、ホスト２からの様々なコマンドを処理するためのコマンド処理等を実行することができる。ＣＰＵ１２の動作は、ＣＰＵ１２によって実行される上述のファームウェアによって制御される。なお、ＦＴＬ処理およびコマンド処理の一部または全部は、コントローラ４内の専用ハードウェアによって実行してもよい。
【００５７】
ＣＰＵ１２は、重複排除処理部２１、ガベージコレクション（ＧＣ）動作制御部２２、データ分離動作制御部２３として機能することができる。
【００５８】
＜重複排除処理部２１＞
重複排除処理部２１は、ＳＳＤ３内で重複排除を実現するためのデータ書き込み動作を実行する。
【００５９】
重複排除処理部２１がライトデータ（書き込むべきユーザデータ）をホスト２から受信した時、重複排除処理部２１は、以下のデータ書き込み動作を実行する。
【００６０】
（１）ライトデータと一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在していない場合、重複排除処理部２１は、論理アドレスそれぞれと中間アドレスそれぞれとの対応関係を管理するＬＵＴ３２を更新して、未使用の第１の中間アドレスをライトデータの論理アドレスに関連付ける。重複排除処理部２１は、ライトデータを複数のスーパーブロックの一つ（書き込み先スーパーブロック）に書き込む。重複排除処理部２１は、中間アドレスそれぞれと物理アドレスそれぞれとの対応関係を管理するｉＬＵＴ３４を更新して、ライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す物理アドレスを第１の中間アドレスに関連付ける。そして、重複排除処理部２１は、このライトデータに対応する参照カウントを１に設定する。
【００６１】
（２）ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５に既に存在している場合、重複排除処理部２１は、ライトデータを複数のスーパーブロックの一つ（書き込み先スーパーブロック）に書き込まずに、ＬＵＴ３２を更新して、この重複データに対応する物理アドレスを保持しているｉＬＵＴ３４内のエントリを指す第２の中間アドレスをライトデータの論理アドレスに関連付ける。そして、重複排除処理部２１は、重複データに対応する参照カウントを１増やす。
【００６２】
（３）ライトデータがＮＡＮＤ型フラッシュメモリ５に既に書き込まれているデータの更新データである場合、重複排除処理部２１は、既に書き込まれているこのデータに対応する参照カウントを１減らす。
【００６３】
重複排除処理部２１は、ハッシュＬＵＴ３３も管理する。このハッシュＬＵＴ３３は、ハッシュ値それぞれと中間アドレスそれぞれとの対応関係を管理する変換テーブルである。ライトデータの論理アドレスにある中間アドレスを関連付けるための処理においては、重複排除処理部２１は、以下の動作を実行してもよい。
【００６４】
（１）重複排除処理部２１は、ライトデータのハッシュ値を得る。
【００６５】
（２）得られたハッシュ値に対応する中間アドレスがハッシュＬＵＴ３３に存在しない場合、重複排除処理部２１は、ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５に存在していないと判定する。そして、重複排除処理部２１は、未使用の中間アドレスを、得られたハッシュ値に付与し、得られたハッシュ値と得られたハッシュ値に付与された中間アドレスとの対応関係を、ハッシュＬＵＴ３３に格納する。このように、ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５に存在していない場合には、得られたハッシュ値に付与された中間アドレスが、ライトデータの論理アドレスに、上述の第１の中間アドレスとして関連付けられる。
【００６６】
（３）得られたハッシュ値に対応する中間アドレスがハッシュＬＵＴ３３に既に存在する場合、重複排除処理部２１は、ｉＬＵＴ３４を参照して、前記得られたハッシュ値に対応する中間アドレスに関連付けられた物理アドレスを取得する。重複排除処理部２１は、ライトデータを、取得された物理アドレスによって指定されるＮＡＮＤ型フラッシュメモリ５内の位置に格納されているデータと比較する。これらデータが互いに一致する場合、重複排除処理部２１は、ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５に既に存在していると判定する。このように、ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５に既に存在している場合には、重複排除処理部２１は、得られたハッシュ値に対応し且つハッシュＬＵＴ３３に既に存在する上述の中間アドレスが、ライトデータの論理アドレスに、上述の第２の中間アドレスとして関連付けられる。
【００６７】
＜ＧＣ動作制御部２２＞
ＧＣ動作制御部２２は、コピー元ブロック（コピー元スーパーブロック）に対応するＳＢ管理テーブル内の参照カウントそれぞれに基づいて、以下のＧＣ動作を実行する。
【００６８】
（１）複数のスーパーブロック１００−１、１００−２、…１００−ｉの一つがガベージコレクションのコピー元ブロック（コピー元スーパーブロック）として選択された場合、ＧＣ動作制御部２２は、コピー元ブロックに対応するＳＢ管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみをコピー元ブロックからコピー先ブロック（コピー先スーパーブロック）にコピーする。
【００６９】
（２）ＧＣ動作制御部２２は、ｉＬＵＴ３４を更新して、非ゼロの参照カウントにそれぞれ対応するデータがコピーされたコピー先ブロック内の位置それぞれを示す物理アドレスを、コピーされたデータに対応する中間アドレスそれぞれに関連付ける。
【００７０】
（３）ＧＣ動作制御部２２は、コピー元ブロックに対応するＳＢ管理テーブル内の非ゼロの参照カウントそれぞれを、コピー先ブロックに対応するＳＢ管理テーブルにコピーする。
【００７１】
このように、ｉＬＵＴ３４においては、中間アドレスそれぞれと物理アドレスそれぞれとが互いに一対一にマッピングされる。したがって、複数の論理アドレスから参照されているデータ（重複データ）がガベージコレクション（ＧＣ）によってコピー元ブロックからコピー先ブロックにコピーされたケースにおいては、コントローラ４は、ｉＬＵＴ３４のみを更新するだけで、このデータの旧物理アドレス（コピー元物理アドレス）を新物理アドレス（コピー先物理アドレス）に正しく変更することができる。
【００７２】
また、コントローラ４は、あるスーパーブロックに格納されている複数のデータそれぞれに対応する複数の参照カウントの全てを、このスーパーブロックに対応するＳＢ管理テーブルを使用して管理する。そして、あるスーパーブロックがＧＣのためのコピー元ブロックとして選択された場合には、このスーパーブロックに対応するＳＢ管理テーブルの内容に基づいて、非ゼロの参照カウントに対応するデータのみをコピー元ブロックからコピー先ブロックにコピーする処理と、非ゼロの参照カウントそれぞれを、コピー元ブロックに対応するＳＢ管理テーブルからコピー先ブロックに対応するＳＢ管理テーブルにコピーする処理とが実行される。したがって、コピー元ブロックに対応するＳＢ管理テーブルの内容のみに基づいてＧＣ動作を実行することが可能となり、重複排除を実現しつつ、ＧＣ動作の効率を改善することができる。
【００７３】
＜データ分離動作制御部２３＞
データ分離動作制御部２３は、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とを互いに分離して、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とを互いに異なるスーパーブロックに格納するための動作を実行する。換言すれば、データ分離動作制御部２３は、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集めるために、以下の動作を実行する。
【００７４】
データ分離動作制御部２３は、第１の参照カウント範囲に属する参照カウントにそれぞれ対応する第１のデータ集合を一つの以上のスーパーブロックに集め、第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応する第２のデータ集合を、一つ以上の別のスーパーブロックに集める動作を実行する。これにより、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集めることが可能となる。第１のデータ集合を一つの以上のスーパーブロックに集め、第２のデータ集合を一つ以上の別のスーパーブロックに集める動作は、ガベージコレクションによって実現してもよい。
【００７５】
すなわち、スーパーブロック１００−０、１００−１、…１００−ｉの一つがガベージコレクションのコピー元ブロックとして選択された場合、第１のデータ集合を一つの以上のスーパーブロックに集めるために、データ分離動作制御部２３は、コピー元ブロックに対応するＳＢ管理テーブルに基づいて、コピー元ブロック内に含まれ且つ第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第１のコピー先ブロックにコピーする。さらに、第２のデータ集合を一つの以上の別のスーパーブロックに集めるために、データ分離動作制御部２３は、コピー元ブロック内に含まれ且つ第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第２のコピー先ブロックにコピーする。
【００７６】
各ＳＢ管理テーブルは、ある設定されたビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を有している。各参照カウントのビット長が長くなるほど、カウント可能な参照カウントの最大値を大きくすることができるが、確保することが必要な参照カウント記憶領域のサイズは増大する。もし一つのスーパーブロックに大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とが混在していたならば、大きな参照カウントを表現可能な長いビット長を各々が有する複数の参照カウントを格納可能な大きなサイズの参照カウント記憶領域を確保することが必要となる。しかし、このスーパーブロックには小さな参照カウントを有するデータ群も含まれている。したがって、この大きなサイズの参照カウント記憶領域内の多くのメモリリソースが無駄に消費される可能性がある。
【００７７】
本実施形態では、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集められる。したがって、各ＳＢ管理テーブル内に設けることが必要な参照カウント記憶領域のサイズを最適化することが可能となり、この結果、参照カウントそれぞれの管理に必要とされるメモリリソースの量を削減することができる。
【００７８】
また、大きな参照カウントを有するデータ群は、書き換えられる確率が低いデータ、つまり、長いライフタイムを有するデータであるといえる。なぜなら、大きな参照カウントを有するデータを参照している多くの数の論理アドレスそれぞれに対応するデータが全て更新されない限り、このデータに対応する参照カウントはゼロにならないためである。例えば、ＳＳＤ３が上述のＶＤＩサーバのストレージとして使用されているケースにおいては、複数のエンドユーザに提供される複数の仮想デスクトップＯＳそれぞれのアップデートが実行されると、互いに同じ内容を有するデータを書き込むための多数の書き込み要求がホスト２（ＶＤＩサーバ）からＳＳＤ３に送信される可能性がある。この結果、ＮＡＮＤ型フラッシュメモリ５においては、大きな参照カウントをそれぞれ有する多数のデータが存在することになる。これら大きな参照カウントを有するデータ群は、仮想デスクトップＯＳそれぞれの次回のアップデートまでは有効に維持される可能性が高い。
【００７９】
一方、小さい参照カウントを有するデータ群は、書き換えられる確率が比較的高いデータ、つまり、短いライフタイムを有するデータである。
【００８０】
もし大きな参照カウントを有するデータ群と小さい参照カウントを有するデータ群とが同じスーパーブロックに混在される環境であったならば、ライトアンプリフィケーションが増加する可能性がある。
【００８１】
なぜなら、大きな参照カウントを有するデータ群と小さい参照カウントを有するデータ群とが混在するスーパーブロックにおいては、小さい参照カウントを有するデータ群だけが早いタイミングで無効化される一方、このスーパーブロック内の残りのデータ群（大きな参照カウントを有するデータ群）は有効状態に長い間維持される可能性があるためである。
【００８２】
ライトアンプリフィケーション（ＷＡ）は、以下のように定義される。
【００８３】
WA=「ＳＳＤにライトされたデータの総量」 ／ 「ホストからＳＳＤにライトされたデータの総量」
「ＳＳＤにライトされたデータの総量」は、ホストからＳＳＤにライトされたデータの総量とガベージコレクション等によって内部的にＳＳＤにライトされたデータの総量との和に相当する。
【００８４】
ライトアンプリフィケーション（ＷＡ）の増加は、ＳＳＤ３内のスーパーブロック／物理ブロックそれぞれの書き換え回数（プログラム／イレーズ回数）の増加を引き起こす。つまり、ライトアンプリフィケーション（ＷＡ）が大きい程、物理ブロックのプログラム／イレーズ回数が、そのプログラム／イレーズ回数の上限値に速く達しやすくなる。この結果、ＳＳＤ３の耐久性および寿命の劣化が引き起こされる。
【００８５】
本実施形態では、同じ参照カウント範囲に属するデータ群が同じスーパーブロックに集められるので、同じスーパーブロックに含まれるデータそれぞれのライフタイムを同程度に揃えることができる。同程度のライフタイムを有するデータ群は、その削除または更新によってほぼ同時期に無効化される可能性が高いデータグループを意味する。全データが無効化されたスーパーブロックに関しては、ＧＣを実行することなく、そのスーパーブロックをフリーブロックにすることができる。結果として、同じスーパーブロックに含まれるデータそれぞれの参照カウントを同程度に揃えることは、ＧＣの頻度を抑えることを可能とし、これによってライトアンプリフィケーションを下げることができる。
【００８６】
さらに、データ分離動作制御部２３は、大きな参照カウントを有するデータ群が集められているスーパーブロック群と、小さい参照カウントを有するデータ群が集められているスーパーブロック群との間で、ＧＣソーススーパーブロック（つまり、コピー元ブロックの候補）を選択するための条件を変更する処理を実行する。つまり、データに対応する参照カウントが大きいほど、そのデータが書き換えられる確率は低いので、データ分離動作制御部２３は、大きな参照カウントを有するデータ群が集められているスーパーブロック群を、小さい参照カウントを有するデータ群が集められているスーパーブロック群よりも優先的にＧＣ候補に選択する。
【００８７】
より詳しくは、データ分離動作制御部２３は、以下の動作を実行する。
【００８８】
（１）データ分離動作制御部２３は、スーパーブロック１００−１、１００−２、…１００−ｉを、第１の参照カウント範囲に属するデータの集合が集められている第１のブロック群と、第２の参照カウント範囲に属するデータの集合が集められている第２のブロック群とに分類する。
【００８９】
（２）第１のブロック群については、データ分離動作制御部２３は、無効データ量が第１の閾値よりも大きいという条件を満たすブロック（スーパーブロック）をガベージコレクションのためのコピー元ブロックの候補として選択する。
【００９０】
（３）第２のブロック群については、データ分離動作制御部２３は、無効データ量が、第１の閾値よりも小さい第２の閾値よりも大きいという条件を満たすブロック（スーパーブロック）をガベージコレクションのためのコピー元ブロックの候補として選択する。
【００９１】
第２の参照カウント範囲に属するデータの集合が集められている第２のブロック、つまり大きな参照カウントを有するデータ群が集められているスーパーブロックにおいては、無効データが格納されている無効データ記憶領域は、長い間、新たなデータの格納に利用されない。この無効データ記憶領域は、ＳＳＤ３のオーバープロビジョニング容量を無駄に消費する。本実施形態では、大きな参照カウントを有するデータ群が集められているスーパーブロック群を、小さい参照カウントを有するデータ群が集められているスーパーブロック群よりも優先的にＧＣ候補に選択することができるので、大きな参照カウントを有するデータ群が集められているスーパーブロック群内の無効データ記憶領域を新たなデータを格納するためのメモリリソースとして利用しやすくすることができる。このことは、ＳＳＤ３の実質的なオーバープロビジョニング容量を増加することを可能にし、これによってライトアンプリフィケーションを下げることができる。
【００９２】
図１のＤＲＡＭインタフェース１４は、ＤＲＡＭ６をアクセス制御するように構成されたＤＲＡＭコントローラである。ＤＲＡＭ６の記憶領域の一部は、ライトバッファ（ＷＢ）３１を格納するために使用される。ＤＲＡＭ６の記憶領域の他の一部は、上述のＬＵＴ３２、ハッシュＬＵＴ３３、ｉＬＵＴ３４をルックアップテーブルキャッシュとして格納するために使用される。ＬＵＴ３２、ハッシュＬＵＴ３３、ｉＬＵＴ３４の各々の一部分のみがルックアップテーブルキャッシュに格納されてもよいし、ＬＵＴ３２、ハッシュＬＵＴ３３、ｉＬＵＴ３４の各々の全てがルックアップテーブルキャッシュに格納されてもよい。ＤＲＡＭ６の記憶領域のさらに他の一部は、上述のＳＢ管理テーブル２００−０、２００−１、…２００−ｉを格納するために使用される。
【００９３】
図５は、ＬＵＴ３２とｉＬＵＴ３４との関係を示す。
【００９４】
上述したように、ＬＵＴ３２は、論理−中間アドレス変換テーブルとして機能し、論理アドレスＬＢＡ）それぞれと中間アドレスそれぞれとの対応関係を管理する。以下では、中間アドレスをｉＬＢＡと称する。
【００９５】
また、上述したように、ｉＬＵＴ３４は、中間−物理アドレス変換テーブルとして機能する中間ルックアップテーブルであり、ｉＬＢＡそれぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレスそれぞれとの対応関係を管理する。以下では、物理アドレスをＰＢＡとも称する。
【００９６】
ＮＡＮＤ型フラッシュメモリ５に既に存在しているあるデータが複数のＬＢＡから参照されている場合、ＬＵＴ３２においては、これらＬＢＡには同一のｉＬＢＡが関連付けられる。ｉＬＵＴ３４においては、このｉＬＢＡには、このデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置を示すＰＢＡが関連付けられている。したがって、これらＬＢＡから同一のｉＬＢＡを参照でき、この同一のｉＬＢＡからこのデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置を示すＰＢＡを参照することができる。
【００９７】
ｉＬＵＴ３４においては、ｉＬＢＡそれぞれとＰＢＡそれぞれとが互いに一対一にマッピングされる。したがって、複数の論理アドレスから参照されているデータ（重複データ）がガベージコレクション（ＧＣ）によってコピー元ブロックからコピー先ブロックにコピーされたケースにおいては、コントローラ４は、ｉＬＵＴ３４のみを更新するだけで、このデータの旧ＰＢＡを新ＰＢＡに正しく変更することができる。
【００９８】
複数のＬＢＡから同一のＰＢＡを直接参照するというアドレス変換構造を使用することも可能である。しかし、この場合には、ＬＵＴ３２においては、もしあるデータが１０００個のＬＢＡから参照されているならば、これら１０００個のＬＢＡに対応する１０００個のエントリに同じＰＢＡをそれぞれ格納することが必要とされる。したがって、１０００個のＬＢＡから参照されているデータ（重複データ）がガベージコレクション（ＧＣ）によってコピー元ブロックからコピー先ブロックにコピーされたケースにおいては、コントローラ４は、これら１０００個のエントリ内のＰＢＡをそれぞれ更新することが必要とされる。
【００９９】
本実施形態では、たとえあるデータが１０００個のＬＢＡから参照されていても、これらＬＢＡは一つのｉＬＢＡを参照し、このデータのＰＢＡは、この一つのｉＬＢＡにのみ関連付けられる。したがって、コントローラ４は、このＰＢＡが格納されているｉＬＵＴ３４内の一つのエントリのＰＢＡのみを更新するだけでよい。
【０１００】
図６に示されているように、複数のＬＵＴ３２からｉＬＵＴ３４が参照されてもよい。図６においては、２つのＬＵＴ３２−０、ＬＵＴ３２−１からｉＬＵＴ３４が参照されるケースが例示されている。ＬＵＴ３２−０は、あるネームスペースに対応するＬＢＡそれぞれとｉＬＢＡそれぞれとの対応関係を管理するＬＵＴであってもよく、ＬＵＴ３２−１は、別のネームスペースに対応するＬＢＡそれぞれとｉＬＢＡそれぞれとの対応関係を管理するＬＵＴであってもよい。各ネームスペースには、ＬＢＡ０から始まるＬＢＡ範囲が割り当てられる。ホスト２からのライトコマンド／リードコマンドは、特定のネームスペースを指定する識別子（ネームスペースＩＤ）を含んでいてもよい。ホスト２は、あるエンドユーザからのＩ／Ｏ要求に応じて、このエンドユーザに割り当てられた特定のネームスペースを指定するネームスペースＩＤを含むライトコマンド／リードコマンドをＳＳＤ３に送信してもよい。また、ホスト２は、別のエンドユーザからのＩ／Ｏ要求に応じて、この別のエンドユーザに割り当てられた別の特定のネームスペースを指定するネームスペースＩＤを含むライトコマンド／リードコマンドをＳＳＤ３に送信してもよい。
【０１０１】
図７は、アドレス参照構造を示す。
【０１０２】
ＳＳＤ３のコントローラ４は、ホスト２からライトデータとこのライトデータに対応するＬＢＡとを受信する。一つのＬＢＡに対応するライトデータのサイズは、例えば、４Ｋバイト（４ＫＢ）であってもよい。
【０１０３】
コントローラ４は、ホスト２から受信されたライトデータのハッシュ値を得る。ハッシュ計算のためのアルゴリズムは限定されず、任意のアルゴリズムを利用することができる。ハッシュ計算によって得られるハッシュ値のビット幅は、ライトデータのサイズ、例えば、４ＫＢ（＝３２７６８ビット）、よりも小さいビット幅であればよい。ハッシュ計算によって得られるハッシュ値のビット幅は２５６ビットであってもよい。コントローラ４は、得られたハッシュ値に対してあるｉＬＢＡを付与し、得られたハッシュ値とこのハッシュ値に付与されたｉＬＢＡとをハッシュＬＵＴ３３に格納する。
【０１０４】
得られたハッシュ値に対するｉＬＢＡの付与は以下のように行われてもよい。
【０１０５】
もし得られたハッシュ値に対応するｉＬＢＡがハッシュＬＵＴ３３に存在していないならば、コントローラ４は、ライトデータと一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在していないと判定し、未使用の任意のｉＬＢＡをこのハッシュ値に付与する。そして、コントローラ４は、得られたハッシュ値とこのハッシュ値に付与されたｉＬＢＡとをハッシュＬＵＴ３３に格納する。この付与されたｉＬＢＡは、ＬＵＴ３２に通知される。ＬＵＴ３２においては、この通知されたｉＬＢＡが、ホスト２から受信されたライトデータに対応するＬＢＡに関連付けられる。コントローラ４は、ライトデータを複数のスーパーブロック１００−０、１００−１、１００−２、…の一つ（書き込み先スーパーブロック）に書き込む。そして、コントローラ４は、ｉＬＵＴ３４を更新して、ライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示す物理アドレス（ＰＢＡ）を、この付与されたｉＬＢＡに関連付ける。コントローラ４は、書き込み先スーパーブロックに対応するＳＢ管理テーブルを更新して、このライトデータに対応する参照カウントを１に設定する。
【０１０６】
もし得られたハッシュ値に対応するｉＬＢＡがハッシュＬＵＴ３３に既に存在していたならば、コントローラ４は、このライトデータと一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に既に存在している可能性があると判定する。
【０１０７】
この場合、コントローラ４は、まず、得られたハッシュ値に対応するｉＬＢＡをハッシュＬＵＴ３３から取得する。コントローラ４は、このｉＬＢＡに対応するＰＢＡをｉＬＵＴ３４から取得し、取得されたＰＢＡによって指定されるＮＡＮＤ型フラッシュメモリ５内の位置に格納されているデータをリードする。そして、コントローラ４は、ライトデータとリードデータとを比較する。ライトデータとリードデータとが一致するならば、コントローラ４は、ライトデータと一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に既に存在していると判定する。この場合、ライトデータは、複数のスーパーブロック１００−０、１００−１、１００−２、…の一つ（書き込み先スーパーブロック）に書き込まれない。コントローラ４は、得られたハッシュ値に対応するこのｉＬＢＡ、つまり重複データが格納されているＮＡＮＤ型フラッシュメモリ５内の位置を示すＰＢＡを保持しているｉＬＵＴ３４内のエントリを指すｉＬＢＡを、ＬＵＴ３２に通知する。ＬＵＴ３２においては、この通知されたｉＬＢＡが、ホスト２から受信されたライトデータに対応するＬＢＡに関連付けられる。そして、コントローラ４は、重複データが格納されているスーパーブロックに対応するＳＢ管理テーブルを更新して、この重複データに対応する参照カウントを１だけ増やす。
【０１０８】
図８は、スーパーブロック管理テーブルの構成例を示す。
【０１０９】
図８においては、図示を簡単化するために、スーパーブロック（ＳＢ）１００−０が、各々が４つの４ＫＢデータが格納可能なＰａｇｅ０〜ｋを有するケースが例示されている。また、各４ＫＢデータが格納されている物理記憶位置には物理アドレス（ＰＢＡ）が割り当てられている。
【０１１０】
Ｐａｇｅ０において、ＰＢＡ０に対応する物理記憶位置にはＤａｔａＡが、ＰＢＡ１に対応する物理記憶位置にはＤａｔａＢが、ＰＢＡ２に対応する物理記憶位置にはＤａｔａＣが、ＰＢＡ３に対応する物理記憶位置にはＤａｔａＤが格納されている。
【０１１１】
また、Ｐａｇｅ１において、ＰＢＡ４に対応する物理記憶位置にはＤａｔａＥが、ＰＢＡ５に対応する物理記憶位置にはＤａｔａＦが、ＰＢＡ６に対応する物理記憶位置にはＤａｔａＧが、ＰＢＡ７に対応する物理記憶位置にはＤａｔａＨが格納されている。
【０１１２】
同様に、Ｐａｇｅｋにおいて、ＰＢＡｎ−３に対応する物理記憶位置にはＤａｔａＷが、ＰＢＡｎ−２に対応する物理記憶位置にはＤａｔａＸが、ＰＢＡｎ−１に対応する物理記憶位置にはＤａｔａＹが、ＰＢＡｎに対応する物理記憶位置にはＤａｔａＺが格納されている。
【０１１３】
スーパーブロック（ＳＢ）１００−１、１００−２、…も、スーパーブロック（ＳＢ）１００−０と同様の構成を有している。
【０１１４】
ＳＢ管理テーブル２００−０、２００−１、２００−２、…はそれぞれ、スーパーブロック（ＳＢ）１００−０、１００−１、１００−２、…に対応して設けられている。各ＳＢ管理テーブルにおいては、対応するスーパーブロック（ＳＢ）に格納された複数のデータに対応する複数の参照カウント（Ｒｅｆｃｏｕｎｔ）が格納される。これら参照カウント（Ｒｅｆｃｏｕｎｔ）は、対応するスーパーブロック（ＳＢ）の物理アドレス（ＰＢＡ）の並び順に配置されている。
【０１１５】
例として、スーパーブロック（ＳＢ）１００−０に対応するＳＢ管理テーブル２００−０においては、スーパーブロック（ＳＢ）１００−０内のデータそれぞれに対応する参照カウントは以下のように管理される。
【０１１６】
ＳＢ管理テーブル２００−０では、スーパーブロック（ＳＢ）１００−０のＰＢＡ０〜ｎに対応するｎ＋１個の参照カウント（Ｒｅｆｃｏｕｎｔ）が管理される。これらｎ＋１個の参照カウント（Ｒｅｆｃｏｕｎｔ）は、ＰＢＡ０〜ｎの並びの順にＳＢ管理テーブル２００−０内に配置される。
【０１１７】
ＰＢＡ０に対応するＳＢ管理テーブル２００−０内の先頭記憶位置に格納されているＲｅｆｃｏｕｎｔ「３」は、ＰＢＡ０に対応する物理記憶位置に格納されたＤａｔａＡに対応する参照カウントであり、ＤａｔａＡを参照している論理アドレス（ＬＢＡ）の数が３であることを示している。
【０１１８】
重複排除の仕組みを有さない通常のＳＳＤにおいては、これら３つのＬＢＡに対応する３つのユーザデータがＮＡＮＤ型フラッシュメモリに書き込まれる。もし一つのＬＢＡに対応するユーザデータサイズが４Ｋバイトであるならば、３つの４Ｋバイトデータの書き込みのために１２Ｋバイトのメモリリソースが消費される。
【０１１９】
本実施形態では、これら３つのＬＢＡに対応する３つのユーザデータの一つのみがＮＡＮＤ型フラッシュメモリ５に書き込まれる。したがって、消費されるメモリリソースを４Ｋバイトに減らすことができる。このように、ＳＳＤ３は、ＳＳＤ３に書き込まれるべきユーザデータを重複排除機能によって圧縮することを可能にする。
【０１２０】
ＰＢＡ１に対応するＳＢ管理テーブル２００−０内の２番目の記憶位置に格納されているＲｅｆｃｏｕｎｔ「４」は、ＰＢＡ１に対応する物理記憶位置に格納されたＤａｔａＢに対応する参照カウントであり、ＤａｔａＢを参照している論理アドレス（ＬＢＡ）の数が４であることを示している。同様に、ＰＢＡｎに対応するＳＢ管理テーブル２００−０内のｎ＋１番目の記憶位置に格納されているＲｅｆｃｏｕｎｔ「０」は、ＰＢＡｎに対応する物理記憶位置に格納されたＤａｔａＺに対応する参照カウントであり、ＤａｔａＺを参照している論理アドレス（ＬＢＡ）の数がゼロであることを示している。
【０１２１】
同様に、ＳＢ管理テーブル２００−１、２００−２、…の各々では、対応するスーパーブロック（ＳＢ）１００−１、１００−２、…内の複数のデータに対応する複数の参照カウントが、対応するスーパーブロック（ＳＢ）内のＰＢＡの並びの順に配置されている。
【０１２２】
図９は、中間ルックアップテーブル（ｉＬＵＴ）３４の構成例を示す。
【０１２３】
ｉＬＵＴ３４は、中間アドレス（ｉＬＢＡ）それぞれとＮＡＮＤ型フラッシュメモリ５の物理アドレス（ＰＢＡ）それぞれとの対応関係を管理する。
【０１２４】
ｉＬＵＴ３４は、ｉＬＢＡ０〜ｍに対応するｍ＋１個のエントリを有していてもよい。例えば、ｉＬＢＡ０に対応するエントリは、ｉＬＢＡ０が付与された１つ以上のＬＢＡに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示すＰＢＡ（ここではＰＢＡ０）を格納するために使用される。ｉＬＢＡ１に対応するエントリは、ｉＬＢＡ１が付与された１つ以上のＬＢＡに対応するデータが格納されているＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示すＰＢＡ（ここではＰＢＡ１）を格納するために使用される。
【０１２５】
図１０は、ルックアップテーブル（ＬＵＴ）３２の構成例を示す。
【０１２６】
ＬＵＴ３２は、論理アドレス（ＬＢＡ）それぞれと中間アドレス（ｉＬＢＡ）それぞれとの対応関係を管理する。
【０１２７】
ＬＵＴ３２は、ＬＢＡ０〜ｊに対応するｊ＋１個のエントリを有していてもよい。
【０１２８】
例えば、ＬＢＡ０に対応するエントリは、ＬＢＡ０に付与されたｉＬＢＡ（ここではｉＬＢＡ０）を格納するために使用される。ＬＢＡ１に対応するエントリは、ＬＢＡ１に付与されたｉＬＢＡ（ここではｉＬＢＡ１）を格納するために使用される。ＬＢＡ２に対応するエントリは、ＬＢＡ２に付与されたｉＬＢＡ（ここではｉＬＢＡ７）を格納するために使用される。同様に、ＬＢＡ１０に対応するエントリは、ＬＢＡ１０に付与されたｉＬＢＡ（ここではｉＬＢＡ０）を格納するために使用され、ＬＢＡｊに対応するエントリはＬＢＡｊに付与されたｉＬＢＡ（ここではｉＬＢＡ０）を格納するために使用される。
【０１２９】
図１１は、ハッシュルックアップテーブル（ハッシュＬＵＴ）３３の構成例を示す。
【０１３０】
ハッシュＬＵＴ３３は、ハッシュ値（Ｈａｓｈ（Ｄａｔａ））それぞれと中間アドレス（ｉＬＢＡ）それぞれとの対応関係を管理する。
【０１３１】
ハッシュルックアップテーブル（ハッシュＬＵＴ）３３は、複数のエントリを有しており、各エントリは、あるハッシュ値（Ｈａｓｈ（Ｄａｔａ））とこのハッシュ値（Ｈａｓｈ（Ｄａｔａ））に付与された中間アドレス（ｉＬＢＡ）とを格納する。基本的には、異なるハッシュ値に対しては異なるｉＬＢＡが付与される。ＳＳＤ３は、ホスト２からのライトデータのハッシュ値を得、得られたハッシュ値がハッシュＬＵＴ３３に存在しないならば、未使用の任意のｉＬＢＡを得られたハッシュ値に付与し、得られたハッシュ値と付与されたｉＬＢＡとの対応関係をハッシュＬＵＴ３３に格納する。
【０１３２】
図１１では、ＤａｔａＡのハッシュ値（Ｈａｓｈ（ＤａｔａＡ））にはｉＬＢＡ０が付与され、ＤａｔａＢのハッシュ値（Ｈａｓｈ（ＤａｔａＢ））にはｉＬＢＡ１が付与され、ＤａｔａＣのハッシュ値（Ｈａｓｈ（ＤａｔａＣ））にはｉＬＢＡ７が付与され、ＤａｔａＤのハッシュ値（Ｈａｓｈ（ＤａｔａＤ））にはｉＬＢＡ５が付与され、ＤａｔａＥのハッシュ値（Ｈａｓｈ（ＤａｔａＥ））にはｉＬＢＡ１０が付与され、ＤａｔａＦのハッシュ値（Ｈａｓｈ（ＤａｔａＦ））にはｉＬＢＡ２が付与され、ＤａｔａＧのハッシュ値（Ｈａｓｈ（ＤａｔａＧ））にはｉＬＢＡ４が付与され、ＤａｔａＨのハッシュ値（Ｈａｓｈ（ＤａｔａＨ））にはｉＬＢＡ６が付与された場合が例示されている。
【０１３３】
次に、図１２を用いて本実施形態において実行されるアドレス変換動作について説明する。
【０１３４】
ここでは、ＳＳＤ３が、ホスト２から、各々が４ＫＢのサイズを有する４つの新規ライトデータ、つまり、ＤａｔａＡ、ＤａｔａＢ、ＤａｔａＣ、ＤａｔａＤ、ＤａｔａＥを受信した場合を想定する。また、ＤａｔａＡ、ＤａｔａＢ、ＤａｔａＣ、ＤａｔａＤは互いに異なる内容、つまり互いに異なるビット列を含むデータであり、ＤａｔａＥはＤａｔａＡと一致するデータである場合を想定する。
【０１３５】
ＤａｔａＡ、ＤａｔａＢ、ＤａｔａＣ、ＤａｔａＤそれぞれのハッシュ値（Ｈａｓｈ（ＤａｔａＡ）、Ｈａｓｈ（ＤａｔａＢ）、Ｈａｓｈ（ＤａｔａＣ）、Ｈａｓｈ（ＤａｔａＤ）が計算され、それらのハッシュ値に未使用の中間アドレス（ｉＬＢＡ）がそれぞれ付与される。
【０１３６】
図１２においては、Ｈａｓｈ（ＤａｔａＡ）にはｉＬＢＡ０が、Ｈａｓｈ（ＤａｔａＢ）にはｉＬＢＡ１が、Ｈａｓｈ（ＤａｔａＣ）にはｉＬＢＡ２が、Ｈａｓｈ（ＤａｔａＤ）にはｉＬＢＡ３が付与された場合が例示されている。ハッシュＬＵＴ３３には、４つのハッシュ値と４つのｉＬＢＡとの対応関係、つまり、Ｈａｓｈ（ＤａｔａＡ）とｉＬＢＡ０のペアと、Ｈａｓｈ（ＤａｔａＢ）とｉＬＢＡ１のペアと、Ｈａｓｈ（ＤａｔａＣ）とｉＬＢＡ２のペアと、Ｈａｓｈ（ＤａｔａＤ）とｉＬＢＡ３のペアとが格納される。また、ＬＵＴ３２が更新され、これによってｉＬＢＡ０が、ＤａｔａＡに対応するＬＢＡ０に関連付けられ、ｉＬＢＡ１が、ＤａｔａＢに対応するＬＢＡ１に関連付けられ、ｉＬＢＡ２が、ＤａｔａＣに対応するＬＢＡ２に関連付けられ、ｉＬＢＡ３が、ＤａｔａＤに対応するＬＢＡ３に関連付けられる。
【０１３７】
ＤａｔａＡ、ＤａｔａＢ、ＤａｔａＣおよびＤａｔａＤは、複数のスーパーブロックの一つ（図１２では、スーパーブロック（ＳＢ）１００−０）に書き込まれる。このスーパーブロック（ＳＢ）１００−０は、現在の書き込み先ブロック（現在の書き込み先スーパーブロック）として割り当てられているスーパーブロックである。そして、ｉＬＵＴ３４が更新され、これによってＤａｔａＡが書き込まれた書き込み先スーパーブロック（ＳＢ）１００−０内の物理記憶位置を示すＰＢＡ０がｉＬＢＡ０に関連付けられ、ＤａｔａＢが書き込まれた書き込み先スーパーブロック（ＳＢ）１００−０内の物理記憶位置を示すＰＢＡ１がｉＬＢＡ１に関連付けられ、ＤａｔａＣが書き込まれた書き込み先スーパーブロック（ＳＢ）１００−０内の物理記憶位置を示すＰＢＡ２がｉＬＢＡ２に関連付けられ、ＤａｔａＤが書き込まれた書き込み先スーパーブロック（ＳＢ）１００−０内の物理記憶位置を示すＰＢＡ３がｉＬＢＡ３に関連付けられる。なお、スーパーブロック（ＳＢ）１００−０へのＤａｔａＡ、ＤａｔａＢ、ＤａｔａＣおよびＤａｔａＤの書き込みの前にｉＬＵＴ３４の更新が実行されてもよい。
【０１３８】
ＤａｔａＥのハッシュ値（Ｈａｓｈ（ＤａｔａＥ））は、Ｈａｓｈ（ＤａｔａＡ）と一致する。このため、Ｈａｓｈ（ＤａｔａＥ）（＝Ｈａｓｈ（ＤａｔａＡ））に対応するｉＬＢＡ（ここではｉＬＢＡ０）は、ハッシュＬＵＴ３３に既に存在している。この場合、ｉＬＢＡ０に対応するＰＢＡ０によって指定される物理記憶位置に格納されているデータ（ここではＤａｔａＡ）とＤａｔａＥとが比較され、ＤａｔａＥがＤａｔａＡと一致するか否かが判定される。
【０１３９】
ＤａｔａＥがＤａｔａＡに一致するならば、ＤａｔａＥはスーパーブロック（ＳＢ）１００−０に書き込まれない（重複排除）。そして、ＬＵＴ３２が更新され、Ｈａｓｈ（ＤａｔａＥ）に対応し且つハッシュＬＵＴ３３に既に存在しているｉＬＢＡ（ここではｉＬＢＡ０）が、ＤａｔａＥに対応するＬＢＡ４に関連付けられる。
【０１４０】
次に、図１３を用いて本実施形態において実行されるデータ読み出し動作について説明する。
【０１４１】
ＳＳＤ３のコントローラ４がホスト２からＬＢＡ４を含むリードコマンドを受信した場合、コントローラ４は、ＬＵＴ３２を参照する。ＬＢＡ４に対応する中間アドレスはｉＬＢＡ０であるため、コントローラ４は、ｉＬＢＡ０に基づいてｉＬＵＴ３４を参照する。ｉＬＢＡ０に対応する物理アドレスは、ＰＢＡ０である。このため、コントローラ４は、ＰＢＡ０によって指定されるＳＢ１００−０内の物理記憶位置からＤａｔａＡをリードし、ＤａｔａＡをホスト２に返す。
【０１４２】
図１４は、ユーザデータ管理のための構造を示す。
【０１４３】
図１４において、ルックアップテーブルキャッシュ３８は、ＮＡＮＤ型フラッシュメモリ５の管理領域８にそれぞれ格納されているＬＵＴ３２全体およびｉＬＵＴ３４全体の各々の一部をＤＲＡＭ６上に保持するために使用される。また、図１４において、Ｎｏｎ  ｖｏｌａｔｉｌｅ  ＬＵＴ３６は、ＮＡＮＤ型フラッシュメモリ５の管理領域８に格納されているＬＵＴ３２全体の内容を表し、Ｎｏｎ  ｖｏｌａｔｉｌｅ  ｉＬＵＴ３７は、ＮＡＮＤ型フラッシュメモリ５の管理領域８に格納されているｉＬＵＴ３３全体の内容を表している。
【０１４４】
ルックアップテーブルキャッシュ３８に目的のアドレス変換情報（ＬＢＡ−ｉＬＢＡ変換情報、またはｉＬＢＡ−ＰＢＡ変換情報）が存在しない場合（キャッシュミス）、目的のアドレス変換情報はＮＡＮＤ型フラッシュメモリ５（Ｎｏｎ  ｖｏｌａｔｉｌｅ  ＬＵＴ３６、またはＮｏｎ  ｖｏｌａｔｉｌｅ  ｉＬＵＴ３７）からリードされ、ルックアップテーブルキャッシュ３８内のある置換対象キャッシュラインの内容が、このリードされたアドレス変換情報に置き換えられる。この置換対象キャッシュラインに保持されているアドレス変換情報が更新されている場合には、この置換対象キャッシュラインに保持されているアドレス変換情報の内容がＮＡＮＤ型フラッシュメモリ５（Ｎｏｎ  ｖｏｌａｔｉｌｅ  ＬＵＴ３６、またはＮｏｎ  ｖｏｌａｔｉｌｅ  ｉＬＵＴ３７）に書き戻される（Ｕｐｄａｔａｔｅ  ｃａｃｈｅ  ｌｉｎｅｓ）。
【０１４５】
ユーザデータ領域７内の各スーパーブロック（ＳＢ）の状態は、有効データを格納しているアクティブブロック（アクティブスーパーブロック）と、有効データを格納していないフリーブロック（フリースーパーブロック）とに大別される。本実施形態では、非ゼロの参照カウントに対応するデータは有効データとして扱われ、ゼロの参照カウントに対応するデータは無効データとして扱われる。
【０１４６】
アクティブブロックである各スーパーブロック（ＳＢ）は、ストレージブロックプール（アクティブブロックプール）５１と称されるリストによって管理される。一方、フリーブロックである各スーパーブロック（ＳＢ）は、フリーブロックプール５２と称されるリストによって管理される。
【０１４７】
本実施形態では、コントローラ４は、フリーブロックプール５２から選択された一つのスーパーブロック（フリースーパーブロック）を、ホスト２から受信されたライトデータが書き込まれるべき書き込み先ブロック（書き込み先スーパーブロック）として割り当てる。この場合、コントローラ４は、まず、選択されたスーパーブロック（フリースーパーブロック）内の各物理ブロックに対する消去動作を実行し、これによってこのスーパーブロック内の各物理ブロックを、書き込み可能な消去状態にする。現在の書き込み先スーパーブロックの全体がホスト２からのライトデータで満たされると、コントローラ４は、現在の書き込み先スーパーブロック５４をストレージブロックプール５１に移動し、フリーブロックプール５２から新たな一つのスーパーブロック（フリースーパーブロック）を新たな書き込み先スーパーブロックとして割り当てる。
【０１４８】
ストレージブロックプール５１内のあるスーパーブロック内に全てのデータそれぞれの参照カウントが、データ更新、アンマップ、ガベージコレクション（ＧＣ）等によってゼロになると、コントローラ４は、このスーパーブロックをフリーブロックプール５２に移動する。
【０１４９】
ＧＣ動作においては、コントローラ４は、フリーブロックプール５２から選択された一つのスーパーブロック（フリースーパーブロック）を、ＧＣのためのコピー先ブロック（コピー先スーパーブロック）５３として割り当てる。この場合、コントローラ４は、まず、選択されたスーパーブロック（フリースーパーブロック）内の各物理ブロックに対する消去動作を実行し、これによってこのスーパーブロック内の各物理ブロックを、書き込み可能な消去状態にする。コントローラ４は、ストレージブロックプール５１内の一つ以上のスーパーブロックをコピー元ブロック（コピー元スーパーブロック）として選択する。
現在のコピー先ブロック５３の全体がコピー元ブロック（コピー元スーパーブロック）からコピーされたデータで満たされると、コントローラ４は、現在のコピー先ブロック５３をストレージブロックプール５１に移動する。また、コントローラ４は、ＧＣによって非ゼロの参照カウントに対応するデータが存在しなくなったコピー元ブロックを、フリーブロックプール５２に移動する。
【０１５０】
以下、ライト動作、リード動作、ＧＣ動作についてそれぞれ説明する。
【０１５１】
＜ライト動作＞  
ホスト２からの、ライトデータとＬＢＡを含むライトコマンドがＳＳＤ３によって受信されると、ライトデータは、ライトバッファ（ＷＢ）３１に一時的に格納される。
【０１５２】
ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５に存在していないならば、未使用のｉＬＢＡがライトデータのＬＢＡに付与される。そして、コントローラ４は、ＬＵＴ３２を更新して、付与されたｉＬＢＡをライトデータのＬＢＡに関連付ける。この場合、コントローラ４は、付与されたｉＬＢＡをライトデータのＬＢＡに関連付けるためのルックアップテーブルキャッシュ更新要求（Ｕｐｄａｔｅ  ｒｅｇｕｅｓｔ）をルックアップテーブルキャッシュ３８に送出してもよい。これにより、ルックアップテーブルキャッシュ３８（ＬＵＴ３２）が更新されて、付与されたｉＬＢＡがライトデータのＬＢＡに関連付けられる。そして、このライトデータは書き込み先スーパーブロック（ＳＢ）５４に書き込まれる。ライトデータが書き込み先スーパーブロック（ＳＢ）５４に書き込まれると、コントローラ４は、ｉＬＵＴ３４を更新して、ライトデータが書き込まれた物理記憶位置を示すＰＢＡを上述の付与されたｉＬＢＡに関連付ける。この場合、コントローラ４は、ライトデータが書き込まれた物理記憶位置を示すＰＢＡを上述の付与されたｉＬＢＡに関連付けるためのルックアップテーブルキャッシュ更新要求（Ｕｐｄａｔｅ  ｒｅｇｕｅｓｔ）をルックアップテーブルキャッシュ３８に送出してもよい。これにより、ルックアップテーブルキャッシュ３８（ｉＬＵＴ３４）が更新されて、このＰＢＡが上述の付与されたｉＬＢＡに関連付けられる。
【０１５３】
ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５に既に存在しているならば、重複データに付与されているｉＬＢＡがライトデータのＬＢＡに付与される。そして、コントローラ４は、ＬＵＴ３２を更新して、重複データに付与されているｉＬＢＡをライトデータのＬＢＡに関連付ける。この場合、コントローラ４は、重複データに付与されているｉＬＢＡをライトデータのＬＢＡに関連付けるためのルックアップテーブルキャッシュ更新要求（Ｕｐｄａｔｅ  ｒｅｇｕｅｓｔ）をルックアップテーブルキャッシュ３８に送出してもよい。これにより、ルックアップテーブルキャッシュ３８（ＬＵＴ３２）が更新されて、付与されたｉＬＢＡがライトデータのＬＢＡに関連付けられる。このライトデータは重複データと一致しているので、コントローラ４は、このライトデータを書き込み先スーパーブロック（ＳＢ）５４に書き込むための書き込み動作を実行しない。これにより、重複排除を実行することがとできる。
【０１５４】
＜リード動作＞  
ホスト２からの、ＬＢＡを含むリードコマンドが受信されると、コントローラ４は、ルックアップテーブルキャッシュ３８（ＬＵＴ３２）を参照して、このリードコマンドによって指定されたＬＢＡに対応するｉＬＢＡを取得する。この場合、コントローラ４は、指定されたＬＢＡに対応するｉＬＢＡを取得するためのルックアップテーブルキャッシュ（ＬＵＴ）参照要求（Ｌｏｏｋｕｐ  ｒｅｇｕｅｓｔ）をルックアップテーブルキャッシュ３８に送出してもよい。
【０１５５】
次いで、コントローラ４は、取得したｉＬＢＡに基づいて、ルックアップテーブルキャッシュ３８（ｉＬＵＴ３４）を参照し、ＰＢＡを取得する。この場合、コントローラ４は、取得されたｉＬＢＡに対応するＰＢＡを取得するためのルックアップテーブルキャッシュ（ｉＬＵＴ）参照要求（Ｌｏｏｋｕｐ  ｒｅｇｕｅｓｔ）をルックアップテーブルキャッシュ３８に送出してもよい。
【０１５６】
そして、コントローラ４は、取得したＰＢＡによって指定される物理記憶位置からデータをリードし、リードしたデータをホスト２に返す。ここで、リードコマンドに含まれているＬＢＡに対応するＰＢＡが、ストレージブロックプール（アクティブブロックプール）５１内のいずれかのアクティブブロックや書き込み先スーパーブロック内の物理記憶位置に対応する場合がある。また、ライトバッファ３１内の物理記憶位置に対応する場合もある。
【０１５７】
＜ＧＣ動作＞
コントローラ４は、フリーブロックプール５２から選択された一つのスーパーブロック（フリースーパーブロック）を、コピー先ブロック（コピー先スーパーブロック）５３として割り当てる。
【０１５８】
また、コントローラ４は、ストレージブロックプール（アクティブブロックプール）５１内のアクティブブロック（アクティブスーパーブロック）の中からＧＣ動作が必要と判断された一つのアクティブブロック（アクティブスーパーブロック）を、ＧＣ対象スーパーブロック（コピー元スーパーブロック）として選択する。このとき、アクティブブロック（アクティブスーパーブロック）に格納されている無効データ量がある閾値よりも多くなった場合に、そのアクティブブロック（アクティブスーパーブロック）はＧＣ動作が必要であると判断されてもよい。
【０１５９】
コントローラ４は、コピー元ブロックに対応するＳＢ管理テーブルに基づいて、非ゼロの参照カウントにそれぞれ対応するデータのみをコピー元ブロックからコピー先ブロック５３にコピーする。そして、コントローラ４は、ｉＬＵＴ３４を更新して、データがコピーされたコピー先ブロック５３内の物理記憶位置それぞれを示すＰＢＡをこれらコピーされたデータに対応するｉＬＢＡそれぞれに関連付ける。この場合、コントローラ４は、ライトデータが書き込まれた物理記憶位置を示すＰＢＡを上述の付与されたｉＬＢＡに関連付けるためのルックアップテーブルキャッシュ更新要求（Ｕｐｄａｔｅ  ｒｅｇｕｅｓｔ）をルックアップテーブルキャッシュ３８に送出してもよい。これにより、ルックアップテーブルキャッシュ３８（ｉＬＵＴ３４）が更新されて、このＰＢＡが上述のコピーされたデータに対応するｉＬＢＡそれぞれに関連付けられる。
【０１６０】
コピー先ブロック５３が非ゼロの参照カウントのデータで満たされると、そのコピー先ブロック５３は、ストレージブロックプール（アクティブブロックプール）５１に移動され、アクティブブロック（アクティブスーパーブロック）として管理される。
【０１６１】
図１５および図１６を用いて、本実施形態において実行されるガベージコレクション動作について説明する。ここでは、図示の簡単化のために、スーパーブロック（ＳＢ）１００−０、１００−１、１００−２の各々がＰａｇｅ０〜３を有し、各Ｐａｇｅに４つの４ＫＢデータが格納される場合を想定する。
【０１６２】
図１５には、ガベージコレクション動作により、スーパーブロック（ＳＢ）１００−０内に含まれ且つ非ゼロの参照カウントにそれぞれ対応するデータがスーパーブロック（ＳＢ）１００−２にコピーされる場合が示されている。
【０１６３】
スーパーブロック（ＳＢ）１００−０においては、ＰＢＡ０〜１５でそれぞれ指定される物理記憶位置に、ＤａｔａＡ０〜Ｐ０がそれぞれ格納されており、そのうち、ＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０、ＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０は、非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータである。他方、ＤａｔａＣ０、ＤａｔａＤ０、ＤａｔａＥ０、ＤａｔａＦ０、ＤａｔａＪ０、ＤａｔａＬ０、ＤａｔａＭ０、ＤａｔａＯ０は、ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータである。スーパーブロック（ＳＢ）１００−０に格納されたこれらデータそれぞれの参照カウント（Ｒｅｆｃｏｕｎｔ）は、ＰＢＡ０〜１５の並びの順にＳＢ管理テーブル２００−０内に配置されている。
【０１６４】
図１５には、ＰＢＡ０で指定される物理記憶位置に格納されているＤａｔａＡ０の参照カウント（Ｒｅｆｃｏｕｎｔ）は「１」であり、ＰＢＡ１で指定される物理記憶位置に格納されているＤａｔａＢ０の参照カウント（Ｒｅｆｃｏｕｎｔ）は「２」であり、ＰＢＡ２で指定される物理記憶位置に格納されているＤａｔａＣ０の参照カウント（Ｒｅｆｃｏｕｎｔ）は「０」であり、ＰＢＡ３で指定される物理記憶位置に格納されているＤａｔａＤ０の参照カウント（Ｒｅｆｃｏｕｎｔ）は「０」であり、…ＰＢＡ１５で指定される物理記憶位置に格納されているＤａｔａＰ０の参照カウント（Ｒｅｆｃｏｕｎｔ）は「２」であることが示されている。
【０１６５】
いま、スーパーブロック（ＳＢ）１００−０がＧＣ対象スーパーブロック（コピー元ブロック）として選択されたならば、コントローラ４は、スーパーブロック（ＳＢ）１００−０に対応するＳＢ管理テーブル（ここでは、ＳＢ管理テーブル２００−０）に基づいて、スーパーブロック（ＳＢ）１００−０に含まれている、非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータのみをコピー先スーパーブロック（ここでは、スーパーブロック（ＳＢ）１００−２）にコピーする。図１５では、ＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０、ＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０がそれぞれ、コピー先スーパーブロック（ここでは、スーパーブロック（ＳＢ）１００−２）のＰＢＡ１００〜１０７で指定されるそれぞれの物理記憶位置にコピーされる。
【０１６６】
次いで、コントローラ４は、非ゼロの参照カウントそれぞれを、ＧＣ対象スーパーブロック（コピー元ブロック）に対応するＳＢ管理テーブル（ここでは、ＳＢ管理テーブル２００−０）からコピー先スーパーブロック（ＳＢ）に対応するＳＢ管理テーブル（ここでは、ＳＢ管理テーブル２００−２）にコピーする。具体的には、コピー元スーパーブロック（スーパーブロック（ＳＢ）１００−０）に対応するＳＢ管理テーブル２００−０において管理されていた、ＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０、ＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０にそれぞれ対応する参照カウント（ここでは、１、２、２、３、２、１、１、２）が、コピー先スーパーブロック（スーパーブロック（ＳＢ）１００−２）に対応するＳＢ管理テーブル２００−２にコピーされる。ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）はコピーされない。非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）のコピーの結果、図１５に示されているように、ＳＢ管理テーブル２００−２においては、ＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０、ＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０にそれぞれ対応する参照カウント（１、２、２、３、２、１、１、２）がＰＢＡ１００〜１０７の並びの順に配置される。
【０１６７】
また、ｉＬＵＴ３４が更新され、データがコピーされたコピー先スーパーブロック内の物理記憶位置それぞれを示すＰＢＡが、これらコピーされたデータに対応するｉＬＢＡそれぞれに関連付けられる。図１５では、ＤａｔａＡ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１００が、ＤａｔａＡ０に対応するｉＬＢＡ０に、ＤａｔａＢ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０１が、ＤａｔａＢ０に対応するｉＬＢＡ１に、ＤａｔａＧ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０２が、ＤａｔａＧ０に対応するｉＬＢＡ４に、ＤａｔａＨ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０３が、ＤａｔａＨ０に対応するｉＬＢＡ６に、ＤａｔａＩ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０４が、ＤａｔａＩ０に対応するｉＬＢＡ１２に、ＤａｔａＫ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０５が、ＤａｔａＫ０に対応するｉＬＢＡ９に、ＤａｔａＮ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０６が、ＤａｔａＮ０に対応するｉＬＢＡ１３に、ＤａｔａＰ０のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０７が、ＤａｔａＰ０に対応するｉＬＢＡ１７にそれぞれ関連付けられる。各スーパーブロックにおいては、４ＫＢのユーザデータとこのユーザデータに対応するｉＬＢＡとのペアがユーザデータ毎に格納されていてもよい。この場合、コントローラ４は、コピー元ブロックを参照することによって、ＤａｔａＡ０に対応するｉＬＢＡ０、ＤａｔａＢ０に対応するｉＬＢＡ１、ＤａｔａＧ０対応するｉＬＢＡ４、ＤａｔａＨ０に対応するｉＬＢＡ６、ＤａｔａＩ０に対応するｉＬＢＡ１２、ＤａｔａＫ０に対応するｉＬＢＡ９、ＤａｔａＮ０に対応するｉＬＢＡ１３、ＤａｔａＰ０に対応するｉＬＢＡ１７を容易に認識することができ、これによってｉＬＵＴ３４を容易に更新することができる。
【０１６８】
図１６には、スーパーブロック（ＳＢ）１００−０に対するガベージコレクション動作の実行後、スーパーブロック（ＳＢ）１００−１に対するガベージコレクション動作により、スーパーブロック（ＳＢ）１００−１内に含まれ且つ非ゼロの参照カウントにそれぞれ対応するデータがスーパーブロック（ＳＢ）１００−２にコピーされる場合が示されている。
【０１６９】
スーパーブロック（ＳＢ）１００−１における、ＰＢＡ５０〜６５でそれぞれ指定されている物理記憶位置には、それぞれＤａｔａＡ１〜Ｐ１が格納されており、そのうち、ＤａｔａＣ１、ＤａｔａＤ１、ＤａｔａＥ１、ＤａｔａＦ１、ＤａｔａＩ１、ＤａｔａＬ１、ＤａｔａＮ１、ＤａｔａＯ１は、参照カウント（Ｒｅｆｃｏｕｎｔ）が非ゼロのデータである。他方、ＤａｔａＡ１、ＤａｔａＢ１、ＤａｔａＧ１、ＤａｔａＨ１、ＤａｔａＪ１、ＤａｔａＫ１、ＤａｔａＭ１、ＤａｔａＰ１は、参照カウント（Ｒｅｆｃｏｕｎｔ）がゼロのデータである。スーパーブロック（ＳＢ）１００−１に格納された各データの参照カウント（Ｒｅｆｃｏｕｎｔ）は、ＰＢＡ５０〜６５の並びの順にＳＢ管理テーブル２００−１内に配置されている。
【０１７０】
図１６には、ＰＢＡ５０で指定される物理記憶位置に格納されているＤａｔａＡ１の参照カウント（Ｒｅｆｃｏｕｎｔ）は「０」であり、ＰＢＡ５１で指定される物理記憶位置に格納されているＤａｔａＢ１の参照カウント（Ｒｅｆｃｏｕｎｔ）は「０」であり、ＰＢＡ５２で指定される物理記憶位置に格納されているＤａｔａＣ１の参照カウント（Ｒｅｆｃｏｕｎｔ）は「２」であり、ＰＢＡ５３で指定される物理記憶位置に格納されているＤａｔａＤ１の参照カウント（Ｒｅｆｃｏｕｎｔ）は「１」であり、…ＰＢＡ６５で指定される物理記憶位置に格納されているＤａｔａＰ１の参照カウント（Ｒｅｆｃｏｕｎｔ）は「０」であることが示されている。
【０１７１】
いま、スーパーブロック（ＳＢ）１００−１がＧＣ対象スーパーブロック（コピー元ブロック）として選択されたならば、コントローラ４は、ＧＣ対象スーパーブロック（コピー元ブロック）に対応するＳＢ管理テーブル（ここでは、ＳＢ管理テーブル２００−１）に基づいて、スーパーブロック（ＳＢ）１００−１に含まれる、非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータのみをコピー先スーパーブロック（ここでは、スーパーブロック（ＳＢ）１００−２）にコピーする。図１６では、ＤａｔａＣ１、ＤａｔａＤ１、ＤａｔａＥ１、ＤａｔａＦ１、ＤａｔａＩ１、ＤａｔａＬ０、ＤａｔａＮ１、ＤａｔａＯ１がそれぞれ、コピー先スーパーブロック（ここでは、スーパーブロック（ＳＢ）１００−２）のＰＢＡ１０８〜１１５で指定される物理記憶位置にコピーされる。
【０１７２】
次いで、コントローラ４は、非ゼロの参照カウントそれぞれを、ＧＣ対象スーパーブロック（コピー元ブロック）に対応するＳＢ管理テーブル（ここでは、ＳＢ管理テーブル２００−１）からコピー先スーパーブロック（ＳＢ）に対応するＳＢ管理テーブル（ここでは、ＳＢ管理テーブル２００−２）にコピーする。具体的には、コピー元スーパーブロック（スーパーブロック（ＳＢ）１００−１）に対応するＳＢ管理テーブル２００−１において管理されていたＤａｔａＣ１、ＤａｔａＤ１、ＤａｔａＥ１、ＤａｔａＦ１、ＤａｔａＩ１、ＤａｔａＬ０、ＤａｔａＮ１、ＤａｔａＯ１の参照カウント（Ｒｅｆｃｏｕｎｔ）がコピー先スーパーブロック（スーパーブロック（ＳＢ）１００−２）に対応するＳＢ管理テーブル２００−２にコピーされる。参照カウント（Ｒｅｆｃｏｕｎｔ）のコピーの結果、図１６では、ＳＢ管理テーブル２００−２に、ＰＢＡ１０８〜１１５の並びの順に、ＤａｔａＣ１、ＤａｔａＤ１、ＤａｔａＥ１、ＤａｔａＦ１、ＤａｔａＩ１、ＤａｔａＬ０、ＤａｔａＮ１、ＤａｔａＯ１の各参照カウント（Ｒｅｆｃｏｕｎｔ）が配置されている。
【０１７３】
また、ｉＬＵＴ３４が更新され、データがコピーされたコピー先スーパーブロック内の物理記憶位置それぞれを示すＰＢＡが、コピーされたデータに対応するｉＬＢＡそれぞれに関連付けられる。図１６では、ＤａｔａＣ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０８が、ＤａｔａＣ１に対応するｉＬＢＡ２３に、ＤａｔａＤ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１０９が、ＤａｔａＤ１に対応するｉＬＢＡ３２に、ＤａｔａＥ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１１０が、ＤａｔａＥ１に対応するｉＬＢＡ２５に、ＤａｔａＦ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１１１が、ＤａｔａＦ１に対応するｉＬＢＡ３０に、ＤａｔａＩ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１１２が、ＤａｔａＩ１に対応するｉＬＢＡ２１に、ＤａｔａＬ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１１３が、ＤａｔａＬ１に対応するｉＬＢＡ３５に、ＤａｔａＮ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１１４が、ＤａｔａＮ１に対応するｉＬＢＡ２２に、ＤａｔａＯ１のコピー先スーパーブロックの物理記憶位置を指定するＰＢＡ１１５が、ＤａｔａＯ１に対応するｉＬＢＡ３１にそれぞれ関連付けられている。
【０１７４】
以上のように、ＬＵＴ３２において管理されているＬＢＡとｉＬＢＡとの関係を変更することなく、コピー元ブロックに対応するＳＢ管理テーブル内の参照カウント情報のみを使用するだけでガベージコレクション動作を実行することができる。
【０１７５】
図１７のフローチャートは、本実施形態におけるデータ書き込み動作の手順を示す。
【０１７６】
図１７の左下には、ＳＢ管理テーブル２００−０、スーパーブロック（ＳＢ）１００−０、ＬＵＴ３２、ハッシュＬＵＴ３３、ｉＬＵＴ３４のデータ構造が示されている。ＳＢ管理テーブル２００−０には、スーパーブロック（ＳＢ）１００−０に格納されたデータそれぞれに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）が配置されている。スーパーブロック（ＳＢ）１００−０には、ＤａｔａとともにそのＤａｔａに対応するｉＬＢＡまたはＬＢＡが格納されている。ＬＵＴ３２は、ＬＢＡそれぞれとｉＬＢＡそれぞれとの対応関係が格納されている。なお、あるライトデータに一致する重複データがＮＡＮＤ型フラッシュメモリ５内に存在しない場合には、このライトデータのＬＢＡに、ｉＬＢＡではなく、ＰＢＡが直接関連付けてもよい。この場合には、スーパーブロック（ＳＢ）１００−０には、このライトデータとｉＬＢＡとのペアではなく、このライトデータとこのライトデータに対応するＬＢＡとのペアが格納されてもよい。ハッシュＬＵＴ３３は、ハッシュ値（ＤａｔａのＨａｓｈ（Ｄａｔａ））それぞれとｉＬＢＡそれぞれとの対応関係を管理する。ｉＬＵＴ３４は、ｉＬＢＡそれぞれとＰＢＡそれぞれとの対応関係を管理する。
【０１７７】
続いて、書き込み動作について説明する。
【０１７８】
コントローラ４は、まず、ホスト２から受信したライトコマンドに含まれるＬＢＡに対応するｉＬＢＡが、ＬＵＴ３２に存在するか否かを判定する（ステップＳ１０１）。ＬＵＴ３２に、ライトコマンドに含まれるＬＢＡに対応するｉＬＢＡが存在しないならば（ステップＳ１０１のＮＯ）、コントローラ４は、ＬＵＴ３２に、ライトコマンドに含まれるＬＢＡに対応するＰＢＡが存在するか否かを判定する（ステップＳ１０２）。ＬＵＴ３２に、ライトコマンドに含まれるＬＢＡに対応するｉＬＢＡ／ＰＢＡが存在しないならば（ステップＳ１０２のＮＯ）、ライトコマンドに含まれるライトデータは、ＮＡＮＤ型フラッシュメモリ５内に既に書き込まれているデータの更新データではなく、初めて書き込まれるデータであることを意味する（初回ＬＢＡの書き込み）。この場合、後述するステップＳ１０４に進む。
【０１７９】
ライトコマンドに含まれるＬＢＡに対応するｉＬＢＡが、ＬＵＴ３２に存在するならば（ステップＳ１０１のＹＥＳ）、コントローラ４は、ライトデータがＮＡＮＤ型フラッシュメモリ５内に既に書き込まれているデータの更新データであると判定する。つまり、このライトデータの書き込みは、初めての書き込みではなく、二回目以降の書き込みであることになる（二回目以降のＬＢＡ書き込み）。この場合、ＳＢ管理テーブル２００−０が更新される（ステップＳ１０３）。ここで、コントローラ４は、既に書き込まれているデータに対応する参照カウントを１減らす。なぜなら、このライトデータ（更新データ）は既に書き込まれているデータ（更新前データ）とは異なるので、この更新前データは、このライトデータのＬＢＡから参照されなくなるからである。このとき、コントローラ４は、ライトコマンドに含まれるＬＢＡに対応するｉＬＢＡに対応するＰＢＡをｉＬＵＴ３４から取得し、ＳＢ管理テーブル２００−０において、取得したＰＢＡに対応するデータの参照カウント（Ｒｅｆｃｏｕｎｔ）を「１」だけ減らす。
【０１８０】
次に、コントローラ４は、ライトデータのハッシュ値を計算する（ステップＳ１０４）。そして、コントローラ４は、計算によって得られたハッシュ値に対応するｉＬＢＡが、ハッシュＬＵＴ３３に存在するか否かを判定する（ステップＳ１０５）。得られたハッシュ値に対応するｉＬＢＡが、既にハッシュＬＵＴ３３に存在するならば（ステップＳ１０５のＹＥＳ）、コントローラ４は、ｉＬＵＴ３４を参照して、得られたハッシュ値に対応するｉＬＢＡに対応するＰＢＡのデータを取得し、その取得したデータと受信されたライトデータ（入力されたデータ）とを比較して、両データが一致するか否かを判定する（ステップＳ１０６）。両データが一致するならば（ステップＳ１０６のＹＥＳ）、ライトデータと一致する重複データがＮＡＮＤ型フラッシュメモリ５内に存在することになる。この場合、ライトデータは、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）には書き込まれずに、得られたハッシュ値に付与されたｉＬＢＡに対応するＰＢＡの参照カウント（Ｒｅｆｃｏｕｎｔ）を管理するＳＢ管理テーブル２００−０が更新され、そのＰＢＡに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）が「１」だけ増加される（ステップＳ１１４）。また、ＬＵＴ３２が更新され、得られたハッシュ値に対応するｉＬＢＡがライトコマンドに含まれたＬＢＡと関連付けられる（ステップＳ１１５）。
【０１８１】
他方、両データが一致しなければ（ステップＳ１０６のＮＯ）、ＮＡＮＤ型フラッシュメモリ５内に重複データは存在しないことになる。また、得られたハッシュ値に対応するｉＬＢＡが、ハッシュＬＵＴ３３に存在しない場合も（ステップＳ１０５のＮＯ）、重複データは存在しない。
【０１８２】
ステップＳ１０６のＮＯ、またはステップＳ１０５のＮＯの場合、コントローラ４は、ライトデータが書き込まれる書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）に対応するＳＢ管理テーブル２００−０で管理されている参照カウント（Ｒｅｆｃｏｕｎｔ）の中の最大参照カウント（Ｒｅｆｃｏｕｎｔ）が「１」であるか否かを判定する（ステップＳ１０７）。最大参照カウント（Ｒｅｆｃｏｕｎｔ）が「１」であるならば（ステップＳ１０７のＹＥＳ）、ｉＬＢＡを使わずに、ＬＢＡにＰＢＡを直接関連付けるようにしてもよい。もちろん、常にｉＬＢＡを使用してもよい。
【０１８３】
最大参照カウント（Ｒｅｆｃｏｕｎｔ）が「１」ではないならば（ステップＳ１０７のＮＯ）、ハッシュＬＵＴ３３が更新される（ステップＳ１１０）。このとき、ステップＳ１０４で得られたハッシュ値に、新たなｉＬＢＡ（未使用のｉＬＢＡ）が付与される。そして、得られたハッシュ値と付与されたｉＬＢＡとの対応関係がハッシュＬＵＴ３３に格納される。なお、ステップＳ１０５のＮＯの場合においては、ステップＳ１０４で得られたハッシュ値に対応するハッシュＬＵＴ３３内のエントリには既にｉＬＢＡが存在しているので、このエントリに、新たなｉＬＢＡ（未使用のｉＬＢＡ）が追加されてもよい。
【０１８４】
また、ｉＬＵＴ３４が更新され、ライトデータが書き込まれる予定のＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示すＰＢＡが、付与されたｉＬＢＡに関連付けられる（ステップＳ１１１）。
【０１８５】
さらに、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）が更新される（ステップＳ１１２）。このとき、ライトデータが書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）のライトデータが書き込まれる予定のＰＢＡ（新しいＰＢＡ）に対応する物理記憶位置に、付与されたｉＬＢＡとともに書き込まれる。
【０１８６】
さらに、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）に対応するＳＢ管理テーブル２００−０が更新される（ステップＳ１１３）。このとき、ライトデータに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）、つまりこのライトデータが書き込まれた物理記憶位置のＰＢＡに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）が「１」に設定される。
【０１８７】
また、ＬＵＴ３２が更新され、付与されたｉＬＢＡがライトコマンドに含まれたＬＢＡと関連付けられる（ステップＳ１１５）。
【０１８８】
もし、最大参照カウント（Ｒｅｆｃｏｕｎｔ）が「１」であるならば（ステップＳ１０７のＹＥＳ）、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）には、２つ以上のＬＢＡから参照されているデータが存在しないことになる。その場合、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）に書き込まれるライトデータは、ｉＬＢＡを使用せずにＰＢＡで直接管理することができると判断できる。なお、この状況においてもｉＬＢＡを使用して管理することにしてもよい。
【０１８９】
続いて、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）が更新される（ステップＳ１０８）。このとき、ライトデータが書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）のライトデータが書き込まれる予定のＰＢＡ（新しいＰＢＡ）に対応する物理記憶位置に、ライトコマンドに含まれているＬＢＡとともに書き込まれる。
【０１９０】
そして、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）に対応するＳＢ管理テーブル２００−０が更新される（ステップＳ１０９）。このとき、ライトデータに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）、つまりこのライトデータが書き込まれた物理記憶位置のＰＢＡに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）が「１」に設定される。
【０１９１】
また、ＬＵＴ３２が更新され、ライトデータが書き込まれた物理記憶位置のＰＢＡがライトコマンドに含まれたＬＢＡと関連付けられる（ステップＳ１１６）。
【０１９２】
また、ライトコマンドに含まれるＬＢＡに対応するＰＢＡがＬＵＴ３２に存在する場合（ステップＳ１０２のＹＥＳ）、ライトデータの書き込みは二回目以降であることになる（二回目以降のＬＢＡ書き込み）。また、ライトコマンドに含まれるＬＢＡに対応するｉＬＢＡが存在しないことから重複データが存在しないため、ｉＬＢＡを使用しない方法でデータ管理が可能な状況にある。
【０１９３】
そして、ライトデータが書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−０）に書き込まれ、ＬＵＴ３２が更新され、ライトデータが書き込まれた物理記憶位置を指定する新しいＰＢＡがライトコマンドに含まれたＬＢＡと関連付けられる（ステップＳ１１６）。
【０１９４】
図１８のフローチャートは、ガベージコレクション動作の手順を示す。
【０１９５】
コントローラ４は、ＧＣを行うべきスーパーブロックをＧＣ対象スーパーブロック（コピー元ブロック）として選択する（ステップＳ２０１）。次に、コントローラ４は、ＳＢ管理テーブルを参照し、非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するＰＢＡを特定する（ステップＳ２０２）。
【０１９６】
続いて、コントローラ４は、特定されたＰＢＡに対応する物理記憶位置に格納されているデータを、即ち、非ゼロの参照カウントに対応するデータをコピー先ブロックにコピーする（ステップＳ２０３）。その後、コントローラ４は、ｉＬＵＴ３４を更新し、コピーされたデータが格納されているコピー先ブロック内の物理記憶位置を示すＰＢＡを、このコピーされたデータに対応するｉＬＢＡに関連付ける（ステップＳ２０４）。ステップＳ２０４では、コントローラ４は、さらに、コピー先ブロックに対応するＳＢ管理テーブルに、このコピーされたデータに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）をコピーする。
【０１９７】
次に、コントローラ４は、ＧＣ対象のスーパーブロック（コピー元ブロック）内に非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータが存在するか否かを判定する（ステップＳ２０５）。
【０１９８】
ＧＣ対象スーパーブロック（コピー元ブロック）内に非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータが存在するならば（ステップＳ２０５のＮＯ）、ステップＳ２０２の処理に移る。なお、ＧＣ対象スーパーブロック（コピー元ブロック）内に非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータが存在しなくなるまで、ステップＳ２０２〜Ｓ２０４の処理は繰り返される。
【０１９９】
ＧＣ対象スーパーブロック（コピー元ブロック）内に非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータが存在しなくなれば（ステップＳ２０５のＹＥＳ）、ガベージコレクション動作は完了する。
【０２００】
図１９のフローチャートは、本実施形態におけるデータリード動作の手順を示す。
【０２０１】
ホスト２からリードコマンドを受信すると（ステップＳ３０１のＹＥＳ）、コントローラ４は、ＬＵＴ３２を参照して、リードコマンドに含まれるＬＢＡに対応するｉＬＢＡを取得する（ステップＳ３０２）。次に、コントローラ４は、ｉＬＵＴ３４を参照し、取得したｉＬＢＡに対応するＰＢＡを取得する（ステップＳ３０３）。そして、コントローラ４は、取得したＰＢＡに対応する物理記憶位置に格納されたデータをリードする（ステップＳ３０４）。
【０２０２】
図２０は、各スーパーブロック管理テーブル内の参照カウント記憶領域部の構成例を示す。
【０２０３】
ＳＢ管理テーブルは、スーパーブロック（ＳＢ）毎に設けられている。ＳＢ管理テーブルは、対応するスーパーブロック（ＳＢ）に関する様々な管理情報（メタデータ）を保持する。管理情報（メタデータ）の例には、対応するスーパーブロック（ＳＢ）のプログラム／イレーズサイクルの数、対応するスーパーブロック（ＳＢ）の無効データ量（または有効データ量）が含まれていてもよい。
【０２０４】
さらに、ＳＢ管理テーブルは、対応するスーパーブロック（ＳＢ）に格納可能な全てのデータそれぞれの参照カウントを格納するための参照カウント記憶領域を有している。各ＳＢ管理テーブル内の一つの参照カウントポインタは、一定のサイズ分（例えば、１０２４ｂｉｔ）の一つの参照カウント記憶領域部の位置を指す。各ＳＢ管理テーブルは、複数の参照カウントポインタを含む。これにより、各ＳＢ管理テーブルには複数の参照カウント記憶領域部が関連付けられる。これら複数の参照カウント記憶領域部が、対応するＳＢ管理テーブル用の参照カウント記憶領域として利用される。
【０２０５】
例えば、一つのスーパーブロックのサイズが４ＧＢである場合、１Ｍ個の４ＫＢデータが一つのスーパーブロックに格納される。この場合、一つのＳＢ管理テーブルには、１Ｍ個の参照カウントを保持可能な参照カウント記憶領域が必要となる。
【０２０６】
一つの参照カウントビット長が２ビットであるならば、“００”は、対応するデータがどの論理アドレスからも参照されていないことを表すために使用され、“０１”は、対応するデータが一つの論理アドレスから参照されていることを表すために使用され、“１０”は、対応するデータが２つの論理アドレスから参照されていることを表すために使用され、“１１”は、対応するデータが３つの論理アドレスから参照されていることを表すために使用される。したがって、管理可能な最大参照カウントの値は３となる。
【０２０７】
一つの参照カウントビット長が３ビットであるならば、管理可能な最大参照カウントの値は７となる。一つの参照カウントビット長が４ビットであるならば、管理可能な最大参照カウントの値は１５となる。一つの参照カウントビット長が８ビットであるならば、管理可能な最大参照カウントの値は２５５となる。
【０２０８】
このように、参照カウントビット長が長いほど、管理可能な最大参照カウントの値は増えるが、参照カウント記憶領域によって消費されるメモリリソースの量も増加される。
【０２０９】
通常、参照カウントの値はデータ毎に異なる場合が多い。このため、同じスーパーブロックには、互いに参照カウントが異なるデータが混在される。参照カウントが異なるデータが同じスーパーブロックに混在されるという状況は、参照カウント記憶領域用に確保されたメモリリソースが浪費される要因となる。
【０２１０】
本実施形態では、ＧＣによって、大きな参照カウントを有するデータ群と小さな参照カウントを有するデータ群とが互いに分離される。これにより、同じ参照カウント範囲に属するデータ同士を同じスーパーブロックに格納することが可能となる。この結果、大きな参照カウントを有するデータ群が集められたスーパーブロックには、長いビット長を各々が有する多数の参照カウントを格納可能な大サイズの参照カウント記憶領域を含むＳＢ管理テーブルを確保し、小さい参照カウントを有するデータ群が集められたスーパーブロックには、短いビット長を各々が有する多数の参照カウントを格納可能な小サイズの参照カウント記憶領域を含むＳＢ管理テーブルを確保することが可能となる。
【０２１１】
このため、各ＳＢ管理テーブルは、参照カウント記憶領域のサイズを可変できるように構成されている。各ＳＢ管理テーブルは、最大サイズの参照カウント記憶領域を構成するために必要な参照カウント記憶領域部の数と同数の参照カウントポインタをあらかじめ含んでいてもよい。
【０２１２】
図２０では、異なるサイズの参照カウント記憶領域を含む３種類のＳＢ管理テーブルが例示されている。
【０２１３】
ＳＢ管理テーブル２００−０は、各々が１ビットの複数の参照カウントを格納可能な最小サイズの参照カウント記憶領域を含むＳＢ管理テーブルに設定されている。
【０２１４】
ＳＢ管理テーブル２００−０においては、ＳＢ管理テーブル２００−０に含まれる全参照カウントポインタのうち、１０００個の参照カウントポインタのみが利用されている。一つの参照カウントポインタは、１０２４ビット長を有する一つの参照カウント記憶領域部の位置を示す。各参照カウントのビット長は１ビットである。このため、参照カウント記憶領域部は、１０２４個の４ＫＢデータにそれぞれ対応する１０２４個のビットマップフラグ（ＢＭ）を含む。参照カウント（ビットマップフラグ）＝“０”は、対応する４ＫＢデータを参照している論理アドレスの数がゼロであることを示す。参照カウント（ビットマップフラグ）＝“１”は、対応する４ＫＢデータを参照している論理アドレスの数が１であることを示す。
【０２１５】
ＳＢ管理テーブル２００−１は、各々が２ビットの複数の参照カウントを格納可能な参照カウント記憶領域を含むＳＢ管理テーブルに設定されている。
【０２１６】
ＳＢ管理テーブル２００−１においては、ＳＢ管理テーブル２００−１に含まれる全参照カウントポインタのうち、２０００個の参照カウントポインタが利用されている。一つの参照カウントポインタは、１０２４ビット長を有する一つの参照カウント記憶領域部の位置を示す。各参照カウントのビット長は２ビットである。一つの参照カウント記憶領域部は、５１２個の参照カウントを含む。したがって、１０２４個の４ＫＢデータにそれぞれ対応する１０２４個の参照カウントの格納のために２つの参照カウント記憶領域部が利用される。
【０２１７】
ＳＢ管理テーブル２００−２は、各々が４ビットの複数の参照カウントを格納可能な参照カウント記憶領域を含むＳＢ管理テーブルに設定されている。
【０２１８】
ＳＢ管理テーブル２００−２においては、ＳＢ管理テーブル２００−２に含まれる全参照カウントポインタのうち、４０００個の参照カウントポインタが利用されている。一つの参照カウントポインタは、１０２４ビット長を有する一つの参照カウント記憶領域部の位置を示す。各参照カウントのビット長は４ビットである。一つの参照カウント記憶領域部は、２５６個の参照カウントを含む。したがって、１０２４個の４ＫＢデータにそれぞれ対応する１０２４個の参照カウントの格納のために４つの参照カウント記憶領域部が利用される。
【０２１９】
ＳＢ管理テーブル２００−０に関連付けられているスーパーブロック（ＳＢ）１００−０は、参照カウント（Ｒｅｆｃｏｕｎｔ）＝０〜１のデータを格納するためのスーパーブロック（ＳＢ）として利用される。  ＳＢ管理テーブル２００−１に関連付けられているスーパーブロック（ＳＢ）１００−１は、主として、参照カウント（Ｒｅｆｃｏｕｎｔ）＝２〜３のデータを格納するためのスーパーブロック（ＳＢ）として利用される。
【０２２０】
ＳＢ管理テーブル２００−２に関連付けられているスーパーブロック（ＳＢ）１００−２は、主として、参照カウント（Ｒｅｆｃｏｕｎｔ）＝４〜１５のデータを格納するためのスーパーブロック（ＳＢ）として利用される。
【０２２１】
図２１は、大きい参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータと小さい参照カウント（Ｒｅｆｃｏｕｎｔ）に対応するデータとを分離するガベージコレクション動作の概要を示す。
【０２２２】
ここでは、コピー先スーパーブロック（ＳＢ）２２１、２２２が割り当てられている。また、ＳＢ管理テーブル２２１Ａ、２２２Ａは、それぞれ、コピー先スーパーブロック（ＳＢ）２２１、２２２に関連付けられている。また、ＳＢ管理テーブル２２１Ａは、各々が４ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を有し、ＳＢ管理テーブル２２２Ａは、各々が２ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を有している。
【０２２３】
スーパーブロック（ＳＢ）２１０には、大きな参照カウント（Ｒｅｆｃｏｕｎｔ＝４〜１５）を有するデータｄ１、データｄ２、データｄ４、データｄ５と、小さな参照カウント（Ｒｅｆｃｏｕｎｔ＝１〜３）を有するデータｄ６、データｄ８と、ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）を有するデータｄ３、ｄ７、等が格納されている。
【０２２４】
スーパーブロック（ＳＢ）２１１には、大きな参照カウント（Ｒｅｆｃｏｕｎｔ＝４〜１５）を有するデータｄ１７と、小さな参照カウント（Ｒｅｆｃｏｕｎｔ＝１〜３）を有するデータｄ１１、データｄ１３、データｄ１４、データｄ１８と、ゼロの参照カウントを有するデータｄ１２、データｄ１５、データｄ１６、等が格納されている。
【０２２５】
スーパーブロック（ＳＢ）２１２には、大きな参照カウント（Ｒｅｆｃｏｕｎｔ＝４〜１５）を有するデータｄ２２、データｄ２３、データｄ２４と、小さな参照カウント（Ｒｅｆｃｏｕｎｔ＝１〜３）を有するデータｄ２７、データｄ２８と、ゼロの参照カウントを有するデータｄ２１、データｄ２５、データｄ２６、等が格納されている。
【０２２６】
スーパーブロック（ＳＢ）２１０がＧＣ対象スーパーブロック（コピー元ブロック）として選択された場合、コントローラ４は、スーパーブロック（ＳＢ）２１０に対応するＳＢ管理テーブル内に基づいて、スーパーブロック（ＳＢ）２１０に含まれ且つ第１の参照カウント範囲（ここでは、１〜３）に属する参照カウントを有するデータの集合を、コピー先スーパーブロック（ＳＢ）２２２にコピーし、スーパーブロック（ＳＢ）２１０に含まれ且つ第１の参照カウント範囲の上限（ここでは３）よりも大きい下限を有する第２の参照カウント範囲（ここでは、４〜１５）に属する参照カウントを有するデータの集合を、コピー先スーパーブロック（ＳＢ）２２１にコピーする。
【０２２７】
具体的には、大きな参照カウント（Ｒｅｆｃｏｕｎｔ＝４〜１５）を有するデータｄ１、データｄ２、データｄ４、データｄ５は、コピー先スーパーブロック（ＳＢ）２２１にコピーされ、小さな参照カウント（Ｒｅｆｃｏｕｎｔ＝１〜３）を有するデータｄ６、データｄ８は、コピー先スーパーブロック（ＳＢ）２２２にコピーされる。
【０２２８】
次に、スーパーブロック（ＳＢ）２１１がＧＣ対象スーパーブロック（コピー元ブロック）として選択された場合、コントローラ４は、スーパーブロック（ＳＢ）２１１に対応するＳＢ管理テーブル内に基づいて、スーパーブロック（ＳＢ）２１１に含まれ且つ第１の参照カウント範囲（ここでは、１〜３）に属する参照カウントを有するデータの集合を、コピー先スーパーブロック（ＳＢ）２２２にコピーし、スーパーブロック（ＳＢ）２１１に含まれ且つ第１の参照カウント範囲の上限（ここでは３）よりも大きい下限を有する第２の参照カウント範囲（ここでは、４〜１５）に属する参照カウントを有するデータの集合を、コピー先スーパーブロック（ＳＢ）２２１にコピーする。
【０２２９】
具体的には、大きな参照カウント（Ｒｅｆｃｏｕｎｔ＝４〜１５）を有するデータｄ１７は、コピー先スーパーブロック（ＳＢ）２２１にコピーされ、小さな参照カウント（Ｒｅｆｃｏｕｎｔ＝１〜３）を有するデータｄ１１、データｄ１３、データｄ１４、データｄ１８は、コピー先スーパーブロック（ＳＢ）２２２にコピーされる。
【０２３０】
次に、スーパーブロック（ＳＢ）２１２がＧＣ対象スーパーブロック（コピー元ブロック）として選択された場合、コントローラ４は、スーパーブロック（ＳＢ）２１２に対応するＳＢ管理テーブル内に基づいて、スーパーブロック（ＳＢ）２１２に含まれ且つ第１の参照カウント範囲（ここでは、１〜３）に属する参照カウントを有するデータの集合を、コピー先スーパーブロック（ＳＢ）２２２にコピーし、スーパーブロック（ＳＢ）２１２に含まれ且つ第１の参照カウント範囲の上限（ここでは３）よりも大きい下限を有する第２の参照カウント範囲（ここでは、４〜１５）に属する参照カウントを有するデータの集合を、コピー先スーパーブロック（ＳＢ）２２１にコピーする。
【０２３１】
具体的には、大きな参照カウント（Ｒｅｆｃｏｕｎｔ＝４〜１５）を有するデータｄ２２、データｄ２３、データｄ２４は、コピー先スーパーブロック（ＳＢ）２２１にコピーされ、小さな参照カウント（Ｒｅｆｃｏｕｎｔ＝１〜３）を有するデータｄ２７、データｄ２８は、コピー先スーパーブロック（ＳＢ）２２２にコピーされる。
【０２３２】
このように、ＧＣ動作においては、データがコピーされるべきコピー先ブロックが、このデータの参照カウント（Ｒｅｆｃｏｕｎｔ）の値に応じて変更される。この結果、同じ参照カウント範囲に属するデータを同じスーパーブロックに集めることが可能となる。よって、大きな参照カウントを有するデータ群のみを、各々が長いビット長を有する複数の参照カウントを格納可能なＳＢ管理テーブルに関連付けられたスーパーブロックに集めることができ、また、小さな参照カウントを有するデータ群のみを、各々が短いビット長を有する複数の参照カウントを格納可能なＳＢ管理テーブルに関連付けられたスーパーブロックに集めることができる。よって、参照カウントが異なるデータが同じスーパーブロックに混在されるという状況に比べ、参照カウント記憶領域用のメモリリソースの消費量を大幅に低減することができる。
【０２３３】
また、同じ参照カウント範囲に属するデータ群は、類似するライフタイムを有するデータ群である。したがって、同じスーパーブロックに含まれるデータそれぞれが同時期に無効化される確率を高めることが可能となり、これによってＧＣの頻度を抑えることを可能となる。このことは、ライトアンプリフィケーションを下げることを可能とし、この結果、ＳＳＤ３の寿命を最大限まで伸ばすことが可能となる。
【０２３４】
図２２は、ガベージコレクション動作に含まれるデータコピー動作と参照カウントコピー動作とを示す。
【０２３５】
ここでは、スーパーブロック（ＳＢ）１００−０がＧＣ対象スーパーブロック（ＧＣのコピー元ブロック）として選択されており、スーパーブロック（ＳＢ）１００−２およびスーパーブロック１００−３がコピー先スーパーブロックとして割り当てられている。
【０２３６】
また、ＳＢ管理テーブル２００−０、２００−２、２００−３は、それぞれ、スーパーブロック（ＳＢ）１００−０、１００−２、１００−３に関連付けられている。また、ＳＢ管理テーブル２００−２は、各々が２ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を有し、ＳＢ管理テーブル２００−３は、各々が３ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を有する。
【０２３７】
ＧＣ対象スーパーブロック（ＧＣのコピー元ブロック）であるスーパーブロック（ＳＢ）１００−０には、非ゼロの参照カウントに対応するＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０、ＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０と、ゼロの参照カウントに対応するＤａｔａＣ０、ＤａｔａＤ０、ＤａｔａＥ０、ＤａｔａＦ０、ＤａｔａＪ０、ＤａｔａＬ０、ＤａｔａＭ０、ＤａｔａＯ０が格納されている。
【０２３８】
また、参照カウント（Ｒｅｆｃｏｕｎｔ）＝４〜７に対応するデータであるＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０は、それぞれスーパーブロック（ＳＢ）１００−０内のＰＢＡ８、ＰＢＡ１０、ＰＢＡ１３、ＰＢＡ１５で指定される物理記憶位置に格納されている。参照カウント（Ｒｅｆｃｏｕｎｔ）＝１〜３に対応するデータであるＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０は、それぞれスーパーブロック（ＳＢ）１００−０内のＰＢＡ０、ＰＢＡ１、ＰＢＡ６、ＰＢＡ７で指定される物理記憶位置に格納されている。参照カウントがゼロであるＤａｔａＣ０、ＤａｔａＤ０、ＤａｔａＥ０、ＤａｔａＦ０、ＤａｔａＪ０、ＤａｔａＬ０、ＤａｔａＭ０、ＤａｔａＯ０は、それぞれスーパーブロック（ＳＢ）１００−０内のＰＢＡ２、ＰＢＡ３、ＰＢＡ４、ＰＢＡ５、ＰＢＡ９、ＰＢＡ１１、ＰＢＡ１２、ＰＢＡ１４に対応する物理記憶位置に格納されている。
【０２３９】
スーパーブロック（ＳＢ）１００−０に対応するＳＢ管理テーブル２００−０には、スーパーブロック（ＳＢ）１００−０内に格納されているデータそれぞれの参照カウント（Ｒｅｆｃｏｕｎｔ）が格納されている。
【０２４０】
スーパーブロック（ＳＢ）１００−０に対するＧＣ動作が開始されると、スーパーブロック（ＳＢ）１００−０内のＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０は、コピー先スーパーブロックであるスーパーブロック（ＳＢ）１００−２内のＰＢＡ１００、ＰＢＡ１０１、ＰＢＡ１０２、ＰＢＡ１０３で指定される物理記憶位置にそれぞれコピーされる。これに伴い、ＳＢ管理テーブル２００−０で管理されているＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０それぞれに対応する参照カウント（“１”、“２”、“２”、“３”）が、コピー先スーパーブロックであるスーパーブロック（ＳＢ）１００−２に対応するＳＢ管理テーブル２００−２にコピーされる。このとき、ＳＢ管理テーブル２００−２においては、ＤａｔａＡ０、ＤａｔａＢ０、ＤａｔａＧ０、ＤａｔａＨ０それぞれに対応する参照カウント（“１”、“２”、“２”、“３”）が、この順で連続して配置される。
【０２４１】
また、スーパーブロック（ＳＢ）１００−０内のＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０はそれぞれ、コピー先スーパーブロックであるスーパーブロック（ＳＢ）１００−３内のＰＢＡ１５０、ＰＢＡ１５１、ＰＢＡ１５２、ＰＢＡ１５３で指定されるそれぞれの物理記憶位置にコピーされる。これに伴い、ＳＢ管理テーブル２００−０で管理されているＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０それぞれに対応する参照カウント（“４”、“５”、“４”、“６”）が、コピー先スーパーブロックであるスーパーブロック（ＳＢ）１００−３に対応するＳＢ管理テーブル２００−３にコピーされる。このとき、ＳＢ管理テーブル２００−２においては、ＤａｔａＩ０、ＤａｔａＫ０、ＤａｔａＮ０、ＤａｔａＰ０それぞれに対応する参照カウント（“４”、“５”、“４”、“６”）が、この順で連続して配置される。
【０２４２】
図２３および図２４を用いて、あるデータに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）がオーバーフローした場合に実行されるデータコピー動作を説明する。ここで、スーパーブロック（ＳＢ）１００−０に関連付けられたＳＢ管理テーブル２００−０は、各々が２ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を有し、スーパーブロック（ＳＢ）１００−１に関連付けられたＳＢ管理テーブル２００−１は、各々が３ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を有するとする。
【０２４３】
スーパーブロック（ＳＢ）１００−０には、参照カウント（Ｒｅｆｃｏｕｎｔ）＝１〜３に対応するデータであるＤａｔａＡ０、ＤａｔａＣ０、ＤａｔａＤ０、ＤａｔａＥ０、ＤａｔａＦ０、ＤａｔａＧ０、ＤａｔａＨ０、ＤａｔａＩ０、ＤａｔａＪ０、ＤａｔａＫ０、ＤａｔａＬ０、ＤａｔａＭ０、ＤａｔａＮ０、ＤａｔａＯ０、ＤａｔａＰ０がそれぞれ、ＰＢＡ０、ＰＢＡ２、ＰＢＡ３、ＰＢＡ４、ＰＢＡ５、ＰＢＡ６、ＰＢＡ７、ＰＢＡ８、ＰＢＡ９、ＰＢＡ１０、ＰＢＡ１１、ＰＢＡ１２、ＰＢＡ１３、ＰＢＡ１４、ＰＢＡ１５で指定される物理記憶位置に格納されており、参照カウント（Ｒｅｆｃｏｕｎｔ）＝０に対応するデータであるＤａｔａＢ０がＰＢＡ１で指定される物理記憶位置に格納されている。
【０２４４】
スーパーブロック（ＳＢ）１００−１には、参照カウント＝４〜７に対応するデータであるＤａｔａＡ１、ＤａｔａＢ１、ＤａｔａＣ１、ＤａｔａＤ１、ＤａｔａＥ１、ＤａｔａＦ１、ＤａｔａＧ１、ＤａｔａＨ１、ＤａｔａＩ１、ＤａｔａＪ１、ＤａｔａＫ１がそれぞれ、ＰＢＡ５０、ＰＢＡ５１、ＰＢＡ５２、ＰＢＡ５３、ＰＢＡ５４、ＰＢＡ５５、ＰＢＡ５６、ＰＢＡ５７、ＰＢＡ５８、ＰＢＡ５９、ＰＢＡ６０で指定される物理記憶位置に格納されている。ＰＢＡ６１〜ＰＢＡ６５で指定される物理記憶位置にはデータが格納されておらず、消去状態の物理記憶位置（利用可能な物理記憶位置）に対応する。
【０２４５】
スーパーブロック（ＳＢ）１００−０に格納されているＤａｔａＨ０に対応する参照カウントの値は“３”である。このため、ＤａｔａＨ０に対応する参照カウントの値は、ホスト２からのＤａｔａＨ０に一致するライトデータの受信によって、ＳＢ管理テーブル２００−０の参照カウント記憶領域に格納可能な各参照カウントのビット長（ここでは２ビット）によって表現可能な最大値（ここでは３）を超える（オーバーフロー）。
【０２４６】
この場合、コントローラ４は、図２４に示すように、ＤａｔａＨ０を、ＳＢ管理テーブル２００−０のよりも長いビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含むＳＢ管理テーブル２００−１に関連付けられたスーパーブロック（ＳＢ）１００−１にコピーする。ＤａｔａＨ０は、スーパーブロック（ＳＢ）１００−１内の次の利用可能物理記憶位置（ここでは、ＰＢＡ６１によって指定される物理記憶位置）にコピーされる。これに伴い、コピー元スーパーブロック（スーパーブロック（ＳＢ）１００−０）内のＤａｔａＨ０が格納されていた物理記憶位置を示すＰＢＡ７の参照カウント（Ｒｅｆｃｏｕｎｔ）が３→０に更新される。これは、ＰＢＡ７で指定される物理記憶位置に格納されているデータを無効化するためである。また、ＤａｔａＨ０の参照カウント（ここでは、“４”）が、ＰＢＡ６１に対応するＳＢ管理テーブル２００−１内の位置にコピーされる。
【０２４７】
図２５を用いて、あるデータに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）がオーバーフローした場合に実行される参照カウント記憶領域拡張動作を説明する。ここで、スーパーブロック（ＳＢ）１００−０に関連付けられたＳＢ管理テーブル２００−０は、各々が２ビット長の複数の参照カウントを格納可能な参照カウント記憶領域を有する。
【０２４８】
いま、スーパーブロック（ＳＢ）１００−０には、参照カウント（Ｒｅｆｃｏｕｎｔ）＝１〜３に対応するデータであるＤａｔａＡ０、ＤａｔａＣ０、ＤａｔａＤ０、ＤａｔａＥ０、ＤａｔａＦ０、ＤａｔａＧ０、ＤａｔａＨ０、ＤａｔａＩ０、ＤａｔａＪ０、ＤａｔａＫ０、ＤａｔａＬ０、ＤａｔａＭ０、ＤａｔａＮ０、ＤａｔａＯ０、ＤａｔａＰ０がそれぞれ、ＰＢＡ０、ＰＢＡ２、ＰＢＡ３、ＰＢＡ４、ＰＢＡ５、ＰＢＡ６、ＰＢＡ７、ＰＢＡ８、ＰＢＡ９、ＰＢＡ１０、ＰＢＡ１１、ＰＢＡ１２、ＰＢＡ１３、ＰＢＡ１４、ＰＢＡ１５で指定される物理記憶位置に格納されており、参照カウント（Ｒｅｆｃｏｕｎｔ）＝０に対応するデータであるＤａｔａＢ０がＰＢＡ１で指定される物理記憶位置に格納されている。
【０２４９】
コントローラ４は、スーパーブロック（ＳＢ）１００−０内のＤａｔａＨ０に対応する参照カウントの値が、ホスト２からの、ＤａｔａＨ０に一致するライトデータを含むライトコマンドの受信によって、ＳＢ管理テーブル２００−０の参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超える場合、ＳＢ管理テーブル２００−０の参照カウント記憶領域のサイズを拡張することによってＳＢ管理テーブル２００−０の参照カウント記憶領域に格納可能な各参照カウントのビット長を長くする。
【０２５０】
具体的には、ホスト２からＤａｔａＨ０に一致するライトデータを含むライトコマンドが受信されると、ＤａｔａＨ０の参照カウント（Ｒｅｆｃｏｕｎｔ）が３→４に増加する。この場合、ＤａｔａＨ０の参照カウント（Ｒｅｆｃｏｕｎｔ）は、スーパーブロック（ＳＢ）１００−０に対応するＳＢ管理テーブル２００−０の参照カウント記憶領域に格納可能な参照カウントの最大値を超える（オーバーフロー）。このとき、図２５右側に示すように、例えば各参照カウントのビット長が２ビットから４ビットに変更されるように、ＳＢ管理テーブル２００−０の参照カウント記憶領域のサイズが拡張される。この場合、コントローラ４は、以前の参照カウント記憶領域を開放してもよく、そして、代わりに、大きなサイズの参照カウント記憶領域を確保し直してもよい。
【０２５１】
そして、コントローラ４は、ＤａｔａＨ０に対応する参照カウントを１増やし、これによってＤａｔａＨ０に対応する参照カウントを“３”から“４”に変更する。
【０２５２】
次に、図２６を用いて、ガレージコレクション対象ブロック（コピー元ブロック）候補の選択条件を説明する。
【０２５３】
コントローラ４は、スーパーブロック（ＳＢ）それぞれの無効データ量（または有効データ量）に基づいて、これらスーパーブロック（ＳＢ）からＧＣ対象ブロック（コピー元ブロック）の候補を選択する。この場合、コントローラ４は、大きな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）を、小さな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）よりも優先的にＧＣのコピー元ブロックの候補として選択する。つまり、参照カウントが大きいデータほど、そのデータが書き換えられる確率は低いので、コントローラ４は、大きな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）に関しては、たとえ小さな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）よりも有効データ量が多くても、ＧＣのコピー元ブロックの候補として選択する。
【０２５４】
複数のスーパーブロック（ＳＢ）は、第１の参照カウント範囲に属するデータの集合が集められているスーパーブロック（ＳＢ）群と、第２の参照カウント範囲に属するデータの集合が集められているスーパーブロック（ＳＢ）群とに分類されている。
【０２５５】
図２６において、スーパーブロック（ＳＢ）１００−０は、ある参照カウント範囲（第１の参照カウント範囲）に属するデータが集められているスーパーブロック（ＳＢ）群、つまり小さな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）群に分類され、スーパーブロック（ＳＢ）１００−１は、第１の参照カウント範囲の上限よりも大きい下限を有する参照カウント範囲（第２の参照カウント範囲）に属するデータが集められているスーパーブロック（ＳＢ）群、つまり大きな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）群に分類されている。
【０２５６】
このとき、コントローラ４は、スーパーブロック（ＳＢ）１００−０については、無効データ量がある閾値Ｘａよりも大きいという条件を満たす場合に、ＧＣのためのコピー元ブロックの候補として選択する。他方、スーパーブロック（ＳＢ）１００−１については、コントローラ４は、無効データ量が、閾値Ｘａよりも小さい値である閾値Ｘｂよりも大きいという条件を満たす場合に、ＧＣのためのコピー元ブロックの候補として選択する。
【０２５７】
上述したように、参照カウントが大きいデータほど、そのデータが書き換えられる確率は低い。したがって、通常、大きな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）内の各データは長い期間利用され続け、このスーパーブロック（ＳＢ）が他のデータの格納のために再利用される確率は低くなる。このため、大きな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）内に存在する無効データ（ゼロの参照カウントを有するデータ）の量だけ、ＳＳＤ３のオーバープロビジョニングは減少されることとなる。本実施形態では、上述したように、大きな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）に関しては、たとえ小さな参照カウントを有するデータが集められているスーパーブロック（ＳＢ）よりも有効データ量が多くても、ＧＣのコピー元ブロックの候補として選択される。したがって、ＳＳＤ３のオーバープロビジョニングの減少を低減でき、ライトアンプリフィケーションを下げることが可能となる。
【０２５８】
図２７は、ＧＣのためのコピー元ブロックの候補を選択する動作を示す。
【０２５９】
スーパーブロック（ＳＢ）１００−０は、参照カウント＝１〜３に対応するデータが集められている。スーパーブロック（ＳＢ）１００−０には、ＤａｔａＡ０〜ＤａｔａＰ０が、それぞれＰＢＡ０〜１５で指定される物理記憶位置に格納されている。スーパーブロック（ＳＢ）１００−０に格納されているデータの中で参照カウントがゼロのデータは、ＳＢ管理テーブル２００−０から、ＰＢＡ１で指定されるＤａｔａＢ０、ＰＢＡ４で指定されるＤａｔａＥ０、ＰＢＡ１１で指定されるＤａｔａＬ０、ＰＢＡ１２で指定されるＤａｔａＭ０であることが分かる。コントローラ４は、スーパーブロック（ＳＢ）１００−０の無効データ量が閾値Ｘ１よりも大きいことを条件に、スーパーブロック（ＳＢ）１００−０をＧＣ対象ブロックの候補、つまりＧＣのためのコピー元ブロックの候補として選択する。無効データ量は、ゼロの参照カウントを有しているデータの数によって表されてもよい。この場合、スーパーブロック（ＳＢ）１００−０の現在の無効データ量は４である。閾値Ｘ１が４に設定されているならば、スーパーブロック（ＳＢ）１００−０は、上述の条件を満たさないので、ＧＣのためのコピー元ブロックの候補として選択されない。
【０２６０】
スーパーブロック（ＳＢ）１００−１には、参照カウント＝４〜７に対応するデータが集められている。スーパーブロック（ＳＢ）１００−１には、ＤａｔａＡ１〜ＤａｔａＰ１が、それぞれＰＢＡ５０〜６５で指定される物理記憶位置に格納されている。スーパーブロック（ＳＢ）１００−１に格納されているデータの中で参照カウントがゼロのデータは、ＳＢ管理テーブル２００−１から、ＰＢＡ５３で指定されるＤａｔａＤ１、ＰＢＡ５５で指定されるＤａｔａＦ１、ＰＢＡ６０で指定されるＤａｔａＫ１、ＰＢＡ６２で指定されるＤａｔａＭ１であることが分かる。コントローラ４は、スーパーブロック（ＳＢ）１００−１の無効データ量が閾値Ｘ２よりも大きいことを条件に、スーパーブロック（ＳＢ）１００−１をＧＣ対象ブロックの候補、つまりＧＣのためのコピー元ブロックの候補として選択する。スーパーブロック（ＳＢ）１００−１の現在の無効データ量は、スーパーブロック（ＳＢ）１００−０の無効データ量と同じ４である。閾値Ｘ２は閾値Ｘ１よりも小さい。閾値Ｘ１が４に設定されているならば、閾値Ｘ２は３以下の値に設定される。したがって、スーパーブロック（ＳＢ）１００−１は、上述の条件を満たすので、ＧＣのためのコピー元ブロックの候補として選択される。
【０２６１】
図２８のフローチャートは、コピー元ブロックの候補を選択する動作の手順を示す。ここでは、説明を簡単にするために、ＮＡＮＤ型フラッシュメモリ５の全てのスーパーブロック（ＳＢ）を、参照カウントが１〜３の範囲に属するデータが集められたスーパーブロック（ＳＢ）群と、参照カウントが４〜７の範囲に属するデータが集められたスーパーブロック（ＳＢ）群と、参照カウントが８〜１５の範囲に属するデータが集められたスーパーブロック（ＳＢ）群とに分類する場合を想定する。
【０２６２】
まず、コントローラ４は、ある一つのスーパーブロック（ＳＢ）を選択する（ステップＳ４０１）。そして、コントローラ４は、選択されたスーパーブロック（ＳＢ）に関連付けられたＳＢ管理テーブルを参照し（ステップＳ４０２）、選択されたスーパーブロック（ＳＢ）に格納されているすべてのデータの参照カウント（Ｒｅｆｃｏｕｎｔ）に基づいて、それらの中から最大の参照カウント（Ｒｅｆｃｏｕｎｔ）を特定する（ステップＳ４０３）。
【０２６３】
特定された最大の参照カウント（Ｒｅｆｃｏｕｎｔ）が４未満であるならば（ステップＳ４０４のＹＥＳ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）が、参照カウントが１〜３の範囲に属するデータが集められたスーパーブロック（ＳＢ）群に属すると判定する。そして、コントローラ４は、選択されたスーパーブロック（ＳＢ）の無効データ量が閾値Ｘ１よりも多いか否かを判定する（ステップＳ４０５）。
【０２６４】
無効データ量が閾値Ｘ１よりも多いならば（ステップＳ４０５のＹＥＳ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）をＧＣ対象スーパーブロック（コピー元ブロック）の候補として選択する（ステップＳ４０６）。無効データ量が閾値Ｘ１以下であるならば（ステップＳ４０５のＮＯ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）をＧＣ対象スーパーブロック（コピー元ブロック）の候補として選択しない（ステップＳ４０７）。
【０２６５】
特定された最大の参照カウント（Ｒｅｆｃｏｕｎｔ）が４以上且つ８未満であるならば（ステップＳ４０４のＮＯ、ステップＳ４０８のＹＥＳ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）が、参照カウントが４〜７の範囲に属するデータが集められたスーパーブロック（ＳＢ）群に属すると判定する。そして、コントローラ４は、選択されたスーパーブロック（ＳＢ）の無効データ量が閾値Ｘ２（＜Ｘ１）よりも多いか否かを判定する（ステップＳ４０９）。
【０２６６】
無効データ量が閾値Ｘ２よりも多いならば（ステップＳ４０９のＹＥＳ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）をＧＣ対象スーパーブロック（コピー元ブロック）の候補として選択する（ステップＳ４１０）。無効データ量が閾値Ｘ２以下であるならば（ステップＳ４０９のＮＯ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）をＧＣ対象スーパーブロック（コピー元ブロック）の候補として選択しない（ステップＳ４１１）。
【０２６７】
特定された最大の参照カウント（Ｒｅｆｃｏｕｎｔ）が８以上であるならば（ステップＳ４０８のＮＯ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）が、参照カウントが８〜１５の範囲に属するデータが集められたスーパーブロック（ＳＢ）群に属すると判定する。そして、コントローラ４は、選択されたスーパーブロック（ＳＢ）の無効データ量が閾値Ｘ３（＜Ｘ２）よりも多いか否かを判定する（ステップＳ４１２）。
【０２６８】
無効データ量が閾値Ｘ３よりも多いならば（ステップＳ４１２のＹＥＳ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）をＧＣ対象スーパーブロック（コピー元ブロック）の候補として選択する（ステップＳ４１３）。無効データ量が閾値Ｘ３以下であるならば（ステップＳ４１２のＮＯ）、コントローラ４は、選択されたスーパーブロック（ＳＢ）をＧＣ対象スーパーブロック（コピー元ブロック）の候補として選択しない（ステップＳ４１４）。
【０２６９】
図２９は、スーパーブロック（ＳＢ）内の各ページに書き込まれるユーザデータと中間アドレス（ｉＬＢＡ）との関係を示す。
【０２７０】
コントローラ４は、ユーザデータとｉＬＢＡとのペアをスーパーブロック（ＳＢ）内のページに書き込む。この場合、コントローラ４は、まず、ｉＬＢＡとユーザデータとの組み合わせに基づいてエラー検出符号（ＥＤＣ）を生成してもよい。そして、コントローラ４は、ｉＬＢＡとユーザデータとＥＤＣのセットを、スーパーブロック（ＳＢ）内のページに書き込む。コントローラ４は、ユーザデータをスーパーブロック（ＳＢ）からリードする際、リードされたｉＬＢＡとリードされたユーザデータに基づいて計算された値と、リードされたＥＤＣとが一致するか否かを検査することで、ユーザデータが正しくリードされたか否かを判定する。  次に、図３０〜３４を用いて、ガベージコレクション（ＧＣ）動作中に実行される重複排除動作について説明する。
【０２７１】
図３０は、あるデータに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）がオーバーフローする場合に実行されるデータ書き込み動作を示す。
【０２７２】
ここで、スーパーブロック（ＳＢ）１００−０は、参照カウント（Ｒｅｆｃｏｕｎｔ）＝０〜３に対応するデータを格納するためのスーパーブロックであるとする。即ち、スーパーブロック（ＳＢ）１００−０に関連付けられたＳＢ管理テーブル２００−０は、各々が２ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を有する。
【０２７３】
ホスト２から受信されるライトデータ（ＤａｔａＸ）が、スーパーブロック（ＳＢ）１００−０に既に格納されているＤａｔａＡ０と一致するとする。もしこのＤａｔａＡ０の現在の参照カウントが３である場合には、ＤａｔａＡ０に対応する参照カウントの値を３から４に変更することが必要となる。しかし、ＤａｔａＡ０の参照カウント（Ｒｅｆｃｏｕｎｔ）を管理するＳＢ管理テーブル２００−０は、３よりも大きい参照カウント（Ｒｅｆｃｏｕｎｔ）を格納することはできないため、ＤａｔａＡ０の参照カウント（Ｒｅｆｃｏｕｎｔ）を３から４に変更することはできない（オーバーフロー）。
【０２７４】
そこで、コントローラ４は、ＤａｔａＸを書き込み先スーパーブロック（ここでは、スーパーブロック（ＳＢ）１００−１）に書き込む。このとき、ＬＵＴ３２が更新され、未使用のｉＬＢＡ（ここでは、ｉＬＢＡｘ）が、ＤａｔａＸに対応するＬＢＡｊに関連付けられる。また、ｉＬＵＴ３４が更新され、ＤａｔａＸが書き込まれたＮＡＮＤ型フラッシュメモリ５内の物理記憶位置を示すＰＢＡ６１が、ｉＬＢＡｘに関連付けられる。さらに、書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−１）の参照カウント（Ｒｅｆｃｏｕｎｔ）を管理するＳＢ管理テーブル２００−１において、ＤａｔａＸに対応する参照カウント（Ｒｅｆｃｏｕｎｔ）が１に設定される。
【０２７５】
次に、ＧＣ時に実行される重複排除動作について説明する。
【０２７６】
図３１では、ＤａｔａＸが書き込まれた書き込み先スーパーブロック（スーパーブロック（ＳＢ）１００−１）全体がホスト２からのライトデータで満たされた後にＧＣ対象スーパーブロック（ＧＣのためのコピー元ブロック）として選択され、且つＤａｔａＸと一致するＤａｔａＡ０の参照カウント（Ｒｅｆｃｏｕｎｔ）が３→２に減少している場合が例示されている。この場合、コントローラ４は、図３２に示すように、ＤａｔａＸ以外の非ゼロの参照カウントに対応するデータ（ＤａｔａＡ１、ＤａｔａＤ１、ＤａｔａＦ１、ＤａｔａＧ１、ＤａｔａＩ１、ＤａｔａＭ１、ＤａｔａＯ１）のみをコピー元ブロック（スーパーブロック（ＳＢ）１００−１）からコピー先ブロック（スーパーブロック（ＳＢ）１００−２）にコピーする。
【０２７７】
そして、コントローラ４は、図３３に示すように、非ゼロの参照カウント（Ｒｅｆｃｏｕｎｔ）の中で、ＤａｔａＸ（ＰＢＡ６１に対応）以外の参照カウント（Ｒｅｆｃｏｕｎｔ）を、ＳＢ管理テーブル２００−１からＳＢ管理テーブル２００−２にコピーする。即ち、ＤａｔａＡ１（ＰＢＡ５０に対応）、ＤａｔａＤ１（ＰＢＡ５３に対応）、ＤａｔａＦ１（ＰＢＡ５５に対応）、ＤａｔａＧ１（ＰＢＡ５６に対応）、ＤａｔａＩ１（ＰＢＡ５８に対応）、ＤａｔａＭ１（ＰＢＡ６２に対応）、ＤａｔａＯ１（ＰＢＡ６４に対応）の各参照カウント（Ｒｅｆｃｏｕｎｔ）が、コピー元ブロック（スーパーブロック（ＳＢ）１００−１）に対応するＳＢ管理テーブル２００−１から、コピー先スーパーブロック（スーパーブロック（ＳＢ）１００−２）に対応するＳＢ管理テーブル２００−２にコピーされる。
【０２７８】
また、コントローラ４は、ＤａｔａＡ０（ＰＢＡ０に対応）の参照カウント（Ｒｅｆｃｏｕｎｔ）を１増やす。これにより、ＤａｔａＸと一致するＤａｔａＡ０が格納されているスーパーブロック（ＳＢ）１００−０に対応するＳＢ管理テーブル２００−０においては、ＤａｔａＡ０（ＰＢＡ０に対応）の参照カウント（Ｒｅｆｃｏｕｎｔ）は、例えばへ、２から３に変更される
さらに、コントローラ４は、図３４に示すように、ＬＵＴ３２を更新して、ＤａｔａＡ０に対応するＰＢＡ０を保持しているｉＬＵＴ３４内のエントリを指すｉＬＢＡ（ここでは、ｉＬＢＡ０）を、ＤａｔａＸのＬＢＡ（ここでは、ＬＢＡｊ）に関連付ける。これにより、ＬＢＡｊを含むリードコマンドを受信したときに、ＬＢＡｊに対応するｉＬＢＡ０に基づいて、ｉＬＢＡ０と関連付いられているＰＢＡ０を参照できる。ゆえに、ＤａｔａＸと一致するＤａｔａＡ０をリードすることができる。
【０２７９】
図３５のフローチャートは、大きな参照カウントを有するデータと小さな参照カウントを有するデータを分離するためのＧＣ動作の手順を示す。
【０２８０】
コントローラ４は、非ゼロの参照カウントを有するデータとゼロの参照カウントを有するデータとが混在するスーパーブロック群からＧＣ対象スーパーブロック（コピー元ブロック）を選択する（ステップＳ５０１）。
【０２８１】
コントローラ４は、コピー元ブロックに対応するＳＢ管理テーブルに基づいて、コピー元ブロック内に含まれ且つ第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第１のコピー先ブロックにコピーする（ステップＳ５０２）。第１のコピー先ブロックは、第１のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含むＳＢ管理テーブルに関連付けられているスーパーブロックである。
【０２８２】
次いで、コントローラ４は、コピー元ブロックに対応するＳＢ管理テーブルに基づいて、コピー元ブロック内に含まれ且つ第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を、第２のコピー先ブロックにコピーする（ステップＳ５０３）。第２のコピー先ブロックは、第１のビット長よりも長い第２のビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含むＳＢ管理テーブルに関連付けられているスーパーブロックである。
【０２８３】
以上の処理により、第１の参照カウント範囲に属する参照カウントを有するデータと第２の参照カウント範囲に属する参照カウントを有するデータとが互いに異なるスーパーブロックに移動されるので、同じ参照カウント範囲に属するデータ群を同じスーパーブロックに集めることができる。したがって、各ＳＢ管理テーブルの参照カウント記憶領域の利用効率を高めることが可能となり、この結果、参照カウントそれぞれの管理に必要とされるメモリリソースの量を削減することができる。
【０２８４】
図３６のフローチャートは、あるデータに対応する参照カウントがオーバーフローする時に実行される重複データコピー処理の手順を示す。
【０２８５】
コントローラ４は、既に格納されているあるデータ（第１のデータ）の参照カウントがホスト２からの新たなライトデータの受信によってオーバーフローしたか否かを判定する（ステップＳ６０１）。ステップＳ６０１では、コントローラ４は、第１のデータに対応する参照カウントの値が、ホスト２からの第１のデータに一致するライトデータの受信によって、第１のデータが格納されている第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるか否かを判定する。
【０２８６】
第１のデータに対応する参照カウントの値が、第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるならば（ステップＳ６０１のＹＥＳ）、コントローラ４は、第１のデータを、第１のデータが格納されている第１のスーパーブロックに対応するＳＢ管理テーブル内の各参照カウントよりも長いビット長を各々が有する複数の参照カウントを格納可能な参照カウント記憶領域を含む管理テーブルに関連付けられた別のスーパーブロックにコピーする（ステップＳ６０２）。また、ステップＳ６０２では、コントローラ４は、図２４で説明したように、第１のデータがコピーされたスーパーブロックに対応するＳＢ管理テーブルを更新し、第１のデータに対応する参照カウントを１増やす。さらに、コントローラ４は、ｉＬＵＴ３４を更新して、第１のデータがコピーされた物理記憶位置を示すＰＢＡを、第１のデータに対応するｉＬＢＡに関連付ける。
【０２８７】
図３７のフローチャートは、あるデータに対応する参照カウントがオーバーフローする時に実行される参照カウント記憶領域拡張処理の手順を示す。
【０２８８】
コントローラ４は、既に格納されているあるデータ（第１のデータ）の参照カウントがホスト２からの新たなライトデータの受信によってオーバーフローしたか否かを判定する（ステップＳ７０１）。ステップＳ７０１では、コントローラ４は、第１のデータに対応する参照カウントの値が、ホスト２からの第１のデータに一致するライトデータの受信によって、第１のデータが格納されている第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるか否かを判定する。
【０２８９】
第１のデータに対応する参照カウントの値が、第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるならば（ステップＳ７０１のＹＥＳ）、コントローラ４は、第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域のサイズを拡張することによって第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長を長くする（ステップＳ７０２）。ステップＳ７０２では、図２０で説明したように、コントローラ４は、以前の参照カウント記憶領域を開放してもよく、そして、大きなサイズの参照カウント記憶領域を確保し直してもよい。
【０２９０】
図３８のフローチャートは、あるデータに対応する参照カウントがオーバーフローする時に実行されるデータ書き込み処理の手順を示す。
【０２９１】
コントローラ４は、既に格納されているあるデータ（第１のデータ）の参照カウントがホスト２からの新たなライトデータの受信によってオーバーフローしたか否かを判定する（ステップＳ８０１）。ステップＳ８０１では、コントローラ４は、第１のデータに対応する参照カウントの値が、ホスト２からの第１のデータに一致するライトデータの受信によって、第１のデータが格納されている第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるか否かを判定する。
【０２９２】
第１のデータに対応する参照カウントの値が、第１のスーパーブロックに対応するＳＢ管理テーブルの参照カウント記憶領域に格納可能な各参照カウントのビット長によって表現可能な最大値を超えるならば（ステップＳ８０１のＹＥＳ）、コントローラ４は、第１のデータに既に付与されているｉＬＢＡをライトデータのＬＢＡに関連付ける代わりに、以下の処理を実行する。
【０２９３】
コントローラ４は、ＬＵＴ３２を更新して、未使用のｉＬＢＡ（例えばｉＬＢＡｘ）をライトデータのＬＢＡに関連付ける（ステップＳ８０２）。次いで、コントローラ４は、ライトデータを、あるスーパーブロック（例えば、現在の書き込み先スーパーブロック）に書き込む（ステップＳ８０３）。コントローラ４は、ｉＬＵＴ３４を更新して、ライトデータが書き込まれたＮＡＮＤ型フラッシュメモリ５内の位置（物理記憶位置）を示すＰＢＡを、ライトデータのＬＢＡに関連付けられている上述のｉＬＢＡ（ｉＬＢＡｘ）に関連付ける（ステップＳ８０４）。そして、コントローラ４は、ライトデータが書き込まれたスーパーブロックに対応するＳＢ管理テーブルを更新して、ライトデータに対応する参照カウントを１に設定する（ステップＳ８０５）。
【０２９４】
この結果、ライトデータに一致している既存のデータ（第１のデータ）の現在の参照カウントの値が、利用可能な参照カウントの最大ビット長によって表現可能な最大値に達している場合であっても、このライトデータをＮＡＮＤ型フラッシュメモリ５に書き込むことができる。
【０２９５】
図３９は、ＬＢＡからＰＢＡを直接参照するアドレス参照経路と、ｉＬＢＡを介してＬＢＡからＰＢＡを参照するアドレス参照経路とが混在するアドレス参照構造を示す。
【０２９６】
図３９においては、ＬＢＡ３２は、ある一つのＬＢＡに、ｉＬＢＡまたはＰＢＡのいずれ一方を関連付けられるように構成されている。
【０２９７】
あるＬＢＡにｉＬＢＡが関連付けられている場合には、このＬＢＡからＰＢＡを直接参照するのではなく、ｉＬＢＡを介してこのＬＢＡからＰＢＡが参照される。この場合、上述したように、ＬＢＡ３２とｉＬＵＴ３４を含む２つのアドレス変換テーブルを利用したアドレス変換が実行される。
【０２９８】
一方、あるＬＢＡにＰＢＡが関連付けられている場合には、通常のＳＳＤと同様に、ＬＢＡからＰＢＡを直接参照することができ、これによって、例えばデータリード動作の性能を改善することができる。
【０２９９】
本実施形態では、ホスト２から受信されるライトデータに一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在していない場合においては、以下のいずれかが実行される。
（１）コントローラ４は、ハッシュＬＵＴ３３を更新して、ライトデータのハッシュ値に対して未使用のｉＬＢＡを付与し、そしてＬＵＴ３２を更新して、ライトデータのＬＢＡに対してこのｉＬＢＡを関連付ける。
（２）コントローラ４は、ＬＵＴ３２を更新して、ライトデータのＬＢＡに対してＰＢＡを直接関連付ける。
【０３００】
（２）のケースにおいては、このライトデータは、独占タイプのスーパーブロックに書き込まれてもよい。図３９において、スーパーブロック（ＳＢ）１００−１００、１００−１０１、１００−１０２…は、独占タイプのスーパーブロック（ＳＢ）を示している。独占タイプのスーパーブロック（ＳＢ）とは、単独のＬＢＡのみから参照されるデータを格納するためのスーパーブロック（ＳＢ）を意味する。独占タイプのスーパーブロック（ＳＢ）は、各々が１ビット長の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を含むＳＢ管理テーブルに関連付けられている。１ビット長の参照カウント＝０は、対応するデータがどのＬＢＡからも参照されていないこと、つまり対応するデータが無効データであることを示す。１ビット長の参照カウント＝１は、対応するデータが一つのＬＢＡのみから参照されていること、つまり対応するデータが有効データであることを示す。ライトデータが独占タイプのスーパーブロックに書き込まれるケースにおいては、書き込み先のスーパーブロックが独占タイプのスーパーブロックであることがＬＵＴ３２を通知され、これによって、ライトデータのＬＢＡに対してＰＢＡが関連付けられてもよい。
【０３０１】
（１）のケースにおいては、このライトデータは、共有タイプのスーパーブロックに書き込まれてもよい。図３９において、スーパーブロック（ＳＢ）１００−０、１００−１、１００−２、…、１００−５０、１００−５１、１００−５２、…は、共有タイプのスーパーブロック（ＳＢ）を示している。共有タイプのスーパーブロック（ＳＢ）とは、複数のＬＢＡから参照される可能性があるデータを格納するためのスーパーブロック（ＳＢ）を意味する。共有タイプのスーパーブロック（ＳＢ）は、各々が２ビット以上の複数の参照カウント（Ｒｅｆｃｏｕｎｔ）を格納可能な参照カウント記憶領域を含むＳＢ管理テーブルに関連付けられている。図３９においては、スーパーブロック（ＳＢ）１００−５０、１００−５１、１００−５２、…の各々に関連付けられたＳＢ管理テーブルは、各々が２ビット長（または８ビット長）の複数の参照カウントを格納可能な参照カウント記憶領域を有しており、スーパーブロック（ＳＢ）１００−０、１００−１、１００−２、…の各々に関連付けられたＳＢ管理テーブルは、各々が４ビット長（または１６ビット長）の複数の参照カウントを格納可能な参照カウント記憶領域を有している場合が例示されている。ライトデータが共有タイプのスーパーブロックに書き込まれるケースにおいては、書き込み先のスーパーブロックが共有タイプのスーパーブロックであることがＬＵＴ３２を通知され、これによって、ライトデータのＬＢＡに対してｉＬＢＡが関連付けられてもよい。
【０３０２】
共有タイプのスーパーブロック（ＳＢ）の各々においては、格納されているあるデータに対応する参照カウントのオーバーフローが生じた時に、対応するＳＢ管理テーブルの参照カウント記憶領域のサイズが拡張されてもよい。例えば、スーパーブロック（ＳＢ）１００−５０に格納されているあるデータに対応する参照カウントが３から４に変更されることが必要な時（あるいは２５５から２５６に変更されることが必要な時）、スーパーブロック（ＳＢ）１００−５０に対応するＳＢ管理テーブルの参照カウント記憶領域のサイズが拡張されることによってこのＳＢ管理テーブルの各参照カウントのビット長が２ビットから４ビットに（または８ビットから１６ビットに）変更されてもよい。
【０３０３】
ホスト２から受信されるライトデータに一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在していない場合、コントローラ４は、ｉＬＢＡ／ＰＢＡのどちらをこのライトデータのＬＢＡに関連付けてもよい。この場合、ホスト２から受信されるヒント情報に基づいて、コントローラ４は、ｉＬＢＡ／ＰＢＡのどちらをこのライトデータのＬＢＡに関連付けるかを決定してもよい。例えば、他のＬＢＡから参照される可能性があるＬＢＡ群を示すヒント情報がＳＳＤ３に通知されたケースにおいては、コントローラ４は、ライトデータに一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在しておらず、且つこのライトデータのＬＢＡが、このヒント情報によって通知されるＬＢＡ群に属していない場合に、ＰＢＡをこのライトデータのＬＢＡに関連付け、このライトデータを、独占タイプのスーパーブロックに書き込んでもよい。
【０３０４】
図４０は、すべてのデータに関してｉＬＢＡを介してＬＢＡからＰＢＡを参照するアドレス参照構造を示す。
【０３０５】
ホスト２から受信されるライトデータに一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在していない場合、コントローラ４は、ライトデータのハッシュ値に対して未使用のｉＬＢＡを付与し、ライトデータのＬＢＡに対してこのｉＬＢＡを関連付ける。そして、コントローラ４は、このライトデータを、独占タイプのスーパーブロックに書き込む。
【０３０６】
ある独占タイプのスーパーブロック（ＳＢ）においては、格納されているあるデータに対応する参照カウントのオーバーフローが生じた時に、対応するＳＢ管理テーブルの参照カウント記憶領域のサイズが拡張されてもよい。
【０３０７】
例えば、スーパーブロック（ＳＢ）１００−１０に格納されているあるデータに対応する参照カウントが１から２に変更されることが必要な時、スーパーブロック（ＳＢ）１００−１００に対応するＳＢ管理テーブルの参照カウント記憶領域のサイズが拡張されることによってこのＳＢ管理テーブルの各参照カウントのビット長が１ビットから２ビットに（または１ビットから８ビットに）変更されてもよい。
【０３０８】
また、共有タイプのスーパーブロック（ＳＢ）においても、格納されているあるデータに対応する参照カウントのオーバーフローが生じた時に、対応するＳＢ管理テーブルの参照カウント記憶領域のサイズが拡張されてもよい。
【０３０９】
例えば、スーパーブロック（ＳＢ）１００−５０に格納されているあるデータに対応する参照カウントが３から４に変更されることが必要な時（あるいは２５５から２５６に変更されることが必要な時）、スーパーブロック（ＳＢ）１００−５０に対応するＳＢ管理テーブルの参照カウント記憶領域のサイズが拡張されることによってこのＳＢ管理テーブルの各参照カウントのビット長が２ビットから４ビットに（または８ビットから１６ビットに）変更されてもよい。
【０３１０】
なお、ホスト２から受信されるライトデータに一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在していない場合、コントローラ４は、ホスト２から受信されるヒント情報に基づいて、このライトデータが書き込まれるべきスーパーブロック（ＳＢ）のタイプを決定してもよい。例えば、他のＬＢＡそれぞれから参照される可能性が高いＬＢＡ群を示すヒント情報がＳＳＤ３に通知されたケースにおいては、コントローラ４は、ライトデータに一致するデータ（重複データ）がＮＡＮＤ型フラッシュメモリ５に存在しておらず、且つこのライトデータのＬＢＡが、このヒント情報によって通知されるＬＢＡ群に属している場合に、このライトデータを、共有タイプのスーパーブロックに書き込んでもよい。
【０３１１】
図４１は、図３９のアドレス参照構造において使用されるルックアップテーブル（ＬＵＴ）３２の構成例を示す。
【０３１２】
ＬＵＴ３２は、複数のＬＢＡに対応する複数のエントリを含む。各エントリは、フラグフィールドと、ｉＬＢＡ／ＰＢＡフィールドとを含む。フラグフィールドは、対応するｉＬＢＡ／ＰＢＡフィールドの内容がｉＬＢＡまたはＰＢＡのいずれであるかを示すフラグを保持する。例えば、“１”のフラグは、対応するｉＬＢＡ／ＰＢＡフィールドの内容がｉＬＢＡであることを示し、“０”のフラグは、対応するｉＬＢＡ／ＰＢＡフィールドの内容がＰＢＡであることを示す。
【０３１３】
ホスト２からリードコマンドを受信した時、コントローラ４は、ＬＵＴ３２を参照して、リードコマンドに含まれるＬＢＡに対応するエントリからフラグおよびアドレス（ｉＬＢＡ／ＰＢＡ）を取得する。
【０３１４】
ＬＵＴ３２から取得したフラグが“１”であるならば、コントローラ４は、ＬＵＴ３２から取得したアドレス（ｉＬＢＡ）を使用してｉＬＵＴ３４を参照して、ｉＬＵＴ３４からＰＢＡを取得する。そして、コントローラ４は、ｉＬＵＴ３４から取得したＰＢＡによって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置からデータをリードする。
【０３１５】
一方、取得したフラグが“０”であるならば、コントローラ４は、ｉＬＵＴ３４を参照せず、ＬＵＴ３２から取得したアドレス（ＰＢＡ）によって指定されるＮＡＮＤ型フラッシュメモリ５内の物理記憶位置からデータをリードする。
【０３１６】
図４２は、ホスト２として機能する情報処理装置（コンピューティングデバイス）のハードウェア構成例を示す。
【０３１７】
この情報処理装置は、サーバのようなコンピューティングデバイスとして実現される。この情報処理装置は、プロセッサ（ＣＰＵ）１０１、メインメモリ１０２、ＢＩＯＳ−ＲＯＭ１０３、ネットワークコントローラ１０５、周辺インタフェースコントローラ１０６、コントローラ１０７、およびエンベデッドコントローラ（ＥＣ）１０８等を含む。
【０３１８】
プロセッサ１０１は、この情報処理装置の各コンポーネントの動作を制御するように構成されたＣＰＵである。このプロセッサ１０１は、複数のＳＳＤ３のいずれか１つからメインメモリ１０２にロードされる様々なプログラムを実行する。メインメモリ１０２は、ＤＲＡＭのようなランダムアクセスメモリから構成される。
【０３１９】
また、プロセッサ１０１は、不揮発性メモリであるＢＩＯＳ−ＲＯＭ１０３に格納された基本入出力システム（ＢＩＯＳ）も実行する。ＢＩＯＳはハードウェア制御のためのシステムプログラムである。
【０３２０】
ネットワークコントローラ１０５は、有線ＬＡＮコントローラ、無線ＬＡＮコントローラのような通信デバイスである。周辺インタフェースコントローラ１０６は、ＵＳＢデバイスのような周辺デバイスとの通信を実行するように構成されている。
【０３２１】
コントローラ１０７は、複数のコネクタ１０７Ａにそれぞれ接続されるデバイスとの通信を実行するように構成されている。複数のＳＳＤ３が複数のコネクタ１０７Ａにそれぞれ接続されてもよい。コントローラ１０７は、ＳＡＳ  ｅｘｐａｎｄｅｒ、ＰＣＩｅ  Ｓｗｉｔｃｈ、ＰＣＩｅ  ｅｘｐａｎｄｅｒ、フラッシュアレイコントローラ、またはＲＡＩＤコントローラ等である。
【０３２２】
ＥＣ１０８は、情報処理装置の電力管理を実行するように構成されたシステムコントローラとして機能する。ＥＣ１０８は、ユーザによる電源スイッチの操作に応じて情報処理装置をパワーオンおよびパワーオフする。
【０３２３】
図４３は、複数のＳＳＤ３とホスト２とを含む情報処理装置（コンピューティングデバイス）の構成例を示す。
【０３２４】
この情報処理装置は、ラックに収容可能な薄い箱形の筐体２０１を備える。多数のＳＳＤ３は筐体２０１内に配置されても良い。この場合、各ＳＳＤ３は筐体２０１の前面２０１Ａに設けられたスロットに取り外し可能に挿入されてもよい。
【０３２５】
システムボード（マザーボード）２０２は筐体２０１内に配置される。システムボード（マザーボード）２０２上においては、ＣＰＵ１０１、メインメモリ１０２、ネットワークコントローラ１０５、コントローラ１０７を含む様々な電子部品が実装されている。これら電子部品がホスト２として機能する。
【０３２６】
以上説明したように、本実施形態によれば、ＬＵＴ３２とｉＬＵＴ３４とを使用して２レベルのアドレス変換が実行される。ＬＵＴ３２においては、既に存在するあるデータに一致するライトデータの論理アドレス（ＬＢＡ）には、既に存在するデータの中間アドレス（ｉＬＢＡ）と同じ中間アドレス（ｉＬＢＡ）が関連付けられる。したがって、ｉＬＵＴ３４においては、あるデータを参照している論理アドレスの数にかかわらず、各物理アドレスは一つの中間アドレス（ｉＬＢＡ）のみに関連付けられる。
【０３２７】
よって、複数の論理アドレスから参照されているデータ（重複データ）がガベージコレクションによって別のブロックにコピーされたケースにおいても、コントローラ４は、この一つの中間アドレスに対応するｉＬＵＴ３４内の一つのエントリのみをコピー先物理アドレスに更新するという動作を行うだけで、これら複数の論理アドレスからこのコピー先物理アドレスを正しく参照できることを保証することができる。
【０３２８】
さらに、ある第１ブロック（スーパーブロック）に格納されている複数のデータそれぞれに対応する複数の参照カウントの全ては、この第１ブロックに対応する管理テーブル（ＳＢ管理テーブル）によって管理されている。そして、ある第１ブロックがＧＣのためのコピー元ブロックとして選択された場合には、この第１ブロックに対応する管理テーブルの内容に基づいて、コピー元ブロックに対応する管理テーブルに基づいて、コピー元ブロック内に含まれ且つ第１の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第１のコピー先ブロックにコピーし、コピー元ブロック内に含まれ且つ前記第１の参照カウント範囲の上限よりも大きい下限を有する第２の参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を第２のコピー先ブロックにコピーする、動作が実行される。これにより、同じ参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を同じブロックに集めることが可能となる。よって、参照カウントが異なるデータが同じスーパーブロックに混在されるという状況に比べ、参照カウント記憶領域用のメモリリソースの消費量を大幅に低減することができる。この結果、重複排除のために必要な管理データの格納に必要なメモリリソースを節約することができる。
【０３２９】
また、同じ参照カウント範囲に属するデータ群は、類似するライフタイムを有するデータ群である。したがって、同じ参照カウント範囲に属する参照カウントにそれぞれ対応するデータの集合を同じブロックに集めることにより、同じブロックに含まれるデータそれぞれが同時期に無効化される確率を高めることが可能となり、これによってＧＣの頻度を抑えることを可能となる。このことは、ライトアンプリフィケーションを下げることを可能とし、この結果、ＳＳＤ３の寿命を最大化することが可能となる。
【０３３０】
なお、本実施形態では、複数の物理ブロックを含むスーパーブロックの単位で書き込み先ブロック／コピー先ブロックの割り当て、消去動作、ライト動作、およびリード動作を行う場合を説明したが、物理ブロックの単位で書き込み先ブロック／コピー先ブロックの割り当て、消去動作、ライト動作、およびリード動作を行ってもよい。換言すれば、第１ブロックに含まれる物理ブロックの数は１以上であればよい。
【０３３１】
なお、本実施形態では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを例示した。しかし、本実施形態の機能は、例えば、ＭＲＡＭ（Ｍａｇｎｅｔｏｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＰＲＡＭ（Ｐｈａｓｅ  ｃｈａｎｇｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＲｅＲＡＭ（Ｒｅｓｉｓｔｉｖｅ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又は、ＦｅＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）のような他の様々な不揮発性メモリにも適用できる。
【０３３２】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０３３３】
２…ホスト、３…ＳＳＤ、４…コントローラ、５…ＮＡＮＤ型フラッシュメモリ、２１…重複排除処理部、２２…ＧＣ動作制御部、２３…データ分離動作制御部、３２…ＬＵＴ、３３…ハッシュＬＵＴ、３４…ｉＬＵＴ。
【図１】
2019057172.tif 000003
【図２】
2019057172.tif 000004
【図３】
2019057172.tif 000005
【図４】
2019057172.tif 000006
【図５】
2019057172.tif 000007
【図６】
2019057172.tif 000008
【図７】
2019057172.tif 000009
【図８】
2019057172.tif 000010
【図９】
2019057172.tif 000011
【図１０】
2019057172.tif 000012
【図１１】
2019057172.tif 000013
【図１２】
2019057172.tif 000014
【図１３】
2019057172.tif 000015
【図１４】
2019057172.tif 000016
【図１５】
2019057172.tif 000017
【図１６】
2019057172.tif 000018
【図１７】
2019057172.tif 000019
【図１８】
2019057172.tif 000020
【図１９】
2019057172.tif 000021
【図２０】
2019057172.tif 000022
【図２１】
2019057172.tif 000023
【図２２】
2019057172.tif 000024
【図２３】
2019057172.tif 000025
【図２４】
2019057172.tif 000026
【図２５】
2019057172.tif 000027
【図２６】
2019057172.tif 000028
【図２７】
2019057172.tif 000029
【図２８】
2019057172.tif 000030
【図２９】
2019057172.tif 000031
【図３０】
2019057172.tif 000032
【図３１】
2019057172.tif 000033
【図３２】
2019057172.tif 000034
【図３３】
2019057172.tif 000035
【図３４】
2019057172.tif 000036
【図３５】
2019057172.tif 000037
【図３６】
2019057172.tif 000038
【図３７】
2019057172.tif 000039
【図３８】
2019057172.tif 000040
【図３９】
2019057172.tif 000041
【図４０】
2019057172.tif 000042
【図４１】
2019057172.tif 000043
【図４２】
2019057172.tif 000044
【図４３】
2019057172.tif 000045