(57)【特許請求の範囲】
【請求項１】
１つのチャネルと複数のメモリ・ブロックとを有するメモリ・チップにおける書き込み状態と消去状態のアクセス競合を減らすための方法であって、
前記チャネルは複数のチップ・ストライプを含み、書き込み状態及び書き込みキュー・ヘッドを前記チャネル内に設定することと、
書き込みキュー・ヘッドを、前記チャネル内の第１の空きページに対して設定することと、
書き込み要求を、書き込み割り当てスケジューラに従って、前記チャネルに対して割り当てることと、
ページ書き込みを生成することと、
前記ページ書き込みに応答して、前記書き込みキュー・ヘッドをインクリメントすることと、
前記チャネル内をオンライン状態に設定することと、を含み、  
前記メモリ・チップは、前記チップ・ストライプの前記書き込み状態の間は、消去状態でないことを特徴とする、
を含む方法。
【請求項２】
ガーベジ・コレクションをトリガすることをさらに含む、請求項１に記載の方法。
【請求項３】
前記ガーベジ・コレクションが、前記チャネル内が前記書き込み状態に変更されたことに応答してトリガされる、請求項２に記載の方法。
【請求項４】
前記ガーベジ・コレクションが、前記チャネル内が所定の閾値に到達したことに応答してトリガされる、請求項２に記載の方法。
【請求項５】
前記ガーベジ・コレクションが、メモリ・ブロックが満杯になったことに応答してトリガされる、請求項２に記載の方法。
【請求項６】
前記ガーベジ・コレクションが、
前記チャネル内をクリーニング状態に設定することと、
ページ・メタデータ及びＬＢＡ−ＰＢＡマッピング情報を読み出すことと、
ページが有効であることに応答して、
前記全ページデータを読み出すことと、
前記ページのためのターゲット位置を取得することと、
前記ページデータを新たな位置に書き込むことと、
前記チャネル内を消去状態に設定することと、
前記チャネル内の全てのブロックを消去することと、
前記チャネル内を空き状態に設定することと、
を含む、請求項２に記載の方法。
【請求項７】
１つのチャネルと複数のメモリ・ブロックとを有するメモリ・チップにおける書き込み状態と消去状態のアクセス競合を減らすためのプログラムであって、
前記チャネルは複数のチップ・ストライプを含み、書き込み状態及び書き込みキュー・ヘッドを前記チャネル内に設定することと、
書き込みキュー・ヘッドを、前記チャネル内の第１の空きページに対して設定することと、
書き込み要求を、書き込み割り当てスケジューラに従って、前記チャネルに対して割り当てることと、
ページ書き込みを生成することと、
前記ページ書き込みに応答して、前記書き込みキュー・ヘッドをインクリメントすることと、
前記チャネル内をオンライン状態に設定することと、を含み、
前記メモリ・チップは、前記チップ・ストライプの少なくとも１つ書き込み状態の間は、消去状態でないことを特徴とする、前記ステップをコンピュータに実行させるプログラム。
【請求項８】
１つのチャネルと複数のメモリ・ブロックとを有し、書き込み状態と消去状態のアクセス競合を減らすためのメモリ・システムであって、
書き込み割り当てスケジューラを有するチャネルであって、空き状態と、書き込み状態と、オンライン状態と、消去状態とを支持し、複数のチップ・ストライプを含むチャネルと、
前記チャネルは、書き込み要求を割り当てるために前記空き状態から前記書き込み状態に変更設定を支持するように構成され、かつ、前記書き込み状態から前記オンライン状態に変更設定を支持するようにさらに構成され、
前記メモリ・システム、前記チップ・ストライプの前記書き込み状態の間は、消去状態でないことを特徴とする、メモリ・システム。
【請求項９】
前記チャネル上に配置される書き込みキュー・ヘッドをさらに含み、
前記システムが、
書き込みキュー・ヘッドを、前記チャネル内の第１の空きページに対して設定することと、
書き込み要求を、書き込み割り当てスケジューラに従って、前記チャネルに対して割り当てることと、
ページ書き込みを生成することと、
前記ページ書き込みに応答して、前記書き込みキュー・ヘッドをインクリメントすることと、
前記チャネル内をオンライン状態に設定するように構成される、請求項８に記載のメモリ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、フラッシュ型メモリ・システムに関し、より具体的には、フラッシュ型メモリ・システム又はフラッシュ型メモリ・システムと同様の性質を示すその他のメモリ・システムにおけるアクセス競合を減らすための方法及びシステムに関する。
【背景技術】
【０００２】
フラッシュ・メモリは、電気的に消去及び再プログラムが可能な不揮発性コンピュータ・ストレージである。ソリッド・ステート・ドライブ（ＳＳＤ）のようなフラッシュ型ストレージ・デバイスは、読み出し及び書き込みが、典型的には、一般に２ＫＢから４ＫＢサイズのページ・サイズのチャンクで行われるというハードウェア特性を有する。消去は、典型的には、１ブロックが一般に６４ページから１２８ページを含むブロック全体で行われる。フラッシュ・メモリは、ＮＯＲ型及びＮＡＮＤ型の両方を含む。一般に、２つの異なる型式のＮＡＮＤフラッシュ・チップが存在し、シングル・レベル・セル（ＳＬＣ）に基づくタイプは１ビットを記憶し、マルチ・レベル・セルに基づくタイプは、１より大きいビットを記憶するために複数の電圧レベルを維持する。４ＫＢのページは、ＳＬＣベースのフラッシュ・チップにおいて、典型的な読み出し時間２５μｓ及び書き込み時間６００μｓを有する。ブロック全体の消去は、それよりもかなり長い時間がかかり、企業グレード（ｅｎｔｅｒｐｒｉｓｅ−ｇｒａｄｅ）のフラッシュ・チップにおいては、７ｍｓを要し得る。これらの読み出し／書き込み／消去特性は、作業負荷にかかわらず有効である。対照的に、ハードディスク・ドライブ（ＨＤＤ）型のストレージ・システムにおいては、シーク・タイムがランダム・アクセス性能を制限する。しかしながら、フラッシュ型ストレージ・デバイスにおいては、セルにプログラムする（例えば、書き込みする）ことが可能になる前に、まずセルの消去を行わなければならない。従って、ブロック消去の待ち時間を隠蔽するために用いられる通常技術は、常にデータを所定の位置以外の位置（ｏｕｔ−ｏｆ−ｐｌａｃｅ）に書き込むこと、及び、ブロックの消去をガーベジ・コレクションが開始されるまで遅らせることである。消去コマンドが発行されると、チップはその動作が完了するまでビジー状態になり、この時間中はこのチップ上で読み出し又は書き込みを行うすべはなく、これは、「ブロッキング消去（ｂｌｏｃｋｉｎｇ  ｅｒａｓｅ)」と呼ばれる。所定の位置以外の位置へと書き込む戦略は、フラッシュ・メモリ内の論理ブロック・アドレス（ＬＢＡ）と実際の物理ページ／ブロック・アドレス（ＰＢＡ）との間のマッピングを維持する、フラッシュ変換層（ＦＴＬ）と呼ばれる特別な層を必要とする。
【０００３】
フラッシュ型ストレージ・デバイスへのアクセス時間は、それでもなお遅延の変動を呈し得る。図１は、シミュレートされた従来技術のシステムについて、待ち時間に対する確率密度関数のプロット１００を示す。図２は、シミュレートされた従来技術のシステムについて、待ち時間に対する累積分布関数のプロット２００を示す。図１及び図２は、高負荷のシナリオにおけるフラッシュ・シミュレータを例証する。この例において、ブロックが消去されているときには、同じチップに対するその後の読み出し要求は、対処されるまでに最大で７ｍｓ待たなければならないことがある。同様に、読み出し要求は、進行中の書き込み要求により、最大で６００μｓ遅延されることがある。このような著しい遅延は、特定の環境においては許容できない。さらに、特定の国（例えば、日本）は、ある一定のＩＴ用途に対して、最大遅延限界（〜５−１９ｍｓ）を課すことさえある。それゆえ、潜在的な遅延の合計は、要求される遅延限界を越えることがある。そのうえ、従来のＤＲＡＭメモリ技術は、フラッシュと同じ制約がないので、もっとずっと均質なアクセス遅延を提供する。フラッシュ・キャッシュ・ソリューションは、ＮＶＲＡＭと呼ばれる高価なバッテリ・バックアップ式ＤＲＡＭメモリをフラッシュで置き換えようとしている。それゆえ、そのようなフラッシュ・キャッシュの特性は、それらのメモリ技術の特性と同様のものである。従って、フラッシュ型メモリ技術でそのような特性を提供することは、有益であって、些細なことではない。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明の目的は、フラッシュ型メモリ・システム又はフラッシュ型メモリ・システムと同様の性質を示すその他のメモリ・システムにおけるアクセス競合を減らすための方法及びシステムを提供することにある。
【課題を解決するための手段】
【０００５】
例示的な実施形態は、フラッシュ型メモリ・システム又はフラッシュ型メモリ・システムと同様の特性を示すメモリ・システムにおけるアクセス競合を減らすための方法を含み、この方法は、複数のチャネルと複数のメモリ・ブロックとを有するメモリ・デバイスから、空き状態のチップ・ストライプを選択することであって、チップ・ストライプが複数のページを含むことと、チップ・ストライプを書き込み状態に設定することと、書き込みキュー・ヘッドを複数のチャネルの各々において設定することと、チップ・ストライプ内の複数のチャネルの各々について、書き込みキュー・ヘッドを、チップ・ストライプ由来のチャネルに属するチップ内の第１の空きページに対して設定することと、書き込み要求を、書き込み割り当てスケジューラに従って、チャネル間で割り当てることと、ページ書き込みを生成することと、ページ書き込みに応答して、書き込みキュー・ヘッドをインクリメントすることと、を含む。
【０００６】
さらなる例示的な実施形態は、フラッシュ型メモリ・システムにおけるアクセス競合を減らすためのコンピュータ・プログラムを含み、このコンピュータ・プログラムは、コンピュータに方法を実施させる命令を含み、この方法は、複数のチャネルと複数のメモリ・ブロックとを有するメモリ・デバイスから、空き状態のチップ・ストライプを選択することであって、チップ・ストライプが複数のブロックを含み、ブロックが複数のページを含むことと、チップ・ストライプを書き込み状態に設定することと、書き込みキュー・ヘッドを複数のチャネルの各々において設定することと、チップ・ストライプ内の複数のチャネルの各々について、書き込みキュー・ヘッドを、チップ・ストライプ由来のチャネルに属するチップ内の第１の空きページに対して設定することと、書き込み要求を、書き込み割り当てスケジューラに従って、チャネル間で割り当てることと、ページ書き込みを生成することと、ページ書き込みに応答して、書き込みキュー・ヘッドをインクリメントすることと、を含む。
【０００７】
さらに別の例示的な実施形態は、書き込み割り当てスケジューラを有する複数のチャネルと、複数のチャネルの各々に通信可能に結合された少なくとも１つのチップ・ストライプとを含むメモリ・デバイスを含み、少なくとも１つのチップ・ストライプは、空き状態と、書き込み状態と、オンライン状態と、消去状態とを有し、少なくとも１つのチップ・ストライプは、書き込み要求を割り当てるために空き状態から書き込み状態に設定されるように構成され、かつ、読み出し要求に対処するために書き込み状態からオンライン状態に設定されるようにさらに構成される。
【０００８】
さらなる特徴及び利点は、本発明の技術を通じて理解される。本発明のその他の実施形態及び態様は、本明細書において詳細が説明され、特許請求される発明の一部と見なされる。本発明を利点及び特徴と共により良く理解するために、説明及び図面を参照されたい。
【０００９】
本発明とみなされる主題は、本明細書の結論部分の特許請求の範囲において具体的に指示され、明確に特許請求される。本発明の前述及びその他の特徴及び利点は、添付の図面と併せて解釈される以下の詳細な説明から明らかである。
【図面の簡単な説明】
【００１０】
【図１】シミュレートされた従来のシステムの待ち時間に対する確率密度関数のプロットを示す。
【図２】シミュレートされた従来のシステムの待ち時間に対する累積分布関数のプロットを示す。
【図３】例示的なアクセス競合低減方法を実装することができる例示的なフラッシュ・アーキテクチャを示す。
【図４】ここで説明される例示的な４つの状態及びそれぞれの遷移を示す、例示的な状態図を示す。
【図５】例示的な実施形態による、フラッシュ型メモリ・システムにおけるアクセス競合を減らすための方法のフローチャートを示す。
【図６】例示的なガーベジ・コレクション方法のフローチャートを示す。
【図７】図６のさらなる詳細を示す、例示的なガーベジ・コレクション方法のフローチャートを示す。
【発明を実施するための形態】
【００１１】
例示的な実施形態において、ここで説明されるシステム及び方法は、フラッシュ型メモリ・システムの消去及び書き込みの遅延により引き起こされるアクセス競合を低減／回避するものである。ここで説明される例示的な実施形態は、フラッシュ型メモリ・システムを説明のための例として論じる。他の例示的な実施形態において、ここで説明される方法は、アクセス時間並びに書き込み又は消去動作のブロッキングに関してフラッシュ型メモリ・システムと同様の特性を呈する、任意のメモリ・システムに適用することができることが理解される。例示的な実施形態において、フラッシュ型ストレージ・デバイスのアーキテクチャは、読み出し及び書き込み要求に対して厳しい遅延限界を与えることが可能である。さらに、このアーキテクチャは、特にフラッシュ・キャッシュ・ソリューションに対して、効率的なガーベジ・コレクション及びウェア・レベリングを提供する。例示的な実施形態において、ここで説明されるシステム及び方法は、読み出し、書き込み、及び消去動作を切り離すことにより、同じチップ上の先行する動作に由来する付加的な遅延を完全に隠蔽する。チップ上での読み出し及び書き込みを、同じチップ上の先行する消去動作により引き起こされる付加的な遅延から保護するために、読み出し及び書き込み動作は、消去が行われておらず、その一方でなお、格納されている全ての情報へのアクセスを提供しているチップ上でのみ行われる（即ち、デバイスの全ＬＢＡ空間）。同様に、ここで説明される方法は、読み出し動作が、同じチップ上での先行する要求の消去及び書き込み遅延によって不利にならないよう保護するために、実装することができる。例示的な実施形態において、読み出し動作は、フラッシュ・チップがチャネル・バスに取り付けられ、チャネル間でチップ・ストライプにグループ分けされるアーキテクチャを実装して、不利にならないように保護される。このアーキテクチャは、書き込みページ・アロケータ及びガーベジ・コレクション・アルゴリズムを備えたチャネル毎の空きブロック・キューに基づく書き込み戦略と組み合わされる。
【００１２】
フラッシュ・キャッシュ又はＳＳＤのようなフラッシュ型ストレージ・デバイスは、フラッシュ・チップを取り付けるための多数のチャネルを含む。各チャネルは、チップに対する全ての要求を管理する低複雑度のチャネル・コントローラを有する。チャネルは、チップ上での読み出し、書き込み、及び消去動作、並びに、場合によってはエラー修正情報の追加又は検証といったその他の動作を実行する、専用のチャネル・コントローラにより制御される。チャネル・コントローラは、ＬＢＡ−ＰＢＡマッピング、ガーベジ・コレクション、空きブロック及び不良ブロック管理といった主タスクを実行する、主コントローラにより制御される。図３は、例示的なアクセス競合低減方法を実装することができる例示的なフラッシュ・アーキテクチャ３００を示す。ここで説明されるように、アーキテクチャ３００は、複数の複雑度がより低いチャネル・コントローラ３１０、３１５、３２０、３２５のための主コントローラ３０５を含む。例示的な実施形態において、主コントローラ３０５は、各チャネルに対して、１つの空きブロック・キュー及び書き込みキュー・ヘッドを維持する。空きブロック・キューは、書き込みに用いることができる全てのブロックを保持する。書き込みキュー・ヘッドは、データが現在書き込まれているブロック内の最初の空きページを指示する。空きブロックは、ここでさらに説明されるように、チャネルの空きブロック・キューから前もって取得されたものである。例示的な実施形態において、各チャネル・コントローラ３１０、３１５、３２０、３２５は、それぞれのチップのチャネルを含む。図示されているように、一例として、コントローラ３１０はチャネル１を制御し、コントローラ３１５はチャネル２を制御し、コントローラ３２０はチャネルＣ−１を制御し、コントローラ３２５はチャネルＣを制御する。さらに、各チャネル・コントローラ３１０、３１５、３２０、３２５は、チャネル・バス３１１、３１６、３２１、３２６によってそれぞれのチャネルに通信可能に結合される。各チャネルはまた、一般に「チップ」として示されるチップを含む。例示的な実施形態において、書き込みモードのストライプ（例えば、チップ・ストライプｎ）は、書き込みヘッド・チップを含むことができる。さらに、ＧＣストライプ（例えば、チップ・ストライプｎ＋２）は、ガーベジ・コレクタ・ヘッド・チップを含むことができる。
【００１３】
チャネル構造のほかに、チップは、チップ・ストライプ１、チップ・ストライプ２、チップ・ストライプｎ、チップ・ストライプｎ＋１、チップ・ストライプｎ＋２、チップ・ストライプＮ−１、チップ・ストライプＮとして図示される、いわゆるチップ・ストライプに仮想的にグループ分けされる。従って、各チャネル内の第１のチップは、第１のチップ・ストライプに属し、以下同様である。例示的な実施形態において、チップ・ストライプは４つの状態、即ちオンライン状態、ガーベジ・コレクション（ＧＣ）状態、空き状態、又は書き込み状態のうちの１つにある。図４は、ここで説明される例示的な４つの状態及びそれぞれの遷移を示す、例示的な状態図４００を示す。図３に示される例において、チップ・ストライプ１、チップ・ストライプ２、チップ・ストライプＮ−１、及びチップ・ストライプＮは、読み出し要求を満たす「オンライン」であり、チップ・ストライプｎは、書き込みモード・ストライプであり、チップ・ストライプｎ＋１は、空きであり、チップ・ストライプｎ＋２は、ＧＣ状態である。これらの状態は、例証的なものであり、他の例示的な実施形態においては他の状態が想定される。
【００１４】
例示的な実施形態において、あるチップ・ストライプがオンライン状態である場合、その全てのチップからデータを読み出すことができる。空き状態のチップ・ストライプは、全てのブロックが新たに消去されて書き込みの準備ができたチップを保持する。書き込み状態のチップ・ストライプは、データを現在書き込み中のチップからなる。好ましい実施形態において、いかなる時点でも、書き込み状態のチップ・ストライプは１つしか存在しない。しかしながら、ここでさらに説明されるように、特定の状況においては、１つより多くの書き込み状態のチップ・ストライプを有することも理に適っている。
【００１５】
例示的な実施形態において、ガーベジ・コレクション状態（ＧＣ状態）のチップ・ストライプは、書き込み準備のために、現在クリーンアップされているチップを含む。ＧＣ状態のチップ・ストライプはせいぜい１つであることが好ましい。従って、ＧＣは、いかなる時点でも、各チャネル内の単一のチップにおいて行うことができる。さらに、１つより多くのＧＣ状態のチップ・ストライプが存在することも可能であり、これは、ＧＣが加速されている場合に望ましい。ＧＣ状態のチップ・ストライプの数は、動的であってもよい（すなわち、作業負荷に適応する）。ＧＣ状態ではかなりの量の記憶空間が確保され、それゆえ、ＧＣの間は実データを格納するために用いることができない。例示的な実施形態において、ＧＣ状態は、「クリーニング」及び「消去」状態のような下位状態を有することができる。クリーニング状態は、有効ページが書き込みストライプ内の新たな位置に移動している途中の状態を示し、消去状態は、全ての有効ページが新たな位置に移動された後で、ブロックが実際に消去されている状態を示す。クリーニング状態においては、ユーザの読み出し要求に対して、まだそのチップ・ストライプから対処することができる。ひとたびチップ・ストライプが消去状態へと変更されると、そのチップ・ストライプ上の全てのデータは既に外に移動されており、新たな位置から対処しなければならない。消去状態のストライプからユーザの読み出し要求に対処することは避けることが望ましい。従って、読み出し要求に対して、新たな位置から対処することができる。例示的な実施形態において、消去は、単一のチップ上では中断されても、ストライプ全体では継続することができる。
【００１６】
図５は、例示的な実施形態による、フラッシュ型メモリ・システムにおけるアクセス競合を減らすための方法５００のフローチャートを示す。例示的な実施形態において、方法５００が開始したとき、全てのブロックは空きであり、それゆえブロック５０５において全てのチップ・ストライプは空き状態である。ブロック５１０において、データをデバイスに書き込むことができるようになる前に、空きチップ・ストライプが選択され、書き込みモードに設定される。例えば、ブロック５１０において、フラッシュ・チップ上の第１の空きチップ・ストライプを選択することができるが、その他のいずれかの空きチップ・ストライプを選択することもできる。ブロック５１５において、各チャネルに対して、対応する空きブロック・キューから空きブロックが選択される。例示的な実施形態において、各チャネルの所与のチップ・ストライプ内の第１の空きブロックが選択されるが、所与のチップ・ストライプ及びチャネル内のその他のいずれかの空きブロックを選択することもできる。ブロック５２０において、各チャネルに対して、書き込みキュー・ヘッドが、書き込みモードのチップ・ストライプ由来のそのチャネルに属するチップ内の第１の空きページに設定される。ブロック５２５において、方法５００は、デバイスが停止したかどうかチェックする。停止した場合、方法５００は終了する。デバイスが依然として稼働している場合には、ブロック５３０において、書き込み要求が、書き込み割り当てスケジューラに従って、チャネル間で割り当てられる。例示的な実施形態において、書き込み作業負荷を全ての使用可能なチャネル間で均等に分配するラウンドロビン・スケジューラを実装することができる。所望の性質に応じて、他の例示的な実施形態においては、その他のスケジューラを企図することもできる。ブロック５３５において、ひとたびページが書き込まれると、ブロック内の次の空きページに書き込みキュー・ヘッドを設定するために、書き込みキュー・ヘッドがインクリメントされる。ブロック５４０において、方法５００は、チップ・ストライプが満杯であるか否かをチェックする。チップ・ストライプが満杯である場合には、ブロック５４５は、予め構成された値に従って、十分な空きストライプが使用可能か否か判断する。ブロック５４５において、チップ・ストライプが十分に残っている場合には、方法は、ブロック５５５に続く。ブロック５４５において、チップ・ストライプが十分に残っていない場合には、以前に書き込まれたブロック内の無効化されたページから空間を回収するために、ブロック５５０において、ガーベジ・コレクション方法６００（本明細書の図６を参照）がトリガされ、方法５００はブロック５５５に続く。好ましい実施形態において、ガーベジ・コレクション方法６００は、独立して、方法５００と並行して実行されることに留意されたい。ブロック５５５において、現在のストライプは満杯であり、オンライン状態に設定されることが既知となる。方法５００は次に、ブロック５１０において、次に上位の空きチップ・ストライプを選択する。他の実施形態において、次の書き込みチップ・ストライプの選択は、何らかのポリシーに従って行うことができる。チップ・ストライプがまだ満杯ではない場合には、ブロック５６０は、現在のブロックが満杯であるか否かをチェックする。ブロックがまだ満杯ではない場合、方法５００は、ブロック５２５に続く。ブロックが満杯である場合、ブロック５６５において、事前定義された値に従うと十分な空きブロックがない場合には、ブロック５７０においてガーベジ・コレクションがトリガされ、ブロック５７５において、次の空きブロックが、このチャネルに関連付けられた空きブロック・キューから取得される。例示的な実施形態において、空きブロック・キューは、空きブロック・キュー内のブロックを、チップ内でのそれらのアドレスと同じ順番で保持する（その一方で、全ての不良ブロックは除外する）ことにより、維持することができる。
【００１７】
例示的な実施形態において、ＧＣは、最後の空きチップ・ストライプが書き込み状態に変更されたときにトリガすることもでき、又は、システム内で使用可能であるべき空きチップ・ストライプの数である、構成可能な閾値に基づいて（即ち、空きブロックの総数に基づいて）、より早期にトリガすることもできる。例示的な実施形態において、閾値が大きいほど、取りのけて確保されているメモリ空間も大きくなり、それゆえ、読み出し及び書き込みに使用可能な全容量が減少することになる。閾値は、書き込みバーストに首尾良く適応するために、ゼロより大きく設定することができる。同様に、ＧＣは、十分な空きページが使用可能である場合には停止することができる。例示的な実施形態において、方法５００は、必要に応じて再開することができる。
【００１８】
図６は、例示的なガーベジ・コレクション方法６００のフローチャートを示す。方法６００は、方法５００によりブロック５５０及び５７０においてトリガされる（上記図５を参照）。最初に、ＧＣが既に実行されているか否かをチェックする。ＧＣが既に実行されている場合には、既に実行されているＧＣ方法６００が十分な空間を解放するので、方法６００の別のインスタンスを開始する必要はない。ＧＣが実行されていない場合は、ガーベジ・コレクションは、ブロック６１０で開始し、ブロック６１５で中止される。詳細なＧＣ方法は、方法７００で説明される（本明細書の図７を参照）。ブロック６２０において、方法７００の終了後、方法６００は、十分な空きブロック及びチップ・ストライプが使用可能であるか否かをチェックする。方法６００はもう１回のＧＣラウンドをトリガし、そうでない場合、方法６００は中止される。
【００１９】
図７は、例示的なガーベジ・コレクション方法７００のフローチャートを詳細に示す。例示的な実施形態において、ＧＣ方法７００は、開始時に最も古いチップ・ストライプを選択する。ブロック７０５において、方法７００は、選択されたチップ・ストライプをクリーニング状態に設定する。方法７００は次に、選択されたチップ・ストライプ内の全てのページに対して、一連のブロックを実行する。ブロック７１０において、方法７００は、ページ・メタデータ及びＬＢＡ−ＰＢＡマッピング情報を読み出す。ブロック７１５において、方法７００は、そのページがいまだ有効であるかどうか判断する。ページ・メタデータ及びＬＢＡ−ＰＢＡマッピング情報が、そのページがいまだ有効であることを示した場合、そのページは新たな場所に書き込まれる。従って、ブロック７１５においてページがいまだ有効である場合には、次にブロック７２０において、方法７００は全ページデータを読み出す。ブロック７２５において、方法７００は、書き込み割り当てスケジューラから、そのページのためのターゲット位置を取得する。例示的な実施形態において、書き込み割り当てスケジューラは、新たな位置を、同じチャネル内又は別のチャネル内で割り当てることができる。さらに、チャネル・コントローラが１つのチャネル内でデータを直接移動することが可能な場合には、チャネル・コントローラがデータの移動をするほうが、他のバス由来のリソースを消費しないので好ましい。ブロック７３０において、方法７００は、ページを新たな位置に書き込む。ブロック７１５においてページがもはや有効ではない場合には、無効なページは移動されず、従って後で消去されるので、何のアクションも取られず、無効なページが占める空間は方法７００において後で自動的に回収される。ブロック７３５において、この方法は、残っているページがあるかどうか判断する。ブロック７３５において残っているページがある場合には、方法７００は、７１０に続く。ブロック７３５において残っているページがない場合には、次にブロック７４０において、方法７００は、そのチップ・ストライプを消去状態に設定する。ブロック７４５において、方法７００は、チップ・ストライプ内の全てのブロックを消去する。例示的な実施形態において、チャネル・コントローラは、ブロックの消去動作を並列に実行することができる。さらに、各チャネル・コントローラは、ブロックが消去されている間にそれぞれのチャネルがブロックされないように、チップ上のブロック消去をバックグラウンドで実行することができる。ブロック７５０において、方法７００は、そのチップ・ストライプの状態を空き状態に変更する。ブロック７５５において、方法７００は、どのチップ・ストライプに対してＧＣを次回実行するか判断する。
【００２０】
例示的な実施形態において、チップ・ストライプは、所与のチャネル上のチップの数に応じて下位ストライプに分割することができる。さらに、ストライプのサイズ（即ち、同じチップ・ストライプに属する同じチャネル内のチップの数）は、チャネル帯域幅をもたらすように選択される。帯域幅管理は、チャネル・コントローラが、複数のチップ上での読み出し及び書き込み動作のパイプライン制御をサポートする場合に特に望ましい。それゆえ、同じチャネル上の１つより多いチップを同じ書き込みストライプに関連付けることができる。さらに、各チップ・ストライプ状態に対して、異なるストライプ・サイズをサポートすることができる。
【００２１】
例示的な実施形態において、ユーザの読み出し要求を、同じチップ上で進行中の消去及び書き込み動作により引き起こされる遅延から保護することができる。書き込みチップ・ストライプに書き込まれているユーザ・データは、チップ・ストライプ全体が書き込まれるまで、主コントローラの書き込みキャッシュ内に保持される。それで、この新たに書き込まれたデータに対するユーザの読み出し要求に対しては、書き込みキャッシュから対処されるので、先行する書き込みによる潜在的な遅延が排除される。しかしながら、主コントローラは、これらの動作を行うために、チップ・ストライプ全体を保持すること可能な巨大な書き込みキャッシュを必要とすることがある。例示的な実施形態において、巨大な書き込みキャッシュを免れるために、２つの交互書き込みストライプを実装することができる。書き込みキャッシュがフラッシュにデステージされると、データはまず第１の書き込みストライプに書き込まれ、次にこの書き込みストライプは、そこからアクセス可能なオンライン状態に一時的に切り換えられる。ＬＢＡ−ＰＢＡマップにおける更新は、専用のマッピング・ブロック内で維持される。同じデータが次に、第２の書き込みストライプに書き込まれ、その変更を含む第２のＬＢＡ−ＰＢＡマッピング・ブロックが生成される。書き込み完了後、第２の書き込みストライプはオンライン状態に切り換えられる（対応するＬＢＡ−ＰＢＡマッピング・ブロックはアクティブに設定される）。第１のチップ・ストライプは、書き込み状態に戻るように切り換えられ、データは書き込みキャッシュからデステージすることができ、以下同様である。ひとたび書き込みチップ・ストライプが満杯になると、それらのうちの一方がオンライン状態に保持され、ＬＢＡ−ＰＢＡマッピング表も同様である。もう一方のチップ・ストライプは、消去されて空き状態に設定されてもよく、又は冗長性若しくは並行読み取りのために用いられてもよい（ＲＡＩＤ  １と同じ趣旨）。このタイプの動作は、フラッシュ書き込みの総数を２倍にする。
【００２２】
幾つかの構成においては、単一のチャネル上に少数のチップしかないことがある。この場合、ＧＣのためにチップ・ストライプ全体を維持することは、確保される記憶容量がユーザ・データを保持するためには用いることができないという点で、高価になる。このような構成においては、複数のチャネルをチャネル・グループにグループ分けし、チップ・ストライプを下位ストライプに分割することが有益である。それゆえ、１つの下位ストライプは、単一のチャネル・グループ由来のチップのみを含む。この場合、ここで説明された同じアルゴリズムを、チップ・ストライプ全体の代わりに下位ストライプに適用することができる。この手法は、並行して消去することができるチップが少なくなるため、消去速度を低下させる。しかしながら、書き込み作業負荷が高くない場合には、この手法を実装することができる。従って、下位ストライプのサイズは、観察された書き込み作業負荷に応じて動的に調整することができる。
【００２３】
例示的な実施形態において、ここで説明されるチャネルは、物理チャネル又は仮想チャネルのどちらであってもよい。幾つかの物理チャネルをグループ化して１つの仮想チャネルにすることができる。それゆえ、ここに説明されるシステム及び方法は、物理チャネル及び仮想チャネルの両方に適用される。
【００２４】
例示的な実施形態において、ＧＣ状態、空き状態、オンライン状態、及び書き込み状態は、全てのチップ・ストライプを通って逐次的に移動し、これを循環バッファと呼ぶことができる。循環バッファ・アーキテクチャは、ブロックの消耗（ウェア）をチップ粒度に対して均等に配分するという利点を有しており、それゆえ付加的なウェア・レベリング方法を必要としないのでスキームの複雑度が低減される。ここに説明される例においては、書き込まれるページを割り当てるためのラウンドロビン戦略は、循環バッファにおいて実施することができるソリューションである。それでもやはり、不良ブロックのせいで、書き込みキュー・ヘッドが、異なるチャネル間で同期しなくなることがある。そのような場合には、先頭の書き込みキュー・ヘッドのヘッドより後ろにあるページのみがキュー内で割り当てられる臨時のラウンドを、ラウンドロビン・スケジューラに挿入することができる。
【００２５】
例示的な実施形態において、静的データと動的データとに分離することができる作業負荷の場合、循環バッファ・アーキテクチャは、ＧＣ中にデータを不必要に動き回らせることがある。従って、実装することができるポリシーの別の例は、ウィンドウ・ベースの貪欲な（ｇｒｅｅｄｙ）回収ポリシーである。ここで説明された方法は、ＧＣによって維持される情報に基づいて、チップをチップ・ストライプに動的にグループ分けすること、並びにチップ・ストライプのサイズを動的に適応させることにより、このようなウィンドウ・ベースの貪欲な回収ポリシーに適するように適合させることができる。
【００２６】
技術的効果は、読み出し、書き込み、及び消去動作を切り離すことにより、同じチップ上の先行する動作に由来する付加的な遅延を完全に隠蔽ことを含む。さらに、あるチップ上での読み出し及び書き込み動作は、同じチップ上での先行する消去動作により引き起こされる付加的な遅延から保護される。技術的効果はさらに、読み出し及び書き込み動作が、消去が行われておらず、その一方でなお、格納されている全ての情報へのアクセスを提供しているチップ上でのみ行われることを保証することを含む。さらに、読み出し動作は、同じチップ上での先行する要求の消去及び書き込み遅延によって不利にならないよう保護される。
【００２７】
ここで用いられる用語は、特定の実施形態を説明するためのものであり、本発明を限定することを意図するものではない。ここで用いられる場合、単数形の不定冠詞及び定冠詞は、文脈から明らかにそうではないことが示されていない限り、複数形も含むことが意図される。「含む」及び／又は「含んでいる」という用語は、本明細書において用いられる場合、言及した特徴、整数、ステップ、動作、要素、及び／又は成分の存在を指定するが、１つ又は複数のその他の特徴、整数、ステップ、動作、要素、成分、及び／又はそれらの群の存在又は追加を排除するものではないこともさらに理解されるであろう。
【００２８】
以下の特許請求の範囲内の全ての「手段又はステップと機能との組合せ（ミーンズ又はステップ・プラス・ファンクション）」要素の対応する構造、材料、動作及び均等物は、明確に特許請求されている他の特許請求された要素と組み合わせてその機能を実行するための、いかなる構造、材料又は動作をも含むことが意図される。本発明の説明は、例証及び説明の目的で提示されたものであるが、網羅的であることを意図するものでもなく、開示された形態の発明に限定することを意図するものでもない。本発明の範囲及び思想から逸脱することのない多くの修正及び変形が、当業者には明らかであろう。実施形態は、本発明の原理及び実際の適用を最も良く説明するように、及び、当業者が、企図される特定の使用に適するように種々の修正を伴う種々の実施形態について本発明を理解することを可能にするように、選択され、説明された。
【００２９】
本明細書で示されるフロー図は、単に１つの例である。本発明の思想から逸脱することなく、この図及びその中に記載されたステップ（又は動作）に対して多くの変形が存在し得る。例えば、ステップを異なる順序で実行することもでき、又はステップを追加し、削除し又は修正することもできる。これらの変形の全ては、特許請求される発明の一部と見なされる。
【００３０】
本発明の好適な実施形態を説明してきたが、現在及び将来の両方において、当業者が、以下の特許請求の範囲内に入る種々の改善及び強化を行うことができることが理解されよう。これらの特許請求の範囲は、最初に記載される発明の適正な保護を維持するよう解釈されるべきである。
【符号の説明】
【００３１】
１００：待ち時間に対する確率密度関数のプロット
２００：待ち時間に対する累積分布関数のプロット
３００：フラッシュ・アーキテクチャ
３０５：主コントローラ
３１０、３１５、３２０、３２５：チャネル・コントローラ
３１１、３１６、３２１、３２６：チャネル・バス
５００：フラッシュ型メモリ・システムにおけるアクセス競合を減らすための方法
６００：ガーベジ・コレクション方法
７００：詳細なガーベジ・コレクション方法
【図１】
0005613260.tif 000002
【図２】
0005613260.tif 000003
【図３】
0005613260.tif 000004
【図４】
0005613260.tif 000005
【図５】
0005613260.tif 000006
【図６】
0005613260.tif 000007
【図７】
0005613260.tif 000008