(57)【要約】【課題】コンパクション対象データ探索のための有効データマップを保持することなく、コンパクション対象の有効データを検索することができるメモリシステムを提供する。【解決手段】実施形態によれば、ログ情報生成部１５２は、データ書き込み前にデータ記録位置とそのアドレスとを対応付けたログを含むログ情報を生成する。ログ情報記録位置決定部１５１は、データ書き込み前に書き込み先のデータブロック内でログ情報の書き込み位置が並列動作要素間で分散されるようにデータの開始位置を決定する。データ処理部１５３は、ＲＡＭ１４のデータとログ情報とを開始位置から始まるようにデータ記録領域に書き込む書き込み処理を行う。コンパクション対象データ判定部１５５は、コンパクション対象のデータブロック内の全てのデータ記録領域のログ情報と、データ記録位置管理テーブル１４２１と、を用いて、データブロック中の有効データの記録位置を取得する。【選択図】図１
2014021622.tif 000002
【特許請求の範囲】
【請求項１】
記憶領域が複数の並列動作要素で構成され、記録されるデータの位置管理をデータ管理単位で行い、前記データ管理単位の自然数倍のアクセス単位の大きさのアクセス領域が前記並列動作要素ごとに設けられてなるデータ記録領域を所定の数含むデータブロックを複数有する不揮発性の第１記憶部と、
ホスト装置と前記第１記憶部との間でやり取りされるデータ、または前記第１記憶部内で移動されるデータを一時的に記憶する第２記憶部と、
前記第１記憶部と前記第２記憶部との間のデータ転送を行う制御部と、
を備えるメモリシステムであって、
前記第２記憶部は、前記第１記憶部に記憶されるデータに関して、割り当てられるアドレスと、前記第１記憶部内での前記データブロックと前記データ管理単位とで規定されるデータ記録位置と、を対応付けたデータ記録位置管理情報を有し、
前記制御部は、
データを前記第１記憶部に書き込む前に、前記データが書き込まれるデータ記録位置とそのアドレスとを対応付けたログを、書き込み先の前記データ記録領域の前記データ管理単位ごとに生成したログ情報を生成するログ情報生成手段と、
前記データを前記第１記憶部に書き込む前に、書き込み先のデータブロック内で前記ログ情報の書き込み位置が前記並列動作要素間で分散されるように、前記データの開始位置を決定するログ情報記録位置決定手段と、
前記第２記憶部の前記データと前記ログ情報とを前記開始位置から始まるように前記データ記録領域に書き込む書き込み処理と、前記第１記憶部から前記第２記憶部にデータを読み出す読み出し処理と、を行うデータ処理手段と、
コンパクション処理を行う際に、コンパクション対象となるデータブロック内の全ての前記データ記録領域の前記ログ情報と、前記データ記録位置管理情報と、を用いて、前記データブロック中の有効データの記録位置を取得するコンパクション対象データ判定手段と、
を備え、
前記データ処理手段は、コンパクション処理時に、前記コンパクション対象データ判定手段から取得した前記有効データの記録位置を用いて前記有効データを前記第２記憶部に読み出し、該有効データを前記ログ情報生成手段によって生成されたログ情報とともに、書き込み先のデータ記録領域に書き込むことを特徴とするメモリシステム。
【請求項２】
前記データブロック内の前記データ記憶領域に対して順に付された番号をｎ（ｎは０以上の整数）とし、前記並列動作要素に対して順に付された番号をｍ（ｍは自然数）とした場合に、
前記ログ情報記録位置決定手段は、前記データの書き込み開始位置となるデータ開始並列動作要素を次式（１）によって求めることを特徴とする請求項１に記載のメモリシステム。
データ開始並列動作要素＝ｎ  ｍｏｄｕｌｏ  ｍ  ・・・（１）
【請求項３】
前記並列動作要素は、複数のバンクを有し、
前記データ記録領域は、前記各並列動作要素に対して前記バンクの数の前記アクセス領域を有し、
前記データ処理手段は、バンクインタリーブによって、前記データ記録領域への前記データの書き込み、または前記データ記録領域からの前記データの読み出しを行い、
前記ログ情報記録位置決定手段は、前記データ記録領域が属する前記データブロック内で前記ログ情報の書き込み位置が前記並列動作要素間で分散されるとともに、前記バンク間でも分散されるように、前記データの開始位置を決定することを特徴とする請求項１または２に記載のメモリシステム。
【請求項４】
前記データブロック内の前記データ記憶領域に対して順に付された番号をｎ（ｎは０以上の整数）とし、前記並列動作要素に対して順に付された番号をｍ（ｍは自然数）とし、前記バンクに対して順に付された番号をｓ（ｓは自然数）とした場合に、
前記ログ情報記録位置決定手段は、前記データの書き込み開始位置となるデータ開始並列動作要素とデータ開始バンクをそれぞれ次式（２）、（３）によって求めることを特徴とする請求項３に記載のメモリシステム。
データ開始並列動作要素＝ｎ  ｍｏｄｕｌｏ  ｍ  ・・・（２）
データ開始バンク＝ｎ／ｍ  ｍｏｄｕｌｏ  ｓ  ・・・（３）
【請求項５】
前記データ処理手段は、コンパクション処理の際に、前記各並列動作要素から前記コンパクション対象となる前記データブロックの異なる前記データ記録領域の前記ログ情報を含む前記アクセス領域を読み出すことを特徴とする請求項１から４のいずれか１つに記載のメモリシステム。
【請求項６】
前記コンパクション対象データ判定手段は、前記ログの前記データのアドレスに対応付けられた前記データ記録位置と、前記データ記録位置管理情報中の対応する前記データ記録位置と、が一致する場合に、前記データ記録位置に記録されているデータを有効データと判定し、前記データ記録位置を取得することを特徴とする請求項１から５のいずれか１つに記載のメモリシステム。
【請求項７】
記憶領域が複数の並列動作要素で構成され、記録されるデータの位置管理をデータ管理単位で行い、前記データ管理単位の自然数倍のアクセス単位の大きさのアクセス領域が前記並列動作要素ごとに設けられてなるデータ記録領域を所定の数含むデータブロックを複数有する不揮発性の第１記憶部と、
ホスト装置と前記第１記憶部との間でやり取りされるデータ、または前記第１記憶部内で移動されるデータを一時的に記憶し、前記第１記憶部に記憶されるデータに関して、割り当てられるアドレスと、前記第１記憶部内での前記データブロックと前記データ管理単位とで規定されるデータ記録位置と、を対応付けたデータ記録位置管理情報を有する第２記憶部と、
前記第１記憶部と前記第２記憶部との間のデータ転送を行う制御部と、
を備えるメモリシステムの制御方法であって、
コンパクション対象となるデータブロックを構成する前記データ記録領域から、データが書き込まれるデータ記録位置とそのアドレスとを対応付けたログを前記データ記録領域の前記データ管理単位ごとに生成したログ情報を読み出すログ情報読み出し工程と、
前記ログ情報読み出し工程で読み出されるコンパクション対象となるデータブロック内の全ての前記データ記録領域の前記ログ情報と、前記データ記録位置管理情報と、を用いて、前記データブロック中の有効データの記録位置を取得するコンパクション対象データ判定工程と、
前記コンパクション対象データ判定工程で取得した前記有効データの記録位置を用いて前記有効データを前記第２記憶部に読み出す有効データ読み出し工程と、
読み出した前記有効データを書き込み先のデータ記録領域に書き込むコンパクション工程と、
を含むことを特徴とするメモリシステムの制御方法。
【請求項８】
データを前記第１記憶部に書き込むデータ書き込み工程をさらに含み、
前記コンパクション工程または前記データ書き込み工程では、
データが書き込まれるデータ記録位置とそのアドレスとを対応付けた前記ログを、書き込み先の前記データ記録領域の前記データ管理単位ごとに生成した前記ログ情報を生成するログ情報生成工程と、
書き込み先のデータブロック内で前記ログ情報の書き込み位置が前記並列動作要素間で分散されるように、前記データの開始位置を決定するログ情報記録位置決定工程と、
前記第２記憶部の前記データと前記ログ情報とを前記開始位置から始まるように前記データ記録領域に書き込む書き込み工程と、
を含むことを特徴とする請求項７に記載のメモリシステムの制御方法。
【請求項９】
前記データブロック内の前記データ記憶領域に対して順に付された番号をｎ（ｎは０以上の整数）とし、前記並列動作要素に対して順に付された番号をｍ（ｍは自然数）とした場合に、
前記ログ情報記録位置決定工程では、前記データの書き込み開始位置となる前記データ開始並列動作要素を次式（４）によって求めることを特徴とする請求項８に記載のメモリシステムの制御方法。
データ開始並列動作要素＝ｎ  ｍｏｄｕｌｏ  ｍ  ・・・（４）
【請求項１０】
前記並列動作要素は、複数のバンクを有し、
前記データ記録領域は、前記各並列動作要素に対して前記バンクの数の前記アクセス領域を有し、
前記ログ情報読み出し工程では、バンクインタリーブによって、前記データ記録領域からの前記ログ情報を含むデータの読み出しを行い、
前記ログ情報記録位置決定工程では、前記データ記録領域が属する前記データブロック内で前記ログ情報の書き込み位置が前記並列動作要素間で分散されるとともに、前記バンク間でも分散されるように、前記データの開始位置を決定することを特徴とする請求項８に記載のメモリシステムの制御方法。
【請求項１１】
前記データブロック内の前記データ記憶領域に対して順に付された番号をｎ（ｎは０以上の整数）とし、前記並列動作要素に対して順に付された番号をｍ（ｍは自然数）とし、前記バンクに対して順に付された番号をｓ（ｓは自然数）とした場合に、
前記ログ情報記録位置決定工程では、前記データの書き込み開始位置となる前記データ開始並列動作要素と前記データ開始バンクをそれぞれ次式（５）、（６）によって求めることを特徴とする請求項１０に記載のメモリシステムの制御方法。
データ開始並列動作要素＝ｎ  ｍｏｄｕｌｏ  ｍ  ・・・（５）
データ開始バンク＝ｎ／ｍ  ｍｏｄｕｌｏ  ｓ  ・・・（６）
【請求項１２】
前記ログ情報読み出し工程では、前記各並列動作要素から読み出す前記アクセス領域は、前記コンパクション対象となる前記データブロックの異なる前記データ記録領域の前記ログ情報を含む前記アクセス領域を読み出すことを特徴とする請求項８から１１のいずれか１つに記載のメモリシステムの制御方法。
【請求項１３】
前記コンパクション対象データ判定工程では、前記ログ情報の前記データのアドレスに対応付けられた前記データ記録位置と、前記データ記録位置管理情報中の対応する前記データ記録位置と、が一致する場合に、前記データ記録位置に記録されているデータを有効データと判定し、前記データ記録位置を取得することを特徴とする請求項７から１２のいずれか１つに記載のメモリシステムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、メモリシステムおよびその制御方法に関する。
【背景技術】
【０００２】
ＮＡＮＤ型フラッシュメモリなどの不揮発性メモリを用いたメモリシステムでは、物理的な消去単位（以下、消去ブロックという）が、ホストからの最小のアクセス可能なデータサイズに対して非常に大きいため、ホストから同一の論理アドレスへの上書きや、既に書かれたデータの消去の要求が来ても、物理的なデータ消去は行わず、不揮発性メモリの異なる物理アドレス領域に新しいデータを追加記録していく書き込み制御方式が採られている。このような方式で、書き込み消去を繰り返して使用していると、無効データを含んだブロックが増え、新たにデータを書き込むための領域が減っていってしまう。そのため、複数のブロックから有効データだけを集め、他のブロックにコピーした上で、新たな書き込みを行えるよう、古いブロックの内容を消去するコンパクション（ガベージコレクション）処理が実行される。
【０００３】
一般的にメモリシステムでは、有効データの配置を有効データマップとして保持しており、コンパクション処理において、この有効データマップを使用してコンパクション対象となる有効データを探索する。しかし、メモリシステムでは、有効データマップを保持するための専用メモリ領域が必要であり、その領域はメモリシステムが搭載するＮＡＮＤ型フラッシュメモリの容量に比例して増大していくという問題がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１０−１７６７０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の一つの実施形態は、コンパクション対象データ探索のための有効データマップを保持することなく、コンパクション対象となる有効データを検索することができるメモリシステムおよびその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一つの実施形態によれば、第１記憶部と、第２記憶部と、制御部と、を備えるメモリシステムが提供される。前記第１記憶部は、不揮発性であり、記憶領域が複数の並列動作要素で構成され、記録されるデータの位置管理をデータ管理単位で行い、前記データ管理単位の自然数倍のアクセス単位の大きさのアクセス領域が前記並列動作要素ごとに設けられてなるデータ記録領域を所定の数含むデータブロックを複数有する。前記第２記憶部は、ホスト装置と前記第１記憶部との間でやり取りされるデータ、または前記第１記憶部内で移動されるデータを一時的に記憶する。前記制御部は、前記第１記憶部と前記第２記憶部との間のデータ転送を行う。前記第２記憶部は、前記第１記憶部に記憶されるデータに関して、割り当てられるアドレスと、前記第１記憶部内での前記データブロックと前記データ管理単位とで規定されるデータ記録位置と、を対応付けたデータ記録位置管理情報を有する。前記制御部は、ログ情報生成手段と、ログ情報記録位置決定手段と、データ処理手段と、コンパクション対象データ判定手段と、を備える。前記ログ情報生成手段は、データを前記第１記憶部に書き込む前に、前記データが書き込まれるデータ記録位置とそのアドレスとを対応付けたログを、書き込み先の前記データ記録領域の前記データ管理単位ごとに生成したログ情報を生成する。前記ログ情報記録位置決定手段は、前記データを前記第１記憶部に書き込む前に、書き込み先のデータブロック内で前記ログ情報の書き込み位置が前記並列動作要素間で分散されるように、前記データの開始位置を決定する。前記データ処理手段は、前記第２記憶部の前記データと前記ログ情報とを前記開始位置から始まるように前記データ記録領域に書き込む書き込み処理と、前記第１記憶部から前記第２記憶部にデータを読み出す読み出し処理と、を行う。前記コンパクション対象データ判定手段は、コンパクション処理を行う際に、コンパクション対象となるデータブロック内の全ての前記データ記録領域の前記ログ情報と、前記データ記録位置管理情報と、を用いて、前記データブロック中の有効データの記録位置を取得する。前記データ処理部は、コンパクション処理時に、前記コンパクション対象データ判定手段から取得した前記有効データの記録位置を用いて前記有効データを前記第２記憶部に読み出し、該有効データを前記ログ情報生成手段によって生成されたログ情報とともに、書き込み先のデータ記録領域に書き込む。
【図面の簡単な説明】
【０００７】
【図１】図１は、この実施形態によるメモリシステムの構成を模式的に示すブロック図である。
【図２】図２は、この実施形態におけるＮＡＮＤメモリでのデータ管理単位を模式的に示す図である。
【図３】図３は、管理情報の一例を模式的に示す図である。
【図４】図４は、データ記録位置管理テーブルとログ情報の一例を示す図である。
【図５】図５は、ログ情報記録位置をチャネル分散させる場合の一例を示す図である。
【図６】図６は、バンクインタリーブの仕組みを説明する図である。
【図７】図７は、ログ情報記録位置をチャネル分散およびバンク分散させる場合の一例を示す図である。
【図８】図８は、書き込み処理の手順の一例を示すフローチャートである。
【図９】図９は、コンパクション処理の手順の一例を示すフローチャートである。
【図１０】図１０は、コンパクション対象データのデータ記録位置の取得処理の手順の一例を示すフローチャートである。
【図１１】図１１は、コンパクション対象データの判定処理の一例を模式的に示す図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかるメモリシステムおよびその制御方法を詳細に説明する。なお、本実施形態により本発明が限定されるものではない。
【０００９】
図１は、この実施形態によるメモリシステムの構成を模式的に示すブロック図である。このメモリシステム１０は、コンピュータシステムに用いられる外部記憶装置として不揮発性メモリを搭載したＳＳＤ（Solid  State  Drive）である。以下では、不揮発性メモリとしてＮＡＮＤ型フラッシュメモリを用いる場合を例に挙げる。
【００１０】
メモリシステム１０は、ホストインタフェース部１１、第１記憶部であるＮＡＮＤ型フラッシュメモリ（以下、ＮＡＮＤメモリという）１２−０〜１２−１５（なお、以下では、それぞれのＮＡＮＤメモリ１２−０〜１２−１５を特に区別する必要がない場合には、ＮＡＮＤメモリ１２と表記する）、ＮＡＮＤコントローラ（チャネル制御部）１３、第２記憶部であるＲＡＭ（Random  Access  Memory）１４、および制御部１５を備える。
【００１１】
ホストインタフェース部１１は、ＡＴＡ（Advanced  Technology  Attachment）インタフェースなどのメモリ接続インタフェースであり、パーソナルコンピュータまたはＣＰＵ（Central  Processing  Unit）コアなどの図示しないホスト装置との間のインタフェースである。
【００１２】
ＮＡＮＤメモリ１２は、データを不揮発に記憶することができる記憶装置であり、ユーザデータやプログラム、メモリシステム１０内でのデータの格納位置（記録位置）を管理する管理情報などの保存用の記憶部として使用される。具体的には、ホスト装置側によって指定されたデータを記憶したり、ＮＡＮＤメモリ１２でのデータ記録位置を管理する管理情報やファームウェアプログラムなどの不揮発に保存したい重要なデータを記憶したりする。
【００１３】
ここでは、８並列動作を行う８個の並列動作要素１２１−０〜１２１−７を有し、８個の並列動作要素１２１−０〜１２１−７は、８個のチャネル（ｃｈ０〜ｃｈ７）によってそれぞれ８個のＮＡＮＤコントローラ１３に接続されている。各並列動作要素１２１−０〜１２１−７は、バンクインタリーブが可能な複数のバンク（ここでは２つのバンクＢａｎｋ０，Ｂａｎｋ１）によって構成されている。この例では、並列動作要素１２１−０は、ＮＡＮＤメモリ１２−０，１２−８によって構成され、並列動作要素１２１−１は、ＮＡＮＤメモリ１２−１，１２−９によって構成され、・・・、並列動作要素１２１−７は、ＮＡＮＤメモリ１２−７，１２−１５によって構成されている。
【００１４】
各ＮＡＮＤメモリ１２−０〜１２−１５は、それぞれＮＡＮＤメモリチップに対応している場合もあるが、同一チャネルに接続された隣接するバンクに所属するＮＡＮＤメモリ１２−０〜１２−１５、たとえばＮＡＮＤメモリ１２−０とＮＡＮＤメモリ１２−８とで１つのＮＡＮＤメモリチップを構成している場合もある。また、上記では、チャネル数が８であり、チャネル毎のバンク数が２である場合を例示しているが、チャネル数とバンク数はこれに限定されるものではない。このように、各ＮＡＮＤメモリ１２−０〜１２−１５は、複数のチャネルによる並列動作、複数のバンクによるバンクインタリーブ動作による並列動作が可能である。
【００１５】
図２は、この実施形態におけるＮＡＮＤメモリでのデータ管理単位を模式的に示す図である。ＮＡＮＤメモリ１２を構成するチップ内部において、一括して書き込みおよび読み出しのアクセスが可能な単位が物理ページであり、複数の物理ページから構成され、独立して消去可能な最小単位のアクセス単位が物理ブロックである。また、上記したようにこの例では８並列動作を行うことが可能であるとともにバンクインタリーブによる並列動作も可能であるので、並列にほぼ一括して書き込み／読み出しが可能な１６個の物理ページでデータ記録領域となる１論理ページを構成し、並列にほぼ一括して消去可能な１６個の物理ブロックでデータブロックである１論理ブロックを構成している。
【００１６】
また、１物理ページよりも小さい単位のデータ管理単位であるクラスタで、ＮＡＮＤメモリ１２内でのデータが管理（記録）されるものとする。クラスタサイズは、ホスト装置からの最小アクセス単位であるセクタのサイズ以上であり、クラスタサイズの自然数倍が物理ページサイズとなるように定められる。具体的に、以下に説明する例では、１物理ページは４クラスタで構成され、１論理ページは６４クラスタで構成されるものとする。なお、各チャネルで並列に一括してデータ書き込みを行うため、この実施形態では、データはクラスタ単位でチャネル（並列動作要素１２１−０〜１２１−７）をまたがる方向に格納されることになる。
【００１７】
ＮＡＮＤコントローラ１３は、ＮＡＮＤメモリ１２とのインタフェース処理を行う。ここでは、詳細を省略するが、誤り訂正処理やＮＡＮＤメモリ１２とＲＡＭ１４との間のアクセス制御などの処理を行う。
【００１８】
ＲＡＭ１４は、ホスト装置とＮＡＮＤメモリ１２との間でのデータ転送用バッファとして機能するデータバッファ領域１４１と、ＮＡＮＤメモリ１２内でのデータの記録位置を管理する管理情報を記憶する管理情報記憶領域１４２と、を有する。データバッファ領域１４１は、ホスト装置からの読み出し要求時にＮＡＮＤメモリ１２から読み出したデータを一時的に記憶する読み出しバッファ１４１１と、ホスト装置からの書き込み要求時にＮＡＮＤメモリ１２へ書き込むデータを一時的に記憶する書き込みバッファ１４１２と、コンパクション処理の際に、ＮＡＮＤメモリ１２から読み出したデータを一時的に記憶するコンパクションバッファ１４１３と、を有する。
【００１９】
なお、ＲＡＭ１４として、ＤＲＡＭ（Dynamic  RAM）、ＳＲＡＭ（Static  RAM）、ＦｅＲＡＭ（Ferroelectric  RAM）、ＭＲＡＭ（Magnetoresistive  RAM）、ＰＲＡＭ（Phase  change   RAM）などを用いることができる。
【００２０】
管理情報記憶領域１４２は、上記したようにＮＡＮＤメモリ１２内でのデータの記憶位置を管理する管理情報を記憶するが、管理情報として、データ記録位置管理テーブル１４２１と、論理アドレス−物理アドレス変換テーブル（以下、論物変換テーブルという）１４２２と、コンパクション対象ブロックリスト１４２３と、フリーブロックリスト１４２４と、を有する。
【００２１】
図３は、管理情報の一例を模式的に示す図であり、（ａ）はデータ記録位置管理テーブルの一例を示す図であり、（ｂ）は論物変換テーブルの一例を示す図であり、（ｃ）はコンパクション対象ブロックリストの一例を示す図であり、（ｄ）はフリーブロックリストの一例を示す図である。ＮＡＮＤメモリ１２では、クラスタ単位でデータの記録位置を管理しており、データ記録位置管理テーブル１４２１は、図３（ａ）に示されるように、クラスタ単位のデータに対する論理アドレス（以下、論理クラスタアドレスという）と、そのデータが記憶されているデータ記録位置と、を対応付ける管理情報である。論理クラスタアドレスは、ＮＡＮＤメモリ１２内でデータに割り当てられるアドレスである。また、データ記録位置は、そのデータが格納される論理ブロックを示す論理ブロック番号と、その論理ブロック番号内でのデータが格納されるクラスタを示す論理クラスタ番号と、の組み合わせからなる。すなわち、データ記録位置は、論理ブロック番号と論理クラスタ番号の組み合わせによって一意に決定される。ここでは、データ記録位置は、「論理ブロック番号：論理クラスタ番号」によって表記されるものとする。なお、論理クラスタ番号は、１つの論理ブロックにおいて、最初の論理ページのクラスタから最後の論理ページのクラスタまで、図２のように順に番号を振ったものである。
【００２２】
論物変換テーブル１４２２は、図３（ｂ）に示されるように、論理ブロック番号と、その論理ブロック番号が割り当てられている物理ブロックを示す物理ブロック番号と、その論理ブロックの寿命に関する情報と、を有する。寿命に関する情報として、たとえば論理ブロックの消去回数などを例示することができる。
【００２３】
コンパクション対象ブロックリスト１４２３は、コンパクションの候補となる有効データと無効データとを有する論理ブロックを示す情報であり、図３（ｃ）に示されるように、コンパクション対象となる論理ブロック番号と、論理ブロック番号に含まれる有効クラスタ数と、を有する。このコンパクション対象ブロックリスト１４２３は、たとえば有効クラスタ数が少ない順に並べられる。
【００２４】
フリーブロックリスト１４２４は、論理ブロック単位で現在用途未割り当てのフリーブロックを管理するテーブルであり、図３（ｄ）に示されるように、有効クラスタがない論理ブロック番号によって構成される。ここで、論理ブロック番号は、消去回数が少ない順に並べられる。そして、フリーブロックの割り当ての要求があると、消去回数が最も少ない論理ブロック番号を有する論理ブロックが割り当てられる。
【００２５】
この実施形態においては、ＮＡＮＤメモリ１２へのデータの書き込みやＮＡＮＤメモリ１２内でのデータの消去などによって、データ記録位置に変更が生じた場合には、ＲＡＭ１４上の管理情報はその都度更新されるが、ＮＡＮＤメモリ１２に格納されている管理情報に対する変更差分はログとして蓄積している。これによって、不意の電源断に対しても管理情報を復元可能としている。また、ＲＡＭ１４に格納されている管理情報は、たとえばメモリシステム１０の電源がオフされる際などの所定のタイミングでＮＡＮＤメモリ１２へと格納される。
【００２６】
制御部１５は、ホスト装置とＮＡＮＤメモリ１２との間でのデータ転送制御処理や、ＮＡＮＤメモリ１２内でのデータ管理処理などを行う。ここでは、コンパクション処理を行うのに必要な構成要素について示している。制御部１５は、ログ情報記録位置決定部１５１と、ログ情報生成部１５２と、データ処理部１５３と、管理情報管理部１５４と、コンパクション対象データ判定部１５５と、ブロック管理部１５６と、を有する。
【００２７】
ログ情報記録位置決定部１５１は、ＮＡＮＤメモリ１２へデータを書き込む際のログ情報の書き込み位置を決定する。なお、この実施形態では、書き込み単位である１論理ページ内のクラスタ単位のログをまとめたログ情報を、その論理ページ内の最後の書き込み位置となるクラスタに記録する。このログ情報が記録されるクラスタの位置（以下、ログ情報記録位置という）を、所定の規則にしたがって１つの論理ブロック内で論理ページによって異ならせるようにしている。これは、後述するように、コンパクション対象データ判定部１５５によって、異なる論理ページのログ情報を一度に読み込めるようにするためである。この論理ページ毎にログ情報記録位置を異ならせる方法については後述する。
【００２８】
ログ情報生成部１５２は、ログ情報記録位置決定部１５１によって決定されたログ情報の書き込み位置、すなわちデータの書き込み開始位置にしたがって、データをＮＡＮＤメモリ１２に書き込むとした場合の論理クラスタアドレスとデータ記録位置との対応関係をクラスタ単位で示すログを論理ページごとにまとめたログ情報を生成する。このログ情報は、データ記録位置管理テーブル１４２１の変更の内容を示すものでもある。
【００２９】
図４は、データ記録位置管理テーブルとログ情報の一例を示す図であり、（ａ）はデータ書き込み前の様子を示しており、（ｂ）はデータ書き込み後の様子を示している。図４（ａ）に示されるように、論理クラスタアドレスが「２０３４」のデータが、データ記録位置（論理ブロック番号：論理クラスタ番号）「１１９：８００」に書き込まれている状態にある。この情報は、データ記録位置管理テーブル１４２１にも反映されている。なお、ログ情報は、データ記録位置管理テーブル１４２１のエントリと同じく、論理クラスタアドレスとデータ記録位置（論理ブロック番号：論理クラスタ番号）とを含んでいる。
【００３０】
その後、論理クラスタアドレス「２０３４」のデータの書き換えが発生し、新たなデータ記録位置「３５８：３」にデータが書き込まれると、図４（ｂ）に示されるように、論理クラスタアドレスが「２０３４」で、データ記録位置が「３５８：３」であるログが生成される。詳細は後述するが、古いログのデータ記録位置に記録されているデータは、最新のデータ記録位置管理テーブル１４２１にはないので、無効データとなる。
【００３１】
データ処理部１５３は、書き込み処理や読み出し処理、コンパクション処理などのコマンドを生成し、生成したコマンドに基づいて、ＮＡＮＤメモリ１２へのデータの書き込みやＮＡＮＤメモリ１２からのデータの読み出し、コンパクションなどの処理を行う。データ書き込みの際には、ログ情報記録位置決定部１５１で決定されたログ情報記録位置に基づいて、書き込みデータとその書き込みデータに対応するログ情報とを、決定された書き込み先の論理ブロックと論理ページに書き込む。
【００３２】
また、データ処理部１５３は、コンパクション処理を行う際には、コンパクション対象となる論理ブロックをコンパクション対象ブロックリスト１４２３から決定し、この論理ブロックの各論理ページからログ情報を並列に読み出すように読み出し処理を行い、読み出したログ情報をコンパクション対象データ判定部１５５に渡す。また、コンパクション対象データ判定部１５５から取得したデータ記録位置からコンパクション対象データをコンパクションバッファ１４１３に読み出し、コンパクションバッファ１４１３中のデータとログ情報生成部１５２で生成されたログ情報とを、ログ情報記録位置決定部１５１で決定されたログ情報記録位置に基づいて、書き込み先の論理ブロックの論理ページに書き込む。
【００３３】
管理情報管理部１５４は、ＮＡＮＤメモリ１２へのデータの書き込みなどによって変化する管理情報が最新の情報となるように管理する。たとえば、ＮＡＮＤメモリ１２へのデータの書き込みによって、データの論理クラスタアドレスに対応するデータ記録位置が変更となる場合に、データ記録位置管理テーブル１４２１を新たなデータ記録位置で更新したり、論理ブロックの消去を行った場合に、論物変換テーブル１４２２の消去回数を更新したりする。また、コンパクション処理によってコンパクション対象となる論理ブロックの有効クラスタの数が変化した場合に、コンパクション対象ブロックリスト１４２３の有効クラスタ数を更新したり、コンパクション処理によってコンパクション対象となる論理ブロックの有効クラスタ数が０になった場合に、その論理ブロックをフリーブロックリストに追加したりする。
【００３４】
コンパクション対象データ判定部１５５はデータ処理部１５３から取得した論理ブロック番号に対応する論理ブロックの各論理ページのログ情報からコンパクション対象データとなる有効データ（有効クラスタ）のデータ記録位置を取得する。具体的には、ログ情報から１つのログを取得し、このログの論理クラスタアドレスに対応するデータ記録位置をデータ記録位置管理テーブル１４２１から取得し、両者を比較する。両者が一致する場合には、その論理クラスタアドレスに記憶されているデータは有効データであり、コンパクション対象のデータとなる。一方、両者が一致しない場合には、ログ中のデータ記録位置は古いデータであり、その論理クラスタアドレスに記憶されているデータは無効データであるので、コンパクション対象のデータとはならない。そして、コンパクション対象データの論理クラスタアドレスをデータ処理部１５３に渡す。
【００３５】
ブロック管理部１５６は、ＮＡＮＤメモリ１２内の書き込みを行うブロックを管理する。たとえば、コンパクション処理によって、有効データがなくなったコンパクション対象ブロックを開放し、フリーブロックにする。また、ＮＡＮＤメモリ１２を構成するブロックが全体的に均等に使用されるように、書き込み処理やコンパクション処理の際の書き込み先ブロックを選定する機能も有する。
【００３６】
ここで、ログ情報記録位置決定部１５１によるログ情報の記録位置の決定方法について説明する。はじめに、通常の書き込み方法によって、論理ページに書き込みを行う場合について説明を行った後、ログ情報記録位置をチャネル分散させた場合、さらにバンク分散させた場合について説明する。
【００３７】
ログ情報は論理ページ内に書き込むデータがすべて揃って最後にでき上がるため、データの開始位置を決めるということはログ情報記録位置を決めることに相当する。データ開始位置をどの論理ページでも同じ位置とすると、ログ情報記録位置もどの論理ページでも同じ位置となる。通常、論理ページの先頭クラスタから並列動作要素をまたぐようにクラスタ単位でデータを書き込む（配列する）ので、最終クラスタにログ情報が記録されることになる。そのため、コンパクション対象データの判定処理の際には、最終クラスタに格納されているログ情報を読み出すために１論理ページずつ読み込むことになる。たとえば図２のように、論理クラスタ番号が「６３」に相当する位置のクラスタに、論理ブロックを構成する全ての論理ページのログ情報が書き込まれた場合には６４ページ分の読み出し処理を繰り返すことになる。
【００３８】
図５は、ログ情報記録位置をチャネル分散させる場合の一例を示す図である。図１に示されるように、メモリシステム１０は、８個の並列動作要素１２１−０〜１２１−７に接続される８個のチャネル有しており、８個の並列動作要素１２１−０〜１２１−７からそれぞれ１物理ページを独立に（並列して）読み出すことができる。そこで、図５に示されるように、データの記録開始位置「ｓ」を、論理ページ番号０ではチャネル０とし、論理ページ番号１ではチャネル１とし、論理ページ番号２ではチャネル２とし、・・・、論理ページ番号７ではチャネル７とする（すなわち、ログ情報の記録位置「ｅ」を、論理ページ番号０ではチャネル７とし、論理ページ番号１ではチャネル０とし、論理ページ番号２ではチャネル１とし、・・・、論理ページ番号７ではチャネル６とする）というサイクルを繰り返すことにする。さらに一般化すると、チャネル数（並列動作要素数）がｍ（ｍは自然数）のメモリシステム１０での論理ページ番号がｎ（ｎは０以上の整数）のデータ開始チャネル（並列動作要素）は、次式（１）のようにして決定される。
データ開始チャネル＝ｎ  ｍｏｄｕｌｏ  ｍ  ・・・（１）
【００３９】
つまり、図１の構成の場合には、論理ページ番号が８ｉ（ｉは０以上の整数）のときにチャネル７から並列動作要素１２１−７にログ情報が書き込まれ、論理ページ番号が８ｉ＋１のときにチャネル０から並列動作要素１２１−０にログ情報が書き込まれ、論理ページ番号が８ｉ＋２のときにチャネル１から並列動作要素１２１−１にログ情報が書き込まれ、・・・、論理ページ番号が８ｉ＋７のときにチャネル６から並列動作要素１２１−６にログ情報が書き込まれることになり、ログ情報が記録されるチャネルが周期的に変わることになる。
【００４０】
なお、論理ページ０でのクラスタサイズで見た場合のデータの繋がり方は、論理クラスタ番号で０→１→２→・・・→７→８→９→・・・→６３の順となる。また、論理ページ１でのクラスタサイズで見た場合のデータの繋がり方は、論理クラスタ番号で６５→６６→・・・→７１→６４→７３→７４→・・・→７９→７２→８１→・・・→１２７→１２０の順となる。他の論理ページも書き込みの開始位置が異なるが、データの繋がり方は同様である。また、これらの場合では、バンクＢａｎｋ０の並列動作要素１２１−０〜１２１−７の書き込みを行った後、バンクＢａｎｋ１の並列動作要素１２１−０〜１２１−７の書き込みが行われる。なお、上記のデータの並び順は、説明をわかりやすくするために論理ページ０での番号を用いて行っている。実際には、（論理ページの番号）×６４に上記の数字が付加されることになる。
【００４１】
このように、書き込み対象データの書き込み開始位置（チャネル）を変えることによって、コンパクション対象データの判定処理の際に、それぞれのチャネル０〜７で異なる論理ページのログ情報を含む範囲のデータを読み出すことが可能になる。具体的には、チャネル７では論理ページ０を読み出し、チャネル０では論理ページ１を読み出し、チャネル１では論理ページ２を読み出し、・・・、チャネル６では論理ページ７を読み出すことで、８論理ページ分のログ情報を同時に読み出すことが可能になる。
【００４２】
図６は、バンクインタリーブの仕組みを説明する図であり、（ａ）はＮＡＮＤメモリの構成を模式的に示す図であり、（ｂ）はバンクインタリーブを用いない場合のデータ読み出し時のタイムチャートの一例を示す図であり、（ｃ）はバンクインタリーブを用いる場合のデータ読み出し時のタイムチャートの一例を示す図である。
【００４３】
ここでは、図６（ａ）に示されるように、バンクインタリーブの効果が視覚的に理解しやすいように、ＮＡＮＤメモリ１２の並列動作要素１２１が４バンク（Ｂａｎｋ０〜Ｂａｎｋ３）で構成される場合を例に挙げている。各バンクＢａｎｋ０〜Ｂａｎｋ３には、ＮＡＮＤメモリ１２−ａ〜１２−ｄと、ＮＡＮＤメモリ１２−ａ〜１２−ｄから読み出したデータを一時記憶するページレジスタ１２２−ａ〜１２２−ｄと、が設けられる。
【００４４】
バンクインタリーブを使用しない場合は、図６（ｂ）に示されるように、読み出しコマンドを受けると、まず、読み出しコマンドで指定されるバンクＢａｎｋ０のＮＡＮＤメモリ１２−ａ内のアドレスからデータがページレジスタ１２２−ａに読み出され、ページレジスタ１２２−ａから実際のＩ／Ｏへとリードデータを転送する。ついで、読み出しコマンドで指定されるバンクＢａｎｋ１のＮＡＮＤメモリ１２−ｂ内のアドレスからデータがページレジスタ１２２−ｂに読み出され、ページレジスタ１２２−ｂから実際のＩ／Ｏへとリードデータを転送する。その後、読み出しコマンドで指定されるバンクＢａｎｋ２のＮＡＮＤメモリ１２−ｃ内のアドレスからデータがページレジスタ１２２−ｃに読み出され、ページレジスタ１２２−ｃから実際のＩ／Ｏへとリードデータを転送する。そして、読み出しコマンドで指定されるバンクＢａｎｋ３のＮＡＮＤメモリ１２−ｄ内のアドレスからデータがページレジスタ１２２−ｄに読み出され、ページレジスタ１２２−ｄから実際のＩ／Ｏへとリードデータを転送する。このように、各バンクＢａｎｋ０〜３で、ＮＡＮＤメモリ１２−ａ〜１２−ｄからページレジスタ１２２−ａ〜１２２−ｄに読み出す処理と、ページレジスタ１２２−ａ〜１２２−ｄからＩ／Ｏへデータを転送する処理と、の２段階の処理が順に行われる。
【００４５】
これに対して、バンクインタリーブを使用する場合は、図６（ｃ）に示されるように、あるバンクでのページレジスタ１２２からＩ／Ｏへデータを転送する処理を行っているときに、同時につぎのバンクでＮＡＮＤメモリ１２からページレジスタ１２２に読み出す処理を行うようにしている。たとえば、バンクＢａｎｋ０でページレジスタ１２２−ａから実際のＩ／Ｏへとリードデータを転送する処理と同時に、読み出しコマンドで指定されるバンクＢａｎｋ１のＮＡＮＤメモリ１２−ｂ内のアドレスからデータがページレジスタ１２２−ｂに読み出される。また、バンクＢａｎｋ１でページレジスタ１２２−ｂから実際のＩ／Ｏへとリードデータを転送する処理と同時に、読み出しコマンドで指定されるバンクＢａｎｋ２のＮＡＮＤメモリ１２−ｃ内のアドレスからデータがページレジスタ１２２−ｃに読み出される。このように、異なるバンクでの２つの処理をオーバラップさせることで、同じチャネル（並列動作要素）内の複数バンクのデータを高速でリードすることが可能になる。なお、ここでは、データの読み出しの場合を例に挙げて説明したが、データの書き込みの場合も同様である。
【００４６】
図７は、ログ情報記録位置をチャネル分散およびバンク分散させる場合の一例を示す図である。この例では、図５の場合でさらにログ情報記録位置をバンク分散させる。具体的には、図７に示されるように、データの記録開始位置「ｓ」を、論理ページ番号０ではチャネル０のバンクＢａｎｋ０とし、論理ページ番号１ではチャネル１のバンクＢａｎｋ０とし、論理ページ番号２ではチャネル２のバンクＢａｎｋ０とし、・・・、論理ページ番号７ではチャネル７のバンクＢａｎｋ０とし、論理ページ番号８ではチャネル０のバンクＢａｎｋ１とし、論理ページ番号９ではチャネル１のバンクＢａｎｋ１とし、論理ページ番号１０ではチャネル２のバンクＢａｎｋ１とし、・・・、論理ページ番号１５ではチャネル７のバンクＢａｎｋ１とする（すなわち、ログ情報の記録位置「ｅ」を、論理ページ番号０ではチャネル７のバンクＢａｎｋ１とし、論理ページ番号１ではチャネル０のバンクＢａｎｋ１とし、論理ページ番号２ではチャネル１のバンクＢａｎｋ１とし、・・・、論理ページ番号７ではチャネル６のバンクＢａｎｋ１とし、論理ページ番号８ではチャネル０のバンクＢａｎｋ０とし、論理ページ番号９ではチャネル１のバンクＢａｎｋ０とし、論理ページ番号１０ではチャネル２のバンクＢａｎｋ０とし、・・・論理ページ番号１５ではチャネル０のバンクＢａｎｋ１とする）というサイクルを繰り返すことにする。さらに一般化すると、チャネル数（並列動作要素数）がｍでバンク数がｓ（ｓは自然数）のメモリシステム１０での論理ページ番号がｎのデータ開始チャネル（並列動作要素）とデータ開始バンクは、それぞれ次式（２）、（３）のようにして決定される。
データ開始チャネル＝ｎ  ｍｏｄｕｌｏ  ｍ  ・・・（２）
データ開始バンク＝ｎ／ｍ  ｍｏｄｕｌｏ  ｓ  ・・・（３）
【００４７】
ただし、（３）式中の「ｎ／ｍ」は、商を表している。すなわち、論理ページ番号ｎをチャネル数ｍで割ったときの商を表している。
【００４８】
つまり、図１の構成の場合には、論理ページ番号が１６ｉのときにチャネル７のバンクＢａｎｋ１にログ情報が書き込まれ、論理ページ番号が１６ｉ＋１のときにチャネル０のバンクＢａｎｋ１にログ情報が書き込まれ、論理ページ番号が１６ｉ＋２のときにチャネル１のバンクＢａｎｋ１にログ情報が書き込まれ、・・・、論理ページ番号が１６ｉ＋７のときにチャネル６のバンクＢａｎｋ１にログ情報が書き込まれ、論理ページ番号が１６ｉ＋８のときにチャネル７のバンクＢａｎｋ０にログ情報が書き込まれ、論理ページ番号が１６ｉ＋９のときにチャネル０のバンクＢａｎｋ０にログ情報が書き込まれ、論理ページ番号が１６ｉ＋１０のときにチャネル１のバンクＢａｎｋ０にログ情報が書き込まれ、・・・、論理ページ番号が１６ｉ＋１５のときにチャネル６のバンクＢａｎｋ０にログ情報が書き込まれる。つまり、ログ情報が記録されるチャネルが周期的に変わるとともに、ログ情報が記録されるバンクも周期的に変わることになる。
【００４９】
このようにすることによって、コンパクション対象データの判定処理の際に、チャネル０〜７では、ログ情報が記録された異なる論理ページのバンクＢａｎｋ１のデータをＩ／Ｏに出力する間に、ログ情報が記録された異なる論理ページのバンクＢａｎｋ０のデータを読み出すようにすることで、図５の場合に比して、ログ情報の読み出しをさらに速くすることが可能になる。
【００５０】
つぎに、このメモリシステム１０における書き込み処理、読み出し処理およびコンパクション処理について説明する。
【００５１】
＜書き込み処理＞
図８は、書き込み処理の手順の一例を示すフローチャートである。ホスト装置からデータの書き込み要求を受けると、データ処理部１５３は、書き込み対象データを書き込むＮＡＮＤメモリ１２中の論理ブロックと、その論理ブロック内の書き込みを行う論理ページと、を決定する（ステップＳ１１）。ついで、ログ情報記録位置決定部１５１は、決定された書き込みを行う論理ページ番号に基づいて、上記した（２）式と（３）式を用いて、書き込み対象データのデータ開始位置、すなわちデータ開始チャネルとデータ開始バンク、を決定する（ステップＳ１２）。その結果、ログ情報記録位置も決まることになる。
【００５２】
ついで、ログ情報生成部１５２は、ステップＳ１２で決定されたデータ開始位置から書き込み対象データを書き込んだ場合のそのデータ記録位置と、書き込み対象データに割り当てられた論理クラスタアドレスとの関係を示すログ情報を生成する（ステップＳ１３）。このログ情報は、論理ページ内の全てのクラスタデータに対するログを一纏めにしたものである。
【００５３】
新たに書き込みが命じられたデータの場合には、ステップＳ１２で決定されたデータ開始位置から書き込み対象データを書き込んだとした場合のデータ記録位置が、書き込み対象データに対して割り当てられた論理クラスタアドレスと対応付けられる。また、ＮＡＮＤメモリ１２から読み出されたデータの書き換えの場合には、書き換えられた書き込み対象データの新たなデータ記録位置が、読み出されたデータの論理クラスタアドレスに対応付けられる。
【００５４】
その後、データ処理部１５３は、書き込み対象データとそれに対応するログ情報とを決定されたデータ書き込み開始位置から書き込む書き込みコマンドを生成し、書き込み対象データとログ情報とをＮＡＮＤメモリ１２へと書き込む（ステップＳ１４）。このとき、１つのデータが８個のチャネルを介して並列に並列動作要素１２１−０〜１２１−７に書き込まれる。また、管理情報管理部１５４は、書き込みによって変化したデータ記録位置でデータ記録位置管理テーブル１４２１を更新する（ステップＳ１５）。以上によって、書き込み処理が終了する。
【００５５】
＜読み出し処理＞
読み出し処理では、ホスト装置からデータの読み出し要求を受けると、データ処理部１５３は、データ記録位置管理テーブル１４２１から読み出し対象データの論理クラスタアドレスに対応するデータ記録位置を取得する。そして、データ処理部１５３は、取得したデータ記録位置からデータを読み出すように読み出しコマンドを生成し、ＮＡＮＤメモリ１２からデータを読み出す。データは、図２などに示されるように、並列動作要素１２１−０〜１２１−７にまたがってＮＡＮＤメモリ１２に書き込みが行われているので、８個の並列動作要素１２１−０〜１２１−７から同時にデータが読み出され、読み出しバッファ１４１１へと記憶される。そして、読み出しバッファ１４１１からホスト装置へとデータが渡される。以上によって、読み出し処理が終了する。
【００５６】
＜コンパクション処理＞
図９は、コンパクション処理の手順の一例を示すフローチャートである。まず、コンパクション処理が開始されると、ブロック管理部１５６は、コンパクション対象ブロックリスト１４２３からコンパクション対象となる１つの論理ブロックを取得する（ステップＳ３１）。一般的には、コンパクション対象となる論理ブロックとして、コンパクション対象ブロックリスト１４２３中の最も有効クラスタ数が少ない論理ブロックが選択される。
【００５７】
ついで、データ処理部１５３は、選択した１つの論理ブロック内の各論理ページに記録されている全てのログ情報を読み出すコマンドを生成し、そのコマンドに基づいて、ＮＡＮＤメモリ１２の選択した論理ブロックの複数の論理ページから並列にログ情報を読み出す（ステップＳ３２）。書き込み処理で説明したように、データのＮＡＮＤメモリ１２への書き込み時に、ログ情報記録位置が論理ページ毎に異なる並列動作要素１２１−０〜１２１−７（チャネルｃｈ０〜ｃｈ７）となるようにしているので、８論理ページ分のログ情報記録位置を含むデータを同時に読み出す。たとえば、図７の場合、チャネルｃｈ０〜ｃｈ６では、それぞれバンクＢａｎｋ１の論理ページ１〜７に書き込まれたログ情報を読み出し、チャネルｃｈ７では、バンクＢａｎｋ１の論理ページ０に書き込まれたログ情報を読み出し、これらの読み出したデータを読み出しバッファ１４１１に記憶する。また、バンクインタリーブによって、読み出したデータを読み出しバッファ１４１１に記憶する処理と同時に、つぎのデータをＮＡＮＤメモリ１２から読み出す処理を行う。ここでは、チャネルｃｈ０〜ｃｈ６では、それぞれバンクＢａｎｋ０の論理ページ９〜１６に書き込まれたログ情報を読み出し、チャネルｃｈ７では、バンクＢａｎｋ０の論理ページ８に書き込まれたログ情報を読み出す。このような処理を繰り返し実行する。
【００５８】
コンパクション対象データ判定部１５５は、読み出しバッファ１４１１に読み出されたデータ中のログ情報とデータ記録位置管理テーブル１４２１とを用いて、コンパクション対象データのデータ記録位置の取得処理を行う（ステップＳ３３）。
【００５９】
図１０は、コンパクション対象データのデータ記録位置の取得処理の手順の一例を示すフローチャートであり、図１１は、コンパクション対象データの判定処理の一例を模式的に示す図である。コンパクション対象データ判定部１５５は、ログ情報中の１つのログを選択し（ステップＳ５１）、その論理クラスタアドレスに対応するデータ記録位置（以下、第１データ記録位置とする）を取得する（ステップＳ５２）。また、コンパクション対象データ判定部１５５は、データ記録位置管理テーブル１４２１から選択したログの論理クラスタアドレスに対応するデータ記録位置（以下、第２データ記録位置とする）を取得する（ステップＳ５３）。そして、第１データ記録位置と第２データ記録位置とが一致するか判定する（ステップＳ５４）。
【００６０】
第１データ記録位置と第２データ記録位置とが一致しない場合（ステップＳ５４でＮｏの場合）には、データ記録位置管理テーブル１４２１の内容が最新である（正しい）ので、ログ中の第１データ記録位置は過去のものであり、無効データであると判定する。つまり、取得した論理クラスタアドレスに格納されているデータは、コンパクション対象データではないと判定する（ステップＳ５５）。そして、ステップＳ５２で取得した第１データ記録位置を破棄する（ステップＳ５６）。
【００６１】
たとえば、図１１のログ情報２００中のログ２０２では、論理クラスタアドレスは「１８７」であり、第１データ記録位置は「１１９：１」となっている。一方、データ記録位置管理テーブル１４２１では、論理クラスタアドレス「１８７」に対応する第２データ記録位置は「５２：３２」となっている。すなわち、第１データ記録位置と第２データ記録位置とは不整合であり、ログ２０２に格納されている第１データ記録位置は古い内容である。その結果、第１データ記録位置に記録されているデータは無効クラスタ（データ）である。
【００６２】
一方、第１データ記録位置と第２データ記録位置とが一致する場合（ステップＳ５４でＹｅｓの場合）には、ログ中の第１データ記録位置は最新のものであり、有効データであると判定する。つまり、取得した論理クラスタアドレスに格納されているデータは、コンパクション対象データであると判定する（ステップＳ５７）。
【００６３】
たとえば、図１１のログ情報２００中のログ２０１では、論理クラスタアドレスは「２０３４」であり、第１データ記録位置は「１１９：０」となっている。また、データ記録位置管理テーブル１４２１では、論理クラスタアドレス「２０３４」に対応する第２データ記録位置は「１１９：０」となっている。すなわち、第１データ記録位置と第２データ記録位置とは整合しており、ログ２０２に格納されている第１データ記録位置は最新の内容である。その結果、第１データ記録位置に記録されているデータは有効クラスタ（データ）であり、コンパクション対象データである。ログ２０３についても同様であり、コンパクション対象データである。
【００６４】
ステップＳ５５またはステップＳ５７の後、このような処理をログ情報中の全てのログについて行ったかを確認し（ステップＳ５８）、全てのログについて行っていない場合（ステップＳ５８でＮｏの場合）には、ステップＳ５１へと戻り、上記した処理が繰り返し実行される。また、全てのログについて行った場合（ステップＳ５８でＹｅｓの場合）には、コンパクション対象データの取得処理が終了し、図９のフローチャートの処理に戻る。
【００６５】
図９に戻って、データ処理部１５３は、コンパクション対象データを書き込む論理ブロックを決定する（ステップＳ３４）。その後、データ処理部１５３は、コンパクション対象データ判定部１５５によって取得されたデータ記録位置のコンパクション対象データをコンパクションバッファ１４１３に読み出すコマンドを生成し、コマンドにしたがってコンパクション対象データをコンパクションバッファ１４１３に記憶する（ステップＳ３５）。
【００６６】
ついで、ログ情報記録位置決定部１５１は、コンパクションバッファ１４１３に記憶されたデータを、書き込み先の論理ブロックのある論理ページに書き込む際の書き込み開始位置を決定する（ステップＳ３６）。ここでは、上記（２）式と（３）式とを用いて、データ開始チャネルとデータ開始バンクとを決定する。
【００６７】
その後、ログ情報生成部１５２は、コンパクションバッファ１４１３に読み出されたデータを、ステップＳ３６で決定された論理ページの書き込み開始位置から書き込む場合に変更されるデータ記録位置管理テーブル１４２１の内容をログとしてクラスタ単位で生成し、論理ページ単位でまとめたログ情報を生成する（ステップＳ３７）。
【００６８】
ついで、データ処理部１５３は、コンパクションバッファ１４１３に記憶されたデータと生成されたログ情報を、論理ページの書き込み開始位置から書き込むことを指示するコマンドを生成し、生成されたコマンドにしたがってコンパクションバッファ１４１３中のデータを論理ブロックに書き込む（ステップＳ３８）。また、管理情報管理部１５４は、コンパクション対象データの書き込み先の論理ブロックへの書き込みによって生じたデータ記録位置の変更（ステップＳ３７で生成されたログと同じ情報）をデータ記録位置管理テーブル１４２１に反映させる（ステップＳ３９）。
【００６９】
その後、管理情報管理部１５４は、コンパクション処理を行った結果によるコンパクション対象ブロック中の有効クラスタ数の変化をコンパクション対象ブロックリスト１４２３に反映させる（ステップＳ４０）。具体的には、コンパクション処理によって、コンパクション対象ブロック中の有効クラスタ数が０になったかを判定する。有効クラスタ数が０でない場合には、コンパクション処理後の有効クラスタ数をコンパクション対象ブロックリスト１４２３に反映させる。一方、有効クラスタ数が０の場合には、ブロック管理部１５６は、有効クラスタのなくなった論理ブロックを開放してフリーブロックにし、また管理情報管理部１５４はフリーブロック化した論理ブロックをフリーブロックリスト１４２４に追加する。以上によって、コンパクション処理が終了する。
【００７０】
なお、上記した説明では、論理ブロックにデータを書き込む際に、ログ情報の位置がチャネル分散されるとともにバンク分散される場合を示したが、チャネル分散のみされるようにしてもよい。
【００７１】
本実施形態では、データを書き込む際にデータ書き込みにより変更となるデータの論理クラスタアドレスに対する新たなデータ記録位置をログとして、論理ページ内の各クラスタについてまとめたログ情報を論理ページ単位で記録し、そのログ情報の書き込み位置がチャネル分散するようにした。そして、このログ情報を用いてコンパクション処理を行う際の有効クラスタを検索するが、その際に、それぞれのチャネルでログ情報が記録された物理ページを同時に読み出すとともに、ログの内容とデータ記録位置管理テーブル１４２１との内容の一致／不一致で論理ブロック中の有効データを判定するようにした。これによって、論理ブロック内の各論理ページに設けられるログ情報をチャネル数分読み出すことができ、ログ情報の読み出しに要する時間を、１論理ページずつ読み出す場合に比して短縮することができるという効果を有する。さらに、ログ情報の書き込み位置をバンク分散させ、バンクインタリーブ機能を使用することで、さらにログ情報の読み出しに要する時間を短縮させることが可能になる。
【００７２】
また、論理ブロック内の有効データの位置を示すのに、各論理ページにログ情報を記録したので、有効データの位置を示す有効データマップを管理情報に別途持たせる必要がなく、またその専用メモリ領域を設ける必要もない。そのため、装置のコストを下げることができるという効果を有する。さらに、ログ情報を効率的に配置することによって、コンパクション対象データ探索時のログ情報リードを高速化でき、コンパクション処理性能を損なうことなく有効データマップのための専用メモリを従来に比して削減することができるという効果も有する。
【００７３】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７４】
１０…メモリシステム、１１…ホストインタフェース部、１２，１２−０〜１２−１５，１２−ａ〜１２−ｄ…ＮＡＮＤメモリ、１３…ＮＡＮＤコントローラ、１５…制御部、１２１−０〜１２１−７…並列動作要素、１２２−ａ〜１２２−ｄ…ページレジスタ、１４１…データバッファ領域、１４２…管理情報記憶領域、１５１…ログ情報記録位置決定部、１５２…ログ情報生成部、１５３…データ処理部、１５４…管理情報管理部、１５５…コンパクション対象データ判定部、１５６…ブロック管理部、１４１１…読み出しバッファ、１４１２…書き込みバッファ、１４１３…コンパクションバッファ、１４２１…データ記録位置管理テーブル、１４２２…論物変換テーブル、１４２３…コンパクション対象ブロックリスト、１４２４…フリーブロックリスト。
【図１】
2014021622.tif 000003
【図２】
2014021622.tif 000004
【図３】
2014021622.tif 000005
【図４】
2014021622.tif 000006
【図５】
2014021622.tif 000007
【図６】
2014021622.tif 000008
【図７】
2014021622.tif 000009
【図８】
2014021622.tif 000010
【図９】
2014021622.tif 000011
【図１０】
2014021622.tif 000012
【図１１】
2014021622.tif 000013