(57)【特許請求の範囲】
【請求項１】
第１の非対称メモリデバイスに格納するために第１のデータを受信することであって、読み出し操作の待ち時間が非対称メモリデバイスにおける書き込み操作の待ち時間とは異なる、受信することと；
前記第１の非対称メモリデバイスに含まれる第１のセグメントを、データを書き込むために利用可能な次のセグメントとして特定することであって、前記第１のセグメントは、第１のセグメントグループの一部として書き込まれ、セグメントは、非対称メモリデバイスにおける物理メモリ位置の論理マッピングを含み、単一操作において消去される前記物理メモリ位置の一部に関連付けられる、特定することと；
前記第１のデータを前記第１のセグメントに書き込むことであって、前記第１のデータは、データを書き込むために次に利用可能な前記第１のセグメントに含まれる第１のメモリブロックに書き込まれる、書き込むことと；
前記第１のセグメント内の前記次に利用可能なメモリブロックに前記第１のデータを書き込むことに関連して、前記第１のセグメントおよび前記第１のメモリブロックに関連する情報を格納することと；
前記非対称メモリに格納するために第２のデータを受信することと；
前記第１のセグメントが、前記第１のセグメントに格納されたデータで一杯であることを決定することと；
前記第１のセグメントが一杯であることの決定に基づいて、前記第１の非対称メモリデバイス内の第２のセグメントグループを選択することであって、データは、前記第１のセグメントグループと交互に、前記第２のセグメントグループに書き込まれる、選択することと；
前記第２のセグメントグループに含まれる第２のセグメントを、データを書き込むために利用可能な前記次のセグメントとして特定することと；
前記第２のデータを前記第２のセグメントに書き込むことであって、前記データは、データを書き込むために次に利用可能な前記第２のセグメントに含まれる第２のメモリブロックに書き込まれる、書き込むことと；
前記第２のセグメント内の前記次に利用可能なメモリブロックに前記第２のデータを書き込むことに関連して、前記第２のセグメントおよび前記第２のメモリブロックに関連する情報を格納することと；
を含む、方法。
【請求項２】
ごく最近データが充填されたセグメントに関する情報に対する同期ミラーリングモジュールからのリクエストを受信することと；
前記リクエストに応答して、第１のセグメントおよび前記第２のセグメントのうちのどちらが、ごく最近データが充填されたかを決定することと；
前記第１のセグメントがごく最近データが充填されたことの決定に基づき、前記第１のセグメントおよび前記第１のメモリブロックに関連する前記格納された情報を取得することと；
前記第１のセグメントおよび前記第１のメモリブロックに関連する前記情報を前記同期ミラーリングモジュールに送信することと；
を含む、請求項１に記載の方法。
【請求項３】
前記同期ミラーリングモジュールによって、前記第１のデータおよび前記第２のデータを第２の非対称メモリデバイスに送信することであって、前記第２の非対称メモリデバイスは、前記第１の非対称メモリデバイスと類似したデータを格納するために構成され、前記第１の非対称メモリデバイスおよび前記第２の非対称メモリデバイスは、ネットワーク接続によって接続される、送信することと；
前記同期ミラーリングモジュールによって、ごく最近データが充填されたセグメントに関する情報を問い合わせることについての閾値に到達したかどうかを決定することと；
閾値に到達したことの決定に基づいて、ごく最近データが充填されたセグメントに関する情報に対する前記リクエストを送信することと；
前記リクエストに応答して、前記第１のセグメントおよび前記第１のメモリブロックに関連する前記情報を受信することと；
前記第１のセグメントおよび前記第１のメモリブロックに関連する前記情報を前記第２の非対称メモリデバイスに送信することと；
を含む、請求項２に記載の方法。
【請求項４】
前記第１のセグメントおよび前記第１のメモリブロックに関する前記情報は、前記第２の非対称メモリデバイス内に、データを格納するために構成されるメモリ位置とは異なる第１のメモリ位置における第１のマーカとして格納される、請求項３に記載の方法。
【請求項５】
前記同期ミラーリングモジュールにおいて、および、前記第２の非対称メモリデバイスから、前記第１のマーカのコピーを含むメッセージを受信することであって、前記メッセージは、前記第２の非対称メモリデバイスが停止から回復したことを示す、受信することと；
前記メッセージを受信することに基づいて、ごく最近データが充填されたセグメントに関する情報に対する新規リクエストを送信することと；
前記新規リクエストに応答して新規セグメントおよび新規メモリブロックに関連する情報を受信することであって、前記新規セグメントは前記第１のセグメントグループに含まれる、受信することと；
前記第１のマーカの前記受信したコピーから抽出される前記第１のセグメントおよび前記第１のメモリブロックに関連する前記情報と、前記新規セグメントおよび前記新規メモリブロックに関連する前記情報とを比較することであって、前記比較はデータを前記第２のセグメントグループに含まれるセグメントに書き込む間に実行される、比較することと；
前記比較に基づいて、前記第２の非対称メモリデバイスに格納されていない、前記第１の非対称メモリデバイス内の前記第１のセグメントグループに格納されたデータを特定することと；
前記特定したデータを前記第２の非対称メモリデバイスに送信することと；
を含む、請求項３に記載の方法。
【請求項６】
データは、前記第１のセグメントおよび前記第１のメモリブロックに書き込まれるデータと比較して、遅い時間に前記新規セグメントおよび前記新規メモリブロックに書き込まれ、前記第２の非対称メモリデバイスに格納されていない、前記第１の非対称メモリデバイス内の前記第１のセグメントグループに格納されたデータを特定することは：
前記第１のセグメントおよび前記第１のメモリブロックに関連する前記情報と、前記新規セグメントおよび前記新規メモリブロックに関連する前記情報とを比較することに基づいて、前記第１のマーカが前記第２の非対称メモリデバイスに送信された後で、前記第１のマーカの前記コピーが前記第２の非対称メモリデバイスから受信される前に、前記第１の非対称メモリデバイスに書き込まれる前記第１のセグメントグループに含まれるセグメント内のメモリブロックを特定することと；
前記第１の非対称メモリデバイスに関連するトランスレーションテーブルを用いて、前記第１のセグメントグループ内の前記特定された物理メモリブロックに対応する前記第１の非対称メモリデバイス内の物理メモリ位置の検索を実行することと；
前記物理メモリ位置が有効なデータを保持しているかどうかを決定することと；
前記物理メモリ位置から前記有効なデータを取得することと；を含む、
請求項５に記載の方法。
【請求項７】
メモリブロックは書き込みページを含み、前記トランスレーションテーブルは、非対称メモリデバイス内の物理メモリ位置に対するセグメントおよび書き込みページのマッピングを提供する、請求項６に記載の方法。
【請求項８】
データがごく最近格納された、前記第１のセグメントグループに含まれるセグメントが一杯である場合にのみ、データは前記第２のセグメントグループに含まれるセグメントに格納される、請求項１に記載の方法。
【請求項９】
前記第１のセグメントおよび前記第１のメモリブロックに関連する前記情報は、前記第１のセグメントに関連する第１のシーケンス番号と、前記第１のセグメント内の前記第１のブロックに関連する第２のシーケンス番号とを含み、前記第２のシーケンス番号は、前記第１のセグメント内の最初のブロックからのオフセットである、請求項１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、２０１３年３月１５日に出願された１３／８４２，０７９号の優先権を主張し、その全てを引用して組み込む。
【０００２】
本書は一般に、不揮発性メモリシステムに関する。
【背景技術】
【０００３】
コンピュータシステムは通常、データを格納するためにメモリモジュールを用いる。メモリモジュールのうちのいくつかは、フラッシュメモリ等の不揮発性コンピュータメモリを含むメモリカードによって実現されている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本開示は、ごく最近に書き込まれたメモリセグメントのシーケンス番号を追跡することによって不揮発性メモリデバイスにおける同期ミラーリングを実行するための方法、システム、およびデバイスを説明する。
【課題を解決するための手段】
【０００５】
実装形態によっては、一次メモリデバイスは、ごく最近に書き込まれたメモリセグメントのシーケンス番号を、同期ミラーリングに用いられる二次メモリデバイスと定期的に共有する。共有された情報は、マーカと呼ばれる論理構造として二次メモリデバイスに格納される。二次メモリデバイスがクラッシュから回復すると、回復したメモリデバイスに既知のマーカは、一次メモリデバイスで利用可能な最新の更新セグメントに関する情報と比較されて、二次メモリデバイスがクラッシュした後に一次メモリデバイスで更新されたメモリブロックを決定する。
【０００６】
一態様において、第１のデータは、第１の非対称メモリデバイスに格納するために受信され、読み出し操作の待ち時間が非対称メモリデバイスにおける書き込み操作の待ち時間とは異なっている。第１の書き込みフェーズは、現在の書き込みフェーズとして特定される。第１の非対称メモリデバイスに含まれる第１のセグメントは、データを書き込むために利用可能な次のセグメントとして特定され、セグメントは、非対称メモリデバイスにおける物理メモリ位置の論理マッピングを含み、単一操作において消去される前記物理メモリ位置の一部に関連付けられる。第１のデータは第１のセグメントに書き込まれ、第１のデータは、データを書き込むために次に利用可能な第１のセグメントに含まれる第１のメモリブロックに書き込まれる。第１のセグメント内の次に利用可能なメモリブロックに第１のデータを書き込むことに関連して、第１のセグメントおよび第１のメモリブロックに関連する情報は、第１のセグメントおよび第１のメモリブロックが第１の書き込みフェーズにおいて書き込まれることを示す情報と共に格納される。
【０００７】
第２のデータは、非対称メモリに格納するために受信される。第１の書き込みフェーズが完了し、第２の書き込みフェーズが現在の書き込みフェーズであることが特定される。第１の非対称メモリデバイスに含まれる第２のセグメントは、データを書き込むために利用可能な次のセグメントとして特定される。第２のデータは第２のセグメントに書き込まれ、データは、データを書き込むために次に利用可能な第２のセグメントに含まれる第２のメモリブロックに書き込まれる。第２のセグメント内の次に利用可能なメモリブロックに第２のデータを書き込むことに関連して、第２のセグメントおよび第２のメモリブロックに関連する情報は、第２のセグメントおよび第２のメモリブロックが第２の書き込みフェーズにおいて書き込まれることを示す情報と共に格納される。
【０００８】
実装形態は、以下の特徴のうちの１つ以上を含んでもよい。リクエストは、ごく最近データが充填されたセグメントに関する情報に対する同期ミラーリングモジュールから受信されてもよい。リクエストに応答して、第１の書き込みフェーズおよび書き込みフェーズのどちらが完了したか、および、現在の書き込みフェーズはどちらかなのかが、決定されてもよい。第１の書き込みフェーズが完了し、第２の書き込みフェーズが現在の書き込みフェーズであることの決定に基づき、第１のセグメントおよび第１のメモリブロックに関連する格納された情報が取得されてもよい。第１のセグメントおよび第１のメモリブロックに関連する情報は、同期ミラーリングモジュールに、第１のセグメントおよび第１のメモリブロックが第１の書き込みフェーズにおいて書き込まれることを示す情報と共に、送信されてもよい。
【０００９】
同期ミラーリングモジュールは、ごく最近データが充填されたセグメントに関する情報に対する第１のクエリを送信してもよい。第１のクエリに応答して、第１のセグメントおよび第１のメモリブロックに関連する情報が受信されてもよい。第１のセグメントおよび第１のメモリブロックに関する情報は、第１のセグメントおよび第１のメモリブロックが第１の書き込みフェーズにおいて書き込まれることを示す情報と共に、第１の非対称メモリデバイスと類似したデータを格納するために構成され、ネットワーク接続によって第１の非対称メモリデバイスに接続される第２の非対称メモリデバイスに送信されてもよい。第１のセグメントおよび第１のメモリブロックに関する情報は、第２の非対称メモリデバイス内に、データを格納するために構成されるメモリ位置とは異なる第１のメモリ位置における第１のマーカとして格納されてもよい。
【００１０】
同期ミラーリングモジュールは、ごく最近データが充填されたセグメントに関する情報に対する第２のクエリを送信してもよく、第２のクエリは、第１のクエリが送信された後に送信される。第１のクエリに応答して、第２のセグメントおよび第２のメモリブロックに関連する情報が受信されてもよい。第２のセグメントおよび第２のメモリブロックに関連する情報は、第２のセグメントおよび第２のメモリブロックが第２の書き込みフェーズにおいて書き込まれることを示す情報と共に、第２の非対称メモリデバイスに送信されてもよい。第２のセグメントおよび第２のメモリブロックに関する情報は、第２の非対称メモリデバイス内に、データを格納するために構成されるメモリ位置とは異なる第２のメモリ位置における第２のマーカとして格納されてもよい。
【００１１】
第１のクエリまたは第２のクエリを送信することは、同期ミラーリングモジュールによって、ごく最近データが充填されたセグメントに関する情報を問い合わせることについての閾値に到達したかどうかを決定することを含んでもよい。閾値に到達したという決定に基づいて、第１のクエリまたは第２のクエリが送信されてもよい。
【００１２】
第１のセグメントおよび第１のメモリブロックが第１の書き込みフェーズにおいて書き込まれることを示す情報は、第１のマーカと共に第２の非対称メモリデバイスに格納されてもよく、第２のセグメントおよび第２のメモリブロックが第２の書き込みフェーズにおいて書き込まれることを示す情報は、第２のマーカと共に第２の非対称メモリデバイスに格納されてもよい。第１および第２のメモリ位置は、ランダムアクセスメモリ（ＲＡＭ）および不揮発性非対称メモリから成るグループから選択されてもよい。
【００１３】
第１のマーカのコピーを含むメッセージは、同期ミラーリングモジュールにおいて、および、第２の非対称メモリデバイスから受信されてもよい。メッセージは、第２の非対称メモリデバイスが停止から回復したことを示してもよい。メッセージを受信することに基づいて、ごく最近データが充填されたセグメントに関する情報に対する新規クエリが送信されてもよい。新規セグメントおよび新規メモリブロックに関連する情報は、新規クエリに応答して受信されてもよく、新規セグメントは第１の書き込みフェーズ中に書き込まれる。第１のマーカの受信したコピーから抽出される第１のセグメントおよび第１のメモリブロックに関連する情報は、新規セグメントおよび新規メモリブロックに関連する情報と比較されてもよく、比較はデータを第１の書き込みフェーズまたは第２の書き込みフェーズにおいて書き込む間に実行される。比較に基づいて、第２の非対称メモリデバイスに格納されていない、第１の非対称メモリデバイスに格納されたデータが特定されてもよい。特定したデータは、第２の非対称メモリデバイスに送信されてもよい。
【００１４】
第２の非対称メモリデバイスから受信した第１のマーカのコピーは、第１のセグメントおよび第１のメモリブロックが第１の書き込みフェーズにおいて書き込まれることを示す前記情報を含んでもよい。新規クエリを送信することは、第１の書き込みフェーズにおいて、ごく最近データが充填されたセグメントに関する情報に対する新規クエリを送信することを含んでもよい。
【００１５】
データは、第１のセグメントおよび第１のメモリブロックに書き込まれるデータと比較して、遅い時間に新規セグメントおよび新規メモリブロックに書き込まれてもよい。第２の非対称メモリデバイスに格納されていない、第１の非対称メモリデバイスに格納されたデータを特定することは、第１のセグメントおよび第１のメモリブロックに関連する情報と、新規セグメントおよび新規メモリブロックに関連する情報とを比較することに基づいて、第１のマーカが第２の非対称メモリデバイスに送信された後で、第１のマーカのコピーが第２の非対称メモリデバイスから受信される前に、第１の非対称メモリデバイスに書き込まれる物理メモリブロックを特定することを含んでもよい。特定された物理メモリブロックに対応する第１の非対称メモリデバイス内の論理メモリブロックの検索は、第１の非対称メモリデバイスに関連するトランスレーションテーブルを用いて、実行されてもよい。論理メモリブロックが有効なデータを保持しているかどうかが決定されてもよい。論理メモリブロックが有効なデータを保持していることの決定に基づいて、特定された物理メモリブロックおよび対応する論理メモリブロックは、第２の非対称メモリデバイスに送信されてもよい。
【００１６】
物理メモリブロックは書き込みページを含んでもよい。トランスレーションテーブルは、非対称メモリデバイス内の論理メモリブロックに対するセグメントおよび書き込みページのマッピングを提供してもよい。第１のセグメントおよび第２のセグメントのうちの１つ以上が、第１の書き込みフェーズおよび第２の書き込みフェーズにおいてデータを格納するために選択されてもよい。
【００１７】
第１のセグメントおよび第１のメモリブロックに関連する情報は、第１のセグメントに関連する第１のシーケンス番号と、第１のセグメント内の第１のブロックに関連する第２のシーケンス番号とを含んでもよい。第２のシーケンス番号は、第１のセグメント内の最初のブロックからのオフセットであってもよい。
【００１８】
第１および第２の非対称メモリデバイスのそれぞれは、フラッシュベースのメモリシステムを含んでもよい。
【００１９】
別の態様において、第１のデータは、第１の非対称メモリデバイスに格納するために受信され、読み出し操作の待ち時間が非対称メモリデバイスにおける書き込み操作の待ち時間とは異なっている。第１の非対称メモリデバイスに含まれる第１のセグメントは、データを書き込むために利用可能な次のセグメントとして特定され、第１のセグメントは、第１のセグメントグループの一部として書き込まれ、セグメントは、非対称メモリデバイスにおける物理メモリ位置の論理マッピングを含み、単一操作において消去される物理メモリ位置の一部に関連付けられる。第１のデータは第１のセグメントに書き込まれ、第１のデータは、データを書き込むために次に利用可能な第１のセグメントに含まれる第１のメモリブロックに書き込まれる。第１のセグメント内の次に利用可能なメモリブロックに第１のデータを書き込むことに関連して、第１のセグメントおよび第１のメモリブロックに関連する情報が格納される。
【００２０】
第２のデータは、非対称メモリに格納するために受信される。第１のセグメントは第１のセグメントに格納されたデータで一杯であることが決定される。第１のセグメントが一杯であることの決定に基づいて、第１の非対称メモリデバイス内の第２のセグメントグループが選択され、データは、第１のセグメントグループと交互に、第２のセグメントグループに書き込まれる。第２のセグメントグループに含まれる第２のセグメントは、データを書き込むために利用可能な次のセグメントとして特定される。第２のデータは第２のセグメントに書き込まれ、データは、データを書き込むために次に利用可能な第２のセグメントに含まれる第２のメモリブロックに書き込まれる。第２のセグメント内の次に利用可能なメモリブロックに第２のデータを書き込むことに関連して、第２のセグメントおよび第２のメモリブロックに関連する情報が格納される。
【００２１】
実装形態は、以下の特徴のうちの１つ以上を含んでもよい。同期ミラーリングモジュールからのリクエストは、ごく最近データが充填されたセグメントに関する情報に対して受信されてもよい。リクエストに応答して、第１のセグメントおよび前記第２のセグメントのうちのどちらが、ごく最近データが充填されたか決定されてもよい。第１のセグメントがごく最近データが充填されたことの決定に基づき、第１のセグメントおよび第１のメモリブロックに関連する格納された情報が取得されてもよい。第１のセグメントおよび第１のメモリブロックに関連する情報は、同期ミラーリングモジュールに送信されてもよい。
【００２２】
同期ミラーリングモジュールは、第１のデータおよび第２のデータを第２の非対称メモリデバイスに送信してもよく、第２の非対称メモリデバイスは、第１の非対称メモリデバイスと類似したデータを格納するために構成され、第１の非対称メモリデバイスおよび第２の非対称メモリデバイスは、ネットワーク接続によって接続される。同期ミラーリングモジュールは、ごく最近データが充填されたセグメントに関する情報を問い合わせることについての閾値に到達したかどうかを決定してもよい。閾値に到達したことの決定に基づいて、ごく最近データが充填されたセグメントに関する情報に対するリクエストが送信されてもよい。リクエストに応答して、第１のセグメントおよび第１のメモリブロックに関連する情報が受信されてもよい。第１のセグメントおよび第１のメモリブロックに関連する情報は、第２の非対称メモリデバイスに送信されてもよい。第１のセグメントおよび第１のメモリブロックに関する情報は、第２の非対称メモリデバイス内に、データを格納するために構成されるメモリ位置とは異なるメモリ位置における第１のマーカとして格納されてもよい。
【００２３】
第１のマーカのコピーを含むメッセージは、同期ミラーリングモジュールにおいて、および、第２の非対称メモリデバイスから受信されてもよい。メッセージは、第２の非対称メモリデバイスが停止から回復したことを示してもよい。メッセージを受信することに基づいて、ごく最近データが充填されたセグメントに関する情報に対する新規リクエストが送信されてもよい。新規リクエストに応答して新規セグメントおよび新規メモリブロックに関連する情報が受信されてもよく、新規セグメントは第１のセグメントグループに含まれる。第１のマーカの受信したコピーから抽出される第１のセグメントおよび第１のメモリブロックに関連する情報は、新規セグメントおよび新規メモリブロックに関連する情報と比較されてもよい。比較は、データを第２のセグメントグループに含まれるセグメントに書き込む間に実行されてもよい。比較に基づいて、第２の非対称メモリデバイスに格納されていない、第１の非対称メモリデバイス内の第１のセグメントグループに格納されたデータが特定されてもよい。特定したデータは、第２の非対称メモリデバイスに送信されてもよい。
【００２４】
データは、第１のセグメントおよび第１のメモリブロックに書き込まれるデータと比較して、遅い時間に新規セグメントおよび新規メモリブロックに書き込まれてもよい。第２の非対称メモリデバイスに格納されていない、第１の非対称メモリデバイス内の第１のセグメントグループに格納されたデータを特定することは、第１のセグメントおよび第１のメモリブロックに関連する情報と、新規セグメントおよび新規メモリブロックに関連する情報とを比較することに基づいて、第１のマーカが第２の非対称メモリデバイスに送信された後で、第１のマーカのコピーが第２の非対称メモリデバイスから受信される前に、第１の非対称メモリデバイスに書き込まれる第１のセグメントグループに含まれるセグメント内のメモリブロックを特定することを含んでもよい。第１のセグメントグループ内の特定されたメモリブロックに対応する第１の非対称メモリデバイス内の物理メモリ位置の検索は、第１の非対称メモリデバイスに関連するトランスレーションテーブルを用いて、実行されてもよい。物理メモリ位置が有効なデータを保持しているかどうかが決定されてもよい。有効なデータは物理メモリ位置から取得されてもよい。
【００２５】
メモリブロックは書き込みページを含んでもよい。トランスレーションテーブルは、非対称メモリデバイス内の物理メモリ位置に対するセグメントおよび書き込みページのマッピングを提供してもよい。データがごく最近格納された、第１のセグメントグループに含まれるセグメントが一杯である場合にのみ、データは第２のセグメントグループに含まれるセグメントに格納されてもよい。
【００２６】
第１のセグメントおよび第１のメモリブロックに関連する情報は、第１のセグメントに関連する第１のシーケンス番号と、第１のセグメント内の第１のブロックに関連する第２のシーケンス番号とを含んでもよい。第２のシーケンス番号は、第１のセグメント内の最初のブロックからのオフセットであってもよい。
【００２７】
別の態様において、第１のデータは、第１の非対称メモリデバイスに格納するために受信され、読み出し操作の待ち時間が非対称メモリデバイスにおける書き込み操作の待ち時間とは異なっている。第１の非対称メモリデバイスに含まれる第１のセグメントは、データを書き込むために利用可能な次のセグメントとして特定される。セグメントは、非対称メモリデバイスにおける物理メモリ位置の論理マッピングを含み、単一操作において消去される物理メモリ位置の一部に関連付けられる。
【００２８】
第１のデータは第１のセグメントに書き込まれる。第１のデータは、データを書き込むために次に利用可能な第１のセグメントに含まれる第１のメモリブロックに書き込まれる。第１のセグメント内の次に利用可能なメモリブロックに第１のデータを書き込むことに関連して、第１のセグメントおよび第１のメモリブロックに関連する情報が格納される。
【００２９】
特定の実装形態は、以下の特徴のうちの１つ以上を含んでもよい。同期ミラーリングモジュールからのリクエストは、ごく最近データが充填されたセグメントに関する情報に対して受信されてもよい。リクエストに応答して、第１のセグメントおよび第１のメモリブロックに関連する格納された情報が取得されてもよい。第１のセグメントおよび第１のメモリブロックに関連する情報は、同期ミラーリングモジュールに送信されてもよい。
【００３０】
同期ミラーリングモジュールは、ごく最近データが充填されたセグメントに関する情報に対する第１のクエリを送信してもよい。第１のクエリに応答して、第１のセグメントおよび第１のメモリブロックに関連する情報が受信されてもよい。第１のセグメントおよび第１のメモリブロックに関する情報は、第１の非対称メモリデバイスと類似したデータを格納するために構成され、ネットワーク接続によって第１の非対称メモリデバイスに接続される第２の非対称メモリデバイスに送信されてもよい。第１のセグメントおよび第１のメモリブロックに関する情報は、第２の非対称メモリデバイス内に、第１のメモリ位置における第１のマーカとして格納されてもよい。
【００３１】
第１のクエリを送信することは、同期ミラーリングモジュールによって、ごく最近データが充填されたセグメントに関する情報を問い合わせることについての閾値に到達したかどうかを決定することを含んでもよい。閾値に到達したという決定に基づいて、第１のクエリが送信されてもよい。
【００３２】
第１および第２の非対称メモリデバイスのそれぞれは、フラッシュベースのメモリシステムを含んでもよい。
【００３３】
第１のマーカのコピーを含むメッセージは、同期ミラーリングモジュールにおいて、および、第２の非対称メモリデバイスから受信されてもよい。メッセージは、第２の非対称メモリデバイスが停止から回復したことを示してもよい。メッセージを受信することに基づいて、ごく最近データが充填されたセグメントに関する情報に対する新規クエリが送信されてもよい。新規クエリに応答して、新規セグメントおよび新規メモリブロックに関連する情報が受信されてもよい。第１のマーカの受信したコピーから抽出される第１のセグメントおよび第１のメモリブロックに関連する情報は、新規セグメントおよび新規メモリブロックに関連する情報と比較されてもよい。比較に基づいて、第２の非対称メモリデバイスに格納されていない、第１の非対称メモリデバイスに格納されたデータが特定されてもよい。特定したデータは、第２の非対称メモリデバイスに送信されてもよい。
【００３４】
データは、第１のセグメントおよび第１のメモリブロックに書き込まれるデータと比較して、遅い時間に新規セグメントおよび新規メモリブロックに書き込まれてもよい。第２の非対称メモリデバイスに格納されていない、第１の非対称メモリデバイスに格納されたデータを特定することは、第１のセグメントおよび第１のメモリブロックに関連する情報と、新規セグメントおよび新規メモリブロックに関連する情報とを比較することに基づいて、第１のマーカが第２の非対称メモリデバイスに送信された後で、第１のマーカのコピーが第２の非対称メモリデバイスから受信される前に、第１の非対称メモリデバイスに書き込まれる物理メモリブロックを特定することを含んでもよい。特定された物理メモリブロックに対応する第１の非対称メモリデバイス内の論理メモリブロックは、第１の非対称メモリデバイスに関連するトランスレーションテーブルを用いて、検索されてもよい。論理メモリブロックが有効なデータを保持しているかどうかが決定されてもよい。論理メモリブロックが有効なデータを保持していることの決定に基づいて、特定された物理メモリブロックおよび対応する論理メモリブロックは、第２の非対称メモリデバイスに送信されてもよい。
【００３５】
物理メモリブロックは書き込みページを含んでもよい。トランスレーションテーブルは、非対称メモリデバイス内の論理メモリブロックに対するセグメントおよび書き込みページのマッピングを提供してもよい。第１のセグメントおよび第１のメモリブロックに関連する情報は、第１のセグメントに関連する第１のシーケンス番号と、第１のセグメント内の第１のブロックに関連する第２のシーケンス番号とを含んでもよい。第２のシーケンス番号は、第１のセグメント内の最初のブロックからのオフセットであってもよい。
【００３６】
上記技術の実装形態は、１つ以上の方法、コンピュータプログラム製品、およびシステムを含む。コンピュータプログラム製品は、非一時的機械読取可能な媒体において好適に具現化され、１つ以上のプロセッサによって実行可能な命令を含む。命令は、上で説明した動作を１つ以上のプロセッサに実行させるよう構成される。
【００３７】
システムは、１つ以上のプロセッサと、１つ以上のプロセッサによって実行可能な非一時的機械読取可能な媒体に組み込まれる命令とを含む。命令は、実行された場合、上で説明した動作を１つ以上のプロセッサに実行させるよう構成される。システムはまた、上で説明した動作を実行するよう構成される１つ以上のモジュールを含む。モジュールは、１つ以上のプロセッサによって実行可能な非一時的機械読取可能な媒体に組み込まれる命令に関連してもよい。
【００３８】
本明細書で説明される主題の１つ以上の態様の詳細を、添付の図面および以下の説明において説明する。主題の他の特徴、態様、および利点は、説明、図面、および特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【００３９】
【図１】図１は、データを格納するためのフラッシュメモリを用いるシステムの実施例を示す。
【図２Ａ】図２Ａは、フラッシュメモリダイスを含むメモリデバイスの実施例を示す。
【図２Ｂ】図２Ｂは、フラッシュメモリダイスを含むメモリデバイスの実施例を示す。
【図３】図３は、フラッシュメモリダイに格納されるメモリページの実施例を示す。
【図４】図４は、フラッシュメモリダイスのグループにわたって分散されるデータストライプにデータを冗長的に格納するフラッシュメモリダイスのグループの実施例を示す。
【図５】図５は、セグメントシーケンス番号を用いて同期ミラーリングを実行するメモリサーバの実施例を示す。
【図６】図６は、データをメモリサーバ内のメモリブロックに書き込むために用いられてもよいプロセス例を示す。
【図７】図７は、同期ミラーリングを実装するメモリサーバ内のアクティブフラッシュセグメントを特定するために用いられてもよいプロセス例を示す。
【図８】図８は、フラッシュベースの記憶装置を用いるアクティブおよびパッシブメモリサーバ間の同期ミラーリングを実行するために用いられてもよいプロセス例を示す。
【発明を実施するための形態】
【００４０】
種々の図面における同様の符号は同様の構成要素を示す。
【００４１】
コンピュータシステムは一般に、データおよび命令の格納に用いられるメモリモジュールを含んでいる。メモリモジュールは、通常、処理中の一時的なデータ記憶のために用いられる揮発性メモリであるダイナミックランダムアクセスメモリ（ＤＲＡＭ）集積回路（ＩＣ）と、長期的なデータ格納のための磁気記憶ディスクとを含んでいる。コンピュータシステムによっては、ＤＲＡＭおよび磁気記憶ディスクに加えて、またはそれらの代替として、不揮発性ランダムアクセスメモリ（ＮＶＲＡＭ）システムが、データ記憶のために用いられる。ＮＶＲＡＭは、ＤＲＡＭに匹敵するアクセスの粒度が細かい高性能な読み取りアクセスを提供するよう構成されてもよい。同時に、ＮＶＲＡＭは、磁気記憶ディスクに匹敵する一方で、磁気記憶ディスクと比較して小さい物理的空間を使用する高密度記憶装置を提供する大きな不揮発性記憶容量を提供できる。加えて、ＮＶＲＡＭは、ＤＲＡＭおよび磁気記憶ディスクよりも電力消費が小さい。コンピュータシステムにおけるＮＶＲＡＭの実現は、数ある中でも、ＮＡＮＤフラッシュおよびＮＯＲフラッシュメモリ、および相変化メモリ等のフラッシュメモリを含む。
【００４２】
実装形態によっては、フラッシュメモリデバイスは、集積回路メモリチップであるフラッシュメモリダイスが取り付けられる１つ以上のメモリカードを含んでいる。この文脈において、メモリダイは、メモリチップとして表されるか、またはメモリチップとして参照されてもよく、２つの用語「ダイ」および「チップ」は区別なく用いられる。フラッシュメモリデバイスは、フラッシュメモリダイスが取り付けられる１つのメモリカードとして表されるか、または１つのメモリカードとして参照されてもよく、用語「フラッシュメモリデバイス」、「フラッシュメモリカード」、「メモリデバイス」、および「メモリカード」は、区別なく用いられる。
【００４３】
企業用コンピュータシステムまたはサーバファーム等の大規模にデータを処理するいくつかのコンピュータシステムは、大量のメモリを用いてもよい。かかるシステムは、各カード上に多数のフラッシュメモリダイスまたはチップを有する複数のメモリカードをホストするメモリデバイスを用いてもよい。コンピュータシステムは、性能向上およびデータ信頼性を提供するために、データストライピング、データミラーリング、およびパリティ符号化（独立ディスクの冗長アレイ（ＲＡＩＤ）と類似）のような技術を実装してもよい。
【００４４】
ある意味では、データストライピングは、順序論理セグメントに対する管理およびアクセスが、メモリカード上に実装される異なるフラッシュメモリダイス等の異なる物理的記憶装置内の場所から格納され、アクセスされるような方法で、ファイル等の順序データを論理的に破壊する技術と呼んでもよい。ストライピングによって生成されたデータの各論理部分は、従って、データストライプと称される。
【００４５】
データミラーリングは、連続的な可用性を確実にするようリアルタイムで別々の物理メモリに対する論理メモリボリュームの繰り返しである。ミラーリングされたボリュームは、別々のボリュームコピーの完全な論理表現である。フラッシュメモリデバイスに用いられる１つの種類のデータミラーリングは、一次メモリデバイスに格納されるデータが、１つ以上の二次メモリデバイスにおいてクローン化されるか、複製される同期ミラーリングである。実装形態によっては、同期ミラーリングは２サーバシステムまたはマルチサーバシステムを用いて実装され、ここで、書き込みがサーバのうちの１つに存在するメモリカード内で行われている場合、書き込まれるデータはネットワークリンクによって第２のサーバにも発送され、ここで、同じ動作が第２のサーバ上のメモリカードに対して実行され、その結果、第１のサーバが機能しない場合、第２のサーバが、進行中の書き込みのいずれも失うことなく、動作を引き継ぎ、再び続ける。２つのサーバでの書き込み操作は、同時に起こる。
【００４６】
同期ミラーリングシステムにおいて、一次メモリデバイスは、アクティブサーバと呼ばれてもよい一方で、二次メモリデバイスは、パッシブサーバと呼ばれてもよい。アクティブおよびパッシブサーバに関する論理は、アクティブサーバ内のローカル記憶域およびパッシブサーバ内のリモート記憶域の両方に対してアプリケーションデータを格納するための書込み操作を連携させる。システムは、書き込み操作がアクティブサーバ内のローカル記憶域、並びにパッシブサーバ内のリモート記憶域の両方に対して完了するのを待機しなければならない。書き込み操作は、両方の操作が完了した場合に、発行したアプリケーションまたはオペレーティングシステムに通知される。同期ミラーリングにより、書き込み操作がローカル記憶域およびリモート記憶域において実行されるため、メモリ書き込み操作は時間がかかるように見える場合もある。
【００４７】
不具合は同期ミラーリングシステムにおいて発生する場合があり、さまざまな形態を取る可能性がある。例えば、アクティブサーバ内のローカル記憶素子はクラッシュする場合があるが、パッシブサーバとのネットワーク接続は、パッシブサーバおよびリモート記憶素子と同様に、動作する。別の例として、ネットワーク接続は、書き込み操作がアクティブサーバ内のローカル記憶域にのみ実行されるが、パッシブサーバ内のリモート記憶域には実行されないというように機能しない場合がある。代替として、書き込み操作がネットワーク上で送信されたが、操作がリモートエンドで受信される前に、パッシブサーバがクラッシュした場合がある。
【００４８】
同期ミラーリングシステムは、クラッシュが発生し、故障したメモリデバイスが取り替えられるか、サーバが再起動された後、アクティブおよびパッシブサーバ上の記憶素子が引き続き同期する状態を再現できなければならない。この文脈において、同期するとは、メモリブロックに対応する特定の論理ブロックアドレスがアクティブおよびパッシブサーバに要求される場合、アプリケーションまたはオペレーティングシステムがアクティブおよびパッシブサーバ両方において同じデータ内容を効率的に取得することを、システムによって提供される保証を指す。この特性は、デバイスの故障または他の障害状況とは関係なく、保証されなければならない。
【００４９】
いくつかの従来のメモリシステムにおいて、アクティブおよびパッシブサーバ間の同期は、クラッシュからの回復時に完全な同期操作を行うことによって維持される。完全な同期操作において、システムは、アクティブおよびパッシブサーバが、サーバのうちの少なくとも１つが停止後に再起動された場合のそれらの状態に関して完全に分岐したと仮定する。システムは、いくつかの適切な機構を用いて、新しいアクティブサーバに相当するようなサーバのうちの１つを決定し、次いで、メモリの内容のすべてをアクティブサーバからパッシブサーバへコピーする。
【００５０】
完全な同期操作は、例えば、クラッシュが起こる前に２つのサーバが長期間同期モードで動作していた場合のシナリオにおいて、非効率的である可能性がある。そのクラッシュからシステムが回復するには数秒かかる場合があり、その間に、システムは、クラッシュ前の時間に生じた、新しく決定されたパッシブサーバ上でのすべての書き込みが失われることを決定する。その結果、多くの情報が新しいアクティブサーバからパッシブサーバに転送されて、２つのエンドの同期を元に戻す必要がある。これにより結果として、多くの状況において容認できない高いダウンタイムを生じる。
【００５１】
いくつかのメモリシステムは、部分同期または増分再同期を実行して完全な同期の欠点を回避する。部分同期または増分再同期の目的は、クラッシュまたはいくつか他の機能停止が生じた時間中に危険にさらされているアクティブおよびパッシブサーバに格納されるデータを同期させることにある。例えば、メモリシステムは約１ギガバイト／秒の入出力（Ｉ／Ｏ）速度を有してもよく、同期が約１秒間切れた場合、一次側に対して、同期ミラーリング対の２つの側は、クラッシュがその１秒間の途中のどこかで発生したため、危険にさらされているであろうデータである略１ギガバイトのデータを送信することによって再同期されなければならない。
【００５２】
部分同期において、アクティブおよびパッシブサーバが機能停止後に接続を再構築する場合、２つのエンドは互いに問い合わせて、どのメモリブロックが、接続の他のエンドが認識しなかった接続の１つのエンドにおいて変更されたかを決定する。メモリシステムによっては、部分同期は、障害回復ログ（ＤＲＬ）を用いることによって達成される。かかるシステムにおいて、メモリブロックへの書き込みデータに加えて、ログベースの構造は、更新される予定のアクティブな記憶場所上のメモリブロックに関する情報を記録し、更新が接続の両端で行われた場合に、それを行った後に別の表記を行うアクティブノード上で保持される。例えば、書き込みＩ／Ｏ操作が、論理ブロックアドレス（ＬＢＡ）Ｘに対応するデータを更新してもよい。従って、システムは、ログベースの方法で保持され、ＬＢＡ  Ｘが更新されているメタデータ構造に入力し、次いで、システムは、ＬＢＡ  Ｘに対応する物理メモリ位置に関する操作を実行し、ＬＢＡ  Ｘが更新された接続のアクティブおよびパッシブエンドの両方から確認応答を受信した後、システムは、ＬＢＡ  Ｘが接続の両エンドで更新されたことを記録する。その結果、更新されているＬＢＡに対応するメタデータ構造内の入力は、両方のコピーが返された場合にのみ削除される。
【００５３】
部分同期がＤＲＬを実装するシステムにおいて実行される場合、システムは、ＤＲＬを見て、開始された書き込みがあることを示しているが、書き込みが完了したことのログの別の表示が無い入力を調べる。すべてのかかる入力に対して、相当するデータは、場合によっては再同期されなければならない。
【００５４】
同期ミラーリングシステムにおいて、パッシブサーバが応答せず、アクティブではないことがわかる状況が生じる場合がある。これは、例えば、アクティブサーバとパッシブサーバとの間の接続が故障した場合、またはパッシブサーバがクラッシュしたための場合である可能性がある。かかる場合において、アクティブサーバは、パッシブサーバがアクティブではないか、もはやオンラインではないことを認識してもよい。システムは、ＤＲＬに加えて、非複製書き込みログと称されてもよい第２のデータ構造を用いることによってかかる状況に対処してもよい。
【００５５】
非複製書き込みログは、パッシブサーバに認識されていないアクティブサーバにおける格納ブロックに関する情報を保持するが、これはパッシブサーバがダウンしている時にかかるブロックが書き込まれたためである。従って、パッシブサーバが復旧すれば、アクティブエンドは、パッシブエンドに書き込まれるべきブロックを迅速に決定するよう非複製書き込みログを用いてすべての非複製書き込みを再生できる。
【００５６】
実装形態によっては、最適化が、非複製書き込みログをＤＲＬと組み合わせることによって実行される。かかるシステムは、非複製書き込みを、第２の表記がパッシブサーバから受信されていないそれらの書き込み操作として認識する。
【００５７】
他の実装形態によっては、最適化は、ＤＲＬの精度とＤＲＬを効率的に格納する方法との間でトレードオフすることによって実行される。例えば、書き込み操作は、４キロバイト（ＫＢ）の粒度で実行されてもよいが、情報は、メガバイトの粒度でＤＲＬに格納されてもよい。従って、４ＫＢの粒度でＤＲＬに情報を記録する実装形態とは対照的に、メガバイト粒度でＤＲＬに対して行われる入力の数は、メモリに対して実行される同じ量の書き込み操作に対して略２５６倍少なく、ＤＲＬに記録される情報のより大きな不正確性を代償とする、ＤＲＬへの書き込みにおける相当に少ないオーバーヘッドである。システムがクラッシュから復旧する場合、より粒度の細かい情報がＤＲＬにおいて利用できないため、システムは、２つのエンドの同期を戻すよう少なくともメガバイトのデータを転送しなければならない。
【００５８】
障害回復ログおよび／または非複製書き込みログを用いることは、ログ書き込みを実行することに関係する待ち時間のため、同期ミラーリングを実装するメモリシステムにおいて書き込み操作を実行するためのオーバーヘッドに追加されてもよい。それは、障害回復ログおよび／または非複製書き込みログを用いることなく部分同期を提供するメモリシステムを設計することに有用である場合がある。実装形態によっては、かかるメモリシステムは、フラッシュトランスレーションレイヤによって提供されるデータ構造等の、種々の他の使用に対するメモリシステムに存在するデータ構造を用いることによって実装されてもよい。
【００５９】
実装形態によっては、データは、ログ方法でフラッシュメモリデバイスに書き込まれ、すなわち、メモリブロックは、メモリブロックに関連するシーケンス番号を読み取ることによって、特定のメモリブロックが別のメモリブロックよりも先に、または後に読み込まれたかどうかを決定できるように、順番に配置されてもよい。順番通りにメモリブロックを書き込んだ結果である論理配置は、データ構造が、ＤＲＬおよび非複製書き込みログを用いるメモリデバイス内の障害回復ログおよび非複製書き込みログによって提供される情報と同様の情報を提供するフラッシュ管理レイヤにおいて利用できるように、ログ構造と類似している。フラッシュ管理レイヤは同様の情報を提供するため、実行時に保持される追加の障害回復ログまたは追加の非複製書き込みログを持っている必要は無い。
【００６０】
一般に、フラッシュメモリカードは複数のパッケージに編成され、パッケージは複数のフラッシュメモリダイスを含んでいる。フラッシュメモリダイは、複数のダイ平面から成っている。ダイ平面は、フラッシュメーカにとって同一のメモリ領域を複製し、容量を駆動するために同じフラッシュメモリダイ内部で回路機構を並列に制御できる効率的な方法である。
【００６１】
ダイ平面は複数の消去ブロックを含んでいる。消去ブロックは１度に消去できるフラッシュの最小物理単位である。各消去ブロックは複数の書き込みページを含んでおり、ここで、書き込みページは、メモリ書き込み操作を実行するために一回にアクセスできるフラッシュメモリダイの最少物理セクションである。メモリデバイスの技術次第で、書き込みページのサイズは、デバイス当たり８、１６、または３２ＫＢであってもよい。書き込みページは、ひいては、いくつかの読み出しページから成っていてもよい。
【００６２】
性能、冗長性、および信頼性を含む種々の考察に対して、フラッシュメモリ管理論理は、フラッシュメモリダイスのグループをＲＡＩＤ構成に統合してもよい。書き込み操作を実行する場合、アプリケーションデータは、フラッシュメモリダイスのグループにわたって分散されているページを書き込むよう、書き込まれるか、「ストライピング」される。例えば、１つのストライピング方式において、アプリケーションデータは、８つのフラッシュメモリダイスのそれぞれにおけるページをＲＡＩＤストライプに書き込むよう書き込まれてもよく、ここで、書き込みページのサイズは８ＫＢである。従って、ＲＡＩＤストライピングされたフラッシュメモリデバイスに書き込むことのできる効率的な最小単位は、８×８ＫＢのオーダー、すなわち、６４ＫＢ以上であってもよい。
【００６３】
実装形態によっては、フラッシュメモリデバイスの物理的領域は、セグメントとも呼ばれるフラッシュセグメントとして論理的に識別されてもよい。フラッシュセグメントは、１つ以上の消去ブロックの集合×ＲＡＩＤストライプの幅である。例えば、セグメントは、１つのＲＡＩＤストライプにおいて各フラッシュメモリダイにおける２つの消去ブロックにまたがっていてもよい。消去ブロックのサイズは約２ＭＢであってもよく、ＲＡＩＤストライプは８つのフラッシュメモリダイスを含んでもよい。従って、セグメントのサイズは約３２ＭＢである。
【００６４】
実装形態によっては、フラッシュセグメントは、フラッシュメモリデバイスの領域が消去され、管理される粒度である。新しいアプリケーションデータを受信すると、フラッシュメモリデバイスは、１つの物理ブロックに書き込み、その後、次の物理ブロック、その後、次の物理ブロックと、メモリデバイスのいくつかの部分が一杯になるまで書き込み、その後、メモリ管理は、フラッシュメモリダイスの先に一杯となった部分に関してガベージコレクションを実行する。
【００６５】
ガベージコレクションがフラッシュメモリダイスの一部に行われると、システムはその部分から有効データを再配置し、関連するブロックを消去し、新しい書き込みを受信できるようにメモリ部分を利用可能に元に戻す。セグメントは、フラッシュ管理レイヤがフラッシュメモリダイスの一部を消去するレベルの最小単位である。物理的なフラッシュは、消去ブロックのレベルで消去されてもよいが、フラッシュ管理レイヤは、２つ以上の消去ブロックが１度に消去されることを可能にしているため、セグメントを用いている。
【００６６】
この文脈において、フラッシュ管理レイヤは、フラッシュメモリダイス等のフラッシュメモリデバイス内の物理的位置を管理するよう構成され、物理メモリを上位アプリケーションおよびオペレーティングシステムと接続して機能させるハードウェアおよびソフトウェア論理のコレクションを含むフラッシュトランスレーションレイヤと同義である。実装形態によっては、フラッシュ管理レイヤは、フラッシュメモリダイスを管理するためのマスタコントローラ、およびいくつかのスレーブコントローラを含んでおり、そのそれぞれは、フラッシュメモリダイスのサブセットと関連する。
【００６７】
フラッシュ管理レイヤはまた、フラッシュトランスレーションテーブル等のフラッシュメモリデバイスに埋め込まれるソフトウェア（すなわち、ファームウェア）も含んでいる。ＤＲＡＭページまたはファイルシステムブロックがフラッシュメモリダイデバイスにおいて管理される粒度は、一般に、フラッシュ記憶装置のためのフラッシュ管理レイヤの実装に特有の論理構造であるトランスレーション単位と称される。トランスレーションテーブルは、論理ブロックアドレス（ＬＢＡ）を、物理フラッシュ位置を指す物理ブロック番号（ＰＢＮ）にマッピングする。フラッシュ管理レイヤは、トランスレーションテーブルを内部的に、通常、固定ブロック粒度で保持し、すなわち、固定サイズのＬＢＡが固定サイズのＰＢＮにマッピングされる。このトランスレーションの固定粒度がトランスレーション単位と称される。システム全体は、トランスレーション単位をアプリケーションまたはオペレーティングシステムからの予想されるデータアクセスサイズと同じサイズに選択することによってより効率的に作成されてもよい。フラッシュメモリデバイスにデータを格納するアプリケーションおよびオペレーティングシステムのレベルにおいて、データアクセスの自然なブロックサイズは、いくつかのカテゴリに分類され、１つの一般的なサイズは４ＫＢである。従って、実装形態によっては、トランスレーション単位は４ＫＢのサイズで構成される。
【００６８】
実装形態によっては、ヘッダ情報は各セグメントと関連付けてもよい。ヘッダ情報はシーケンス番号であってもよい。例えば、フラッシュメモリダイスは、セグメント番号１、セグメント番号２、セグメント番号３等として管理されてもよい。シーケンス番号を各セグメントと関連付けることによって、フラッシュ管理は、各セグメントと新しい書き込みを受信するために利用可能にされた時間順序で効率的に関連付けることができる。その結果、どのセグメントに書き込みページが属するかによって、フラッシュ管理は、低いシーケンス番号を有するセグメント内の書き込みページが高いシーケンス番号を有するセグメント内の書き込みページの前に書き込まれたことを決定してもよい。これは、フラッシュメモリダイス内の書き込みページのための、それらがいつ書き込まれたかに関する時間順序を生成し、これは、ログが通常、ログの先頭以降、順序通りに書き込まれるため、従来は、ログ方式で書き込まれるフラッシュメモリデバイスと呼ばれている。
【００６９】
ある時点で、フラッシュメモリデバイス内のいくつかのセグメントは完全に書き込まれ、アクティブに書き込まれているいくつかのセグメントが存在し、クリーン状態にあるいくつかのセグメントが存在し、それらはまだ全く書き込まれていない。アクティブセグメントは、書き込みページがアクティブに書き込まれているセグメントであるため、シーケンス番号、すなわち、メモリシステムにおけるアクティブセグメントのシーケンス番号のセットは、メモリデバイス内にごく最近格納されたアプリケーションデータに記号を記すよう考慮されてもよい。
【００７０】
フラッシュメモリデバイスは、同期ミラーリング操作を管理するために構成される上位論理モジュールを含んでもよい。例えば、アクティブおよびパッシブサーバは、２つのエンド間のデータミラーリングと、サーバのうちの１つが故障モードから復旧する場合のデータの部分同期とを管理する上位ソフトウェアドライバを含んでもよい。上位ソフトウェアドライバは、同期ミラーリング操作を管理するためにフラッシュ管理レイヤと相互作用してもよい。
【００７１】
特定の時間において、上位ソフトウェアドライバはアクティブセグメントに関する情報に対してフラッシュ管理モジュールに問い合わせる。クエリ用のトリガは時間ベースであってもよく、例えば、問い合わせは定期的に行われてもよい。代替として、クエリ用のトリガは、書き込まれた物理メモリ量に基づいてもよい。例えば、クエリは最後のクエリ以後書き込まれるセグメントの閾値に基づいてもよい。
【００７２】
上位ソフトウェアドライバからのクエリに基づいて、フラッシュ管理レイヤは、ごく最近書き込まれたセグメントのシーケンス番号、および、ある時点、例えば、時間Ｔ１におけるセグメント内のメモリブロックを決定する。フラッシュ管理レイヤは情報を上位ソフトウェアドライバに送信する。より多くの時間が経過した後、新しい書き込みがシステムに到来し、フラッシュメモリの領域内に格納される。時間Ｔ２において、フラッシュ管理レイヤは、新しいクエリを上位ソフトウェアドライバから取得し、それに従って、ごく最近書き込まれたセグメント／時間Ｔ２におけるセグメント内のメモリブロックに関する情報を送信する。
【００７３】
２つの異なる時点に対応するシーケンス番号を検査することによって、上位ソフトウェアドライバは、Ｔ１において書き込まれなかったが、Ｔ２で書き込まれた、特に、書き込みページがＴ２−Ｔ１の時間間隔で実行される書き込み操作を含むセグメントおよびメモリブロックを決定できる。
【００７４】
例えば、時間Ｔ１において、フラッシュメモリデバイスは、上位ソフトウェアドライバに送信される、シーケンス番号が３７であった１つのアクティブセグメントを有していた。時間Ｔ２において、アクティブセグメントのシーケンス番号は４２である。Ｔ２およびＴ１に対応するシーケンス番号を読み取ることによって、上位ソフトウェアドライバは、セグメント３７、３８、３９、４０、および４１が時間間隔Ｔ２−Ｔ１の間に完全に書き込まれ、セグメント４２が部分的に書き込まれることを決定できる。セグメント３７、３８、３９、４０、および４１に含まれるメモリブロックのみが期間Ｔ２−Ｔ１において変化したため、フラッシュ管理は、セグメント３７、３８、３９、４０、および４１が存在するフラッシュメモリダイス内の物理的位置を決定できる。
【００７５】
従って、シーケンス番号が、所定の時間間隔中に修正されたであろうフラッシュメモリブロックを特定するため、アクティブセグメントと関連付けられたシーケンス番号の跡を追うことによって、フラッシュ管理レイヤおよび上位ソフトウェアドライバは、障害回復ログおよびコミットされていない書き込みログの組み合わせによって提供される情報と同じ情報を取得してもよい。
【００７６】
方法、システム、およびデバイスを、フラッシュセグメントと関連付けられるシーケンス番号を用いるフラッシュメモリデバイスにおける同期ミラーリングに対して、以下のセクションで説明する。この検討のため、用語「フラッシュメモリダイ」、「フラッシュメモリチップ」、および「フラッシュメモリ」は、同じ意味で用いられる。用語「アクティブサーバ」、「ローカル記憶素子」、および「ローカルエンド」は、同じ意味で用いられる。同様に、用語「パッシブサーバ」、「リモート記憶素子」、および「リモートエンド」は、同じ意味で用いられる。加えて、残りのセクションはフラッシュメモリデバイスに関して説明するが、ここで説明する技術は、非対称的挙動の態様を有する他の形態のメモリデバイスに等しく適用可能であってもよい。例えば、相変化メモリデバイスは、これらの操作を用いるよう構成されてもよい。
【００７７】
図１は、データを記憶するためのフラッシュメモリを用いるシステム１００の実施例を示している。システム１００は、フラッシュセグメントに関連付けられるシーケンス番号を用いるフラッシュメモリデバイスへのデータの同期ミラーリングのための技術を実装してもよい。
【００７８】
システム１００は、ネットワーク１０４によって相互接続される１つ以上のコンピュータサブシステム１０２を含んでいる。コンピュータサブシステム１０２は、１０６Ａ、１０６Ｂ、および１０６Ｃ〜１０６Ｎ等の１つ以上のサーバを含んでいる。
【００７９】
各コンピュータサブシステム１０２は、１０６Ａ、１０６Ｂ、１０６Ｃ、および１０６Ｎ等のサーバのアレイをホストするサーバラックであってもよい。これは、例えば、システム１００が企業用のサーバファームまたはバックエンド処理センタである場合であってもよい。コンピュータサブシステムはデータセンタ内等の１つの物理的位置に共通して位置してもよく、または、それらは地理的に分散されてもよい。
【００８０】
コンピュータサブシステム１０２は、互いに、および、回線交換データネットワーク、パケット交換データネットワーク、または、データを担持することのできる、インターネットプロトコル（ＩＰ）ベースまたは非同期転送モード（ＡＴＭ）ベースのネットワーク等の、有線または無線ネットワークを含む、いずれか他のネットワークを含んでもよいネットワーク１０４を介してリモートコンピュータと通信する。ネットワーク１０４はローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）であってもよい。ネットワーク１０４は、インターネット、アナログまたはデジタル有線および無線ネットワーク（ＩＥＥＥ８０２．１１ネットワーク、公衆交換電話網（ＰＳＴＮ）、サービス総合デジタル網（ＩＳＤＮ）、およびデジタル加入者回線（ｘＤＳＬ）等）、第３世代（３Ｇ）または第４世代（４Ｇ）移動通信ネットワーク、有線イーサネットネットワーク（イーサネット：登録商標）、イントラネットおよび／またはデータを担持するためのいずれか他の配信またはトンネル式機構等のプライベートネットワーク、またはかかるネットワークのいずれか適切な組み合わせを含んでもよい。加えて、ネットワーク１０４は、セキュアハイパーテキスト転送プロトコルトラフィック（ＨＴＴＰＳ）または仮想プライベートネットワーク（ＶＰＮ）等のセキュアなトラフィックを処理し、コンピュータサブシステム１０２間の接続がＶＰＮまたはＨＴＴＰＳを用いるようなセキュアな接続であってもよいように構成されてもよい。しかし、他の実装形態において、接続はセキュアではない接続であってもよい。
【００８１】
各サーバ１０６Ａ、１０６Ｂ、１０６Ｃ、または１０６Ｎは、ハードドライブおよびフラッシュメモリ等の、データを記憶するためのメモリモジュールを含むコンピューティングデバイスである。フラッシュメモリは、複数のフラッシュメモリチップが取り付けられるメモリカードの形態であってもよい。フラッシュメモリカードは、単にパッケージと称されてもよい複数のメモリパッケージまたはダイパッケージに編成されてもよい。パッケージは、フラッシュメモリダイスを含むマルチチップモジュールである。各フラッシュメモリダイは、データが格納されるメモリセルの構成要素ブロックを含むフラッシュ平面から成っていてもよい。実装形態によっては、２つの平面を持つダイは２つの別個の小領域を有し、各小領域はそれ自体のメモリアレイおよびインタフェース回路機構を持っている。ダイは、コマンドを一方の平面または他方に（または、場合によっては、両平面に）送信するデマルチプレクス構造を有している。メモリセルは、特定のメモリセルに格納されるデータの値に対応する２進数（ビット）を格納するシングルレベルセル（ＳＬＣ）であってもよい。代替として、メモリセルは、特定のメモリセルに関連付けられる論理書き込みページ位置に格納されるデータの値に対応する数ビットを格納するよう構成されるマルチレベルセル（ＭＬＣ）であってもよい。
【００８２】
各サーバは、サーバ内のマザーボードに接続されるかかるフラッシュメモリカードの多重インスタンス（例えば、最大１６から２４）を含んで、小型のメモリカードに対する０．５テラバイト（ＴＢ）から、大型のメモリカードに対する約１００ＴＢ容量までのシステムの範囲で変化してもよい総フラッシュメモリ容量をもたらしてもよい。フラッシュメモリカードの観点からすると、メモリカードが含まれるサーバは、メモリカードのホストシステムとみなされてもよい。従って、上記の例示的な図に基づいて、ホストシステムの総容量は、システム内のカードの数によって乗算される０．５ＴＢから１００ＴＢの範囲であってもよい。
【００８３】
実装形態によっては、サーバ１０６Ａ、１０６Ｂ、１０６Ｃ、または１０６Ｎのうちのいくつかは、同期ミラーリング設定に対するアクティブサーバとして、またはパッシブサーバとして構成されてもよい。例えば、サーバ１０６Ａは、ネットワーク１０４を介して、リモートコンピュータサブシステム１０２におけるパッシブサーバに、または、１つ以上のリモートコンピュータサブシステム１０２におけるいくつかのパッシブサーバに接続されるアクティブサーバであってもよい。別の実施例として、サーバ１０６Ａは、同じサブシステム１０２内のパッシブサーバとしてのサーバ１０６Ｃに、または、パッシブサーバとしての、１０６Ｂおよび１０６Ｃ等のいくつかのサーバに接続されるアクティブサーバであってもよい。
【００８４】
先に言及したように、フラッシュメモリは、電源が切断された場合にその情報を保持する（従って、不揮発性）ランダムアクセスメモリの種類であるＮＶＲＡＭの形態である。これはＤＲＡＭとは対照的で、静的ランダムアクセスメモリ（ＳＲＡＭ）であり、両方とも、電力が印加されている間だけデータを保持する。ＮＶＲＡＭは、メモリ読み込み、書き込み、または消去等の構成要素の操作が、１つ以上のオーダーで互いに異なる非対称的な特性を有する。例えば、メモリ読み取りは、操作がＤＲＡＭ内で実行されるのと同じオーダー内で実行され、メモリ書き込み操作は相対的により遅く実行され、消去操作はさらに大きな制限を有する。さらに、特定の種類のＮＶＲＡＭモジュールは、限定された書き込み数を有してもよい。これは、例えば、いくつかの種類のＮＶＲＡＭ情報記憶機構に存在する物理的な特徴のために、各ＮＶＲＡＭ物理セルがプログラミングされ、および／または限られた回数で消去されることを可能にする場合であってもよい。異なる種類のＮＶＲＡＭは、根本的な物理機構およびメモリセルの密度に依存する異なるアナログ特性（根本的な「雑音の多い媒体」特徴）を有してもよい。
【００８５】
各サーバは、メモリモジュールに格納されたデータを処理するためのプロセッサも含んでいる。実装形態によっては、プロセッサは、ホストシステムに、例えば、メモリカードが結合されるサーバ内のマザーボードに存在する。かかる実装形態において、フラッシュメモリの管理はホストシステムによって実行されてもよい。他の実装形態によっては、１つ以上のプロセッサがフラッシュメモリカード内に埋め込まれていてもよい。かかる実装形態において、フラッシュメモリの管理は、メモリカード自体に埋め込まれるプロセッサによって、または、メモリカードに埋め込まれるプロセッサとホストシステム内のプロセッサとのいくつか好適な組み合わせによって実行されてもよい。
【００８６】
プロセッサは、フラッシュメモリまたは読み出し専用メモリ等のどこか他の場所に格納されている命令を実行するよう構成されてもよい。命令は、データを処理するため、フラッシュメモリチップのサブセクションの粒度でデータストライピングを実行するため、劣化したメモリセクションとのデータストライプを、劣化領域を含むフラッシュメモリチップのセクションを動的に再ストライピングすることによって復旧させるための命令を含んでもよい。
【００８７】
各サーバはまた、処理操作中のデータの一時的な記憶のためのＤＲＡＭを含んでもよい。加えて、各サーバは、同じコンピュータサブシステム１０２上または他のコンピュータサブシステムにおける他のサーバまたはリモートコンピュータと通信するためのネットワークインタフェースを含んでいる。
【００８８】
図２Ａ〜２Ｂは、フラッシュメモリダイスを含むメモリデバイス２００の実施例を示している。メモリデバイス２００は、例えば、サーバ１０６Ａ、１０６Ｂ、１０６Ｃ、および１０６Ｎのうちの１つ等のシステム１００におけるサーバ内に含まれてもよい。しかし、メモリデバイス２００はまた、他のシステム内に含まれてもよい。
【００８９】
図２Ａは、一方の側から見たメモリデバイス２００の略図を示している。図示のように、メモリカードであるメモリデバイス２００は、ホストエッジコネクタ２０４を有するベースボード２０２を含んでいる。マスタコントローラ２０６はベースボード２０２上に実装されている。ベースボード２０２上に実装されているものには、パッケージ２１２〜２３２等の１つ以上のメモリパッケージもある。
【００９０】
ベースボード２０２は、マスタコントローラ２０６および様々なパッケージ２１２〜２３２を含むメモリカード２００の種々の構成要素を相互接続するためのプリント回路基板の配線の１つ以上の層を含むプリント回路基板（ＰＣＢ）である。ベースボード２０２は、メモリカード２００が１０６Ａ、１０６Ｂ、１０６Ｃ、または１０６Ｎ等のサーバのシャーシ内部に含まれることを可能にするフォームファクタのものであってもよい。実装形態によっては、ベースボード２０２は、メモリカード２００のメモリ容量を拡張するよう用いられてもよいドーターボードを支持するよう構成されてもよい。例えば、ベースボード２０２は、ドーターボードが結合されてもよいソケットを含んでもよい。ドーターボードは、パッケージ２１２〜２３２に類似したいくつかのメモリパッケージを含み、それによって、メモリカード２００の総メモリ容量を増加させてもよい。
【００９１】
ホストエッジコネクタ２０４は、ホストシステムのマザーボードに取り付けられるソケットに結合するよう成されている。例えば、コネクタ２０４は、メモリカード２００をサーバ１０６Ａ、１０６Ｂ、１０６Ｃ、または１０６Ｎのいずれかに含まれるマザーボードに結合してもよい。コネクタ２０４は、データをメモリカード２００とホストシステムとの間で転送するために構成されるコンピュータデータバスコネクタである。例えば、コネクタ２０４は、周辺構成機器相互接続（ＰＣＩ）バス、ＰＣＩ拡張（ＰＣＩ−Ｘ）バス、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩｅ）コンピュータ拡張バス、またはいくつか他の適切なコネクタであってもよい。
【００９２】
マスタコントローラ２０６は、メモリカード２００内に含まれるフラッシュメモリチップ内のデータの記憶と検索を管理するために構成される処理デバイスである。実装形態によっては、メモリカード２００は、複数のマスタコントローラ２０６を含んでいる。実装形態によっては、マスタコントローラ２０６は、パッケージ２１２〜２３２内に含まれ、複数のマスタスレーブメモリバスチャンネルによってマスタコントローラ２０６に結合される１つ以上のスレーブコントローラを管理する。他の実装形態によっては、スレーブコントローラは、一方で、マスタおよびスレーブコントローラ間の論理差を保持しながら、マスタコントローラとしての（パッケージ等の）同じ論理ユニット内に含まれる。さらに他の実装形態によっては、マスタコントローラ２０６は、パッケージ２１２〜２３２の外部の１つ以上のスレーブコントローラを管理する。例えば、スレーブコントローラは、マスタコントローラとフラッシュメモリダイスとの間に置かれてもよい。マスタコントローラは、マスタスレーブメモリバスチャンネルを介してスレーブコントローラと通信する。各スレーブコントローラは、次に、例えば、別のチャンネルを用いてフラッシュメモリダイスのサブセットと通信して各ダイを制御する。
【００９３】
ベースボード２０２の配線から形成されるホストバスチャンネルは、ホストシステムと通信するためにマスタコントローラ２０６をホストエッジコネクタ２０４に結合する。１つ以上のスレーブコントローラは、透過的アクセスをパッケージ内に含まれるフラッシュメモリに提供するよう成されている。マスタコントローラ２０６およびスレーブコントローラは、ホストシステム内のプロセッサに対するフラッシュメモリのネイティブアクセスを提供する。
【００９４】
パッケージ２１２〜２３２のそれぞれは、複数のパッケージ化されたフラッシュメモリチップを実装する矩形のプリント回路基板を含んでいる。フラッシュメモリチップは、ＮＡＮＤフラッシュメモリダイ、ＮＯＲフラッシュメモリダイ、またはいずれか他の適切な不揮発性メモリを含んでいてもよい。実装形態によっては、パッケージ２１２〜２３２のそれぞれは、読み出し操作、書き込み操作、および／または消去またはメンテナンス操作が特定の種類のメモリに特化されるように、メモリカード２００に特定される異なる種類のフラッシュメモリを有してもよい。
【００９５】
実装形態によっては、各パッケージは、他のパラメータの中でも、電気配線に基づく４つのペアリングおよびパッケージから出るピンアウトに配置される８つのＮＡＮＤフラッシュメモリダイスを含んでいる。対になった２つのダイスは互いの兄弟と称されてもよい。パッケージは、各対に対して、両方のダイスがフラッシュ操作の観点からアクティブとみなすことができたとしても、ダイスのうちの１つが同時に入出力（Ｉ／Ｏ）操作を実行するためにアクティブとなることができるように構成される。従って、パッケージにおいて、ダイスのうちの４つが、同時に入出力（Ｉ／Ｏ）操作を実行してもよいが、８つすべてのダイスは、フラッシュ操作を実行するためにアクティブであってもよい。
【００９６】
上記の実装形態において、図示の１２のパッケージ２１２〜２３２に加えて、メモリカード２００は、ベースボード２０２の裏面に実装されるさらに１２のパッケージを含み、ベースボード２０２に実装される合計２４のパッケージをもたらしている。加えて、メモリカード２００はドーターボードを含み、２４のパッケージがドーターボードに実装されている。従って、かかる実装形態において、メモリカード２００内のパッケージの総数は４８である。パッケージ当たり８つのダイスに対して、上記の構成はメモリカード２００内で合計３８４のフラッシュメモリダイスをもたらしている。
【００９７】
代替の実装形態において、パッケージ２１２〜２３２の数は１２以外、例えば、数十のパッケージであってもよく、メモリカード２００は、ベースボード２０２の裏面に実装される追加の数十のパッケージを含み、２４以外の数のボード当たりのパッケージ総数をもたらしてもよい。１つ以上のドーターボード等のカード当たり複数のボードにより、メモリカード内のパッケージの総数は、数十または数百であってもよく、何百または何千ものダイスに至る。
【００９８】
図２Ａに示す特徴に加えて、メモリカード２００は、ベースボード２０２に実装される１つ以上の組み込みプロセッサ、ＲＯＭ、ＤＲＡＭ、および追加のＮＶＲＡＭを含んでもよい。ＲＯＭは、メモリカード２００に対するブート命令を格納するよう構成されてもよい。ＤＲＡＭは、スクラッチパッドメモリを組み込みプロセッサに設け、フラッシュメモリチップ内のデータにアクセスするようトランスレーション構造（例えば、物理アドレスに対するトランスレーションテーブルマッピング論理アドレス）を格納するよう構成されてもよい。ＮＶＲＡＭは、定期的に更新されてもよいメモリカード２００に対するファームウェア命令を含んでもよい。ファームウェア命令は、マスタコントローラ２０６およびスレーブメモリコントローラを駆動し、制御して、パッケージ２１２〜２３２のフラッシュメモリチップによりデータにアクセスするよう読み出し、書き込み、消去、またはメンテナンス操作を実行する。組み込みプロセッサは、ファームウェア命令を実行して、データにアクセスし、並びに、ＤＲＡＭ内のトランスレーション構造を読み出し、書き込み、消去、または保持するようマスタおよびスレーブメモリコントローラを駆動し、制御する。
【００９９】
組み込みプロセッサは、さらに、マスタメモリコントローラ２０６およびエッジコネクタ２０４に結合されて、それぞれと通信してもよい。組み込みプロセッサはまた、エッジコネクタ２０４によってホストシステム内のホストプロセッサと通信して、メモリカード２００におけるフラッシュメモリダイス内のデータにアクセスするよう、ホストアプリケーションまたはホストオペレーティングシステムソフトウェアからの読み出しおよび書き込み操作リクエストを受信してもよい。
【０１００】
先に説明したように、各メモリカード２００は、２種類の論理コントローラ、すなわち、ホストレベルのインタラクションを処理するマスタコントローラと、フラッシュレベルのインタラクションを処理するスレーブコントローラとを有してもよい。マスタコントローラおよびスレーブコントローラは、標準プロトコル、または専用ハードウェアインタフェース、または両方のいずれか好適な組み合わせを用いて通信してもよい。実装形態によっては、このインタフェースは、物理デバイス上のピンおよびベースボード上の配線を用いて実装される。マスタコントローラおよびスレーブコントローラが同じ物理デバイス内にある他の実装形態において、インタフェースは物理デバイス上の内部デバイス論理を用いて実装されてもよい。
【０１０１】
実装形態によっては、メモリカード２００は２つの物理デバイス利用してもよく−そのそれぞれは、１つのマスタコントローラおよびいくつかのスレーブコントローラを実装している。マスタコントローラのうちの１つはコンピューティングデバイスのマザーボード上のＰＣＩ拡張スロット上の「ベースボード」上にあってもよく、他のマスタコントローラはベースボード上の拡張スロット上に位置する「ドーターボード」上にあってもよい。ホストとドーターボードのマスタコントローラとの間の通信は、ベースボードのマスタコントローラを介して経由されてもよい。かかる実装形態において、２つのマスタコントローラ間の通信はＰＣＩｅの標準インタフェースを介してであってもよい。また、専用ハードウェアインタフェースは実行可能であってもよい。
【０１０２】
マスタコントローラおよびスレーブコントローラは、フラッシュメモリシステムのデータパスを実装するよう、それらそれぞれの動作を調整する。この文脈において、データ平面とも称されてもよいデータパスは、マスタおよびスレーブコントローラが、どのフラッシュメモリ位置がメモリ操作に関与しているかをそれら自体では決定しないことを示している。代わりに、決定は、システムの制御パスまたは制御平面によって行われる。マスタおよびスレーブコントローラは、「制御パス」からコマンドを受信して、フラッシュレベルの操作を実行し、かかる操作を特定のホストＤＲＡＭリソースに対して行う。
【０１０３】
システムの制御パスは、ホストプロセッサまたはコントローラに関連する組み込みプロセッサによって実行されるファームウェア命令として実装されてもよいドライバソフトウェアによって実装されてもよい。実装形態によっては、カード当たり単一のドライバがあってもよい一方で、他の実装形態では、メモリカード当たりいくつかのドライバがあってもよい。ドライバソフトウェア命令により、各スレーブコントローラがマスタコントローラと単独に通信することを可能にしてもよい。
【０１０４】
実装形態によっては、ドライバソフトウェアは、デバイスドライバとしてホストコンピューティングデバイス上で実行される。デバイスドライバは、標準ＰＣＩｅコマンドを用いてメモリカード上のマスタコントローラと通信し−標準の用語において、後者は「メモリマップドＩ／Ｏ」（ＭＭＩＯ）命令と称されてもよい（それらがＤＲＡＭの代わりに適切なデバイスに経路設定されることを除いては、それらはプロセッサレベルでのロード／格納命令である）。ドライバは、次に、標準のホストベースのアプリケーションプログラミングインタフェース（ＡＰＩ）および機構（例えば、システムコール）を用いてホスト中央処理装置（ＣＰＵ）アプリケーションおよびオペレーティングシステム（例えば、ファイルシステムコンポーネント）からのリクエストを受信する。
【０１０５】
他の実装形態によっては、ドライバソフトウェアは、ベースボードマスタコントローラと結合される組み込みプロセッサ上で実行される。これらの実装形態において、用語「ファームウェア」は、通常、ドライバソフトウェアを指すよう用いられる。さらに他の実装形態において、ドライバ機能は、１つ以上のマスタコントローラに関連する２つ以上の組み込みプロセッサ間で分割／並列方式で実行されてもよい。ファームウェアが１つ以上の組み込みプロセッサ上で実行される場合、アプリケーション／オペレーティングシステムリクエストは、例えば、ホストコンピューティングデバイス上にインストールされる中間の（独立した最小の）ソフトウェアドライバを用いる同じＰＣＩｅメモリマップドＩ／Ｏ命令を用いて、ファームウェアに通信される。
【０１０６】
先に説明したように、マスタコントローラ、スレーブコントローラ、およびドライバソフトウェアの組み合わせは、フラッシュトランスレーションレイヤまたはフラッシュ管理レイヤと呼ばれてもよい。フラッシュ管理レイヤは、例えば、フラッシュトランスレーションテーブルを用いて、論理メモリブロックをフラッシュメモリダイス内の物理的位置にマッピングするフラッシュメモリダイスを管理する。フラッシュ管理レイヤは、フラッシュメモリダイスを、同期ミラーリングモジュール等の上位アプリケーション、およびオペレーティングシステムと接続して機能させる。
【０１０７】
図２Ｂは、パッケージ２１２〜２３２のサブセットであるパッケージ２１２、２１４、および２３２内に含まれるフラッシュメモリダイスを示すメモリカード２００の略図を示している。パッケージ２１２はフラッシュメモリダイス２１２Ａ．．．２１２Ｎを含み、パッケージ２１４はフラッシュメモリダイス２１４Ａ．．．２１４Ｎを含み、パッケージ２３２はフラッシュメモリダイス２３２Ａ．．．２３２Ｎを含んでいる。ダイス２１２Ａ．．．２１２Ｎのそれぞれは、２１２Ａ（ｉ）〜２１２Ｎ（ｉ）等のスレーブコントローラおよびメモリブロック２１２Ａ（ｉｉ）〜２１２Ｎ（ｉｉ）をそれぞれ含んでいる。ダイス２１４Ａ．．．２１４Ｎのそれぞれは、２１４Ａ（ｉ）〜２１４Ｎ（ｉ）等のスレーブコントローラのそれぞれをメモリブロック２１４Ａ（ｉｉ）〜２１４Ｎ（ｉｉ）のそれぞれと共に含んでいる。同様に、ダイス２３２Ａ．．．２３２Ｎのそれぞれは、スレーブコントローラ２３２Ａ（ｉ）〜２３２Ｎ（ｉ）のそれぞれと、メモリブロック２３２Ａ（ｉｉ）〜２３２Ｎ（ｉｉ）のそれぞれを含んでいる。
【０１０８】
図２Ｂは、スレーブコントローラ２１２Ａ（ｉ）〜２１２Ｎ（ｉ）、２１４Ａ（ｉ）〜２１４Ｎ（ｉ）、および２３２Ａ（ｉ）〜２３２Ｎ（ｉ）がパッケージ２１２〜２３２に実装され、マスタコントローラ２０６と複数のフラッシュメモリダイスとの間に結合されることを示しているが、他の実装形態によっては、スレーブコントローラ２１２Ａ（ｉ）〜２１２Ｎ（ｉ）、２１４Ａ（ｉ）〜２１４Ｎ（ｉ）、および２３２Ａ（ｉ）〜２３２Ｎ（ｉ）はベースボード２０２に実装され、マスタコントローラ２０６とパッケージ２１２〜２３２内の各フラッシュメモリダイスとの間に結合される。さらに他の実装形態において、スレーブコントローラ２１２Ａ（ｉ）〜２１２Ｎ（ｉ）、２１４Ａ（ｉ）〜２１４Ｎ（ｉ）、および２３２Ａ（ｉ）〜２３２Ｎ（ｉ）は、マスタコントローラ２０６と共に集積回路パッケージ内に実装され、マスタコントローラ２０６とパッケージ２１２〜２３２内の各フラッシュメモリダイスとの間に結合される。
【０１０９】
各スレーブコントローラは、そのそれぞれのダイに透過的アクセスを提供するために構成される。先に説明したように、すべてのスレーブコントローラは、ベースボード２０２上のＰＣＢ配線として実装されてもよい複数のマスタスレーブメモリバスチャンネルによってマスタコントローラ２０６に接続される。マスタコントローラ２０６は、フラッシュメモリダイスをネイティブに制御して、パッケージ２１２〜２３２内に含まれるフラッシュメモリダイスによる予想可能な帯域幅と待ち時間性能を取得する。フラッシュメモリダイス２１２Ａ．．．２１２Ｎ、２１４Ａ．．．２１４Ｎ、または２３２Ａ．．．２３２Ｎ上で行われるすべての操作（例えば、読み出し、書き込み、消去、リセット等の制御操作）は、マスタコントローラ２０６に対して（およびその制御の下で）完全に見える。パッケージ内のダイスのアクティブダイスのフラッシュメモリインタフェースは、それぞれのスレーブメモリコントローラを介してマスタコントローラ２０６に渡される。例えば、ダイ２１２Ａのフラッシュメモリインタフェースは、スレーブコントローラ２１２Ａ（ｉ）を介してマスタコントローラ２０６に渡される。
【０１１０】
マスタコントローラ２０６は、フラッシュメモリダイス２１２Ａ．．．２１２Ｎ、２１４Ａ．．．２１４Ｎ、または２３２Ａ．．．２３２Ｎによって支持される操作のそれぞれを直接実行することができる。スレーブコントローラはプロトコル変換を実行してもよいが、マスタコントローラからのリクエストを（関連するフラッシュメモリダイを伴うことなく）脱落／妨害しない。しかし、スレーブコントローラは、いずれのフラッシュメモリ操作も自主的に開始しない。
【０１１１】
各スレーブコントローラ２１２Ａ（ｉ）〜２１２Ｎ（ｉ）、２１４Ａ（ｉ）〜２１４Ｎ（ｉ）、および２３２Ａ（ｉ）〜２３２Ｎ（ｉ）は、複数のフラッシュメモリダイス２１２Ａ．．．２１２Ｎ、２１４Ａ．．．２１４Ｎ、および２３２Ａ．．．２３２Ｎによってそれぞれ共有されるメモリバスチャンネルを仲裁するよう構成される。各スレーブコントローラは、マスタコントローラ２０６と複数のフラッシュメモリダイスとの間の信号をバッファに格納し、多重化できる。加えて、各スレーブコントローラは、予想可能な不揮発性メモリ操作のシーケンスを共に複合操作に組み合わせて、フラッシュメモリダイスによる制御帯域幅を向上することができる。
【０１１２】
フラッシュメモリダイス２１２Ａ．．．２１２Ｎ、２１４Ａ．．．２１４Ｎ、および２３２Ａ．．．２３２Ｎ内のデータがアクセスされる粒度は、メモリブロックまたはメモリページと呼ばれてもよい。例えば、フラッシュメモリダイ２１２Ａは、図２Ｂの２１２Ａ（ｉｉ）によって集合的に表される複数のメモリブロックを含んでいる。メモリブロックのサイズは、用いられるフラッシュメモリの種類に基づいて変化してもよい。例えば、メモリブロックのサイズは、ＮＡＮＤフラッシュダイスおよびＮＯＲフラッシュダイスに対して異なっていてもよい。ＮＡＮＤフラッシュデバイスの中でも、サイズはＮＡＮＤフラッシュのＳＬＣおよびＭＬＣタイプ間で異なっていてもよい。異なるプロセス生成からのＮＡＮＤフラッシュはまた、異なるサイズ（例えば、３４ｎｍＮＡＮＤフラッシュ対２５ｎｍＮＡＮＤフラッシュ）を有してもよい。加えて、メモリブロックのサイズは、フラッシュメモリデバイス上で実行される操作の種類に基づいて変化してもよい。例えば、ＮＡＮＤフラッシュメモリデバイスに対して、データは書き込みページの単位でメモリデバイスに書き込まれてもよい。書き込みページのサイズは、小さい数のキロバイトのオーダーの（例えば、４ＫＢ〜１６ＫＢの範囲の）小さいものであってもよい。
【０１１３】
実装形態によっては、データは、通常、書き込みページよりも大きいサイズ（数メガバイトのオーダー）の消去ブロックの単位でＮＡＮＤフラッシュデバイスから消去されてもよく、１つの消去ブロックは複数の書き込みページを含んでもよい。データが書き込みページに書き込まれると、書き込みページに関連する消去ブロック全体は、新しいデータが書き込みページに書き込まれる前に消去されなければならない。他の実装形態によっては、データは、先に説明したように、フラッシュセグメントの単位で消去されてもよい。フラッシュセグメントは、ＲＡＩＤストライプにおけるフラッシュメモリダイス全体にわたって分散される複数の消去ブロックから成るフラッシュメモリカード２００の物理範囲にマッピングする論理構造である。
【０１１４】
図３は、フラッシュメモリダイに格納されるメモリページ３００の実施例を示している。フラッシュメモリチップは、メモリカード２００内でパッケージ化される２１２Ａ．．．２１２Ｎ、２１４Ａ．．．２１４Ｎ、および２３２Ａ．．．２３２Ｎのうちの１つであってもよい。しかし、フラッシュメモリチップはまた、他のメモリカードまたはシステム内に実装されてもよい。
【０１１５】
メモリページ３００は、データ部３０２およびエラー訂正コード（ＥＣＣ）部３０４を含んでいる。データ部３０２は、データが格納されるメモリユニット３０２ａ〜３０２ｈを含んでいる。メモリページは、３０６で示されるページ開始アドレスを有している。
【０１１６】
データ部のサイズは、特定のＮＶＲＡＭ設計および構成によって変化してもよい。図示の実施例において、データ部３０２は４ＫＢのサイズを有している。データ部に対する他のサイズが用いられてもよい（例えば、８ＫＢまたは１６ＫＢ）。
【０１１７】
図３に示すように、メモリページ３００は、ページ開始アドレス３０６から０〜７で示され、メモリユニット３０２ａ〜３０２ｈのそれぞれが５１２バイトのサイズであることを可能にするオフセットアドレスを有している。実装形態によっては、メモリユニット３０２ａ〜３０２ｈのそれぞれは書き込みページに相当してもよい一方で、データ部３０２は消去ブロックに相当してもよい。従って、かかる実装形態において、消去ブロック３０２は書き込みページ３０２ａ〜３０２ｈを含んでいる。
【０１１８】
ＥＣＣのサイズは基礎をなすＮＶＲＡＭ実装により変化する。データ部３０２が４ＫＢである構成に対して、ＥＣＣ部３０４は１２８バイトである。他の実装形態において、ＥＣＣ部のサイズは、（例えば、ＭＬＣタイプのメモリ等のフラッシュデバイスのより多くの電流発生に対して）大きいサイズのデータ部の高い媒体エラー率に適合するよう（５００バイトの範囲等）高くてもよい。
【０１１９】
ＥＣＣ部３０４は、３０２ａ〜３０２ｈに格納されるデータのエラー訂正のために用いられるＥＣＣデータを格納するよう用いられる。エラー訂正コードは、各５１２バイトユニット３０２ａ〜３０２ｈに対して生成されてもよい。プログラム書き込みエラーまたはフラッシュ読み出しエラーは、エラー訂正コードを用いて検出されてもよい。ＥＣＣはビットエラーの先験的に予想される閾値を訂正することに有用である一方で、冗長データ記憶は、ビットエラーの数が先験的な閾値を超過した場合、または、メモリページ３００が含まれるフラッシュメモリダイ等の記憶装置の完全な故障により、データを復旧させるために用いられてもよい。
【０１２０】
実装形態によっては、データは、それぞれ１つ以上の連続するオフセットアドレスと共にメモリページ全体にわたって１つ以上の５１２バイト領域に格納されてもよい。データが格納される領域は、メモリのチャンクと呼ばれてもよい。例えば、単一のオフセットアドレスを採用することにより、５１２バイトのデータチャンクがメモリページ３００のユニット３０２ａ〜３０２ｈのうちの１つにわたって格納されることが可能となる。この場合のＲＡＩＤグループは、５１２バイトのデータチャンクの領域と共に一様に書き込まれてもよい。これは、例えば、７つのデータストライプと１つのパリティストライプが、ページ３００等の４ＫＢメモリページを実装する８つのフラッシュメモリダイスにわたって分散される場合であってもよい。この構成において、各ダイは、同じメモリページ内部の各ストライプに対して５１２バイト領域を認識する。
【０１２１】
他の実装形態によっては、一対のオフセットアドレス（例えば、オフセットアドレス６および７）は、１ＫＢデータチャンクがメモリページ３００の領域に格納されることを可能にするよう用いられてもよい。この場合のＲＡＩＤグループは、１ＫＢのデータチャンクの領域と共に一様に書き込まれてもよい。これは、３つのデータストライプと１つのパリティストライプが、メモリページ３００等の４ＫＢメモリページを有する４つのフラッシュメモリデバイスにわたって分散される場合であってもよい。この構成において、各ダイは、同じメモリページ内部の各ストライプに対して１ＫＢ領域を認識する。
【０１２２】
実装形態によっては、ホストシステム上で動作するソフトウェアドライバまたは埋め込みファームウェアは、データを蓄積し、パリティを計算し、データおよびパリティ情報をフラッシュメモリダイスにわたるストライプとして格納する。パリティ計算は、例えば、ホストソフトウェアドライバまたは埋め込みファームウェアの命令に基づいて、ホストプロセッサによって実行されてもよい。他の実装形態において、メモリカード２００上で動作するソフトウェアドライバは、データを蓄積し、マスタコントローラ２０６に対するコマンドを開始してもよい。マスタコントローラ２０６は次いで、パリティ情報を演算し、フラッシュメモリダイスにわたってデータおよびパリティストライプを格納することを担当することができる。
【０１２３】
メモリカード２００はいくつかのかかるＲＡＩＤグループを含んでもよい。例えば、パッケージ当たり８つのダイスを有する４８のパッケージを有するメモリカード２００の実装を参照して、メモリカード２００は、各グループに２つのパッケージ内に１６のダイスを有する２４のＲＡＩＤグループを含んでいてもよい。
【０１２４】
図４は、フラッシュメモリダイスのグループにわたって分散されるデータストライプにデータを冗長的に格納するフラッシュメモリダイスのグループ４００の実施例を示している。フラッシュメモリダイスは、メモリカード２００上に実装されてもよい。例えば、フラッシュメモリダイスは、メモリカード２００内でパッケージ化される２１２Ａ．．．２１２Ｎ、２１４Ａ．．．２１４Ｎ、および２３２Ａ．．．２３２Ｎであってもよい。従って、以下のセクションは、フラッシュメモリダイスのグループ４００を、システム１００内のカード２００によって実現されるものとして説明する。しかし、フラッシュメモリダイスのグループ４００はまた、他のメモリカードおよびシステムによって実現されてもよい。
【０１２５】
グループ４００は、ＲＡＩＤ認識のフラッシュメモリレイアウトの１つの実装形態を示している。グループ４００は、Ｎ個のフラッシュメモリダイス４０２Ａ、４０２Ｂ、および４０２Ｃ〜４０２Ｎを含み、集合的に４０２Ａ．．．４０２Ｎと称する。データのページは、集合的に４０４Ａ．．．４０４Ｍと称するＭ個のデータストライプ４０４Ａおよび４０４Ｂ〜４０４Ｍにおけるフラッシュメモリダイス４０２Ａ．．．４０２Ｎにわたって格納される。各ストライプは、データストライプ４０４Ａに対してはＡ０．．．ＡＮ、データストライプ４０４Ｂに対してはＢ０．．．ＢＮ、データストライプ４０４Ｍに対してはＭ０．．．ＭＮ等のＮ個のデータチャンクを含んでいる。パリティストライプ４０６もフラッシュメモリダイス４０２Ａ．．．４０２Ｎにわたって格納される。パリティストライプは、パリティチャンクＰＡ−ＰＭおよび単一のメタデータパリティチャンクＰＮから形成される。ＲＡＩＤストライプにおける１つ以上のデータチャンクは、共に集合してセグメント４０８等のフラッシュセグメントを形成する。
【０１２６】
種々の構成が図示の構成以外に用いられてもよいことは留意されたい。例えば、パリティストライプの様々な符号化は、複数のデータストライプにわたるパリティ情報をグループ化することに用いられてもよい。同様に、パリティ情報は、別々のパリティのみのストライプに格納される代わりに、個々のデータストライプの一部として格納されてもよい。
【０１２７】
フラッシュメモリダイス４０２Ａ．．．４０２Ｎは、フラッシュメモリダイス２１２Ａ．．．２１２Ｎ、または２１４Ａ．．．２１４Ｎ、または２３２Ａ．．．２３２Ｎと同じであってもよい。各データチャンクのサイズは、用いられるフラッシュメモリダイスの数、およびデータストライプの数によって決まってもよい。各データチャンクは、書き込みページ、または消去ブロック、またはいくつか他の好適なサイズのメモリユニットと同じサイズを有していてもよい。
【０１２８】
各データストライプに対して、対応するパリティチャンクは、フラッシュメモリダイスに格納されるデータストライプに含まれるデータチャンクのパリティを演算することによって生成される。例えば、ＰＡはデータストライプ４０４Ａに対するパリティチャンクであり；従って、ＰＡはデータチャンクＡ０．．．ＡＮに基づいて算出される。メタデータパリティチャンクＰＮは、先に生成された複数のパリティチャンクから算出されるパリティである。従って、ＰＮはパリティチャンクＰＡ．．．ＰＮに基づいて算出される。
【０１２９】
実装形態によっては、パリティストライプ内のパリティチャンクおよびメタデータパリティチャンクは、データがフラッシュメモリダイの故障、取り外し、交換に応じて復旧できるように、異なるフラッシュメモリダイ上に選択的に格納される。ストライプ内の各データチャンクはまた、データがフラッシュメモリダイの故障、取り外し、交換に応じて復旧できるように、異なるフラッシュメモリダイ上にも格納される。例えば、データストライプＡに対して、データチャンクＡ０はフラッシュメモリダイ４０２Ａに格納され、データチャンクＡ１はフラッシュメモリダイ４０Ｂに格納され、データチャンクＡ２はフラッシュメモリダイ４０２Ｃに格納され、データチャンクＡＮはフラッシュメモリダイ４０２Ｎに格納される。
【０１３０】
パリティチャンクおよびメタパリティチャンクは、それらの位置が既知であれば、フラッシュメモリダイス４０２Ａ．．．４０２Ｎにわたって任意に格納できる。例えば、図示のように、パリティストライプ４０６におけるＰＡチャンクはフラッシュメモリダイ４０２Ａに格納され、ＰＢパリティチャンクはフラッシュメモリダイ４０２Ｂに格納され、ＰＣパリティチャンクはフラッシュメモリダイ４０２Ｃに格納され、パリティストライプ４０６のメタパリティチャンクＰＮはフラッシュメモリダイ４０２Ｎに格納される。別の実装形態において、メタパリティチャンクＰＮはフラッシュメモリダイ４０２Ａに格納されてもよく、ＰＡパリティチャンクはフラッシュメモリダイ４０２Ｂに格納されてもよく、ＰＢパリティチャンクはフラッシュメモリダイ４０２Ｃに格納されてもよく、ＰＣパリティチャンクはフラッシュメモリダイ４０２Ｎに格納されてもよい。
【０１３１】
図示のように、Ｍ個のデータストライプおよび１つのパリティストライプは、各フラッシュ書き込みページに対してＮ個のフラッシュメモリダイス４０２Ａ〜４０２Ｎにわたって書き込まれる。データおよびパリティは、様々なフラッシュメモリダイスにおける複数の書き込みページ、消去ブロック、またはいくつか他の好適なメモリユニットにわたってストライピングされる。データストライプおよびパリティストライプは、各構成要素のフラッシュメモリダイに対して１つまたは２つの書き込みページ、消去ブロック、またはいくつか他の好適なメモリユニット内部の異なるオフセットに書き込まれる。パリティチャンクＰＡは、データストライプ４０４Ａのパリティを決定した結果である。パリティチャンクＰＢは、データストライプ４０４Ｂのパリティを決定した結果である。パリティチャンクＰＭは、データストライプ４０４Ｍのパリティを決定した結果である。ＰＮは、フラッシュメモリダイ４０２Ｎに格納されるパリティメタデータチャンクを表しており、その値は、パリティデータチャンクＰＡ〜ＰＭのパリティである。
【０１３２】
システムは、「データチャンク」サイズの相対的サイズおよびシステムへの影響に関する特定のデータチャンクサイズの使用に対応するよう構成されてもよい。データチャンクは、消去ブロック、またはメモリに関連するサイズのいくつか他の好適なユニットと同等のサイズを有していてもよい。例えば、Ａ０．．．ＡＮのそれぞれは、それぞれのフラッシュメモリダイ４０２Ａ．．．４０２Ｎ内の消去ブロックに対応してもよい。かかる場合において、ストライプ４０４Ａに関連付けられるデータは、それぞれ、フラッシュメモリダイス４０２Ａ〜４０２Ｎ内の消去ブロックＡ０〜ＡＮに書き込まれてもよい。
【０１３３】
上で説明したように、ストライピングにおいて、データは、消去ブロック、またはメモリに関連するサイズのいくつか他の好適なユニットの粒度で、異なるフラッシュメモリダイスに冗長的に格納されてもよい。例えば、消去ブロックと同等のサイズのデータチャンクにおける４０４Ａでストライピングされるデータは、フラッシュメモリダイスの異なるグループにおいて複製されてもよい。実装形態によっては、データは、先に説明したようなＸＯＲ符号化等のパリティ符号化を用いて冗長的に格納されてもよい。他の実装形態によっては、データはミラーリングを用いて複製されてもよい一方で、他の実装形態によっては、データは、パリティ符号化およびミラーリング、および／またはいくつか他の適切な機構のいくつか好適な組み合わせを用いて冗長的に格納されてもよい。
【０１３４】
１つの構成において、データストライプに対するデータチャンクは、８つのフラッシュメモリダイスに書き込まれてもよい。Ｉ／Ｏ操作に対する所定の時間でアクティブな各対の１つのダイを有する４つのペアリングに配置される８つのダイスを有するフラッシュメモリダイパッケージの実施例を参照して、上記の構成は、２１２等の１つのパッケージからの４つのアクティブな（Ｉ／Ｏ操作の見地から考慮される）ダイスと、２１４等の別のパッケージからの４つのアクティブなダイスとを含んでもよい。パッケージ内の４つのアクティブなダイスに書き込まれるデータチャンクは、各パッケージ内の他の４つの兄弟ダイスに複製されてもよい。このように、データは、ＲＡＩＤのような信頼性を提供するようストライピングされ、複製されてもよい。実装形態によっては、スレーブコントローラの構成およびメモリダイスの数に対応するチャンネル等の要因によって、他の構成が用いられてもよい。例えば、データチャンクは、パリティ符号化と共に８つの異なるパッケージ内の８つの異なるダイスにわたってストライピングされて、万が一、いずれか単一のダイまたはパッケージの損失が発生した場合に、データチャンクを復元する能力を提供してもよい。
【０１３５】
上記の方法でデータを格納し、複製することに関わるフラッシュメモリダイスのグループは、ＲＡＩＤグループを構成している。先に示したように、簡潔にＲＡＩＤとも称されるＲＡＩＤグループは、フラッシュメモリダイス４０２Ａ．．．４０２Ｎに格納されるデータに対してデータ信頼性を提供する。この文脈において、ＲＡＩＤグループは、ＲＡＩＤグループ内の各フラッシュメモリダイに対してオフセットされる同じメモリアドレスにおいて整合される消去ブロックのコレクションと関連付けられる。上記の実施例において、ＲＡＩＤグループは、２つのパッケージにわたって１６のフラッシュメモリダイスを構成している。ＲＡＩＤグループは８つの「幅」を有しており、すなわち、データストライプ内のデータチャンクが、８つのフラッシュメモリダイスにわたって格納され、８つの他のフラッシュメモリダイスに複製されている。
【０１３６】
セグメント４０８は、ＲＡＩＤグループの各フラッシュメモリダイ内に１つ以上の消去ブロックを含んでいる。例えば、データチャンクＡ０．．．ＡＮのそれぞれは、先に検討したように消去ブロックであってもよい。セグメント４０８は、図示のように消去ブロックＡ０．．．ＡＮから構成されてもよい。代替構成において、セグメント４０８は、ダイ４０２Ａ内のＡ０およびＢ０、ダイ４０２Ｂ内のＡ１およびＢ１等のようなフラッシュメモリダイ当たり２つの消去ブロックから構成されてもよい。データは、セグメント順にフラッシュメモリダイス４０２Ａ．．．４０２Ｎに順次書き込まれる。データは、セグメント内部の消去ブロックに含まれる書き込みページの粒度でセグメントに書き込まれる。従って、セグメント４０８内の消去ブロックに対応する書き込みページは、次に上位のセグメント内の消去ブロックに対応する書き込みページに書き込む前に、最初に充填される。
【０１３７】
データをセグメントに書き込んでいる間、フラッシュ管理レイヤは、アクティブセグメント、すなわち、現在書き込まれているセグメントのトラックを維持する。実装形態によっては、フラッシュ管理レイヤはまた、現在書き込まれているアクティブセグメント内部の書き込みページおよび／または消去ブロックのトラックも維持する。
【０１３８】
パッシブサーバによる同期ミラーリング操作を管理するために構成される上位ソフトウェアドライバは、フラッシュ管理レイヤに特定の時点でアクティブセグメントに関する情報を問い合わせる。クエリを受信すると、フラッシュ管理レイヤは、ごく最近充填されたセグメントのシーケンス番号と、ごく最近書き込まれたセグメント内部のメモリブロックの番号とを決定する。フラッシュ管理レイヤは情報を上位ソフトウェアドライバに送信する。上位ソフトウェアドライバは順に、セグメントのシーケンス番号およびセグメント内部のメモリブロックを、パッシブサーバにおける上位ソフトウェアドライバによって保持されるデータ構造である「マーカ」内の情報を格納するパッシブサーバに転送する。実装形態によっては、アクティブサーバは、リモートエンドが更新された情報を受信したことをアクティブサーバに示す、パッシブサーバからの確認応答を受信してもよい。
【０１３９】
図５は、セグメントシーケンス番号を用いて同期ミラーリングを実行するメモリサーバ５００の実施例を示している。メモリサーバ５００は、同期ミラーリング設定においてアクティブサーバまたはパッシブサーバのいずれかであってもよい。メモリサーバ５００は、記憶素子として、システム１００内に含まれるメモリカード２００と類似であってもよいメモリカード５０１を含んでいる。メモリカード５０１は、フラッシュメモリダイス５０４、５０６、５０Ｊ、および５０Ｋ（「Ｊ」および「Ｋ」は整数）を、スレーブコントローラ５１４、５１６、５１Ｊ、および５１Ｋを介してそれぞれ管理するマスタコントローラ５０２を含んでいる。フラッシュメモリダイ５０４は、５０４ａ、５０４ｂ、５０４ｃ、５０４ｘ、５０４ｙ、および５０４ｚ等の複数の消去ブロックを含んでいる。同様に、フラッシュメモリダイ５０６は、５０６ａ、５０６ｂ、５０６ｃ、５０６ｘ、５０６ｙ、および５０６ｚ等の複数の消去ブロックを含み；フラッシュメモリダイ５０Ｊは、５０Ｊａ、５０Ｊｂ、５０Ｊｃ、５０Ｊｘ、５０Ｊｙ、および５０Ｊｚ等の複数の消去ブロックを含み；フラッシュメモリダイ５０Ｋは、５０Ｋａ、５０Ｋｂ、５０Ｋｃ、５０Ｋｘ、５０Ｋｙ、および５０Ｋｚ等の複数の消去ブロックを含んでいる。
【０１４０】
フラッシュメモリダイス５０４、５０６、５０Ｊ、および５０Ｋは、特に、セグメント５２２、５２４、および５２Ｍを含むＲＡＩＤストライプの一部である。各フラッシュメモリダイにおける消去ブロックは、様々なセグメントに分割される。例えば、フラッシュメモリダイ５０４において、消去ブロック５０４ａおよび５０４ｘはセグメント５２２内にあり、消去ブロック５０４ｂおよび５０４ｙはセグメント５２４内にあり、消去ブロック５０４ｃおよび５０４ｚはセグメント５２Ｍ内にある。各セグメントに対して、メモリカード５０１は、セグメントのシーケンス番号、および最近書き込まれたセグメント内部の消去ブロックを格納する。実装形態によっては、メモリカード５０１は、情報をフラッシュメモリダイスに格納してもよい。例えば、セグメント５２２に対するセグメントシーケンス番号は、フラッシュメモリダイ５０４において５２２ａとして格納されてもよい一方で、セグメント５２４に対するセグメントシーケンス番号は、フラッシュメモリダイ５０６において５２４ａとして格納されてもよい。他の実装形態によっては、メモリカード５０１は、セグメント情報をフラッシュメモリダイスから切り離して、例えば、オンボードＲＡＭ内に格納してもよい。
【０１４１】
メモリカード５０１はフラッシュトランスレーションテーブル５３０を含んでいる。フラッシュトランスレーションテーブル５３０は、論理ブロックアドレス（ＬＢＡ）を、データが格納される１つ以上のフラッシュメモリダイス内の物理的位置を指す物理ブロック番号（ＰＢＮ）にマッピングする。実装形態によっては、トランスレーションテーブルは、フラッシュメモリダイス５０４．．．５０Ｋとは異なるダイナミックＲＡＭ（ＤＲＡＭ）構造であってもよい。しかし、他の実装形態において、トランスレーションテーブルは、１つ以上のフラッシュメモリダイスの専用部に、またはいくつか他の好適な位置に格納されてもよい。
【０１４２】
マスタコントローラ５０２、スレーブコントローラ５１４、５１６、５１Ｊ、および５１Ｋ、およびフラッシュトランスレーションテーブル５３０は共に、メモリカード５０１のためのフラッシュ管理レイヤを構成する。メモリサーバ５００が同期ミラーリング設定においてパッシブサーバである場合の実装形態において、メモリカード５０１は、マーカＡ５４２およびマーカＢ５４４等のマーカを用いてアクティブサーバから受信されるアクティブセグメントに関する情報を格納する。マーカは別のメモリ構造５４０、例えば、ＲＡＭに格納されてもよい。加えて、または代替として、マーカはフラッシュメモリダイスに格納されてもよい。
【０１４３】
メモリサーバ５００は、メモリサーバ５００に関連する記憶素子、例えば、メモリカード５０１に対するミラーリング操作を管理する上位ソフトウェアドライバである同期ミラーリングモジュール５５０を含んでいる。同期ミラーリングモジュール５５０は、メモリカード５０１の外側で、メモリサーバ５００における上位ソフトウェアの一部として実装されてもよい。
【０１４４】
図５は３つのセグメント５２２、５２４、および５２Ｍを示しているが、メモリカード５０１内のセグメントの総数は、図示の３つよりも多い異なる数であってもよい。さらに、セグメントは、フラッシュメモリダイス５０４、５０６、５０Ｊ、および５０Ｋの一部から成るように示されているが、セグメントは、不図示の他のフラッシュメモリダイスの一部を含んでいてもよい。また、セグメントにおけるフラッシュメモリダイ当たりの消去ブロックの数は、図示の数とは異なっていてもよい。例えば、実装形態によっては、各セグメントは、フラッシュメモリダイ当たり１つのみの消去ブロックを含んでいてもよい。他の実装形態によっては、様々なセグメントは、様々な数の消去ブロックを含んでいてもよい。
【０１４５】
フラッシュメモリダイス５０４、５０６、５０Ｊ、および５０Ｋは同じパッケージに属していてもよく、または、それらは異なるパッケージに属していてもよい。先に説明したように、実装形態によっては、スレーブコントローラ５１４、５１６、５１Ｊ、および５１Ｋは、それぞれフラッシュメモリダイス５０４、５０６、５０Ｊ、および５０Ｋに関連するパッケージに実装され、マスタコントローラ５０２と各フラッシュメモリダイスとの間に結合されてもよい。他の実装形態によっては、スレーブコントローラ５１４、５１６、５１Ｊ、および５１Ｋは、ベースボード５０１に実装され、マスタコントローラ５０２と関連するパッケージ内のフラッシュメモリダイスとの間に結合される。さらに他の実装形態において、スレーブコントローラ５１４、５１６、５１Ｊ、および５１Ｋは、マスタコントローラ５０２と共に集積回路パッケージ内に実装され、マスタコントローラ５０２とフラッシュメモリダイスとの間に結合される。
【０１４６】
先に説明したように、実装形態によっては、フラッシュ管理レイヤは、ログに書き込むのと同様の方法で、新しいデータ項目をフラッシュ媒体ダイス５０４、５０６、５０Ｊ、および５０Ｋに書き込む。フラッシュ管理レイヤは、メモリカード５０１上の各フラッシュメモリダイ上のすべての記憶を消去ブロックの粒度で別々のユニットに切り出し、ＲＡＩＤグループ内の消去ブロックのコレクションを順次セグメントに物理的に編成する。例えば、幅８のＲＡＩＤグループ（すなわち、ＲＡＩＤグループ内に８つのフラッシュメモリダイスが存在する）および２メガバイト（ＭＢ）の消去ブロックサイズ（例えば、５０４ａまたは５０６ａ）に対して、セグメント（例えば、５２２または５２４）のサイズは、２つの消去ブロック×幅８×２ＭＢ／消去ブロック、すなわち、３２ＭＢであってもよい。従って、テラバイトのオーダーであってもよいメモリカード５０１内のすべての記憶は、数十メガバイトのオーダーである複数のセグメントに編成されてもよい。
【０１４７】
フラッシュ管理レイヤが上位アプリケーションまたはオペレーティングシステムから書き込み操作を受信した場合、それは、現在アクティブなセグメントを特定し、書き込み操作に関連するデータをアクティブセグメント内の次に利用可能な位置に書き込み、ＬＢＡ
Ｘ（例えば、消去ブロック５０４ａ内の書き込みページに対応する）がここでアクティブセグメントＺ（例えば、セグメント５２２）に対応する物理的位置Ｙ（例えば、フラッシュメモリダイ５０４内）に書き込まれたことをフラッシュトランスレーションテーブルに入力する。従って、フラッシュ管理レイヤは、アプリケーションデータでログ方式によりセグメントを充填し、ログ方式でフラッシュトランスレーションテーブルにエントリを充填する。書き込み１の後に書き込み２が続き、その後に書き込み３が続くような連続した３つの書き込みを考えると、書き込み１、２、および３に対するデータはログ方式でセグメント内に出現し、書き込み１、２、および３に対するトランスレーションエントリはログ方式でフラッシュトランスレーションテーブル内に出現する。
【０１４８】
現在のセグメントにマッピングする物理フラッシュメモリダイス内の新規データを書き込むために、スペースがそれ以上利用できない場合、現在のセグメントは、データで満たされていると言われる。フラッシュ管理レイヤは、別のセグメントにアクティブであるとマークを付け、次いで、前のセクションで説明したように同じ操作を効果的に実行する。実装形態によっては、効率的な結果のために２つ以上のアクティブセグメントがあってもよい。フラッシュ管理レイヤは、書き込みリクエストをアクティブセグメントのうちの１つに経路設定する。
【０１４９】
セグメントがデータを格納するためにアクティブにされると、フラッシュ管理レイヤはシーケンス番号をセグメントに関連付ける。実装形態によっては、シーケンス番号は、現在アクティブとなったセグメントの直前に書き込まれたセグメントの後の次に高いシーケンス番号である。他の実装形態によっては、シーケンス番号は、セグメントに関連付けられたシーケンス番号が、現在アクティブとなったセグメントの直前に書き込まれたセグメントの後の次に低いシーケンス番号であるような降順となっている。
【０１５０】
実装形態によっては、セグメントのシーケンス番号は、対応するセグメントに関連付けられて、物理フラッシュメモリ内に記録されてもよい。例えば、セグメント５２２に対するシーケンス番号は、フラッシュメモリダイ５０４の一部５２２ａに記録されてもよい一方で、セグメント５２４に対するシーケンス番号は、フラッシュメモリダイ５０６の一部５２４ａに記録されてもよい。他の実装形態によっては、セグメントのシーケンス番号は、ＲＡＭ等の、フラッシュメモリダイス以外の別のメモリ内に記録されてもよい。代替として、セグメントのシーケンス番号は、フラッシュメモリダイス（例えば、５２２ａまたは５２４ａ）内および別のＲＡＭ内の両方に記録されてもよい。
【０１５１】
実装形態によっては、アクティブセグメントに対して、セグメントのシーケンス番号と共に、フラッシュ管理レイヤは、物理フラッシュメモリダイス（例えば、５２２ａまたは５２４ａ）、または別のメモリ（例えば、ＲＡＭ）、または両方におけるアクティブセグメント内部の次に利用可能なフラッシュメモリブロック（例えば、書き込みページ）のシーケンス番号を記録する。セグメント内部のフラッシュメモリブロックのシーケンス番号は、セグメント内部の第１のメモリブロックからのオフセットとして記録されてもよい。例えば、セグメントに含まれる消去ブロック内部に４０９６の書き込みページがある場合、書き込みページは、順次、０〜４０９５にマークを付けられてもよく、０はセグメントにおける最初の書き込みページの番号である。
【０１５２】
フラッシュ管理レイヤは、アクティブセグメントが非アクティブセグメントは別として追跡されてもよいように、情報をアクティブセグメントに別々に記録する。例えば、フラッシュ管理レイヤは、アクティブセグメントのシーケンス番号を格納するＤＲＡＭ内に記録を保持してもよい。従って、新しいセグメントがアクティブになった場合、アクティブセグメントに対するＤＲＡＭレコードに格納されるシーケンス番号は更新される。
【０１５３】
同期ミラーリングモジュール５５０は、フラッシュ管理レイヤにその時点でのアクティブセグメントに関する情報を問い合わせる。クエリに応じて、フラッシュ管理レイヤは、アクティブセグメントのシーケンス番号、およびアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号を指すアクティブセグメント内部のオフセットを送信してもよい。
【０１５４】
同期ミラーリングモジュール５５０は、アクティブセグメントのシーケンス番号をアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号と共に同期ミラーリング設定におけるパッシブサーバに転送する。パッシブサーバは、マーカと呼ばれる、データ構造内のアクティブエンドから受信される情報を格納する。例えば、メモリサーバ５００がパッシブサーバであれば、メモリサーバ５００は、アクティブセグメントのシーケンス番号およびアクティブエンドにおけるアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号に関する情報を提供するマーカ５４２を格納する。図示のように、マーカ５４２は、アクティブサーバ上のアクティブセグメントのシーケンス番号およびブロック番号を含んでいる。アクティブサーバ上に２つのアクティブセグメントが同時にあってもよく；従って、マーカ５４２は、両方のアクティブセグメントのシーケンス番号と、各アクティブセグメントのための、セグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号とに関する情報を格納してもよい。
【０１５５】
実装形態によっては、パッシブサーバは２つ以上のマーカを格納してもよい。例えば、メモリサーバ５００がパッシブサーバであれば、メモリサーバ５００は、図示のような２つのマーカ５４２および５４４を格納してもよい。これは、以下のセクションで説明する２レベルのマーカスキームにおいて有用である場合がある。かかる実装形態において、２つのマーカ５４２および５４４のそれぞれは、アクティブセグメントすべてのシーケンス番号と、各アクティブセグメントのための、各マーカに関連付けられる書き込みフェーズに対応するアクティブサーバにおけるアクティブセグメント内部で次に利用可能なフラッシュメモリブロックのシーケンス番号とに関する情報を提供する。
【０１５６】
マーカは、フラッシュ管理レイヤにおいて関連するメタデータと見なされてもよい。実装形態によっては、マーカは、ＲＡＭ５４０内等の、物理フラッシュメモリとは別のメモリ内に格納されてもよい。他の実装形態によっては、マーカは、例えば、フラッシュメモリダイス５０４、５０６、５０Ｊ、または５０Ｋの既知の部分におけるデータ構造として、物理フラッシュメモリ内に格納されてもよい。他の実装形態において、マーカは、物理フラッシュメモリ内およびＲＡＭ等の別のメモリ内の両方に格納されてもよい。
【０１５７】
マーカ５４２および／または５４４は、アクティブサーバ上の同期ミラーリングモジュールがアクティブサーバ上のアクティブセグメントに関する更新情報を送信する場合、パッシブサーバ上で定期的に更新される。実装形態によっては、マーカはパッシブサーバ上の同期ミラーリングモジュールによって管理される一方で、他の実装形態によっては、マーカはパッシブサーバ上のフラッシュ管理レイヤによって管理される。他の実装形態において、マーカはパッシブサーバ上の同期ミラーリングモジュールおよびフラッシュ管理レイヤの好適な組み合わせによって管理される。
【０１５８】
マーカは、位置を論理ログに記録することに相当する。論理ログ内の２つの位置を考えると、それら２つの位置の間でログに書き込まれたエントリは決定できる。従って、２つのマーカを考えると、同期ミラーリングモジュールは、どちらが、２つのマーカの間に生じた期間内で書き込まれたフラッシュメモリブロック(例えば、書き込みページ)なのかを特定できる。書き込まれた物理フラッシュメモリブロックを認識しながら、同期ミラーリングモジュールは、フラッシュ管理レイヤに決定された物理ブロックに対応する論理メモリブロックに関する情報を問い合わせることができる。
【０１５９】
フラッシュ管理レイヤは、フラッシュトランスレーションテーブル５３０を用いて書き込まれた論理メモリブロックと物理メモリブロックとの間のマッピングを維持する。マーカからの情報に基づいて、同期ミラーリングモジュールは、反対の質問、すなわち、書き込まれた物理フラッシュブロックを考えて、物理フラッシュブロックが対応する論理メモリブロックは何か、を尋ねる。
【０１６０】
実装形態によっては、アクティブサーバにおけるアクティブセグメントに関する情報およびパッシブサーバに格納されたマーカを用いて、障害回復ログおよび非複製書き込みログの機能が再現されてもよい。アクティブサーバ上の同期ミラーリングモジュール５５０は、アクティブサーバ上のフラッシュ管理レイヤに、現在アクティブなセグメントのシーケンス番号およびアクティブセグメント内部で次に利用可能なメモリブロックに対するオフセットに関して定期的に問い合わせる（例えば、数秒ごとに）。同期ミラーリングモジュール５５０は、同期ミラーリング設定における接続の他端にあるパッシブサーバに情報を送信する。パッシブサーバは、受信した情報をアクティブサーバから受信した最新のマーカ値として記録する。
【０１６１】
同期ミラーリングシステムがクラッシュから復旧した場合、アクティブおよびパッシブサーバは、互いから認識された最新のマーカに関して合意に達する。実装形態によっては、パッシブサーバ上の同期ミラーリングモジュールは、アクティブサーバに、パッシブサーバがクラッシュ前に受信した最新のマーカを送信する。アクティブサーバ上の同期ミラーリングモジュールは、アクティブサーバ上のフラッシュ管理レイヤにアクティブセグメントのシーケンス番号を問い合わせる。
【０１６２】
同期ミラーリングモジュールは、フラッシュ管理レイヤから取得したアクティブセグメントのシーケンス番号とパッシブサーバから受信したマーカに示されるセグメントのシーケンス番号とを比較する。シーケンス番号の間の相違は、パッシブサーバにおいて複製されていない、アクティブサーバにおいて行われたであろうすべての書き込みに対応する。従って、アクティブサーバは、障害回復ログ情報を効果的に有している。
【０１６３】
アクティブサーバ上の同期ミラーリングモジュールは、上で特定した書き込みに対応する物理フラッシュブロックが引き続き有効な論理ブロックを表すかを確認するよう、フラッシュ管理レイヤに問い合わせる。すなわち、物理フラッシュブロックは、対応する論理ブロックによって正確にマッピングされたデータを含んでいる。このチェックは、例えば、物理フラッシュブロックが消去され、および／または、新しいデータがそれに書き込まれたが、以前に物理ブロックにマッピングされた論理ブロックが更新されなかった状況が生じてから、実行される。
【０１６４】
同期ミラーリングモジュールが、特定した書き込みに対応する物理フラッシュブロックが引き続き有効な論理ブロックを表すかを確認する場合は、同期ミラーリングモジュールは、書き込みと、特定した書き込みに対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。その一方で、同期ミラーリングモジュールが、特定した書き込みに対応する１つ以上の物理フラッシュブロックがもはや有効な論理ブロックを表していないと判断すれば、同期ミラーリングモジュールは、関連する書き込み、または不正確な論理メモリブロックを送信しない。かかる場合において、同期ミラーリングモジュールは、残りの書き込みと、（引き続き有効な）対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。
【０１６５】
アクティブサーバ上の同期ミラーリングモジュールがアクティブセグメントのシーケンス番号情報をパッシブサーバに送信する場合、システムは、情報が送信される前に開始されたが、情報が送信された後に完了した書き込み操作が無いことを保証しなければならない。これは、マーカが同期デバイスとして用いられるため、マーカの両側に出現する操作ではあり得ないという点で、正確さが必要とされる「書き込みバリア」と見なされてもよい。
【０１６６】
アクティブサーバ上の同期ミラーリングモジュールがフラッシュ管理レイヤにアクティブセグメントに関する情報を問い合わせる前に発せられたが、２つのユーザ書き込みは、情報がフラッシュ管理レイヤから送信される時間までに完了しなかった２つのユーザ書き込みを考察する。２つのユーザ書き込みおよびアクティブセグメント情報がパッシブサーバに通信される順序に関して、順序はアクティブサーバ上の順序と異なることは、可能であってもよい。書き込みのうちの１つは、アクティブセグメント情報がパッシブノード上で受信される前に実際に生じる一方で、他の書き込みはその後に生じてもよい。アクティブサーバおよびパッシブサーバ上の順序において混乱が生じる可能性があるため、同期ミラーリング設定は正しくない場合があるが、その理由は、アクティブサーバ上の同期ミラーリングモジュールが、実際には、書き込みのうちの１つのみが記録されたのだが、両方の書き込みをパッシブサーバ上に記録されたものとして、誤って解釈する可能性があるためである。パッシブサーバによって格納されたマーカを用いて復旧を行っている間、アクティブサーバ上の第２の書き込みは、アクティブセグメント情報が取得される前に実行されたため、復旧プロセスの一部として、第２の書き込みはパッシブサーバに発送されない。同期ミラーリングシステムは、書き込み操作が失敗したことを認識しない。従って、正しくなるようマーカベースのスキームを用いる同期ミラーリングに対して、書き込み操作は、マーカ情報を取得すると同時に生じた書き込みにより何が起きたかの混乱を取り除くために、アクティブセグメントに関する取得されたマーカ情報の前後で厳密に命令されるべきである。
【０１６７】
前のセクションで説明した実装形態において、書き込みバリアは、シーケンス番号情報が制御され、送信されている場合に、Ｉ／Ｏ操作を停止することによって達成されてもよい。同期ミラーリングシステムは、システムにおけるすべての書き込み操作が、アクティブセグメントに関する情報がフラッシュ管理レイヤから取得される前に完了したことを保証する。新しい書き込みは、マーカ情報が取得され、次いで、書き込み操作が再開されるまで、システムにおいて許可されない。しかし、これは、Ｉ／Ｏ操作を実行する文脈において、システム内に「一時的障害」を生じる場合がある。情報がフラッシュ管理レイヤによって帰ってくるまで、両方を停止し、書き込みが完了するまで待機し、新しい書き込みが進行しないよう防ぐことは、応答時間を増加する場合がある。例えば、アクティブセグメントに対応する情報が２秒ごとに収集されると、Ｉ／Ｏ操作が実行されない場合に数ミリ秒の時間の価値が存在する。
【０１６８】
実装形態によっては、書き込みバリアは、一時的障害を招くことなく、赤黒マーカスキームとして知られてもよい２レベルマーカスキームを用いて達成されてもよい。かかる実装形態において、アクティブサーバ上の書き込み操作は段階的に実行され、アクティブサーバ上の書き込みトランザクションは、例示を目的として、赤フェーズ（または赤書き込みフェーズ）および黒フェーズ（または黒書き込みフェーズ）と呼ばれてもよい２種類のうちの１つに分類される。
【０１６９】
書き込み操作は、アクティブサーバ上で、赤フェーズの後に黒フェーズが続き、その後に赤フェーズが続く等の順番で実行されてもよい。赤フェーズにおいて書き込み操作を実行している間、フラッシュ管理レイヤは、最後の黒フェーズにおいてアクティブであったセグメントに対する情報を取得する。黒フェーズの間に書き込み操作を実行している間、フラッシュ管理レイヤは、最後の赤フェーズに対応するアクティブグメントに関する情報を取得する。従って、同期ミラーリングシステムは、セグメント情報検索およびシステムに入ってくる新規書き込み操作をオーバーラップさせる。
【０１７０】
実装形態によっては、書き込み操作が黒フェーズにおいて実行される場合、フラッシュ管理レイヤは、黒フェーズにおいてアクティブなセグメントのシーケンス番号（および、書き込まれるアクティブセグメント内部のメモリブロックのシーケンス番号）を取得し、格納されているシーケンス番号が黒フェーズにおけるアクティブセグメントに対応していることの表示と共に、アクティブセグメントに対するＤＲＡＭレコードにそれらを格納する。同様に、赤フェーズにおける書き込み操作中に、フラッシュ管理レイヤは、格納されているシーケンス番号が赤フェーズにおけるアクティブセグメントに対応していることの表示と共に、ＤＲＡＭレコードにアクティブセグメントのシーケンス番号を格納してもよい。例えば、メモリサーバ５００がアクティブサーバを表していれば、セグメント５２２は、黒フェーズにおけるアクティブセグメントであってもよい。従って、フラッシュ管理レイヤは、セグメント５２２と、今しがた書き込まれたセグメント５２２内部のメモリブロックとのシーケンス番号をＤＲＡＭレコードに格納し、シーケンス番号が黒フェーズに関連付けられていることを示す。次の赤フェーズにおいて、両方のセグメント５２２および５２４が書き込まれてもよい。フラッシュ管理レイヤは、セグメント５２２および５２４のシーケンス番号を（各セグメント内部のメモリブロックのシーケンス番号と共に）ＤＲＡＭレコードに格納し、シーケンス番号が赤フェーズに関連付けられていることを示す。
【０１７１】
実装形態によっては、フラッシュ管理レイヤは、異なるフェーズに対応する別々のＤＲＡＭレコードを保持してもよい。かかる実装形態において、第１のＤＲＡＭレコードは、黒フェーズにおけるアクティブセグメントに対応するシーケンス番号を格納するよう用いられてもよい一方で、第２のＤＲＡＭレコードは、赤フェーズにおけるアクティブセグメントに対応するシーケンス番号を格納するよう用いられてもよい等である。
【０１７２】
フラッシュ管理レイヤによって取得されるアクティブセグメントに関する情報によって提供される特性は、情報が示す最後のフェーズまで正確であるという点である。情報は、情報が取得されている間に実行される現在の書き込み操作に対して正確ではない場合がある。
【０１７３】
黒フェーズに対応するアクティブセグメントに関する情報が取得されている間に、赤フェーズに対応する書き込み操作が実行されている場合、赤フェーズ書き込み操作は、取得されるべき黒フェーズアクティブセグメント情報に対して停止する必要はない。赤フェーズに対応する書き込み操作は継続されてもよい。しかし、黒フェーズに対応する先の書き込み操作のすべては、黒フェーズアクティブセグメント情報が取得される前に完了していなければならず、黒フェーズにおける新規書き込み操作は、黒フェーズアクティブセグメント情報の検索が完了するまで開始できない。
【０１７４】
同期ミラーリング操作のパイプライン化は、書き込み操作を分類し、異なる時間に異なるフェーズでアクティブセグメントに書き込むことによって達成される。書き込みバリアは、２つのマーカを処理し、書き込みをフェーズに分割し、最後に完了したフェーズに対応するセグメントおよびブロックシーケンス番号を取得することによって対処される。
【０１７５】
２レベルマーカスキームでパッシブサーバに送信される情報は、最後の書き込みフェーズにおいて書き込まれたアクティブセグメントのすべてに対応するシーケンス番号を含んでいることに留意されたい。セグメントは、現在の書き込みフェーズにおいてもアクティブであるいくつかのセグメントを含んでもよい。
【０１７６】
パッシブサーバにおいて、アクティブサーバから取得されたシーケンス番号情報は、マーカとして格納される。２レベルマーカスキームを利用する実装形態において、パッシブサーバは複数のマーカを格納してもよい。例えば、サーバ５００は、パッシブサーバを表すよう取得される場合、マーカ５４２および５４４を格納してもよい。マーカ５４２は、黒フェーズにおけるアクティブセグメントに対応するシーケンス番号を含んでもよい一方で、マーカ５４４は、赤フェーズにおけるアクティブセグメントに対応するシーケンス番号を含んでもよい。
【０１７７】
実装形態によっては、パッシブサーバは、マーカに関連する書き込みフェーズを特定する情報を格納してもよい。上で説明した実施例において、パッシブサーバは、マーカ５４２を黒フェーズに関連するものとして、および、マーカ５４４を赤フェーズに関連するものとして特定する情報を格納してもよい。
【０１７８】
２レベルマーカスキームの実装形態によっては、パッシブサーバがクラッシュ復旧中にマーカをアクティブサーバに送信すると、パッシブサーバは、アクティブサーバから受信した情報に対応する最後から２番目のマーカを送信する。これは、パッシブサーバにおける最後から２番目のマーカがアクティブサーバにおける以前の書き込みフェーズに対応するため、先に説明した書き込みバリア問題により何のデータも部分的な再同期中に失われていないことを保証するよう行われる。
【０１７９】
例えば、アクティブサーバは、赤書き込みフェーズがアクティブである時に、黒書き込みフェーズにおいてアクティブセグメントに関連付けられたシーケンス番号を送信する。シーケンス番号は、パッシブサーバにおいてマーカ５４２に格納される。その後の時間において、アクティブサーバは、パッシブサーバにおいてマーカ５４４に格納される、赤書き込みフェーズにおいてアクティブセグメントに関連付けられたシーケンス番号を送信する。パッシブサーバは、マーカ５４４を格納した後、不具合を被る。従って、パッシブサーバが再度稼働状態になった場合、パッシブサーバにおいて格納された最後のマーカは５４４である一方で、最後から２番目のマーカは５４２である。復旧操作中に、パッシブサーバは、マーカ５４２に格納されたシーケンス番号をアクティブサーバに送信する。
【０１８０】
２レベルマーカの実装形態において、クラッシュ復旧後の部分的な再同期の間にシーケンス番号をアクティブサーバに送信する場合、パッシブサーバはまた、関連する書き込みフェーズを指定してもよい。かかる実装形態において、アクティブサーバ内の同期ミラーリングモジュール５５０は、パッシブサーバから受信されるマーカ情報に基づくアクティブセグメントに対して、フラッシュ管理レイヤにクエリを送信する場合、アクティブセグメント情報がシークされることに対応する書き込みフェーズを指定してもよい。フラッシュ管理レイヤは、従って、問い合わせられた書き込みフェーズに対応するごく最近のアクティブセグメントのシーケンス番号と共に応答する。
【０１８１】
アクティブサーバ内の同期ミラーリングモジュール５５０は、フラッシュ管理レイヤから取得したごく最近のアクティブセグメントのシーケンス番号を、パッシブサーバから受信したマーカに含まれるシーケンス番号と比較する。フラッシュ管理レイヤから戻ってきたシーケンス番号と、パッシブサーバからのマーカ内で言及されたシーケンス番号との間の相違は、パッシブサーバからのマーカ内で言及されたシーケンス番号に対応するセグメントがパッシブサーバに送信されたために、アクティブサーバで実行された書き込み操作を示している。決定された書き込み操作は、クラッシュによりパッシブサーバで実行されなくてもよい。上記は、時間的に遅く書き込まれたセグメントに対するシーケンス番号と比較して、シーケンス番号が時間的に遅く書き込まれたセグメントに対して高いことを想定している。
【０１８２】
クラッシュによりパッシブサーバに書き込まれていない場合もある書き込み操作が決定されると、同期ミラーリングモジュール５５０は、上記で特定された書き込み操作に対応する物理フラッシュブロックが、先で説明したように、引き続き有効な論理ブロックを表すのかを確認するよう、フラッシュ管理レイヤに問い合わせる。
【０１８３】
同期ミラーリングモジュール５５０が、特定した書き込みに対応する物理フラッシュブロックが引き続き有効な論理ブロックを表すかを確認する場合は、同期ミラーリングモジュールは、書き込みと、特定した書き込みに対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。その一方で、同期ミラーリングモジュール５５０が、特定した書き込みに対応する１つ以上の物理フラッシュブロックがもはや有効な論理ブロックを表していないと判断すれば、同期ミラーリングモジュールは、関連する書き込み、または不正確な論理メモリブロックを送信しない。かかる場合において、同期ミラーリングモジュールは、残りの書き込みと、（引き続き有効な）対応する論理メモリブロックとを取得し、それらをパッシブサーバに送信する。
【０１８４】
実装形態によっては、アクティブサーバが、マーカに関連する書き込みフェーズを示すマーカをパッシブサーバから受信する場合に、アクティブサーバは、指示された書き込みフェーズに対応する新規の書き込み操作を実行していてもよいことは、留意すべきである。例えば、アクティブサーバは、パッシブサーバマーカ５４２から、マーカ５４２に含まれるシーケンス番号が黒書き込みフェーズ中に書き込まれたことを示す情報を受信する。アクティブサーバがマーカ５４２を受信した時点で、アクティブサーバは、黒書き込みフェーズの新しいサイクルで新規書き込み操作を実行していてもよい。
【０１８５】
他の実装形態によっては、アクティブサーバが、マーカに関連する書き込みフェーズを示すマーカをパッシブサーバから受信する場合に、アクティブサーバは、異なる書き込みフェーズに対応する新規の書き込み操作を実行していてもよい。例えば、アクティブサーバは、パッシブサーバマーカ５４２から、マーカ５４２に含まれるシーケンス番号が黒書き込みフェーズ中に書き込まれたことを示す情報を受信する。アクティブサーバがマーカ５４２を受信した時点で、アクティブサーバは、赤書き込みフェーズのサイクルで新規書き込み操作を実行していてもよい。
【０１８６】
２レベルマーカスキームは、赤および黒フェーズを参照して前のセクションで説明されているが、書き込みフェーズによる色は単に例示のためであり、実装形態の機能性とは何の関係も無いことは言うまでもない。他の色、または色とは異なるいくつか他の好適な特定情報は、説明した実装形態を変更することなく、異なるカテゴリおよびフェーズに割り当てられてもよい。
【０１８７】
さらに、前のセクションは２レベルマーカスキームの概念を説明しているが、実装形態は、上記で示した２レベルとは異なるマルチレベルマーカスキームを採用するシステムに対して等しく適用可能であってもよい。かかる場合において、各書き込みフェーズに関連する異なるマーカを有する複数の書き込みフェーズがあってもよい。
【０１８８】
実装形態によっては、同期ミラーリングシステムは、セグメントが、青フェーズおよび緑フェーズ等の２つのフェーズのうちの１つに分類される２レベルマーカスキームを用いてもよく、書き込み操作は、異なるフェーズにおいて異なるアクティブセグメントに書き込まれる。青フェーズがアクティブな場合に、対称が書き込み操作を受信すると、同期ミラーリングモジュールは、青フェーズに関連するアクティブセグメント上で書き込み操作を実行する。書き込み操作が緑フェーズにおいて受信されると、同期ミラーリングモジュールは、青フェーズに関連するアクティブセグメントとは異なってもよい緑フェーズに関連するアクティブセグメント上で書き込み操作を実行する。
【０１８９】
異なるマーカは異なるフェーズに関連してもよく、マーカは、それらの対応するフェーズがアクティブな場合に別々に更新されてもよい。例えば、上で説明した、青フェーズのためのマーカと、緑フェーズのための異なるマーカとがあってもよい。
【０１９０】
上記の実装形態は、青および緑フェーズを参照して上で説明したのと同様の方法で、セグメントがいくつかのカテゴリのうちの１つに分類されるマルチレベルマーカスキームまで拡張されてもよい。かかる場合において、異なるマーカは異なるフェーズのそれぞれと関連してもよく、マーカはそれらそれぞれのフェーズにおけるアクティブセグメントに対応する情報を格納してもよい。しかし、場合によっては、マーカは、異なるフェーズに関して非依存型であってもよい。かかる実装形態において、各マーカは、すべてのフェーズにおけるアクティブセグメントに対応する情報を格納してもよい。
【０１９１】
前のセクションで説明した、マーカの概念を用いる同期ミラーリングを提供する実装形態は、より効果的にメモリ書き込み操作を行う。例えば、障害回復ログおよび／または非複製書き込みログへの書き込みに関連する待ち時間は解消される。性能の均一性は、書き込み操作が本質的に逐次的か、ランダムかに関わりなく達成される。追加の障害回復ログまたは非複製書き込みログに依存する代わりに、フラッシュ管理レイヤの本質に依存することによって、作業負荷の間の僅かな変化のために、よりロバストな性能が得られる。
【０１９２】
障害回復ログを採用する実装形態において、ある一定の僅かなデータ量を書き込むよう処理される追加メモリを指す、追加の書き込み増幅コンポーネントが加えられる。従って、フラッシュメモリの形状寸法がフラッシュ記憶媒体に対する有界書き込み数を可能にする場合、障害回復ログは、データ書き込みに対するフラッシュメモリ媒体の寿命を低減する場合がある。例えば、４ＫＢの書き込みを行っていた作業負荷を想定すると、４ＫＢの書き込み毎に、１回の障害回復ログ書き込みが実行されて書き込みを開放し、４ＫＢの書き込み、次いで、別の障害回復ログ書き込みを実行して書き込みを閉じるとすると、システムは３倍の書き込み増幅を効果的に導入した。従って、フラッシュメモリデバイスは、全体的に、非同期ミラーリング方式で用いられる場合と比較して、その寿命にわたり３分の１のデータ書き込み数をサポートしてもよい。
【０１９３】
従って、障害回復ログによる追加の書き込みが回避できれば、代替の状況と比較して、長い寿命がその記憶素子から達成できる（例えば、上記の実施例において３倍超）。これは、同期ミラーリングに対するマーカの概念を用いて可能であってもよい。従って、マーカを用いる同期ミラーリングは、より高い性能、より高い耐久性、および、様々な作業負荷にわたって、より予想可能な性能を提供する。
【０１９４】
図６は、データをメモリサーバ内のメモリブロックに書き込むために用いられてもよいプロセス例６００を示している。プロセス６００は、同期ミラーリング実装形態におけるアクティブサーバによって、例えば、メモリサーバ５００によって実行されてもよい。従って、以下のセクションは、マスタコントローラ５０２、スレーブコントローラ５１４、５１６、５１Ｊ、５１Ｋ、およびフラッシュトランスレーションテーブル５３０を含むメモリカード５０１内のフラッシュ管理レイヤによって実行されるものとして、プロセス６００を説明する。しかし、プロセス６００はまた、他のシステムおよびシステム構成によって実行されてもよい。
【０１９５】
プロセス６００は、メモリに書き込むためのアプリケーションデータを受信する（６０２）。例えば、メモリサーバ５００は、上位アプリケーションまたはオペレーティングシステムから書き込み操作を受信してもよい。書き込み操作は、メモリカード５０１内のフラッシュメモリダイス５０４、５０６、５１Ｊ、または５１Ｋ等の、メモリサーバ５００に関連する永続的記憶装置に格納するためのデータを含んでもよい。
【０１９６】
現在のフェーズおよびアクティブセグメントは特定される（６０４）。例えば、メモリサーバ５００は、データをメモリカード５０１に格納するための２レベルマーカスキームを実装してもよい。従って、書き込み操作を受信すると、メモリカード５０１内のフラッシュ管理レイヤは、赤フェーズまたは黒フェーズの２つのフェーズのうちのどちらかが、データを書き込むために現在アクティブなのか判断する。フラッシュ管理レイヤはまた、例えば、アクティブセグメントのシーケンス番号をＤＲＡＭ内で保持されている記録から検索することによって、データが現在の書き込みフェーズにおいて書き込まれるアクティブセグメントも決定する。
【０１９７】
フラッシュ管理レイヤは、アクティブセグメントが一杯かどうかを判断する（６０６）。例えば、フラッシュ管理レイヤは、現在のフェーズに対するアクティブセグメント内のすべての書き込みページがデータで一杯になっているかをチェックする。
【０１９８】
アクティブセグメントが一杯ではないと判断された場合、フラッシュ管理レイヤは、アプリケーションデータをアクティブセグメント内で次に利用可能なブロックに書き込む（６０８）。例えば、アクティブセグメントは５２４であってもよい。フラッシュ管理レイヤは、セグメント５２４内部で次に利用可能な書き込みページを決定し、次に利用可能な書き込みページにアプリケーションデータを格納してもよい。この文脈において、セグメントは、ＲＡＩＤストライプ内のフラッシュメモリダイスにわたって分散される消去ブロックのコレクションとして説明されるが、セグメントに書き込む場合、データはセグメント内部の書き込みページの粒度で書き込まれる。先に説明したように、各消去ブロックは複数の書き込みページを含んでいる。
【０１９９】
アクティブセグメント内で次に利用可能なブロックに書き込んだ後、フラッシュ管理レイヤは、アクティブセグメントに対応する情報を、次のブロックのシーケンス番号で更新する（６１０）。例えば、フラッシュ管理レイヤは、今しがた書き込まれた書き込みページに続くアクティブセグメント内で利用可能な次の書き込みページのシーケンス番号を格納してもよい。情報は、アクティブセグメントのシーケンス番号が保持されるＤＲＡＭレコードの一部として格納されてもよい。フラッシュ管理レイヤは、次いで、上位から次のアプリケーションデータを受信し、データを物理メモリに格納するよう進む。
【０２００】
その一方で、アクティブセグメントが一杯であると判断された場合、フラッシュ管理レイヤは、新規セグメントを特定し、アプリケーションデータを新規セグメント内で最初に利用可能なブロックに書き込む（６１２）。例えば、フラッシュ管理レイヤは、アクティブセグメント内で利用可能なスペースが無いことを判断してもよい。その結果、フラッシュ管理レイヤは、データを格納するための新規セグメントとして書き込みに利用可能な次のセグメントを特定し、シーケンス番号を新しく特定されたセグメントに関連付ける。セグメントは逐次的に用いられるため、新規セグメントに関連付けられるシーケンス番号は、今しがた充填されたセグメントのシーケンス番号と比較して、次に高い番号である。新規セグメントを特定すると、フラッシュ管理レイヤは、アプリケーションデータを新規セグメント内の最初の書き込みページに書き込む。
【０２０１】
フラッシュ管理レイヤは、アクティブセグメントおよび次のブロックのシーケンス番号を格納する（６１４）。例えば、次に利用可能なセグメントが書き込みのために選択される場合、フラッシュ管理レイヤは、新しく選択されたセグメントを新規アクティブセグメントとして特定し、アクティブセグメントのシーケンス番号が保持されるＤＲＡＭレコード等の、アクティブセグメントを追跡する内部データ構造における新規アクティブセグメントのシーケンス番号を格納する。
【０２０２】
実装形態によっては、フラッシュ管理レイヤはまた、今しがた書き込まれた書き込みページに続くアクティブセグメント内で利用可能な次の書き込みページのシーケンス番号も格納している。フラッシュ管理レイヤは、次いで、上位から次のアプリケーションデータを受信し、データを物理メモリに格納するよう進む。
【０２０３】
図７は、同期ミラーリングを実装するメモリサーバ内のアクティブフラッシュセグメントを特定するために用いられてもよいプロセス例７００を示している。プロセス７００は、同期ミラーリング実装形態におけるアクティブサーバによって、例えば、メモリサーバ５００によって実行されてもよい。従って、以下のセクションは、マスタコントローラ５０２、スレーブコントローラ５１４、５１６、５１Ｊ、５１Ｋ、およびフラッシュトランスレーションテーブル５３０を含むメモリカード５０１内のフラッシュ管理レイヤによって実行されるものとして、プロセス７００を説明する。しかし、プロセス７００はまた、他のシステムおよびシステム構成によって実行されてもよい。
【０２０４】
アクティブサーバは、プロセス６００と並行してプロセス７００を実行してもよい。例えば、プロセス７００は、２レベルマーカスキームにおいて、前回のフェーズ（黒フェーズ等）に対応するアクティブセグメントに関する情報を取得するよう用いられてもよい一方で、プロセス６００は、現在のフェーズ（赤フェーズ等）におけるアクティブセグメント内のデータを格納するよう同時に実行される。
【０２０５】
プロセス７００は、クエリを同期ミラーリングモジュールから受信する場合に実行される（７０２）。例えば、メモリサーバ５００は、同期ミラーリング実装形態におけるアクティブサーバであってもよい。メモリカード５０１内のフラッシュ管理レイヤ等のアクティブサーバ内のフラッシュ管理レイヤは、アクティブセグメントに関する情報に対して同期ミラーリングモジュール５５０からクエリを受信してもよい。
【０２０６】
フラッシュ管理レイヤは、現在のフェーズおよび前回のフェーズを特定する（７０４）。例えば、同期ミラーリングモジュール５５０からクエリを受信すると、メモリカード５０１内のフラッシュ管理レイヤは、２レベルマーカスキームにおける２つのフェーズのうちのいずれかが現在の書き込みフェーズなのか、および、それに応じて、どちらのフェーズが前回のサイクルで書き込まれたのかを判断する。フラッシュ管理レイヤは、赤フェーズが現在アクティブであり、従って、黒フェーズが前回に書き込まれたことを判断してもよい。
【０２０７】
フラッシュ管理レイヤは、前回のフェーズに対応するアクティブセグメントのシーケンス番号を取得する（７０６）。先に説明したように、２レベルマーカスキームにおいて、同期ミラーリングモジュールに送信されるアクティブセグメントに関する情報は、前回の書き込みフェーズにおいて更新された情報に対応している。例えば、赤フェーズが現在アクティブである場合、フラッシュ管理レイヤは、例えば、アクティブセグメントに関する情報を格納しているＤＲＡＭレコードから、黒フェーズがアクティブであった場合の前回のサイクルにおいて書き込まれたアクティブセグメントのシーケンス番号を取得する。前回のフェーズに対応するアクティブセグメントのシーケンス番号と共に、フラッシュ管理レイヤは、アクティブセグメント内部で次に利用可能なメモリブロックを指すアクティブセグメント内部のオフセットを取得する。
【０２０８】
実装形態によっては、シーケンス番号は、フラッシュメモリダイスにおけるそれらの格納位置から取得されてもよい。例えば、５２２が前回のフェーズで書き込まれたアクティブセグメントに対応している場合、フラッシュ管理レイヤは、５２２に関する情報をフラッシュメモリ５０４内の位置５２２ａから取得する。
【０２０９】
フラッシュ管理レイヤは、取得したシーケンス番号を同期ミラーリングモジュールに送信する（７１０）。例えば、フラッシュ管理レイヤは、前回のフェーズに対応するアクティブセグメントの取得したシーケンス番号を同期ミラーリングモジュール５５０に送信する。実装形態によっては、フラッシュ管理レイヤはまた、それぞれのセグメント内部で次に利用可能なメモリブロックを指す前回のフェーズに対応するアクティブセグメント内部のオフセットも送信する。しかし、他の実装形態において、フラッシュ管理レイヤは、アクティブセグメントのシーケンス番号のみを送信する。その結果、同期ミラーリングモジュール５５０は、アクティブサーバ内の記憶素子の一部がごく最近に書き込まれたことに関する情報を有している。
【０２１０】
図８は、フラッシュベースの記憶装置を用いるアクティブおよびパッシブメモリサーバ間の同期ミラーリングを実行するために用いられてもよいプロセス例８００を示している。プロセス８００は、同期ミラーリング実装形態におけるアクティブサーバによって、例えば、同期ミラーリング設定においてアクティブサーバを表すメモリサーバ５００によって実行されてもよい。従って、以下のセクションは、マスタコントローラ５０２、スレーブコントローラ５１４、５１６、５１Ｊ、５１Ｋ、およびフラッシュトランスレーションテーブル５３０を含むメモリカード５０１内のフラッシュ管理レイヤと相互に作用することによって、メモリサーバ５００内の同期ミラーリングモジュール５５０によって実行されるものとして、プロセス８００を説明する。しかし、プロセス８００はまた、他のシステムおよびシステム構成によって実行されてもよい。
【０２１１】
プロセス８００の一部として、同期ミラーリングモジュールはアプリケーションデータをパッシブサーバに送信する（８０２）。例えば、メモリサーバ５００は、ユーザアプリケーション等の上位アプリケーション、および／またはオペレーティングシステムから書き込み操作を受信してもよい。メモリサーバ５００は、書き込み操作と共に受信したデータをローカル記憶素子に、例えば、メモリカード５０１上のフラッシュ管理レイヤを用いるメモリカード５０１に書き込む。同時に、メモリサーバ５００内の同期ミラーリングモジュール５５０は、データを含む書き込み操作を、メモリカード５０１に書き込まれるデータをミラーリングするパッシブサーバに送信する。
【０２１２】
実装形態によっては、同期ミラーリングモジュール５５０は、メモリサーバ５００が同期ミラーリング構成におけるアクティブサーバである場合にのみ、書き込み操作をパッシブサーバに送信する。実装形態によっては、同期ミラーリング構成は、アクティブサーバとして構成されるメモリサーバ５００とは別に、複数のパッシブサーバを含んでもよい。かかる実装形態において、同期ミラーリングモジュール５５０は、書き込み操作をパッシブサーバのうちの１つ以上に送信してもよい。
【０２１３】
同期ミラーリングモジュールは、アクティブセグメントに関する情報をパッシブサーバに定期的に送信する（８０４）。例えば、同期ミラーリングモジュール５５０は、ローカル記憶素子（すなわち、メモリカード５０１）上のフラッシュ管理レイヤに、最近書き込まれたフラッシュセグメントに関する情報を問い合わせる。問い合わせは、一定の時間間隔で定期的に行われてもよい。代替として、問い合わせは、特定の閾数の書き込み操作がパッシブサーバに送信される場合に行われてもよい。代替として、問い合わせは、ローカル記憶素子上の特定の閾容量の物理メモリが書き込まれた場合に行われてもよい。例えば、問い合わせは、メモリカード５０１上のフラッシュメモリダイスの利用可能な容量の特定のパーセンテージ（５％等）が充填された場合に行われてもよい。同期ミラーリングモジュール５５０は、問い合わせを行うようメモリカード５０１の利用可能な容量を追跡してもよい。
【０２１４】
問い合わせに基づいて、同期ミラーリングモジュール５５０は、先に説明したように、フラッシュ管理レイヤからアクティブセグメントに関する情報を受信する。情報は、アクティブセグメントのシーケンス番号と、アクティブセグメント内の次に利用可能なメモリブロックに対応するセグメント内部のオフセットとを含んでもよい。実装形態によっては、複数のアクティブセグメントがあってもよく、フラッシュ管理レイヤから受信する情報は、すべてのアクティブセグメントに対応するシーケンス番号およびオフセットを含んでもよい。同期ミラーリングモジュール５５０は、アクティブセグメントに関する情報を、アクティブサーバ５００に格納されるデータをミラーリングするパッシブサーバに送信する。
【０２１５】
先に説明した２レベル赤黒マーカスキーム等のマルチレベルマーカスキームを用いる実装形態において、同期ミラーリングモジュール５５０はまた、先に説明したように、パッシブサーバに、アクティブセグメントに対応する書き込みフェーズに関する情報を送信してもよい。例えば、黒フェーズにおいて書き込まれるアクティブセグメントのシーケンス番号を送信する場合、同期ミラーリングモジュール５５０はまた、書き込みフェーズが黒フェーズであることを示す情報も送信する。
【０２１６】
同期ミラーリングモジュールは、パッシブサーバから回復メッセージを受信する（８０６）。例えば、アクティブサーバ５００に格納されるデータをミラーリングしたパッシブサーバは、何らかの理由で故障する場合がある。パッシブサーバが故障から回復する場合、パッシブサーバは、パッシブサーバが停止していた期間中にアクティブエンドにおいて書き込まれたであろうデータの部分的な再同期を実行するよう、回復メッセージをアクティブサーバ５００に送信してもよい。回復メッセージは、アクティブサーバ５００内の同期ミラーリングモジュール５５０によって処理される。
【０２１７】
同期ミラーリングモジュールは、回復メッセージからマーカ情報を抽出する（８０８）。例えば、故障状態から回復すると、パッシブサーバは、アクティブエンドから受信した最後のマーカを取得し、最後のマーカを回復メッセージの一部としてアクティブサーバ５００に送信する。アクティブサーバ５００内の同期ミラーリングモジュール５５０は、回復メッセージを処理することによってマーカ情報を読み取る。
【０２１８】
同期ミラーリングモジュールは、フラッシュ管理レイヤから現在のアクティブセグメントに関する情報を取得する（８１０）。例えば、パッシブサーバが故障してから更新されている場合もあるフラッシュメモリブロックを決定するため、同期ミラーリングモジュール５５０は、クエリをローカル記憶素子、すなわち、メモリカード５０１内のフラッシュ管理レイヤに送信する。フラッシュ管理レイヤは、クエリがフラッシュ管理レイヤによって受信された時間にアクティブな１つ以上のセグメントに関する情報で応答する。同期ミラーリングモジュールは、フラッシュ管理レイヤから、ごく最近に更新されたセグメント内部のメモリブロックと共に、１つ以上のセグメントを決定できる。
【０２１９】
２レベルマーカスキームを採用する実装形態において、パッシブサーバから受信したマーカは、マーカが関連する（例えば、マーカが赤フェーズまたは黒フェーズに関連するかどうかの）書き込みフェーズに関する情報を含んでいる。かかる場合において、パッシブサーバは、２つの書き込みフェーズに対応する２つのマーカを格納する。データ回復のためにマーカをアクティブサーバに送信する場合、パッシブサーバは、それが受信した最後から２番目のマーカを送信する。先に説明したように、パッシブサーバによって受信された最後から２番目のマーカが、アクティブサーバにおける前の書き込みフェーズに対応するため、最後から２番目のマーカは、部分的な再同期中に書き込みバリアにより何のデータも失われていないことを保証するよう送信される。
【０２２０】
同期ミラーリングモジュールは、取得した情報を抽出したマーカ情報と比較することによって、パッシブサーバにミラーリングされていない格納メモリブロックを決定する（８１２）。例えば、同期ミラーリングモジュール５５０は、パッシブサーバから受信したマーカから抽出される情報に基づいて、パッシブサーバによって格納された最後のセグメントのシーケンス番号を決定してもよい。同期ミラーリングモジュール５５０はまた、ローカル記憶素子のフラッシュ管理レイヤによって送信された情報から、ローカル記憶域に書き込まれた最新のセグメントのシーケンス番号を決定してもよい。２つのシーケンス番号の相違は、ローカル記憶域に書き込まれたが、パッシブサーバに格納されなかったセグメントを与える。従って、これらのセグメントに格納されたデータは、例えば、対応する書き込み操作がアクティブサーバ上の同期ミラーリングモジュール５５０によってパッシブサーバに送信された時間に、パッシブサーバが故障していたため、パッシブサーバにミラーリングされていない。
【０２２１】
同期ミラーリングモジュールは、トランスレーションテーブルから、決定された物理ブロックに対応する論理メモリブロックを検索する（８１４）。例えば、ローカル記憶域に書き込まれたが、パッシブサーバに格納されなかったと判断されたセグメントは、メモリカード５０１内の物理メモリに関する情報を提供する。同期ミラーリングモジュール５５０は、メモリカード５０１上のフラッシュ管理レイヤに、物理メモリブロックを、故障時にパッシブサーバによって失敗した書き込み操作に関連する論理メモリブロックであってもよい論理メモリブロックにマッピングするよう問い合わせてもよい。フラッシュ管理レイヤは、フラッシュトランスレーションテーブル５３０を用いて物理メモリブロックに対応する論理メモリブロックを検索し、論理メモリブロックに関する情報を同期ミラーリングモジュール５５０に送信してもよい。
【０２２２】
同期ミラーリングモジュールは、論理メモリブロックに対応するアプリケーションデータをパッシブサーバに送信する（８１８）。例えば、同期ミラーリングモジュール５５０は、物理メモリブロックから、メモリカード５０１には格納されているが、パッシブサーバには格納されていない生のアプリケーションデータを決定してもよい。フラッシュ管理レイヤから論理メモリブロックに関する情報を取得すると、同期ミラーリングモジュール５５０はまた、論理メモリブロックに対する物理メモリブロックのマッピングも得る。その結果、同期ミラーリングモジュール５５０は、論理メモリブロックおよびアプリケーションデータをパッシブサーバに送信してもよい。
【０２２３】
パッシブサーバは、アプリケーションデータをその論理メモリブロックに格納し、論理メモリブロックに関する受信した情報を用いて、アプリケーションデータが格納されている物理メモリブロックの、論理ブロックに対する同一のマッピングを決定する。この方法において、故障していた時にパッシブサーバによって失われたデータは、回復フェーズ中にミラーリングされてもよい。従って、部分的な再同期は、障害回復ログおよび非複製書き込みログを用いることなく達成されてもよい。
【０２２４】
本明細書中に説明したシステムおよび技術の種々の実装形態は、デジタル電子回路、集積回路、特別設計のＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア、および／またはそれらの組み合わせにおいて実現できる。これらの種々の実装形態は、記憶システム、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスからデータおよび命令を受信し、それらへデータおよび命令を送信するよう結合される、特殊用途または汎用であってもよい、少なくとも１つのプログラマブルプロセッサを含むプログラマブルシステム上で実行可能および／または解釈可能な１つ以上のコンピュータプログラムにおける実装を含むことができる。
【０２２５】
これらのコンピュータプログラム（また、プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても公知である）は、プログラマブルプロセッサに対する機械語命令を含み、高級手続き言語および／またはオブジェクト指向プログラミング言語において、および／または、アセンブリ言語／機械語において実装できる。本明細書中で用いたように、用語「機械読取可能な媒体」「コンピュータ読み取り可能な媒体」とは、機械読取可能な信号として機械語命令を受信する機械読取可能な媒体を含む、プログラマブルプロセッサに機械語命令および／またはデータを提供するよう用いられる、いずれかのコンピュータプログラム製品、装置、および／またはデバイス（例えば、磁気ディスク、光学ディスク、メモリ、プログラマブル論理デバイス（ＰＬＤ））を指す。用語「機械読取可能な信号」とは、プログラマブルプロセッサに機械語命令および／またはデータを提供するよう用いられるいずれかの信号を指す。
【０２２６】
プログラムの命令の実行に対する好適なプロセッサは、例として、汎用および特殊用途両方のマイクロプロセッサ、いずれかの種類のコンピュータの単独プロセッサまたは複数のプロセッサのうちの１つを含む。一般に、プロセッサは、読み出し専用メモリまたはランダムアクセスメモリまたは両方から命令およびデータを受信する。コンピュータの構成要素は、命令を実行するためのプロセッサと、命令およびデータを格納するための１つ以上のメモリとを含んでもよい。一般に、コンピュータは、データファイルを格納するための１つ以上の大容量記憶装置も含むか、または、それと通信するよう動作可能に結合され、かかる装置は、内蔵ハードディスクおよびリムーバブルディスク等の磁気ディスク；光磁気ディスク；および光学ディスクを含む。コンピュータプログラム命令およびデータを明白に具現化するために好適な記憶装置は、例として、ＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリデバイス等の半導体メモリデバイス；内蔵ハードディスクおよびリムーバブルディスク等の磁気ディスク；光磁気ディスク；およびＣＤ−ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む、あらゆる形態の不揮発性メモリを含む。プロセッサおよびメモリは、ＡＳＩＣ（特定用途向け集積回路）によって補うか、またはそれらに組み込むことができる。
【０２２７】
ユーザとのインタラクションを提供するため、本明細書中で説明するシステムおよび技術は、情報をユーザに表示するためのディスプレイ装置（例えば、ＣＲＴ（陰極線管）またはＬＣＤ（液晶表示器）モニタ）と、ユーザがコンピュータに入力できるキーボードおよびポインティングデバイス（例えば、マウスまたはトラックボール）とを有するコンピュータ上で実施できる。他の種類の装置は、同様にユーザとのインタラクションを提供するよう用いることができ；例えば、ユーザに提供されるフィードバックは、いずれかの形態の感覚フィードバック（例えば、視覚フィードバック、聴覚フィードバック、または触覚フィードバック）であってもよく；ユーザからの入力は、音響、音声、または触覚入力を含むいずれかの形態で受信されてもよい。
【０２２８】
本明細書中で説明するシステムおよび技術は、バックエンドコンポーネント（例えば、データサーバのような）を含むか、ミドルウェアコンポーネント（例えば、アプリケーションサーバ）を含むか、フロントエンドコンポーネント（例えば、ユーザが本明細書中で説明するシステムおよび技術の実施と相互作用できるグラフィカルユーザインタフェースまたはＷｅｂブラウザを有するクライアントコンピュータ）を含むか、または、かかるバックエンド、ミドルウェア、またはフロントエンドコンポーネントのいずれかの組み合わせを含むコンピューティングシステムにおいて実施できる。システムのコンポーネントは、デジタルデータ通信のいかなる形態または媒体（例えば、通信ネットワーク）によって相互接続できる。通信ネットワークの実施例は、ローカルエリアネットワーク（「ＬＡＮ」）、ワイドエリアネットワーク（「ＷＡＮ」）、およびインターネットを含む。
【０２２９】
コンピューティングシステムは、クライアントおよびサーバを含むことができる。クライアントおよびサーバは、概して互いから遠隔にあり、通常、通信ネットワーク介して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータ上で動作し、互いに対してクライアント−サーバ関係を有するコンピュータプログラムに基づいて生じる。
【０２３０】
いくつかの実装形態を説明してきた。しかしながら、種々の変更が、本発明の精神と適用範囲を逸脱することなく、行われてもよいことは言うまでもない。例えば、本文書の大半は、メッセージングおよびマッピングアプリケーションに関して説明してきたが、対話型番組ガイド、ｗｅｂページナビゲーションおよびズーミング、および他のかかるアプリケーション等、他の形態のグラフィカルアプリケーションも扱われてもよい。
【０２３１】
加えて、図に示した論理フローは、所望の結果を達成するために、図示した特定の順序、または順番を必要としない。加えて、他のステップが提供されてもよいか、ステップは説明したフローから削除されてもよく、また、他のコンポーネントが説明したシステムに追加され、それらから除去されてもよい。従って、他の実施形態も、以下の特許請求の範囲内にある。
【図１】
0006294518.tif 000002
【図２Ａ】
0006294518.tif 000003
【図２Ｂ】
0006294518.tif 000004
【図３】
0006294518.tif 000005
【図４】
0006294518.tif 000006
【図５】
0006294518.tif 000007
【図６】
0006294518.tif 000008
【図７】
0006294518.tif 000009
【図８】
0006294518.tif 000010