(57)【要約】      （修正有）【課題】メモリモジュール及びその動作方法を提供する。【解決手段】メモリモジュール１００は、メモリコントローラー１３０を備え、メモリコントローラーはホストレイヤー１３２と、不揮発性メモリ１１０に連結されたメディアレイヤー１３６と、ホストレイヤー、メディアレイヤー、揮発性メモリに連結されて複数の行を含む第１書き込みグループテーブルを格納するロジックコア１３４とを含む。ロジックコアは、キャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント書き込みコマンドと関連するデータを受信し、揮発性メモリにキャッシュラインアドレスのデータを書き込み、書き込みグループ識別子に対応する選択されたバッファにキャッシュラインアドレスを格納し、有効エントリを含む選択されたバッファの位置を識別するために他の書き込みグループ識別子に対応する行をアップデートする。【選択図】図２Ａ
2018190412.tif 000002
【特許請求の範囲】
【請求項１】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールであって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記ロジックコアは、
前記ホストレイヤーを通じてキャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント書き込みコマンドを受信し、
前記ホストレイヤーを通じて前記パーシスタント書き込みコマンドに関連するデータを受信し、
前記パーシスタント書き込みコマンドに応答して、
前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込み、
第２書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納し、
有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行をアップデートすることを特徴とするメモリモジュール。
【請求項２】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第１書き込みグループテーブル及び前記第２書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第０書き込みグループテーブルを更に格納することを特徴とする請求項１に記載のメモリモジュール
【請求項３】
前記ロジックコアは、更に、
前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第０書き込みグループテーブルの行ビットマップを検索し、
前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの１つのバッファが利用可能な空間を有するか否かを判断し、
前記複数のバッファのうちの１つのバッファが利用可能な空間を有すると判断された場合、前記１つのバッファを前記選択されたバッファとして選択し、
前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、
前記第２書き込みグループテーブルに利用可能なバッファがあるか否かを判断し、
前記第２書き込みグループテーブルに利用可能なバッファがあると判断された場合、
前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートし、
前記利用可能なバッファを前記選択されたバッファとして選択することを特徴とする請求項２に記載のメモリモジュール。
【請求項４】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記ロジックコアは、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索し、
前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを特徴とする請求項１に記載のメモリモジュール。
【請求項５】
キャッシュメタデータメモリを更に含み、
前記ロジックコアは、前記第２書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納することを特徴とする請求項１に記載のメモリモジュール。
【請求項６】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記ロジックコアは、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索し、
前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断し、
前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、
前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止することを特徴とする請求項５記載のメモリモジュール。
【請求項７】
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ）であることを特徴とする請求項１に記載のメモリモジュール。
【請求項８】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールであって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記ロジックコアは、
前記ホストレイヤーを通じて書き込みグループ識別子を含むフラッシュコマンドを受信し、
各々の行が第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの１つ以上の行を検索し、
各々のバッファが前記第１書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索し、
前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを特徴とするメモリモジュール。
【請求項９】
前記ロジックコアは、前記第２書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートすることを特徴とする請求項８に記載のメモリモジュール。
【請求項１０】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールであって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記ロジックコアは、
前記ホストレイヤーを通じてフラッシュコマンドを受信し、
各々の行が第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む前記第１書き込みグループテーブルの各々の行に対して、前記第２書き込みグループテーブルの対応するバッファを検索し、
前記第２書き込みグループテーブルの対応するバッファの有効なエントリの各々に対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、
前記第２書き込みグループテーブルの対応するバッファを空けるために、前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートすることを特徴とするメモリモジュール。
【請求項１１】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記メモリコントローラーが、
キャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント書き込みコマンドを受信するステップと、
前記パーシスタント書き込みコマンドに関連するデータを受信するステップと、
前記パーシスタント書き込みコマンドに応答して、
前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込むステップと、
第２書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納するステップと、
有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行をアップデートするステップと、を有することを特徴とする方法。
【請求項１２】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第１書き込みグループテーブル及び前記第２書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第０書き込みグループテーブルを更に含むことを特徴とする請求項１１項に記載の方法。
【請求項１３】
前記メモリコントローラーが、
前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第０書き込みグループテーブルの行ビットマップを検索するステップと、
前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの１つのバッファが利用可能な空間を有するか否かを判断するステップと、
前記複数のバッファのうちの１つのバッファが利用可能な空間を有すると判断された場合、前記１つのバッファを前記選択されたバッファとして選択するステップと、
前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、
前記第２書き込みグループテーブルに利用可能なバッファがあるか否かを判断するステップと、
前記第２書き込みグループテーブルに利用可能なバッファがあると判断された場合、
前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートするステップと、
前記利用可能なバッファを前記選択されたバッファとして選択するステップと、を更に含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記メモリコントローラーが、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索するステップと、
前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、を更に含むことを特徴とする請求項１１に記載の方法。
【請求項１５】
前記メモリモジュールは、キャッシュメタデータメモリを更に含み、
前記メモリコントローラーが、前記第２書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納するステップと、を更に含むことを特徴とする請求項１１に記載の方法。
【請求項１６】
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、
前記メモリコントローラーが、
前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、
各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索するステップと、
前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断するステップと、
前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、
前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止するステップと、を更に含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ）であることを特徴とする請求項１１に記載の方法。
【請求項１８】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記メモリコントローラーが、
書き込みグループ識別子を含むフラッシュコマンドを受信するステップと、
各々の行が第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの１つ以上の行を検索するステップと、
各々のバッファが前記第１書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索するステップと、
前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、を含むことを特徴とする方法。
【請求項１９】
前記メモリコントローラーが、前記第２書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、を更に含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、
前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、
前記メモリコントローラーが、
フラッシュコマンドを受信するステップと、
各々の行が第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む前記第１書き込みグループテーブルの各々の行に対して、前記第２書き込みグループテーブルの対応するバッファを検索するステップと、
前記第２書き込みグループテーブルの対応するバッファの有効なエントリの各々に対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、
前記第２書き込みグループテーブルの対応するバッファを空けるために、前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、を含むことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントローラーに関し、より詳細には、揮発性及び不揮発性の構成要素を含むハイブリッドコンピュータメモリのためのメモリモジュール及びその動作方法に関する。
【背景技術】
【０００２】
パーシスタントメモリ（永続メモリ）を含む不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ−Ｐ：Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｄｕａｌ  Ｉｎ−ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ  ｗｉｔｈ  Ｐｅｒｓｉｓｔｅｎｔ  ｍｅｍｏｒｙ）は、電源が切られた場合、コンテンツを失う揮発性部分と電源が切られても（例えば、予測できない停電、システムの衝突、又は一般的なシャットダウン）コンテンツを維持する不揮発性部分を含むコンピュータシステムのためのランダムアクセスメモリ（Ｒａｎｄｏｍ−Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の類型である。いくつかの場合において、ＮＶＤＩＭＭ−Ｐは不揮発性メモリとしてメモリにマッピングされたフラッシュメモリ（例えば、ＮＡＮＤフラッシュ又はＺＮＡＮＤフラッシュ）及び揮発性メモリとしてダイナミックランダムアクセスメモリ（ＤＲＡＭ：Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を含む。いくつかの場合において、スタティックランダムアクセスメモリ（ＳＲＡＭ：Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）は揮発性部分として作用し、及び／又は相変化メモリ（ＰＣＭ：Ｐｈａｓｅ−Ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）は不揮発性部分として作用する。ＮＶＤＩＭＭ−Ｐモジュールに格納されたデータは、「パーシスタント（Ｐｅｒｓｉｓｔｅｎｔ）ＤＲＡＭ」（例えば、バイト毎にアドレス指定が可能）としてアクセスされるか、又はコンピュータシステムが、ソリッドステートドライブ（ＳＳＤ：Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）のようなパーシスタントストレージデバイスのデータのみならず、ハードドライブ及び光学ドライブのような回転メディアのデータにアクセスする方式と類似したブロック単位のアクセスを通じてアクセスされる。
【０００３】
ＮＶＤＩＭＭ−Ｐデバイスに対する標準は、ＪＥＤＥＣソリッドステート技術業界（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｔｅｃｈｎｏｌｏｇｙ  Ａｓｓｏｃｉａｔｉｏｎ）（又はＪＥＤＥＣ）によって定義される。このような標準は、ＮＶＤＩＭＭ−Ｐに従うデバイスにアクセスするための多数の命令を含む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第８，７００，８４０号明細書
【特許文献２】米国特許第９，２２３，６４２号明細書
【特許文献３】米国特許第９，２６２，３３３号明細書
【特許文献４】米国特許第９，３７８，１４２号明細書
【特許文献５】米国特許第９，５３５，８２７号明細書
【特許文献６】米国特許第９，５５２，１７６号明細書
【特許文献７】米国特許出願公開第２０１４／０３０４４７５号明細書
【特許文献８】米国特許出願公開第２０１６／００１１８０２号明細書
【特許文献９】米国特許出願公開第２０１６／０３４２４８７号明細書
【特許文献１０】米国特許出願公開第２０１７／００１０８１７号明細書
【特許文献１１】米国特許出願公開第２０１７／００６０７０６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、上記従来技術に鑑みてなされたものであって、本発明の目的は、ホストプロセッサから受信されたコマンドに応答してパーシスタントメモリ（永続メモリ）を含む不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ−Ｐ）の揮発性及び不揮発性部分に書き込まれるデータを管理するメモリモジュール及びその動作方法方法を提供することにある。
【課題を解決するための手段】
【０００６】
上記目的を達成するためになされた本発明の一態様によるメモリモジュールは、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備え、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディア（Ｍｅｄｉａ）レイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記ロジックコアは、前記ホストレイヤーを通じてキャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント（Ｐｅｒｓｉｓｔｅｎｔ）書き込みコマンドを受信し、前記ホストレイヤーを通じて前記パーシスタント書き込みコマンドに関連するデータを受信し、前記パーシスタント書き込みコマンドに応答して、前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込み、第２書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納し、有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行をアップデートする。
【０００７】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第１書き込みグループテーブル及び前記第２書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第０書き込みグループテーブルを更に格納し得る。
前記ロジックコアは、更に、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第０書き込みグループテーブルの行ビットマップを検索し、前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの１つのバッファが利用可能な空間を有するか否かを判断し、前記複数のバッファのうちの１つのバッファが利用可能な空間を有すると判断された場合、前記１つのバッファを前記選択されたバッファとして選択し、前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、前記第２書き込みグループテーブルに利用可能なバッファがあるか否かを判断し、前記第２書き込みグループテーブルに利用可能なバッファがあると判断された場合、前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートし、前記利用可能なバッファを前記選択されたバッファとして選択し得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグ（Ｐｅｒｓｉｓｔ  Ｆｌａｇ）を更に含み、前記ロジックコアは、前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索し、前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み得る。
前記メモリモジュールは、キャッシュメタデータメモリを更に含み、前記ロジックコアは、前記第２書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納し得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、前記ロジックコアは、前記パーシストフラッグが設定されたか否か判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索し、前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断し、前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止し得る。
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ：Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｄｕａｌ  Ｉｎ−ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）であり得る。
【０００８】
上記目的を達成するためになされた本発明の他の態様によるメモリモジュールは、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備え、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記ロジックコアは、前記ホストレイヤーを通じて書き込みグループ識別子を含むフラッシュ（Ｆｌｕｓｈ）コマンドを受信し、各々の行が第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ（Ｈｅａｄ  Ｐｏｉｎｔｅｒ）及びテールポインタ（Ｔａｉｌ  Ｐｏｉｎｔｅｒ）を含む、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの１つ以上の行を検索し、各々のバッファが前記第１書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索し、前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み得る。
【０００９】
前記ロジックコアは、前記第２書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートし得る。．
【００１０】
上記目的を達成するためになされた本発明の更に他の態様によるメモリモジュールは、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備え、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記ロジックコアは、前記ホストレイヤーを通じてフラッシュ（Ｆｌｕｓｈ）コマンドを受信し、各々の行が第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む前記第１書き込みグループテーブルの各々の行に対して、前記第２書き込みグループテーブルの対応するバッファを検索し、前記第２書き込みグループテーブルの対応するバッファの有効なエントリの各々対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込み、前記第２書き込みグループテーブルの対応するバッファを空けるために、前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートし得る。
【００１１】
上記目的を達成するためになされた本発明の一態様によるメモリモジュールの動作方法は、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記方法は、前記メモリコントローラーが、キャッシュラインアドレス及び書き込みグループ識別子を含むパーシスタント（Ｐｅｒｓｉｓｔｅｎｔ）書き込みコマンドを受信するステップと、前記パーシスタント書き込みコマンドに関連するデータを受信するステップと、前記パーシスタント書き込みコマンドに応答して、前記揮発性メモリに前記キャッシュラインアドレスのデータを書き込むステップと、第２書き込みグループテーブルにある複数のバッファのうちの前記書き込みグループ識別子に対応する選択されたバッファに前記キャッシュラインアドレスを格納するステップと、有効なエントリを含む前記選択されたバッファの位置を識別するために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行をアップデートするステップと、を有する。
【００１２】
前記ロジックコアは、対応する書き込みグループに関連する各々の行が前記対応する書き込みグループに関連する前記第１書き込みグループテーブル及び前記第２書き込みグループテーブルの行を識別する行ビットマップを含む複数の行を有する第０書き込みグループテーブルを更に含み得る。
【００１３】
前記方法は、前記メモリコントローラーが、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルのバッファを識別する、前記書き込みグループ識別子に対応する前記第０書き込みグループテーブルの行ビットマップを検索するステップと、前記対応する行ビットマップに基づいて、前記書き込みグループ識別子に関連する前記複数のバッファのうちの１つのバッファが利用可能な空間を有するか否かを判断するステップと、前記複数のバッファのうちの１つのバッファが利用可能な空間を有すると判断された場合、前記１つのバッファを前記選択されたバッファとして選択するステップと、前記書き込みグループ識別子に関連するバッファが利用可能な空間を有しないと判断された場合、前記第２書き込みグループテーブルに利用可能なバッファがあるか否かを判断するステップと、前記第２書き込みグループテーブルに利用可能なバッファがあると判断された場合、前記利用可能なバッファを前記書き込みグループ識別子に関連付けるために前記対応する行ビットマップをアップデートするステップと、前記利用可能なバッファを前記選択されたバッファとして選択するステップと、を更に含み得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグ（Ｐｅｒｓｉｓｔ  Ｆｌａｇ）を更に含み、前記方法は、前記メモリコントローラーが、前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索するステップと、前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、を更に含み得る。
前記メモリモジュールは、キャッシュメタデータメモリを更に含み、前記方法は、前記メモリコントローラーが、前記第２書き込みグループテーブルに格納されたキャッシュラインアドレスの各々に対するパーシスト状態を前記キャッシュメタデータメモリに格納するステップと、を更に含み得る。
前記パーシスタント書き込みコマンドは、パーシストフラッグを更に含み、前記方法は、前記メモリコントローラーが、前記パーシストフラッグが設定されたか否かを判断し、前記パーシストフラッグが設定されたと判断された場合、各々のバッファが１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索するステップと、前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記キャッシュラインアドレスに対応するパーシスト状態が設定されたか否かを判断するステップと、前記キャッシュラインアドレスに対応する前記パーシスト状態が設定されたと判断された場合、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、前記キャッシュラインアドレスに対応するパーシスト状態が設定されないと判断された場合、前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むことを防止するステップと、を更に含み得る。
前記メモリモジュールは、不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ：Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｄｕａｌ  Ｉｎ−ｌｉｎｅ  Ｍｅｍｏｒｙ  Ｍｏｄｕｌｅ）であり得る。
【００１４】
上記目的を達成するためになされた本発明の他の態様によるメモリモジュールの動作方法は、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記方法は、前記メモリコントローラーが、書き込みグループ識別子を含むフラッシュ（Ｆｌｕｓｈ）コマンドを受信するステップと、各々の行が第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの１つ以上の行を検索するステップと、各々のバッファが前記第１書き込みグループテーブルの対応する行の前記ヘッドポインタ及び前記テールポインタによって識別される前記有効なエントリに１つ以上のキャッシュラインアドレスを格納する、前記書き込みグループ識別子に関連する前記第２書き込みグループテーブルの１つ以上のバッファを検索するステップと、前記書き込みグループ識別子に関連する前記１つ以上のバッファの１つ以上のキャッシュラインアドレスの各々に対して、前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、を含む。
【００１５】
前記方法は、前記メモリコントローラーが、前記第２書き込みグループテーブルの対応するバッファを空けるために、前記書き込みグループ識別子に対応する前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、を更に含み得る。
【００１６】
上記目的を達成するためになされた本発明の更に他の態様によるメモリモジュールの動作方法は、揮発性メモリ、不揮発性メモリ、及びメモリコントローラーを備えるメモリモジュールの動作方法であって、前記メモリコントローラーは、ホストレイヤーと、前記不揮発性メモリに連結されたメディアレイヤーと、前記ホストレイヤー、前記メディアレイヤー、及び前記揮発性メモリに連結されて、複数の行を含む第１書き込みグループテーブルを格納し、前記揮発性メモリ及び前記不揮発性メモリを制御するロジックコアと、を含み、前記方法は、前記メモリコントローラーが、フラッシュ（Ｆｌｕｓｈ）コマンドを受信するステップと、各々の行が前記第２書き込みグループテーブルの対応するバッファにある有効なエントリを識別するヘッドポインタ及びテールポインタを含む、前記第１書き込みグループテーブルの各々の行に対して、前記第２書き込みグループテーブルの対応するバッファを検索するステップと、前記第２書き込みグループテーブルの対応するバッファの有効なエントリの各々に対して、対応するキャッシュラインアドレスを検索して前記揮発性メモリの前記キャッシュラインアドレスのデータを前記不揮発性メモリに書き込むステップと、前記第２書き込みグループテーブルの対応するバッファを空けるために、前記第１書き込みグループテーブルの行の前記ヘッドポインタ及び前記テールポインタを同じ値にアップデートするステップと、を含む。
【発明の効果】
【００１７】
本発明によると、揮発性メモリから不揮発性メモリにデータが重複してフラッシュされることを避け、書き込みグループによって揮発性メモリから不揮発性メモリにデータをフラッシュする性能を向上させることができる。
【図面の簡単な説明】
【００１８】
【図１】本発明の一実施形態によるホストシステムとインターフェースするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュールの構成図である。
【図２Ａ】本発明の一実施形態によるホストシステムとインターフェースするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュールのブロック図である。
【図２Ｂ】本発明の一実施形態によるロジックコア及び揮発性メモリを含むＮＶＭＤＩＭＭ−Ｐの一部分のブロック図である。
【図３Ａ】本発明の一実施形態による第１書き込みグループテーブル及び第２書き込みグループテーブルの構成図である。
【図３Ｂ】本発明の一実施形態による第１書き込みグループテーブル及び第２書き込みグループテーブルの構成図である。
【図４】本発明の一実施形態による第１書き込みグループテーブル及び第２書き込みグループテーブルにおける「レコード」動作に対する構成図である。
【図５】本発明の一実施形態による「レコード」動作のフローチャートである。
【図６Ａ】本発明の一実施形態による「フラッシュ」動作のフローチャートである。
【図６Ｂ】本発明の一実施形態による「ライトバック」動作のフローチャートである。
【図７】本発明の一実施形態によるパーシスタント書き込みコマンドの実行のフローチャートである。
【図８】本発明の一実施形態によるフラッシュコマンドの実行のフローチャートである。
【図９】本発明の一実施形態による第０書き込みグループテーブル、第１書き込みグループテーブル、及び第２書き込みグループテーブルの構成図である。
【図１０】本発明の一実施形態による第０書き込みグループテーブル、第１書き込みグループテーブル、及び第２書き込みグループテーブルを含むシステムにおける「レコード」動作の実行のフローチャートである。
【図１１】本発明の一実施形態による第０書き込みグループテーブル、第１書き込みグループテーブル、及び第２書き込みグループテーブルを含むシステムにおける「フラッシュ」動作の実行のフローチャートである。
【発明を実施するための形態】
【００１９】
以下、本発明を実施するための形態の具体例を、図面を参照しながら詳細に説明する。図で、同じ参照符号は同じ要素を称する。しかし、本発明は、多様な形態で具現され、本明細書で説明する実施形態に限られるものと解釈してはならない。むしろ、このような実施形態は、本発明が徹底且つ完璧に成るような例示として提供され、当業者に本発明の特徴と様相を十分に伝達するためのものである。従って、本発明の特徴と様相の完璧な理解のために当業者に必要としないプロセス、要素、そして技術は説明しないこともある。他に言及しない限り、同じ参照符号は、図面及び発明の詳細な説明で同じ要素を表し、従って、これに対する説明は繰り返さない。
【００２０】
本明細書で「第０」、「第１」、「第２」、「第３」等の用語が多様な要素、構成要素、及び／又はセクションを説明するために使用されるとしても、このような要素、構成要素、及び／又はセクションは、このような用語によって制限されてはならない。このような用語は、１つの要素、構成要素、又はセクションを他の要素、構成要素、又はセクションと区別するために使用される。従って、本発明の思想及び範囲を逸脱しない限り、下記で説明する第１要素、第１構成要素、又は第１セクションは、第２要素、第２構成要素、又は第２セクションと称することができる。
【００２１】
本明細書で使用する用語は、単に特定の実施形態を説明するための目的であり、本発明を制限する意図はない。本明細書で使用する通り、文脈が明確に異なるものを指さない限り、単数形態は、複数形態を含むものと意図される。「含む」、「含み」の用語は、本明細書で使用する場合、記述する特徴、整数、ステップ、動作、要素、及び／又は構成要素の存在を明示するが、１つ以上の他の特徴、整数、ステップ、動作、要素、構成要素、及び／又はその組み合わせの存在又は追加をできないようにするものではない。本明細書で使用する通り、「及び／又は」の用語は、１つ以上の関連する項目及び全ての組み合わせを含む。「少なくとも１つ」のような表現は、要素のリストの前にある場合、要素の全てのリストを修正し、個別要素のリストを修正しない。
【００２２】
本明細書で使用する通り、「非常に」、「約」、そして類似する用語は、近似の用語として使用され、程度の用語としては使用されず、通常の技術者によって認識され、測定されるか又は計算された値で固有の偏差を説明するために意図される。なお、本明細書の実施形態を説明する場合、「できる」の使用は、「本発明の１つ以上の実施形態を」称する。本明細書で使用する通り、「使用」、「使用する」、そして「使用され」の用語は、それぞれ「活用」、「活用する」、そして「活用され」の用語と同意語として考慮される。なお、「例示的な」用語は、説明又は例示を称するためのものと意図される。
【００２３】
本明細書で説明する本発明の実施形態による電子又は電気デバイス及び／又は他に関連するデバイス又は構成要素は、任意の適切なハードウェア、ファームウェア（例えば、特定用途向け集積回路（ＡＳＩＣ））、ソフトウェア、又はソフトウェア、ファームウェア、及びハードウェアの組み合わせを活用して具現される。例えば、このようなデバイスの多様な構成要素は１つの集積回路（ＩＣ）チップ又は別途のＩＣチップで形成される。なお、このようなデバイスの多様な構成要素は、フレキシブル印刷フィルム、テープキャリアパッケージ（ＴＣＰ：Ｔａｐｅ  Ｃａｒｒｉｅｒ  Ｐａｃｋａｇｅ）、印刷回路基板（ＰＣＢ）で具現されるか又は１つの基板で形成される。
【００２４】
図１は、本発明の一実施形態によるホストシステムとインターフェースをするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュール（ＮＶＤＩＭＭ−Ｐ）の構成図であり、図２Ａは、本発明の一実施形態によるホストシステムとインターフェースをするパーシスタントメモリを含む不揮発性デュアルインラインメモリモジュールのブロック図である。
【００２５】
図１及び図２Ａに示す通り、ＮＶＤＩＭＭ−Ｐ１００は、揮発性メモリ１１０、不揮発性メモリ（又はパーシスタントメモリ）１２０、そして揮発性メモリ１１０及び不揮発性メモリ１２０の両方にデータを書き込み、両方からデータを読み込むメモリコントローラー１３０を含む。メモリコントローラー１３０は、ホストプロセッサ２００とインターフェースをするホストレイヤー１３２（例えば、行アドレスストローブ（Ｓｔｒｏｂｅ）−列アドレスストローブ、又はＲＡＳ−ＣＡＳインターフェース）、ＮＶＤＩＭＭ−Ｐモジュールを制御するロジックコア１３４、そして不揮発性メモリ１２０とインターフェースをするメディアレイヤー１３６を含む。いくつかの実施形態で、メモリコントローラー１３０は、例えばフィールドプログラマブルゲートアレイ（ＦＰＧＡ：Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロコントローラーで具現される。
【００２６】
以下では、揮発性メモリ１１０は「キャッシュ（Ｃａｃｈｅ）」と称し、ロジックコア１３４は「キャッシュレイヤー（Ｃａｃｈｅ  Ｌａｙｅｒ）」と称する。例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）（揮発性メモリ１１０）は、相変化メモリ（ＰＣＭ）（不揮発性メモリ１２０）に対する書き込みバッファとして作用する。他の例として、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）キャッシュは、度々使用されるか又は最近使用されたデータを読み込み／書きみする場合、性能を向上させるためにフラッシュメモリ（例えば、Ｚ−ＮＡＮＤ）に連結される。
【００２７】
図２Ｂは、本発明の一実施形態によるロジックコア１３４及び揮発性メモリ１１０を含むＮＶＤＩＭＭ−Ｐの一部分のブロック図である。図２Ｂに示す通り、ロジックコア１３４は、ホストレイヤー１３２に対するインターフェース１３４ｈ、メディアレイヤー１３６に対するインターフェース１３４ｍ、キャッシュコントローラー１３４ｃ、プリフェッチャー（Ｐｒｅｆｅｔｃｈｅｒ）１３４ｐ、メタデータキャッシュ１３４ｍｄ（ロジックコア１３４内のスタティックランダムアクセスメモリ又はＳＲＡＭとして具現されるか、或いはスタティックランダムアクセスメモリ又はＳＲＡＭに格納される）、Ｌ１プリフェッチ（Ｐｒｅｆｅｔｃｈ）バッファ１３４Ｌ１（ロジックコア１３４内のＳＲＡＭに格納されることで具現される）、及び揮発性メモリ１１０（例えば、ロジックコア１３４の外部のダイナミックランダムアクセスメモリ又はＤＲＡＭ）とインターフェースをする揮発性メモリコントローラー１３４ｄを含む。
【００２８】
図２Ｂは、一実施形態として、揮発性メモリ１１０に格納される多様な類型のデータを示す。このようなデータは、キャッシュされたデータ１１２、キャッシュメタデータ１１４、Ｌ２読み込み／書き込みキャッシュ１１６、及びＬ３書き込みバッファ１１８を含む。
【００２９】
ＮＶＤＩＭＭ−Ｐ１００、特にメモリコントローラー１３０は、メモリコントローラー１３０のホストレイヤー１３２に連結されたバス２５０（図１及び図２Ａ参照）を通じてホストプロセッサ２００と通信する。メモリコントローラー１３０は、ホストレイヤー１３２を通じて、ＮＶＤＩＭＭ−Ｐにデータを書き込みＮＶＤＩＭＭ−Ｐからデータを読み込むためにホストプロセッサ２００からコマンド及びデータを受信する。メモリコントローラー１３０は、例えば揮発性メモリ１１０及び／又は不揮発性メモリ１２０にデータを書き込むか又は揮発性メモリ１１０及び／又は不揮発性メモリ１２０からデータを読み込んで、バス２５０を通じてホストプロセッサ２００にデータを提供することでコマンドに応答する。データは、「パーシスタントＤＲＡＭ」としてアクセスされるか又はブロック基盤のドライブアクセスインターフェースを通じてアクセスされるキャッシュラインインターフェース（例えば、メモリにマッピングされたフラッシュ及びＤＲＡＭ）を通じて、キャッシュラインユニットにあるＮＶＤＩＭＭ−Ｐ１００に書き込み／読み込みされる。
【００３０】
データ持続性に関するＮＶＤＩＭＭ−Ｐ標準に定義されたコマンドは、パーシスタント書き込みコマンド（例えば、ＮＶＤＩＭＭ−Ｐ標準によるＰＷＲＩＴＥコマンド）及びフラッシュコマンド（例えば、ＮＶＤＩＭＭ−Ｐ標準によるＦＬＵＳＨコマンド）を含む。ＰＷＲＩＴＥコマンドのパラメータは、データが書き込まれるキャッシュラインアドレス（又はメモリアドレス）、書き込みグループ識別子（ＷＧＩＤ）、及び「パーシスト（Ｐｅｒｓｉｓｔ）」フラッグ（Ｆｌａｇ）を含む。「オフ（Ｏｆｆ）」（例えば、ｚｅｒｏ又は０）に設定された「パーシスト（Ｐｅｒｓｉｓｔ）」フラッグを含むＰＷＲＩＴＥコマンドに応答して、メモリコントローラー１３０は、関連するデータをＮＶＤＩＭＭ−Ｐ１００の揮発性メモリ１１０に格納し、コマンドによって書き込まれたデータの持続性を保証しない。
【００３１】
「オン（Ｏｎ）」（例えば、ｏｎｅ又は１）に設定された「パーシスト（Ｐｅｒｓｉｓｔ）」フラッグを含むＰＷＲＩＴＥコマンドに応答して、メモリコントローラー１３０は、関連するデータをＮＶＤＩＭＭ−Ｐ１００の不揮発性メモリ１２０に格納（「フラッシュ」）して、ＰＷＲＴＩＥコマンドで提要された書き込みグループ識別子（ＷＧＩＤ）を含む他の全てのデータ（例えば、以前にＰＷＲＩＴＥコマンドを使用してＮＶＤＩＭＭ−Ｐ１００に書き込まれたデータ及び同じＷＧＩＤを有するデータ）を揮発性メモリ１１０から不揮発性メモリ１２０に格納（例えば、書き込み又はフラッシュ）する。ＮＶＤＩＭＭ−Ｐ１００は、「オン（Ｏｎ）」に設定されたパーシストフラッグを含むＰＷＲＴＩＥコマンドが完了した場合に、ホストプロセッサ２００に確認応答をする。
【００３２】
ＦＬＵＳＨコマンドのパラメータは、不揮発性メモリ１２０に全ての書き込み（例えば、揮発性メモリ１１０に書き込まれた全てのデータ）をフラッシュするか、全てのパーシスタント書き込み（例えば、０として設定されたパーシストビットを含むＰＷＲＩＴＥコマンドを用いて実行された全ての書き込み）をフラッシュするか、又は与えられたＷＧＩＤに関する全てのパーシスタント書き込み（例えば、ＰＷＲＩＴＥコマンドと類似するが、追加データのない書き込み）をフラッシュするかを示す設定を含む。ＦＬＵＳＨ動作が完了した場合、ＮＶＤＩＭＭ−Ｐ１００はホストプロセッサ２００に確認を提供する。
【００３３】
「オン（Ｏｎ）」に設定された「パーシスト（Ｐｅｒｓｉｓｔ）」を含むＰＷＲＩＴＥコマンドに応答してデータをフラッシュする場合、又はＷＧＩＤに基づいてＦＬＵＳＨコマンドに応答してデータをフラッシュする場合、メモリコントローラー１３０は、揮発性メモリ１１０でフラッシュされるデータ、即ち与えられたＷＧＩＤに関する全てのデータを識別する。
【００３４】
揮発性メモリ１１０が小さい場合、揮発性データに対する検索はマッチングするＷＧＩＤを有する全てのデータに対して揮発性メモリ１１０の全てをスキャンすることで達成される。例えば、ＳＲＡＭ書き込みバッファ（例えば、Ｌ３書き込みバッファ１１８）は、約２５６個のキャッシュエントリ（Ｅｎｔｒｉｅｓ）を含み、これは現在のメモリ技術に基づいて合理的な時間内（例えば、相当するレイテンシ（Ｌａｔｅｎｃｙ）又は相当する性能オーバーヘッド（ＯｖｅｒＨｅａｄ）なし）にスキャンするのに十分に小さい。
【００３５】
しかし、揮発性メモリ１１０が大きい場合、全ての揮発性データをスキャンすることは実用的ではない。例えば、８ギガバイト（ＧＢ）ＤＲＡＭキャッシュは、約４百万キャッシュラインエントリを有し、全ての４百万キャッシュラインエントリをスキャンするのに要求される時間は非常に長くなり、ＮＶＤＩＭＭ−Ｐ１００で相当なレイテンシを発生する（例えば、メモリコントローラー１３０は、スキャンが完了するまで活性化を抑えるか又は待機する。従って、受信され且つメモリコントローラー１３０のコマンドキュー（Ｑｕｅｕｅ）で待機される次のコマンドを実行するためのレイテンシを増加させる）。
【００３６】
このように、本実施形態は、例えば１に設定されたパーシストビットを有するＰＷＲＩＴＥコマンド又は特定ＷＧＩＤに対するＦＬＵＳＨコマンドに応答して、不揮発性メモリ１２０にフラッシュされる揮発性メモリ１１０のエントリを識別するオーバーヘッドを減少させるためのシステム及び方法に関する。これは、不揮発性メモリ１２０に書き込みグループをフラッシュするために必要な時間を減少させることで、ＮＶＤＩＭＭ−Ｐ１００の応答速度を十分に向上させる。また、データのフラッシュを加速化させることで、処理量を向上させ、コマンドキューで次のコマンドのブロッキング（Ｂｌｏｃｋｉｎｇ）を減少させる。
【００３７】
いくつかの実施形態は、揮発性メモリ１１０で書き込まれたデータの状態を追跡するための特殊なデータ構造の使用に関する。他の実施形態は、非常に減少した計算オーバーヘッドを有するＰＷＲＩＴＥ及びＦＬＵＳＨコマンドを支援するためのデータ構造に格納されたデータを活用するシステム及び方法に関する。従って、ＰＷＲＩＴＥ及びＦＬＵＳＨのようなＮＶＤＩＭＭ−Ｐコマンドの効率的な実行を可能にする。
【００３８】
一実施形態において、データ構造は、第１書き込みグループテーブル（Ｌ１ＷＧＴ）及び第２書き込みグループテーブル（Ｌ２ＷＧＴ）を含む。
【００３９】
図３Ａ及び図３Ｂは、本発明の一実施形態による第１書き込みグループテーブル（Ｌ１ＷＧＴ）３０４及び第２書き込みグループテーブル（Ｌ２ＷＧＴ）３０６の構成図である。図３Ａ及び図３Ｂに示す通り、データ構造は各書き込みグループ識別子（ＷＧＩＤ）に属するキャッシュラインを追跡するために使用され、これによって任意に与えられたＷＧＩＤに関連するキャッシュラインの識別を単純にする。
【００４０】
第１書き込みグループテーブル（Ｌ１ＷＧＴ）は、メモリコントローラー１３０内のスタティックランダムアクセスメモリ（ＳＲＡＭ）に格納され、ＷＧＩＤ（例えば、６４ビット値）によってページ（Ｐａｇｅ）エントリ（例えば、第２書き込みグループテーブル（Ｌ２ＷＧＴ）内のエントリのビットマップ（Ｍａｐ））にマッピングする。第１書き込みグループテーブル（Ｌ１ＷＧＴ）は、より速やかなアクセスのためにＳＲＡＭに基づくが、本実施形態はこれに限定されない。第２書き込みグループテーブル（Ｌ２ＷＧＴ）は、Ｌ２読み込み／書き込みキャッシュ１１６のように、ＮＶＤＩＭＭ−Ｐ１００の揮発性メモリ１１０（又はメモリコントローラー１３０の別途の動的メモリ（ＤＲＡＭ））に格納され、ページエントリからＮＶＤＩＭＭ−Ｐ１００の揮発性メモリ１１０内のキャッシュラインアドレス（又はデータアドレス）にマッピングする。いくつかの実施形態で、第２書き込みグループテーブル（Ｌ２ＷＧＴ）は、費用考慮事項、性能要求事項、及び容量要求事項（例えば、ＳＲＡＭはＤＲＡＭよりもより高速でより高価であり、例えばＦＰＧＡ又はＡＳＩＣ内で利用可能なメモリの量が制限される）に基づいて、静的メモリ（ＳＲＡＭ）に格納される。いくつかの実施形態で、第２書き込みグループテーブル（Ｌ２ＷＧＴ）がメモリアドレス又は揮発性メモリ１１０のキャッシュメタデータ１１４領域内の位置にマッピングされる間接指定（Ｉｎｄｉｒｅｃｔｉｏｎ）の追加ステップがあり、キャッシュメタデータ１１４領域は、キャッシュラインアドレスを格納する。
【００４１】
図３Ｂは、一実施形態による第１書き込みグループテーブル（Ｌ１ＷＧＴ）及び第２書き込みグループテーブル（Ｌ２ＷＧＴ）の詳細な構成図である。図３Ｂに示す例で、第１書き込みグループテーブル（Ｌ１ＷＧＴ）は６４個のエントリを含み、エントリは０〜６３まで（ＷＧＩＤ［０］、ＷＧＩＤ［１］、…、ＷＧＩＤ［６３］）番号が付けられた各書き込みグループ識別子（ＷＧＩＤ）に関する。図３Ｂの第１書き込みグループテーブル（Ｌ１ＷＧＴ）の各エントリは、第２書き込みグループテーブル（Ｌ２ＷＧＴ）の行のうちの１つに対応し、対応する第２書き込みグループテーブル（Ｌ２ＷＧＴ）の行内にあるヘッド（Ｈｅａｄ）エントリ（ヘッドポインタ（Ｐｏｉｎｔｅｒ））に対するポインタ及びテール（Ｔａｉｌ）エントリ（テールポインタ）に対するポインタを含む（例えば、第１書き込みグループテーブル（Ｌ１ＷＧＴ）の各エントリは、対応する第２書き込みグループテーブル（Ｌ２ＷＧＴ）の行のエントリ［０］のメモリ位置に対応する暗黙のオフセット（Ｏｆｆｓｅｔ）を含み、ヘッド及びテールの特定位置はポインタ算出演算で計算される）。
【００４２】
上述した通り、第２書き込みグループテーブル（Ｌ２ＷＧＴ）は、速度及び容量のような性能要求事項に基づいて、ＳＲＡＭ又はＤＲＡＭに格納される。いくつかの実施形態で、第２書き込みグループテーブル（Ｌ２ＷＧＴ）は多数のリングバッファを含み、それぞれのリング（Ｒｉｎｇ）バッファは対応する書き込みグループに関連する。図３Ｂに示す例で、６４個のリングバッファがあり、各リングバッファは、ＷＧＩＤ［０］〜ＷＧＩＤ［６３］で示された６４個の書き込みグループのうちの異なる１つに対応する。各リングバッファは多数のエントリを含み（図３Ｂに示す実施形態で、各リングバッファは６５個のエントリを含む（エントリ［０］〜エントリ［６４］））、各エントリはキャッシュラインアドレス（例えば、２８ビットアドレス）を格納する。図示した実施形態で、有効なエントリは、ヘッド及びデールによって境界が出来上がる（例えば、ヘッドからテール−１までの範囲外のエントリは有効でないものと見なされる）。
【００４３】
例えば、図３Ｂに示す第０書き込みグループ（ＷＧＩＤ［０］）を検討すると、第１書き込みグループテーブル（Ｌ１ＷＧＴ）は１のヘッドポインタ及び３のテールポインタを格納し、これはリングバッファでエントリがエントリ［１］から始まりエントリ［３］で終了することを示す。対応する第２書き込みグループテーブル（Ｌ２ＷＧＴ）の行を検討すると、エントリ［１］でヘッドエントリは０ｘ０００００００キャッシュラインアドレスを格納し、エントリ［２］で次のエントリは０ｘ００００００１キャッシュラインアドレスを格納し、エントリ［３］でその次のエントリはリングバッファのテールである。
【００４４】
他の実施形態で、第２書き込みグループテーブル（Ｌ２ＷＧＴ）はヘッドエントリがいつも第０番目要素（例えば、エントリ［０］）であり、第１書き込みグループテーブル（Ｌ１ＷＧＴ）はテールの位置のみを格納するアレイ（Ａｒｒａｙ）を用いて具現される。
【００４５】
本発明が６４個の書き込みグループ（例えば、６４個のＷＧＩＤ）を含む実施形態について説明するが、本実施形態はこれに限定されず、６４個の書き込みグループよりも少ないか又は６４個の書き込みグループよりも多いもので具現される。例えば、いくつかの実施形態は２５５個の書き込みグループ又は２５６個の書き込みグループを含む。
【００４６】
＜エントリの状態に対する情報の格納＞
【００４７】
ホストプロセッサ２００が揮発性メモリ１１０から不揮発性メモリ１２０にキャッシュラインをフラッシュするためにＮＶＤＩＭＭ−Ｐにコマンドを伝達するが、ＮＶＤＩＭＭ−Ｐ１００は、ホストプロセッサ２００に知らせることなく、不揮発性メモリ１２０にキャッシュラインを既に書き込みしている場合（例えば、キャッシュがフル（Ｆｕｌｌ）になった場合のキャッシュ明け渡しによる）、キャッシュラインをフラッシングすることは必要ないかもしれない。これが、誤った結果を招かないこともあるが、関係のない動作は性能を低下させることもあり、関係のない書き込みは不揮発性メモリ１２０の寿命を減少させる（例えば、フラッシュメモリの制限された書き込みサイクル（Ｃｙｃｌｅ）の回数を不必要に消耗することで）。このように、いくつかの実施形態で、メモリコントローラー１３０は、追加の書き込みが必要であるか否かを判断するために追加メタデータを格納し、このデータはメモリコントローラー１３０が不揮発性メモリ１２０に既に書き込まれたデータを識別するようにする。従って、メモリコントローラー１３０は、不揮発性メモリ１２０に不必要な書き込みを行うことを防止し、不揮発性メモリ１２０の寿命を増加させる。
【００４８】
いくつかの実施形態で、メモリコントローラー１３０は、揮発性メモリ１１０のキャッシュメタデータ１１４に各エントリに対する「パーシスト状態」を格納する。パーシスト状態は、対応するキャッシュラインが未だパーシスタントに作られたものではないが（例えば、不揮発性メモリ１２０にフラッシュすることで）、パーシスタントとしてマークされているかを示す（例えば、ＰＷＲＩＴＥコマンドによって）。例えば、これは０に設定されたパーシストを含むＰＷＲＩＴＥコマンドによって書き込まれたデータに対応する。
【００４９】
表１は、揮発性メモリ１１０に格納されたデータの多様な可能な状態を示しており、メモリコントローラー１３０が、キャッシュ明け渡し（ＷＲＩＴＥ又はＦＬＵＳＨコマンドによるものではない）及びＰＷＲＩＴＥ又はＦＬＵＳＨコマンドに応答して、揮発性メモリ１１０から不揮発性メモリ１２０（ライトバックを行う）にデータを書き込んだか否かを示す。
【００５０】
【表１】
2018190412.tif 000003
【００５１】
表１のように、キャッシュラインが「有効ではない（Ｉｎｖａｌｉｄ）」状態である場合、メモリコントローラー１３０は、不揮発性メモリ１２０に有効ではないデータを書き込む必要がないため、明け渡し又はＰＷＲＩＴＥ又はＦＬＵＳＨに応答して不揮発性メモリ１２０にライトバックしない。
【００５２】
状態が「クリーン（Ｃｌｅａｎ）」である場合、揮発性メモリ１１０のデータは、対応する不揮発性メモリ１２０のデータに一致する（即ち、同じデータ）。このように、メモリコントローラー１３０は、揮発性メモリ１１０から不揮発性メモリ１２０にデータをライトバックする必要がない。
【００５３】
状態が「ダーティ（Ｄｉｒｔｙ）」である場合、揮発性メモリ１１０のデータは、変更され、不揮発性メモリ１２０に一致しない。このように、データがキャッシュ（揮発性メモリ１１０）から明け渡された場合、メモリコントローラー１３０は、データ損失を防止するために、不揮発性メモリ１２０にデータを書き込みする。しかし、データがパーシスタントとしてマークされていないため、ＰＷＲＩＴＥ又はＦＬＵＳＨコマンドに応答してデータをライトバックしない。
【００５４】
状態が「パーシスト（Ｐｅｒｓｉｓｔ）」である場合、データは、キャッシュ明け渡しである場合（そうでない場合、パーシストされたデータが損失されるため）及びＰＷＲＩＴＥ又はＦＬＵＳＨコマンドである場合に、不揮発性メモリ１２０に書き込まれる。パーシスタントとしてマークされたデータが不揮発性メモリ１２０に書き込まれた後に、次のＰＷＲＩＴＥ又はＦＬＵＳＨコマンドによって、データが再びライトバックされないように、データはメタデータ内で「クリーン（Ｃｌｅａｎ）」状態に設定される。
【００５５】
上記の表１で示した４つの異なる状態があるため、いくつかの実施形態で、メモリコントローラー１３０は、例えば３つのビットを使用して４つの状態（有効ではない、クリーン、ダーティ、パーシスト）を追跡する。表２は、異なる状態の符号化を示し、一実施形態によると、これらの状態は、Ｌ２読み込み／書き込みキャッシュ１１６及びＬ３書き込みバッファ１１８のためのキャッシュメタデータ１１４内に格納される。
【００５６】
【表２】
2018190412.tif 000004
【００５７】
表２に示す通り、４つの状態は、１つ以上の「有効」ビット、「ダーティ」ビット、及び「パーシスト」ビットの組み合わせを使用して示される。例えば、読み込み／書き込みキャッシュ（ＲＷＣ）の場合、１つの有効ビット、１つのダーティビット［有効、ダーティ］、及び１つのパーシストビットは４つの状態を示す。［０、Ｘ、Ｘ］は「有効ではない」状態（「Ｘ」は、値が無視されることを示し、例えば０又は１、即ち有効ビットが０であることは状態が「有効ではない」ことを示すのに十分である）を示し、［１、０、０］は、「クリーン」状態を示し、［１、１、０］は、「ダーティ」であるが、「パーシスト」ではない状態を示し、［１、１、１］は、「パーシスト」又は「ダーティ及びパーシスト」状態を示す。
【００５８】
同様に、書き込みバッファ（ＷＢ）の場合、状態は、多数の有効ビット（例えば、３２ビット）、ダーティビット、パーシストビットから類推される。全ての有効ビットが０である場合、データは「有効ではない」状態である。全ての有効ビットが１であり、ダーティビットが０であり、パーシスとビットが０である場合、データは「クリーン」状態である。全ての有効ビットが０ではなく、ダーティビットが１、パーシストビットが０である場合、データは「ダーティ」状態である。全ての有効ビットが０ではなく、ダーティビットが１、パーシストビットが１である場合、データは「パーシスト」状態である。
【００５９】
上述した通り、データがキャッシュから明け渡された後、例えばメタデータの値を適切に修正することで、データの状態はクリーンに変更される。例えば、Ｌ２読み込み／書き込みキャッシュ１１６の場合、「パーシスト」状態からデータ明け渡しを行った後、メタデータ値は、［１、１、１］（「パーシスト」状態）から［１、０、０］（「クリーン」状態）に変更される。
【００６０】
＜４つの関数を用いてＰＷＲＩＴＥ及びＦＬＵＳＨを実行する＞
【００６１】
本実施形態は、書き込みグループテーブル及びキャッシュラインメタデータと共に、ＰＷＲＩＴＥ及びＦＬＵＳＨコマンドの実行を支援するために使用される４つの関数により指図される。
【００６２】
Ｒｅｃｏｒｄ（ＷＧＩＤ、Ａｄｄｒｅｓｓ）−書き込みグループテーブルにあるキャッシュラインアドレスを記録
【００６３】
Ｆｌｕｓｈ（ＷＧＩＤ）−特定のＷＧＩＤに関連するキャッシュラインをフラッシュ
【００６４】
ＦｌｕｓｈＰｅｒｓｉｓｔ（）−全てのパーシスタントキャッシュライン（例えば、「パーシスト状態」に設定されたキャッシュライン）をフラッシュ
【００６５】
ＦｌｕｓｈＡｌｌ（）−全てのキャッシュライン（例えば、パーシスタントであるか又はパーシスタントでない）をフラッシュ
【００６６】
図４は、本発明の一実施形態による第１書き込みグループテーブル及び第２書き込みグループテーブルにおける「レコード（Ｒｅｃｏｒｄ）」動作に対する構成図である。特に、図４は書き込みグループ識別子に対するＷＧＩＤ［１］パラメータ及びアドレス（キャッシュラインアドレス）に対する０ｘ００００００４を有するＲｅｃｏｒｄ（ＷＧＩＤ、Ａｄｄｒｅｓｓ）関数を呼出す効果を示す。図３Ｂに示した状態に比べて、変更された書き込みグループテーブルの部分は、暗い色又は黒い色の背景で示す。
【００６７】
図５は、本発明の一実施形態による「レコード（Ｒｅｃｏｒｄ）」動作５００のフローチャートである。また、図５は、多様な動作がどうやって行われるかを示すＣのような擬似コード（Ｐｓｅｕｄｏｃｏｄｅ）のラインを含む。
【００６８】
図４及び図５を参照すると、レコード動作は、書き込みグループ識別子（ＷＧＩＤ）及びキャッシュラインアドレスと共に呼出される。５０２ステップにおいて、メモリコントローラーは、第１書き込みグループテーブル（Ｌ１ＷＧＴ）で、与えられた書き込みグループ識別子（ＷＧＩＤ）に対応するヘッド及びテール値を検索する。図４に示す例で、ＷＧＩＤ［１］に対するヘッドはＬ１ＷＧＴの位置４０２に格納され、テールはＬ１ＷＧＴの位置４０４に格納される。図３Ｂを参照すると、ＷＧＩＤ［１］に対するヘッドは０であり、テールは１であった。
【００６９】
５０４ステップで、メモリコントローラー１３０は、与えられた書き込みグループ識別子（ＷＧＩＤ）に関連するバッファがフルであるか否かを判断する。例えば、テールの位置がヘッドの位置のすぐ前である場合、リングバッファはフルであると判断される（（ｔａｉｌ＋１）％ｒｉｎｇ＿ｂｕｆ＿ｓｉｚｅ＝＝ｈｅａｄによって計算される）。
【００７０】
バッファがフルになった場合、５０６ステップで、メモリコントローラー１３０は、レコード動作が失敗したことを指す偽（Ｆａｌｓｅ）返し、レコード動作は終了する。
【００７１】
バッファがフルでない場合、５０８ステップで、メモリコントローラー１３０は、与えられた書き込みグループに対応する第２書き込みグループテーブル（Ｌ２ＷＧＴ）の行のテール位置に、与えられたアドレスを格納する。擬似コード（Ｐｓｅｕｄｏｃｏｄｅ）で、これはＬ２ＷＧＴ［ＷＧＩＤ］［ｔａｉｌ］＝ａｄｄｒｅｓｓであり、図４に示す例で、これはアドレス０ｘ００００００４をＷＧＩＤ［１］に対応する第２書き込みグループテーブル（Ｌ２ＷＧＴ）の列にあるテール（Ｅｎｔｒｙ［１］）に対応する位置４０６に書き込むことに対応する。
【００７２】
５１０ステップで、メモリコントローラー１３０は、第１書き込みグループテーブル（Ｌ１ＷＧＴ）のテールの位置を増加させる。このように、図４の位置４０４に示すテールは、１から２に増加され、それに相応して、テールは図４の位置４０８に示すＥｎｔｒｙ［２］に位置する。
【００７３】
５１２ステップで、メモリコントローラー１３０は、レコード動作が成功したことを指す真（Ｔｒｕｅ）を返してレコード動作は終了する。
【００７４】
図６Ａは、本発明の一実施形態による「フラッシュ（Ｆｌｕｓｈ）」動作６００のフローチャートである。図６Ａに示す通り、「Ｆｌｕｓｈ」関数は、書き込みグループ識別子（ＷＧＩＤ）を入力として取り込み、ライトバック動作を用いてＷＧＩＤに関連する全てのキャッシュラインをフラッシュしてバッファをクリアする。より詳しくは、一実施形態として、６１０ステップにおいて、メモリコントローラー１３０は、第１書き込みグループテーブル（Ｌ１ＷＧＴ）で、与えられたＷＧＩＤに対するヘッド及びテール値を検索する。６２０ステップで、メモリコントローラー１３０は、ヘッドからテールまでの値に対して繰り返すループ（Ｌｏｏｐ）を開始する。ループで現在の位置は「Ｐｏｓ」で表示される。上述した通り、いくつかの実施形態で、バッファはリングバッファとして具現され、テール位置はヘッドよりも小さい値で示される。このような場合、６１０ステップにおける繰り返しは、バッファ内の全ての有効な値に対して繰り返すため、これを考慮する。
【００７５】
６３０ステップで、メモリコントローラー１３０は、バッファの現在の位置（Ｐｏｓ）で、アドレスに対するメタデータにパーシスト状態が設定されたか否かを判断する。パーシスト状態が設定された場合、６４０ステップで、メモリコントローラー１３０は、アドレスのデータを不揮発性メモリ１２０に書き込む（ライトバックを行う）。パーシスト状態が設定されない場合（例えば、偽（Ｆａｌｓｅ））、メモリコントローラー１３０は、アドレスのデータを不揮発性メモリ１２０に書き込まない（例えば、不揮発性メモリ１２０にデータが既に格納されているため）。いずれの場合でも、６６０ステップで、メモリコントローラーは、評価するバッファの位置が更にあるか否かを判断する（例えば、Ｐｏｓがテールより小さい）。バッファの位置が更にある場合、メモリコントローラーは、ヘッドからテールまで、次の位置を識別するために６２０ステップを継続する。全ての位置が評価された場合、６７０ステップで、メモリコントローラーは、ヘッド及びテールを同じ値に設定することでバッファを空ける（例えば、与えられた書き込みグループ識別子（ＷＧＩＤ）に対応する第１書き込みグループテーブル（Ｌ１ＷＧＴ）の行のヘッド及びテールの値を０に設定）。
【００７６】
書き込みグループテーブルが各書き込みグループ識別子（ＷＧＩＤ）に関連する全てのデータのメモリ位置を格納することから、メモリコントローラー１３０は、どのデータが与えられた書き込みグループに属するかを確認するために揮発性メモリ１１０の全体をスキャンする必要がない。代わりに、与えられた書き込みグループに関連する全てのデータを確認することは、単に書き込みグループに関連する書き込みグループテーブルに格納されたアドレスの集まりを検索することのみを含む。
【００７７】
図６Ｂは、本発明の一実施形態による「ライトバック」動作６４０のフローチャートである。キャッシュラインアドレスが与えられると、メモリコントローラー１３０は、データを確認し、確認されたデータを不揮発性メモリ１２０に書き込み、そして修正されたデータの状態に関連するメタデータをアップデートすることで、キャッシュラインアドレスに関連するデータのライトバックを行う。図６Ｂに示さなくても、いくつかの実施形態で、キャッシュラインアドレスはメタデータアドレスに変更され、メタデータアドレスに位置するメタデータは、揮発性メモリ１１０内の対応するデータの位置及び不揮発性メモリ１２０内の対応する位置の確認のみならず、キャッシュラインに関連するメタデータの状態（又は「ビット」）（例えば、１つ以上の有効状態、ダーティ状態、及びパーシスト状態）を識別する。
【００７８】
６４２ステップにおいて、メモリコントローラー１３０は、アドレス（Ａｄｄｒｅｓｓ）で任意の有効ではないデータがあるか否かを判断するためにメタデータを確認する（例えば、１つ以上の有効ビットのうちのいずれか１つでも偽（Ｆａｌｓｅ）に設定されたか）。有効ではないデータがある場合、６４４ステップで、揮発性メモリ１１０内のデータは不揮発性メモリ１２０からのデータにアップデートされる。全て有効の場合、６４６ステップで、メモリコントローラー１３０は、アドレスのデータを揮発性メモリ１１０から不揮発性メモリ１２０に移動し、６４８ステップで、メモリコントローラー１３０は、有効状態を真（例えば、全て１）、ダーティ状態を偽（例えば、０）、そしてパーシスト状態を偽（例えば、０）に設定するためにメタデータをアップデートする。
【００７９】
いくつかの実施形態は、下記で詳しく説明する通り、Ｒｅｃｏｒｄ（ＷＧＩＤ、Ａｄｄｒｅｓｓ）及びＦｌｕｓｈ（ＷＧＩＤ）関数に関して、上述した技法及び動作に基づいてＰＷＲＩＴＥ及びＦＬＵＳＨコマンドを実行する。
【００８０】
図７は、本発明の一実施形態によるパーシスタント書き込み（ＰＷＲＩＴＥ）コマンドの実行のフローチャートである。メモリコントローラー１３０がＰＷＲＩＴＥコマンドを受信する場合、メモリコントローラー１３０がメタデータ内の与えられたアドレスを「パーシスト」状態に設定してＲｅｃｏｒｄ関数がＰＷＲＩＴＥを書き込みグループテーブルに記録するために使用されるものを除外した全ての動作は通常の書き込み（ＸＷＲＩＴＥ）と実質的に同じである。一実施形態で、ＰＷＲＩＴＥコマンドは、アドレス（Ａｄｄｒｅｓｓ）、書き込みグループ識別子（ＷＧＩＤ）、パーシスト（Ｐｅｒｓｉｓｔ）フラッグ、及びいくつかの関連するデータ（Ｄａｔａ）を含む。７０２ステップで、メモリコントローラー１３０は、データをアドレスに書き込む（通常のＸＷＲＩＴＥコマンドのように）。７０４ステップで、メモリコントローラー１３０は、アドレスに対応するメタデータをパーシスト状態に設定する（例えば、パーシスト状態を真（例えば、１）に設定するか、或いは読み込み／書き込みキャッシュの場合、上記の表２に示した通り、有効及びダーティ状態をそれぞれ０及び１に設定）。７０６ステップで、メモリコントローラーは、上記の図５で説明したレコード動作５００を用いてＰＷＲＩＴＥを書き込みグループテーブル（例えば、Ｌ１ＷＧＴ及びＬ２ＷＧＴ）に記録する。７０８ステップで、メモリコントローラー１３０は、ＰＷＲＩＴＥコマンドでパーシストフラッグが設定されたか否かを判断する。パーシストフラッグが設定された場合、７１０ステップで、メモリコントローラー１３０は、与えられたＷＧＩＤに関連する全てのデータを不揮発性メモリ１２０にフラッシュするために、上記の図６Ａで説明したフラッシュ動作６００を用いる。パーシストフラッグが設定されたか否かに拘らず全ての場合に、コマンドは終了する（例えば、パーシストフラッグがＰＷＲＩＴＥコマンドで設定されてない場合、フラッシュ動作を行う必要はない）。
【００８１】
図８は、本発明の一実施形態によるフラッシュ（ＦＬＵＳＨ）コマンドの実行のフローチャートである。図８に示す通り、ＦＬＵＳＨコマンドに提供されたパラメータに基づいて、ＦＬＵＳＨコマンドは、特定の書き込みグループ識別子（ＷＧＩＤ）に関連する全てのデータをフラッシュし、設定（例えば、真に設定）されたパーシスト状態を有する全てのデータをフラッシュするか又は揮発性メモリ１１０の全てのデータをフラッシュする。８０２ステップで、メモリコントローラー１３０は、パラメータから、ＦＬＵＳＨコマンドが特定の書き込みグループをフラッシュするためのものであるか（ｗｇｉｄ）、パーシストにマークされた全てのデータをフラッシュするためのものであるか（ｐｅｒｓｉｓｔ）、又は揮発性メモリ１１０の全てのデータをフラッシュするためのものであるか（ａｌｌ）を判断する。
【００８２】
メモリコントローラー１３０がＦＬＵＳＨコマンドを特定の書き込みグループをフラッシュするためのもの（ｗｇｉｄ）と判断すると、８０４ステップで、メモリコントローラーは、図６Ａで説明したＦｌｕｓｈ関数を用いて、特定された書き込みグループをフラッシュし、ＦＬＵＳＨコマンドの実行は終了する。
【００８３】
メモリコントローラー１３０がＦＬＵＳＨコマンドをパーシストにマークされたデータをフラッシュするもの（ｐｅｒｓｉｓｔ）と判断すると、メモリコントローラーは、書き込みグループテーブル（例えば、Ｌ１ＷＧＴ）で、全ての書き込みグループ識別子（ＷＧＩＤ＿ｉ）に対して繰り返すループを開始する。８０８ステップで、メモリコントローラー１３０は、図６Ａで説明したＦｌｕｓｈ関数を用いて、現在の書き込みグループ（例えば、現在のＷＧＩＤ＿ｉ）をフラッシュする。８１０ステップで、メモリコントローラー１３０は、処理する書き込みグループが更にあるか否かを判断する。処理する書き込みグループがある場合、メモリコントローラー１３０は、次の書き込みグループを選択するために８０６ステップを繰り返す。処理する書き込みグループがない場合、ＦＬＵＳＨコマンドの実行は終了する。
【００８４】
メモリコントローラー１３０が、ＦＬＵＳＨコマンドが揮発性メモリ１１０に格納された全てのデータをフラッシュするもの（ａｌｌ）と判断すると、８１２ステップで、メモリコントローラー１３０は、メタデータのエントリに対して繰り返すことで、全ての揮発性メモリ１１０に対して繰り返すループを開始する。メタデータの各エントリについて、メモリコントローラー１３０は、８１４ステップで、対応するデータがダーティであるか否かを判断する。対応するデータがダーティである場合、８１６ステップで、メモリコントローラー１３０は、図６Ｂで説明した通り、ｉ番目のデータに対してライトバック動作６４０を行う。８１８ステップで、メモリコントローラー１３０は、処理するメタデータのエントリが更にあるか否かを判断する。処理するメタデータのエントリがある場合、メモリコントローラー１３０は、次のエントリを選択するために８１２ステップに戻って繰り返す。処理するエントリがない場合（例えば、メタデータの全てのエントリが処理された後）、８２０ステップで、メモリコントローラー１３０は、このような全てのエントリを削除するために書き込みグループテーブルのエントリに対してループを開始する（全てのデータが不揮発性メモリ１２０にフラッシュされたため）。特に、８２２ステップで、メモリコントローラー１３０は、例えばＬ１ＷＧＴのヘッド及びテールを同じ値に設定することで（例えば、全て０に設定）、現在の書き込みグループに対するバッファを空ける。８２４ステップで、メモリコントローラー１３０は、バッファを空ける書き込みグループが更にあるか否かを判断する。バッファを空ける書き込みグループがある場合、メモリコントローラーは、次の書き込みグループを選択するために８２０ステップに戻って繰り返す。エントリがもういない場合（例えば、全ての書き込みグループのバッファが空けられた後）、ＦＬＵＳＨコマンドの実行は終了する。
【００８５】
このように、本実施形態は、揮発性メモリ１１０に格納されたデータのパーシスト状態に対する情報を格納するメタデータ及び各書き込みグループに関連するキャッシュラインアドレスに対する情報を格納する書き込みグループテーブルの使用を通じて、ＪＥＤＥＣ  ＮＶＤＩＭＭ−ＰスペックのＰＷＲＩＴＥ及びＦＬＵＳＨコマンドの効率的な実行を可能にする。従って、書き込みグループに関連するデータの識別を含むコマンドの実行を加速化でき、オーバーヘッドを減少させる。
【００８６】
いくつかの実施形態は、書き込みグループテーブルが一致しないようにすることを引き起こすレース（Ｒａｃｅ）条件の防止に関する。いくつかの実施形態で、メモリコントローラー１３０は同時に多数のコマンドを処理する。しかし、２つの書き込みが同時に行われた場合、書き込みグループテーブルは、書き込み動作の多様な部分が実行される場合の特定順に依存して、実際のデータと一致しない状態で維持される。このような、いくつかのレース条件は、メモリコントローラー１３０がライトバック動作６４０を行う間、揮発性メモリ１１０を閉じることで（例えば、書き込みコマンドを待機させることで）防止される。このように、いくつかの実施形態において、メモリコントローラー１３０は、データを揮発性メモリ１１０から不揮発性メモリ１２０に移動させ、データが不揮発性メモリ１２０に移動されたことを指すメタデータをアップデートするライトバック動作６４０（例えば、図６Ｂに示した通り）を行う間、ライトバック動作６４０が完了するまで、他の全ての書き込みコマンド（例えば、ＸＷＲＩＴＥ及びＰＷＲＩＴＥコマンド）を遅延させる。
【００８７】
一実施形態において、メモリコントローラー１３０は、ライトバック動作６４０を行う間、他のコマンド（例えば、読み込みコマンド又は書き込みではない他のコマンド）に応答することを持続する。ホストプロセッサ２００から受信された全てのコマンドは、実行されるまでにメモリコントローラー１３０のコマンドキューに格納される。通常的な条件の下で、メモリコントローラー１３０は、コマンドバッファで最も先に受信されたコマンドを先に実行する先入先出（ＦＩＦＯ）方式によってコマンドを実行する。しかし、ライトバック動作の間、揮発性メモリのロックを実行するために、メモリコントローラー１３０は、ライトバック動作の間、コマンドバッファから単に書き込みではないコマンド（例えば、読み込みコマンド）のみを実行する。ライトバック動作が完了した後、メモリコントローラー１３０は、ライトバック動作の間、実行されなかったコマンドバッファにある任意の書き込みコマンドを実行する。
【００８８】
他の実施形態は、特定の書き込みグループに対するバッファがフルである場合（例えば、第２書き込みグループテーブルの行がフルである場合）又はフラグメンテーション（例えば、多くの書き込みグループが使用中であるが、第２書き込みグループテーブル（Ｌ２ＷＧＴ）で、いくつかの書き込みグループは、開けられた多数のスロット（Ｓｌｏｔｓ）を有する）によって書き込みグループテーブルが埋まることで、特定の書き込みグループに関連するキャッシュラインを不揮発性メモリ１２０に予めフラッシュすること（又はガベージコレクション（Ｇａｒｂａｇｅ  Ｃｏｌｌｅｃｔｉｎｇ））に関する。例えば、これは、ＷＧＩＤに関連するバッファがフルである場合、Ｆｌｕｓｈ（ｗｇｉｄ）を実行することで誘発される。より詳しくは、いくつかの実施形態において、メモリコントローラー１３０は、バッファがフルになるや否やバッファをフラッシュするように構成される。例えば、エントリをバッファに追加して、第１書き込みグループテーブル（Ｌ１ＷＧＴ）がテールの新たな位置を識別するようにアップデートした後にテールがヘッドのすぐ前に位置する場合（例えば、（Ｔａｉｌ＋１）  ％  ｒｉｎｇ＿ｂｕｆ＿ｓｉｚｅ  ＝＝  Ｈｅａｄ）、バッファはフルになる。この場合、フルになったバッファを不揮発性メモリ１２０にフラッシュするためにＦｌｕｓｈ（ｗｇｉｄ）動作６００は直ちに誘発される。いくつかの実施形態において、メモリコントローラー１３０は、第１書き込みグループテーブル（Ｌ１ＷＧＴ）のエントリに対して、繰り返して且つフルになったバッファが検索された場合、関連するバッファをフラッシュすることでフルになったバッファ（例えば、（Ｔａｉｌ＋１）  ％  ｒｉｎｇ＿ｂｕｆ＿ｓｉｚｅ  ＝＝  Ｈｅａｄ）があるか否かを周期的に判断する。このような実施形態において、ＰＷＲＴＩＥコマンドはメモリコントローラー１３０が新たなエントリを既にフルになったバッファに記録するように試みることを引き起こす。この場合、メモリコントローラー１３０は、新たな書き込みを記録する前に、先ずバッファをフラッシュする（バッファを空けるために）。
【００８９】
＜Ｌ０ＷＧＴを有する書き込みグループテーブルの拡張＞
【００９０】
上述した実施形態において、各書き込みグループに対するバッファは同じ大きさであった。他の実施形態によると、バッファの大きさにおいて、柔軟性を増加させるために、第２書き込みグループテーブル（Ｌ２ＷＧＴ）の第０以上の行は、任意の与えられた書き込みグループに割り当てられる。このように、特定の書き込みグループに関連するエントリの個数は、第２書き込みグループテーブル（Ｌ２ＷＧＴ）の任意に与えられた行の個数（例えば、図３Ｂに示した通り、６５個のエントリ）よりも大きくなる。
【００９１】
一実施形態は、第０書き込みグループテーブル（Ｌ０ＷＧＴ）を含む。一実施形態において、第０書き込みグループテーブル（Ｌ０ＷＧＴ）は、速やかなアクセスを提供するために、スタティックランダムアクセスメモリ（ＳＲＡＭ）に格納される。第０書き込みグループテーブル（Ｌ０ＷＧＴ）は、書き込みグループ識別子（ＷＧＩＤ）によって索引される。各書き込みグループ識別子（ＷＧＩＤ）は、第１及び／又は第２書き込みグループテーブル（Ｌ１ＷＧＴ及びＬ２ＷＧＴ）のどの行が当該ＷＧＩＤにマッピングされるかを示すビットマップ（Ｂｉｔｍａｐ）に関連する。
【００９２】
図９は、本発明の一実施形態による第０書き込みグループテーブル（Ｌ０ＷＧＴ）９０２、第１書き込みグループテーブル（Ｌ１ＷＧＴ）９０４、及び第２書き込みグループテーブル９０６（Ｌ２ＷＧＴ）の構成図である。例えば、ビットマップの各位置は、第１及び第２書き込みグループテーブル（Ｌ１ＷＧＴ及びＬ２ＷＧＴ）の異なる行に対応する。図９に示す例において、ＷＧＩＤ［０］はビットマップ６４ｂ１１００＿…＿０００（「＿…＿」は、０に設定された間のビットを指す）に関連し、第０及び第１位置の２つの１は、行０及び１がＷＧＩＤ［０］にマッピングされたことを示す。他の例として、ＷＧＩＤ［１］は、行２がＷＧＩＤ［１］にマッピングされたことを示すビットマップ６４ｂ００１０＿…＿００００に関連する。第３の例として、ＷＧＩＤ［２］は、最後の行（行６３）がＷＧＩＤ［２］にマッピングされたことを示すビットマップ６４ｂ００００＿…．＿０００１に関連する。第４の例として、ＷＧＩＤ［６３］は、ＷＧＩＤ［６３］にマッピングされた行がないことを示すビットマップ６４ｂ００００＿…＿００００に関連する。
【００９３】
一実施形態において、第１及び第２書き込みグループテーブルの各行は、最大でも１つの書き込みグループにマッピングされる（例えば、各行は正確に０個又は１個の書き込みグループにマッピングされ、２個以上の書き込みグループにマッピングされる行はない）。第１及び第２書き込みグループテーブル（Ｌ１ＷＧＴ及びＬ２ＷＧＴ）の行のうちの使用中の行を追跡するために、一実施形態において、グローバル（Ｇｌｏｂａｌ）ビットマップ９０８は、対応するグローバルビットマップ９０８の位置を１に設定することで、第１及び第２書き込みグループテーブル（９０４及び９０６）のどの行が書き込みグループに割り当てられたかを追跡するために使用される。書き込みグループに割り当てられない行は０に設定された対応するグローバルビットマップの位置を有する。図９に示す例で、第０及び第１行はＷＧＩＤ［０］に割り当てられ、第２行はＷＧＩＤ［１］に割り当てられ、第６３行はＷＧＩＤ［２］に割り当てられるため、グローバルビットマップは６４ｂ１１１０＿…＿０００１の形態を有し、これは、ビット毎の排他的論理和（ＸＯＲ）又は全ての個々のビットマップの総和でもある。
【００９４】
いくつかの実施形態は、図９に示す通り、第０書き込みグループテーブル（Ｌ０ＷＧＴ）を使用するために調整されたレコード及びフラッシュ動作の修正されたバージョンに関する。
【００９５】
より詳しくは、第０書き込みグループテーブル９０２を含む場合、Ｒｅｃｏｒｄ関数は当該ＷＧＩＤにマッピングされたリングバッファを検索するために、先ず第０書き込みグループテーブル（Ｌ０ＷＧＴ）にアクセスする。このような各リングバッファのヘッド及びテールは、利用可能な空間を有するバッファを探すために確認される。全ての割り当てられたバッファがフルになると、追加バッファは、当該ＷＧＩＤに割り当てられ（例えば、グローバルビットマップで割り当てられていない行を検索することにより）、当該ＷＧＩＤに関連するビットマップを含む第０書き込みグループテーブル及びＷＧＩＤに対する行の割り当てを示すグローバルビットマップをアップデートする。
【００９６】
図１０は、本発明の一実施形態による第０書き込みグループテーブル、第１書き込みグループテーブル、及び第２書き込みグループテーブルを含むシステムにおける「レコード（Ｒｅｃｏｒｄ）」動作の実行のフローチャートである。図１０に示す通り、レコード動作は、パラメータとして書き込みグループ識別子（ＷＧＩＤ）及びアドレス（Ａｄｄｒｅｓｓ）を有する。１００２ステップにおいて、メモリコントローラー１３０は、第０書き込みグループテーブル（Ｌ０ＷＧＴ）で、与えられたＷＧＩＤに対応する行ビットマップを検索する。１００４ステップで、メモリコントローラー１３０は、ビットマップの０ではない位置によって識別された通りに、書き込みグループに割り当てられた第１及び第２書き込みグループテーブルの行に対して繰り返すループを開始する。１００６ステップで、メモリコントローラー１３０は、図５に関して上述したＲｅｃｏｒｄ関数５００と実質的に同じであるが、書き込みグループの代わりに行番号を扱うように調整されたＲｅｃｏｒｄ関数を用いて、与えられたアドレスを、割り当てられた行の現在の行に記録することを試みる。図５に示した通り、Ｒｅｃｏｒｄ関数５００はブーリアン値（例えば、真又は偽）を返す（ここで、真はレコード動作の成功を示し、偽はレコード動作の失敗を示す）。レコード動作が成功した場合（例えば、アドレスが現在の行に記録された場合）、追加の装置を必要とせず、メモリコントローラー１３０は、１００８ステップで、レコード動作の成功を示す真を返す。
【００９７】
しかし、レコード動作が失敗した場合（例えば、行がフルのため）、メモリコントローラー１３０は、１０１０ステップで、考慮すべき更に割り当てられた行があるか否かを判断する。割り当てられた行がある場合、メモリコントローラー１３０は、次の行を選択し、再びレコードを試みるために１００４ステップに戻る。このように、Ｒｅｃｏｒｄ関数５００は特定された書き込みグループ識別子（ＷＧＩＤ）に関連する第２書き込みグループテーブル（Ｌ２ＷＧＴ）のバッファのうちの１つが、与えられたアドレスに対して利用可能な空間を有するか否かを判断し、バッファのうちの１つが利用可能な空間を有すると判断した場合、与えられたアドレスを、識別されたバッファに記録（格納）する。
【００９８】
しかし、試みるための更に割り当てられた行がない場合（例えば、割り当てられた全ての行がフルであるか又は割り当てられた行がない場合）、メモリコントローラーは、利用可能な空間を有する割り当てられた行がないと判断する。このように、１０１２ステップで、メモリコントローラー１３０は、グローバルビットマップを確認することで、任意の割り当てられない行があるか否かを判断する。任意の割り当てられない行がない場合、レコード動作は失敗し、１０１４ステップで、メモリコントローラー１３０は、偽を返す。しかし、少なくとも１つの利用可能な行がある場合（例えば、グローバルビットマップで０によって識別された通り、任意の書き込みグループにまだ割り当てられない行又はバッファがある場合）、１０１６ステップで、メモリコントローラー１３０は、このような利用可能な行の１つ（例えば、最も低い番号を有する行又はバッファ）を「ｎｅｗ＿ｒｏｗ」として選択する。１０１８ステップで、メモリコントローラー１３０は、選択された行に対応するビットを１に設定することで、現在の書き込みグループに対する行ビットマップをアップデートする。従って、選択された行（「ｎｅｗ＿ｒｏｗ」）が書き込みグループに割り当てられる。１０２０ステップで、メモリコントローラー１３０は、選択された行に対応するグローバルビットマップの位置を１にアップデートすることで、選択された行が使用中であることを示す。１０２２ステップで、メモリコントローラー１３０は、実質的に同一のＲｅｃｏｒｄ関数５００を使用してアドレスを選択された行に記録し、結果を返す。
【００９９】
同様に、第０書き込みグループテーブル（Ｌ０ＷＧＴ）に対してＦｌｕｓｈ（ＷＧＩＤ）関数を実行する場合、メモリコントローラー１３０は、当該ＷＧＩＤに割り当てられたバッファを探すために、先ずＬ０ＷＧＴにアクセスして、各値に対するライトバック動作を行うためにこれらのバッファの各々に格納された値を繰り返す。なお、メモリコントローラー１３０は、書き込みグループから書き込みグループテーブルの空き行の割り当てを解除するためにバッファの割り当てが解除される場合（例えば、フラッシュ動作によって、バッファが空けられる場合）第０書き込みグループテーブル（Ｌ０ＷＧＴ）をアップデートする（例えば、フラッシュされたＷＧＩＤに対するビットマップとグローバルビットマップとの間のビット毎のＸＯＲを行い、フラッシュされたＷＧＩＤに対する全てのビットマップのビットを０に設定することでアップデートされる）。
【０１００】
図１１は、本発明の一実施形態による第０書き込みグループテーブル、第１書き込みグループテーブル、及び第２書き込みグループテーブルを含むシステムにおける「フラッシュ（Ｆｌｕｓｈ）」動作の実行のフローチャートである。１１０２ステップにおいて、メモリコントローラー１３０は、第０書き込みグループテーブル（Ｌ０ＷＧＴ）で、与えられたＷＧＩＤに対応する行ビットマップを検索する。１１０４ステップで、メモリコントローラー１３０は、ビットマップの０ではない位置によって識別された通りに、書き込みグループに割り当てられた第１及び第２書き込みグループテーブルの行に対して繰り返すループを開始する。１１０６ステップで、メモリコントローラー１３０は、書き込みグループに割り当てられた現在の行に対してフラッシュ動作を行う。フラッシュ動作は、図６Ａに示したフラッシュ動作６００の若干修正されたバージョンであり、フラッシュは、パラメータとして書き込みグループ識別子（ＷＧＩＤ）によって行番号を取得する。１１０８ステップで、メモリコントローラー１３０は、処理される任意の追加行があるか否かを判断する。追加行がある場合、メモリコントローラー１３０は、書き込みグループに割り当てられた次の行を選択するために１１０４ステップに戻る。追加行がない場合、メモリコントローラー１３０は、現在の書き込みグループで、前に現在の書き込みグループに割り当てられた行を今回利用可能なものとして示すために、グローバルビットマップをアップデートする。１１１２ステップで、書き込みグループのフラッシュが完了した後、メモリコントローラー１３０は、現在の書き込みグループに割り当てられた行がないことを示すために、第０書き込みグループテーブル（Ｌ０ＷＧＴ）で、現在の書き込みグループの行ビットマップの全てのビットを０に設定する。
【０１０１】
このように、本実施形態は、特定された書き込みグループを有するＮＶＤＩＭＭ−Ｐモジュールに書き込まれたデータを関連付けて、与えられた特定の書き込みグループにマッチングするデータに対して、全ての揮発性メモリをスキャンすることを避け、不揮発性メモリにデータが既に書き込まれた場合に、不揮発性メモリにデータが重複してフラッシュさせることを避けることで、書き込みグループによって揮発性メモリから不揮発性メモリにデータをフラッシュする性能を向上させるためのシステム及び方法に関する。
【０１０２】
特に定義しない限り、本明細書で使用した全ての用語（技術用語及び科学用語を含む）は、本発明が属する技術分野の当業者にとって一般的に理解されるものと同じ意味を持つ。なお、一般的に使用される辞典で定義された用語と同じ用語は、関連技術及び／又は本明細書に関連してその意味と一致する意味を持つものと解釈されるべきであり、理想的であるか又は極めて形式的な意味として解釈されるべきではない。
【０１０３】
以上、本発明の実施形態について図面を参照しながら詳細に説明したが、本発明は、上述の実施形態に限定されるものではなく、、本発明の技術範囲から逸脱しない範囲で多様に変更実施することが可能である。
【符号の説明】
【０１０４】
１００    ＮＶＤＩＭＭ−Ｐ
１１０    揮発性メモリ
１１２    キャッシュされたデータ
１１４    キャッシュメタデータ
１１６    Ｌ２読み込み／書き込みキャッシュ
１１８    Ｌ３書き込みバッファ
１２０    不揮発性メモリ
１３０    メモリコントローラー
１３２    ホストレイヤー
１３４    ロジックコア
１３４ｃ    キャッシュコントローラー
１３４ｄ    揮発性メモリコントローラー
１３４ｈ    ホストレイヤーに対するインターフェース
１３４Ｌ１    Ｌ１プリフェッチ（Ｐｒｅｆｅｔｃｈ）バッファ
１３４ｍ    メディアレイヤーに対するインターフェース
１３４ｍｄ    メタデータキャッシュ
１３４ｐ    プリフェッチャー（Ｐｒｅｆｅｔｃｈｅｒ）
１３４ｓ    ＳＲＡＭ
１３６    メディアレイヤー
２００    ホストプロセッサ
２５０    バス
３０４、９０４    第１書き込みグループテーブル（Ｌ１ＷＧＴ）
３０６、９０６    第２書き込みグループテーブル（Ｌ２ＷＧＴ）
４０２、４０４    Ｌ１ＷＧＴの位置
４０６    テール（Ｅｎｔｒｙ［１］）に対応する位置
４０８    テール（Ｅｎｔｒｙ［２］）に対応する位置
５００    レコード動作、Ｒｅｃｏｒｄ関数
６００    フラッシュ動作
６４０    ライトバック動作
９０２    第０書き込みグループテーブル（Ｌ０ＷＧＴ）
９０８    グローバルビットマップ
【図１】
2018190412.tif 000005
【図２Ａ】
2018190412.tif 000006
【図２Ｂ】
2018190412.tif 000007
【図３Ａ】
2018190412.tif 000008
【図３Ｂ】
2018190412.tif 000009
【図４】
2018190412.tif 000010
【図５】
2018190412.tif 000011
【図６Ａ】
2018190412.tif 000012
【図６Ｂ】
2018190412.tif 000013
【図７】
2018190412.tif 000014
【図８】
2018190412.tif 000015
【図９】
2018190412.tif 000016
【図１０】
2018190412.tif 000017
【図１１】
2018190412.tif 000018