(57)【特許請求の範囲】
【請求項１】
コントローラであって、
第１の不揮発性ソリッドステートメモリと、前記第１の不揮発性ソリッドステートメモリより遅いアクセス速度を有する第２の不揮発性メモリとを含むデバイスで第１のデータアクセスコマンドを受信し、かつ
前記第１のデータアクセスコマンドが、前記第１の不揮発性ソリッドステートメモリに向けられているとき、前記第１のデータアクセスコマンドを、前記第１の不揮発性ソリッドステートメモリのための第１のコマンド待ち行列に記憶するように構成された、コントローラを備え、
前記コントローラが、
前記第１のデータアクセスコマンドの実行を開始し、
前記第１のデータアクセスコマンドの実行が完了する前に、前記第１の不揮発性ソリッドステートメモリに向けられた第２のデータアクセスコマンドを受信し、かつ
前記第２のデータアクセスコマンドを前記第１のコマンド待ち行列に記憶し、
第３のデータアクセスコマンドを前記第１のコマンド待ち行列に記憶し、
前記第２のデータアクセスコマンドおよび前記第３のデータアクセスコマンドの両方が単一のデータアクセスにより行われ得るかどうかを判定し、かつ
前記判定に基づき前記単一のデータアクセスを行うようにさらに構成され、
前記第１のコマンド待ち行列は、２以上の所定数のデータアクセスコマンドを動作開始前に行列待ちさせるように構成される、装置。
【請求項２】
前記第１の不揮発性ソリッドステートメモリと、
前記第２の不揮発性メモリと、
前記第１のコマンド待ち行列と、をさらに備える、請求項１に記載の装置。
【請求項３】
第２のコマンド待ち行列をさらに備え、
前記コントローラが、
前記第１のデータアクセスコマンドが前記デバイスで受信されるとき、前記第１のデータアクセスコマンドを前記第２のコマンド待ち行列に記憶し、かつ
前記第１のデータアクセスコマンドが、前記第１の不揮発性ソリッドステートメモリと前記第２の不揮発性メモリとのうちのどちらに向けられているかを判定するようにさらに構成された、請求項２に記載の装置。
【請求項４】
前記コントローラが、
前記第１のデータアクセスコマンドを前記第１のコマンド待ち行列に記憶した後、前記第１のデータアクセスコマンドが受信されて、付加的コマンドが前記コントローラに送信されてもよいという表示を送信するようにさらに構成されることをさらに含む、請求項１に記載の装置。
【請求項５】
ホストデバイスからコマンドを受信するように構成されたインターフェースをさらに備え、
前記コントローラが、前記インターフェースを通じてコマンドの結果を前記ホストデバイスに戻すようにさらに構成された、請求項１から請求項４のいずれか１項に記載の装置。
【請求項６】
前記第１の不揮発性ソリッドステートメモリがＮＡＮＤフラッシュメモリであり、
前記第２の不揮発性メモリがディスクメモリであることをさらに含む、請求項１から請求項５のいずれか１項に記載の装置。
【請求項７】
データアクセスコマンドは、前記データアクセスコマンドが前記第１の不揮発性ソリッドステートメモリ内に記憶されたデータを要求するとき、または前記データアクセスコマンドが前記第１の不揮発性ソリッドステートメモリに書き込まれるデータを含むとき、前記第１の不揮発性ソリッドステートメモリに向けられていることをさらに含む、請求項１に記載の装置。
【請求項８】
プロセッサに方法を行わせる命令を記憶するメモリデバイスであって、前記方法が、
キャッシュメモリを含むデータ記憶デバイスで第１のデータアクセスコマンドを受信することと、
前記第１のデータアクセスコマンドが前記キャッシュメモリに向けられているとき、前記第１のデータアクセスコマンドを、前記キャッシュメモリのための第１のコマンド待ち行列に記憶することと、
前記第１のデータアクセスコマンドが前記データ記憶デバイスで受信されるとき、前記第１のデータアクセスコマンドを第２のコマンド待ち行列に記憶することと、
前記第１のデータアクセスコマンドが前記キャッシュメモリに向けられているか、または第１の不揮発性メモリに向けられているかを判定することと、
前記第１のデータアクセスコマンドの実行を開始することと、
前記第１のデータアクセスコマンドの実行が完了する前に、前記キャッシュメモリに向けられた第２のデータアクセスコマンドを受信することと、
前記第２のデータアクセスコマンドを前記第１のコマンド待ち行列に記憶することと、
第３のデータアクセスコマンドを前記第１のコマンド待ち行列に記憶することと、
前記第２のデータアクセスコマンドおよび前記第３のデータアクセスコマンドの両方が、前記キャッシュメモリの同一データ要素であって、単一のアクセス動作中にアクセスされるある量の記憶空間である、データ要素にアクセスすることを必要とするかどうかを判定することと、
前記第２のデータアクセスコマンドおよび前記第３のデータアクセスコマンドの両方が前記同一のデータ要素へのアクセスを必要とするとき、前記第２のデータアクセスコマンドおよび前記第３のデータアクセスコマンドの両方に単一のアクセス動作を行うことと、をさらに含み、
前記第１のコマンド待ち行列は、２以上の所定数のデータアクセスコマンドを動作開始前に行列待ちさせる、メモリデバイス。
【請求項９】
前記方法が、
前記第１のデータアクセスコマンドを前記第１のコマンド待ち行列に記憶した後、前記第１のデータアクセスコマンドが受信されて、付加的コマンドが前記データ記憶デバイスのコントローラに送信されてもよいという表示を送信することをさらに含む、請求項８に記載のメモリデバイス。
【請求項１０】
前記方法が、
インターフェースを通じてホストデバイスから前記第１のデータアクセスコマンドを受信することと、
前記インターフェースを通じてコマンドの結果を前記ホストデバイスに戻すことと、をさらに含む、請求項８に記載のメモリデバイス。
【請求項１１】
データ記憶デバイスで、第１のデータアクセスコマンドを受信することと、
前記第１のデータアクセスコマンドを第１のコマンド待ち行列に記憶することと、
前記データアクセスコマンドがフラッシュメモリに向けられているか、または前記フラッシュメモリより遅いアクセス時間を有する第１の不揮発性メモリに向けられているかを判定することと、
前記第１のデータアクセスコマンドが前記フラッシュメモリに向けられているとき、前記第１のデータアクセスコマンドを第２のコマンド待ち行列に記憶することと、
前記第１のデータアクセスコマンドを前記第２のコマンド待ち行列に記憶した後、前記第１のデータアクセスコマンドの受信が成功したという表示を送信することと、
前記フラッシュメモリに対する前記第１のデータアクセスコマンドの実行を開始することと、
前記第１のデータアクセスコマンドの実行が終了する前に、第２のデータアクセスコマンドを受信して、それを前記第２のコマンド待ち行列に記憶することと、
第３のデータアクセスコマンドを前記第２のコマンド待ち行列に記憶することと、
前記第２のデータアクセスコマンドおよび前記第３のデータアクセスコマンドが、前記フラッシュメモリに対する単一のデータアクセス動作で完了され得るかどうかを判定することと、
前記第２のデータアクセスコマンドおよび前記第３のデータアクセスコマンドの両方が前記単一のデータアクセス動作で完了され得るとき、前記単一のデータアクセス動作を行って、前記第２のデータアクセスコマンドおよび前記第３のデータアクセスコマンドを解決することと、を含み、
前記第１のコマンド待ち行列は、２以上の所定数のデータアクセスコマンドを動作開始前に行列待ちさせる、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示はデータ記憶デバイス（ＤＳＤ）に関連し、特に、ソリッドステートメモリを用いるＤＳＤに関連する。
【発明の概要】
【課題を解決するための手段】
【０００２】
ある実施形態において、装置は、不揮発性ソリッドステートメモリおよびディスクメモリを含むデバイスで第１のデータアクセスコマンドを受信し、前記第１のデータアクセスコマンドが前記不揮発性ソリッドステートメモリに向けられているとき、前記第１のデータアクセスコマンドを、前記不揮発性ソリッドステートメモリのための第１のコマンド待ち行列に記憶するように構成されたコントローラを備えてもよい。
【０００３】
別の実施形態において、メモリデバイスは、プロセッサに方法を行わせる命令を記憶してもよく、前記方法は、キャッシュメモリを含むデータ記憶デバイスで第１のデータアクセスコマンドを受信することと、前記第１のデータアクセスコマンドが前記キャッシュメモリに向けられているとき、前記第１のデータアクセスコマンドを、前記キャッシュメモリのための第１のコマンド待ち行列に記憶することと、を含む。
【０００４】
別の実施形態において、方法は、データ記憶装置で第１のデータアクセスコマンドを受信することと、前記第１のデータアクセスコマンドを第１のコマンド待ち行列に記憶することと、前記データアクセスコマンドがフラッシュメモリに向けられているか、またはディスクメモリに向けられているかを判定することと、前記第１のデータアクセスコマンドが前記フラッシュメモリに向けられているとき、前記第１のデータアクセスコマンドを第２のコマンド待ち行列に記憶することと、を含んでもよい。
【図面の簡単な説明】
【０００５】
【図１】ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を含むシステムの例示的な実施形態の図である。
【図２】ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を含むシステムの別の例示的な実施形態の図である。
【図３】ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を含むシステムの別の例示的な実施形態の図である。
【図４】ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いるプロセスの例示的な実施形態の図である。
【図５】ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いる方法の例示的な実施形態のフローチャートである。
【図６】ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いるプロセスの例示的な実施形態の図である。
【図７】ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いる方法の例示的な実施形態のフローチャートである。
【発明を実施するための形態】
【０００６】
実施形態の以下の詳細な説明において、この説明の一部をなし、特定の実施形態を例示するために示される添付の図面を参照する。本開示の範囲を逸脱しない範囲で他の実施形態が利用されてもよく、かつ、構造的変化がなされてもよいことを理解すべきである。また、本開示の範囲を逸脱しない範囲で種々の実施形態の特徴が組み合わされ、分離され、交換され、または取り除かれ得ることも理解すべきである。
【０００７】
図１は、概して１００と称される、ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を含むシステムのある実施形態を示す。システム１００は、ホスト１０２およびデータ記憶デバイス（ＤＳＤ）１０４を含んでもよい。ホスト１０２はまた、ホストシステムまたはホストコンピュータと称されてもよい。ホスト１０２は、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、タブレット端末、電話機、音楽プレーヤ、別の電子デバイス、またはそれらのいずれかの組み合わせであり得る。同様に、ＤＳＤ１０４は、上記のデバイスのいずれか、またはデータを記憶または検索するために使用されてもよいいずれかの他のデバイスであってもよい。ホスト１０２およびＤＳＤ１０４は、有線または無線接続を経由して、あるいはローカルエリアネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）により接続されてもよい。いくつかの実施形態において、ＤＳＤ１０４はホスト１０２に接続されていない独立型デバイスであり得るか、またはホスト１０２およびＤＳＤ１０４の両方が単一のユニットの一部であってもよい。
【０００８】
ＤＳＤ１０４は、不揮発性メモリ１０６およびソリッドステートメモリ１０８を含んでもよい。不揮発性メモリ１０６は、ディスクドライブなどの磁気記憶媒体、不揮発性ソリッドステートメモリ、または他のタイプのメモリ、またはそれらの組み合わせを備えてもよい。ソリッドステートメモリ１０８は、ＮＡＮＤまたは他のタイプのフラッシュメモリなどの別の不揮発性メモリ、いずれかの他のタイプの不揮発性メモリ、またはそれらの組み合わせを備えてもよい。ソリッドステートメモリ１０８は、例えば、不揮発性メモリ１０６から頻繁にまたは最近、アクセスされたデータを記憶するために、不揮発性メモリ１０６のキャッシュとして使用されてもよい。例えば、ＤＳＤ１０４は、ディスク不揮発性メモリ１０６およびソリッドステートフラッシュキャッシュメモリ１０８を有するハイブリッドドライブを備えてもよい。例えば、不揮発性メモリ１０６は、ディスクメモリ、シングルレベルまたはマルチレベルフラッシュなどのソリッドステートメモリ、別の種類の不揮発性メモリ、またはそれらのいずれかの組み合わせであってもよい。いくつかの実施形態において、不揮発性メモリ１０６およびソリッドステートメモリ１０８は、データを記憶または検索するために、異なるアクセス方法を用いてもよい。
【０００９】
いくつかの実施形態において、ソリッドステートメモリ１０８は、不揮発性メモリ１０６より早い読み取りまたは書き込みアクセス時間を有してもよい。ソリッドステートメモリ１０８は、不揮発性メモリ１０６に対するアクセス速度より早いアクセスのデータを記憶するためのキャッシュとして使用されてもよい。例えば、ＤＳＤ１０４は、ホスト１０２からのデータ読み取り要求を受信してもよく、かつ、ＤＳＤは、まず要求されたデータを保持するかどうかを判定するために、キャッシュメモリ１０８を確認してもよい。もしそうであるなら、ＤＳＤ１０４はデータを迅速に検索することが可能であってもよく、一方、もしそうでなければ、ＤＳＤは、より遅い不揮発性メモリ１０６からデータを検索する必要があってもよいし、未来の読み取り要求の場合は、データをキャッシュ１０８に装填してもよい。別の例において、ＤＳＤ１０４は、データ書き込みコマンドを受信してもよい。ＤＳＤ１０４はデータをキャッシュメモリ１０８に書き込んでもよく、その書き込みは不揮発性メモリ１０６への書き込みより早くてもよい。このようにして、もしデータが頻繁に更新されつつあれば、データはより早いキャッシュ１０８に書き込まれてもよいし、間隔を置いて、またはしばらく経って、不揮発性メモリ１０６にコピーされるだけでもよい。ソリッドステートメモリ１０８によって提供された減少した待ち時間は、ＤＳＤ１０４の全体的な性能および応答時間を改善し得る。
【００１０】
図２は、概して２００と指定される、ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を含むシステムのある実施形態の図を示す。システム２００は、図１に示されるホスト１０２などのホストデバイス２０２を含んでもよい。ホスト２０２は、有線または無線接続を介して、図１に示されるＤＳＤ１０４などのソリッドステートハイブリッドドライブデータ記憶デバイス（ＤＳＤ）２０４に接続されてもよい。ＤＳＤ２０４は、ハードディスクドライブ２０６などの不揮発性メモリや、ＮＡＮＤフラッシュメモリ２０８などの不揮発性ソリッドステートメモリを含んでもよい。ＤＳＤ２０４は、ＤＳＤ２０４の他の動作およびプロセスだけでなくメモリに対するアクセス動作を制御するために、ＨＤＤコントローラ２１０およびフラッシュコントローラ２１２をさらに含んでもよい。いくつかの実施形態において、ＨＤＤコントローラ２１０およびフラッシュコントローラ２１２は１つ以上の回路デバイスを含んでもよいし、複数の動作を行うように構成された単一のユニットに組み込まれてもよい。さらに、ＤＳＤ２０４は、一次待ち行列２１４およびフラッシュ待ち行列２１６を有してもよいし、保留のＤＳＤ２０４のアクセス動作を記憶するために使用されてもよい。一次待ち行列２１４およびフラッシュ待ち行列２１６は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）またはスタティックＲＡＭ（ＳＲＡＭ）ユニットなどの１つ以上のメモリに記憶されてもよい。
【００１１】
ある例示的な実施形態において、ホスト２０２は、ＳＡＴＡインターフェースなどの有線または無線インターフェースを通じて、コマンドをＤＳＤ２０４に送信してもよい。インターフェースを通じてＤＳＤ２０４により受信されるコマンドは、一次待ち行列２１４内に入れられてもよい。例えば、単一のコマンドを受信するよりはむしろ、コマンドを実行し、その後、第２のコマンドを受信する前に「動作完了」応答をホストに戻し、ＤＳＤはその代わりに複数のコマンドを受信して、それらを待ち行列に記憶してもよく、それぞれの後に、コマンドの受信が成功して、新コマンドが送信されてもよいという表示をホストに戻す。これは新コマンドが受信されるようにするが、その一方、先のコマンドは以前として実行されつつある。これは、ＳＡＴＡインターフェースコマンドなどのためのコマンドオーバーヘッドによる遅延を減少させることに役立つことも可能である。
【００１２】
ＤＳＤ２０４は、例えば、最も古く受信されたコマンドを一次待ち行列２１４から検索することによって、所与のコマンドをＨＤＤコントローラ２１０で受信してもよい。読み取りまたは書き込み動作などのデータアクセス動作について、ＨＤＤコントローラ２１０は、動作がＨＤＤ２０６またはフラッシュメモリ２０８に向けられるべきかどうかを判定してもよい。データ動作がＨＤＤ２０６に向けられた場合、ＨＤＤコントローラ２１０はＨＤＤ２０６にアクセスすることができ、その後、必要に応じてホスト２０２に結果を戻す。
【００１３】
本開示のある実施形態によると、フラッシュメモリ２０８に向けられた動作は、例えば、フラッシュに基づく動作を実行するためのプログラム可能な状態機械（ＰＳＭ）を含んでもよいフラッシュコントローラ２１２に送信されてもよい。フラッシュ待ち行列２１６なしのシステムにおいて、コマンドは、動作を完了するためにフラッシュメモリ２０８にアクセスするフラッシュコントローラ２１２に送信されてもよい。フラッシュコントローラ２１２はその後、ＨＤＤコントローラが一次待ち行列２１４から次の動作に進むことが可能となる前に、結果をＨＤＤコントローラ２１０に送り返してもよい。しかしながら、本例におけるようなフラッシュ待ち行列２１２を有するシステムにおいて、実行またはフラッシュコントローラ２１２に到達する前に、コマンドはフラッシュ待ち行列２１６に記憶されてもよい。
【００１４】
複数のコマンド状況において、これは、コマンドの受信および実行の性能を改善してもよく、バスを介して送信されつつある複数のコマンドによる待ち時間の量を減少させることによって、ＮＡＮＤフラッシュからのデータをＨＤＤコントローラに転送する。フラッシュキャッシュを使用するバッファリングコマンドは、図４に示されるように、連続送信を許可する。
【００１５】
図３は、概して、３００と指定される、ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を含むシステムのある実施形態の別の図を示す。具体的には、図３は、例示的なソリッドステートハイブリッドディスクドライブデータ記憶デバイス（ＤＳＤ）３００の機能的なブロック図を提供する。ＤＳＤ３００は、図１に示されるようなデバイス１０４などのデータ記憶デバイスであってもよい。ＤＳＤ３００は、ＤＳＤ３００をホスト３０２から物理的に取り除かれるようにさせるコネクタ（図示せず）を含んでもよい、ハードウェアまたはファームウェアに基づくインターフェース回路３０４を介して、（図１に示されるホストシステム１０２などの）ホストデバイス３０２と通信可能である。いくつかの実施形態において、ＤＳＤ３００は、ＤＳＤの構成要素を収納するケーシング３４０を有してもよい。いくつかの実施形態において、ＤＳＤ３００は、有線または無線通信を通じてインターフェース３０４を介して、３０２と通信してもよい。バッファ３１２は、読み取りおよび書き込み動作中、一時的にデータを記憶することができ、保留の動作が一時的に記憶された保留の実行になり得るコマンド待ち行列（ＣＱ）３１３を含み得る。ＣＱ３１３は、図２に示された一次待ち行列２１４に対応してもよい。インターフェース３０４を通じて到着するコマンドは、ＣＱ３１３で自動的に受信されるかまたは、ＨＤＤコントローラ３０６、インターフェース３０４、あるいは別の構成要素によって、そこに記憶されてもよい。ＮＡＮＤフラッシュメモリなどのソリッドステートメモリ３３０が含まれることが可能であり、これは、例えば、最近または頻繁に、読み出された、または書き込まれたデータを記憶するために、キャッシュとして使用され得る。ディスク３０９およびフラッシュ３３０などの複数のタイプの不揮発性記憶媒体を含むＤＳＤ３００は、ハイブリッド記憶デバイスであってもよい。
【００１６】
ＤＳＤ３００は、関連するメモリ３０８およびプロセッサ３１０を有する（図２のＨＤＤコントローラ２１０などの）プログラム可能なコントローラ３０６を含み得る。さらに、図３は、ＤＳＤ３００が読み書き（Ｒ／Ｗ）チャネル３１７を含み得ることを示し、このチャネルは、書き込み動作中にデータを符号化することができ、かつ、読み取り動作中に、ディスク（複数を含む）３０９から検索されたユーザデータを再構成することができる。プリアンプ回路（プリアンプ）３１８は、書き込み電流をヘッド（複数を含む）３１９に印加することができ、かつ、リードバック信号の前置増幅を提供する。サーボ制御回路３２０はサーボデータを使用して、ヘッド（複数を含む）３１９の位置を合わせるために、コイル３２４に適切な電流を供給してもよい。コントローラ３０６は、コマンド待ち行列３１３における種々の保留のコマンドの実行中、ディスク（複数を含む）３０９上の所望の場所にヘッド（複数を含む）３１９を移動するために、プロセッサ３２２と通信することができる。いくつかの実施形態において、フラッシュ３３０は、ディスクから読み出されキャッシュに装填されたデータなどの、すでにディスク３０９上に記憶されたデータのコピーを記憶してもよい。またあるときは、フラッシュ３３０は、ディスク３０９にまだ記録されていない書き込みデータなどの、ディスク３０９上にはないデータを含んでもよい。
【００１７】
ある例示的な実施形態において、コマンドは、インターフェース３０４を通じてホスト３０２からＤＳＤ３００で受信される。インターフェース３０４は、有線あるいは無線の、とりわけ、ＵＳＢ、ＩＥＥＥ１３９４、コンパクトフラッシュ（登録商標）、ＳＡＴＡ、ｅＳＡＴＡ、ＰＡＴＡ、ＳＣＳＩ、ＳＡＳ、ＰＣＩｅ、ファイバーチャネル、イーサネット（登録商標）、またはサンダーボルトなどの、ホスト３０２とＤＳＤ３００間で通信を許可するいずれかのインターフェースを備えてもよい。ＤＳＤ３００は、コマンドの性質を決定して、それに応じて動くように構成されてもよい。例えば、読み取りコマンドは、ＤＳＤ３００が、例えば、ＨＤＤコントローラ３０６を使用して、データがキャッシュ３３０内にあるか、またはディスク３０９の上にあるだけか、また、データがキャッシュ内になかった場合、データをキャッシュから検索するかそれともディスクをスピンアップするかを判定するという結果になってもよい。別の例では、書き込みコマンドは、ＤＳＤ３００が、データをキャッシュ３３０に書き込み、キャッシュ内に依然として存在している同一データのいずれかの古いコピーを無効化し、後で、書き込みデータをディスク３０９に転送するという結果になってもよい。
【００１８】
いくつかの実施形態において、ＤＳＤ３００は、フラッシュ待ち行列３２６とフラッシュコントローラ３２８をさらに含んでもよい。所定の実施形態において、フラッシュ待ち行列３２６は、フラッシュメモリ３３０から物理的に分離されたメモリ要素になり得る。フラッシュ待ち行列３２６は、コマンド待ち行列３１３を有するＤＲＡＭバッファ３１２に類似した、揮発性または不揮発性メモリを含んでもよく、かつ、保留の動作をフラッシュメモリ３３０に記憶するために使用されてもよい。いくつかの実施形態において、フラッシュ待ち行列は、ＣＱ３１３に加えて、ＤＲＡＭバッファ３１２に記憶されることが可能である。フラッシュ待ち行列などは、ＤＳＤ３００に、フラッシュメモリ３３０の複数の動作を行列待ちさせてもよく、その一方、他の動作が実行しつつあり、それによって、待ち時間を改善し、フラッシュメモリ３３０のアイドル時間を減少させる。
【００１９】
フラッシュコントローラ３２８は、データを記憶するまたは検索するなどのフラッシュメモリ３３０の動作を制御するために、プログラム可能な状態機械（ＰＳＭ）などの回路を含んでもよい。いくつかの実施形態において、ＨＤＤコントローラ３０６およびフラッシュコントローラ３２８は、コマンドがディスクに向けられるべきか、あるいはフラッシュに向けられるべきかを判定するためのソフトウェア、ディスクメモリ３０９の動作を制御するためのソフトウェア、およびフラッシュメモリ３３０の動作を制御するためのソフトウェアなどの異なる機能を行うためのソフトウェアを起動する単一の回路の一部であってもよい。いくつかの実施形態において、ＨＤＤコントローラ３０６は、すべてのフラッシュコマンドをフラッシュ待ち行列３２６に送信するように構成されてもよく、フラッシュコントローラ３２８は、待ち行列３２６を通してコマンドを受信する。いくつかの実施形態において、コマンドはＨＤＤコントローラ３０６からフラッシュコントローラ３２８に送信されてもよく、フラッシュコントローラは、動作を迅速に開始するように、またはフラッシュメモリがビジーな場合、コマンド（複数を含む）をフラッシュ待ち行列３２６内に設置するように構成されてもよい。コマンドが受信され実行されるか、またはフラッシュ待ち行列３２６への記憶が成功である場合、コマンドの受信が成功であったというインジケータが戻されてもよい。フラッシュ待ち行列３２６がフルの場合、フラッシュメモリがビジーであるというインジケータが戻されてもよい。フラッシュメモリ３３０、フラッシュコントローラ３２８、およびフラッシュ待ち行列３２６間の他の実施および動作もまた可能である。
【００２０】
図４に戻ると、ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いるプロセスの例示的な実施形態の図が示されている。第１の例４００では、フラッシュメモリの待ち行列なしのシステムの図が示されている。例４００では、第１のコマンド４０２がフラッシュメモリで受信され、その後、処理されて、状態は４０４に戻る。第１のコマンドが処理を終了した後にのみ、フラッシュメモリは第２のコマンド４０６を受信することが可能であり、第２のコマンドを処理した後などに、第３のコマンドは受信されることのみが可能である。各コマンドを完了した後、フラッシュメモリ自身は遊んでいてもよい一方で、次のコマンドが受信され、その結果、全体的に無効力となる。
【００２１】
図４の第２の例４２０において、フラッシュメモリのためのコマンド待ち行列を用いるシステムが示される。この例４２０では、第１のコマンド４２２はフラッシュメモリで受信されてもよく、処理が開始可能となる。第１のコマンド４２２の処理が完了する前に、フラッシュは、行列待ちさせることができる第２のコマンド４２４を受信してもよく、フラッシュコントローラは、第１のコマンドが完了する前でさえも、第２のコマンドの実行を開始できる。第３のコマンド４２６はまた、第１のコマンド４２２が完了する前に、受信され、行列待ちさせられてもよい。第１のコマンド４２２が処理を終了して、状態が戻る前に、第２のコマンド４２４は、フラッシュメモリのアイドル時間がほぼなしで、または全くなしで、処理を開始することができる。フラッシュコントローラは、各コマンドが受信されて、かつ先のコマンドが完了する前に、各コマンドの一部として受信された論理ブロックアドレス（ＬＢＡ）に対応するフラッシュメモリにおいて物理的な場所を決定すること、フラッシュからデータを検索することと、コマンドの結果を戻すことなどの動作を各コマンド上で行うことが可能であってもよい。このように、フラッシュコントローラは、複数のコマンドを同時に処理することが可能であってもよく、処理の有効性が利用可能となると、コマンドをフラッシュコマンド待ち行列から検索する。コマンドを、バッファおよび連続送信動作に記憶することによって、３つのコマンドのための合計待ち時間の重要な減少４３０は、フラッシュ待ち行列なしの例４０２と比較されて達成され得る。
【００２２】
いくつかの実施形態において、フラッシュ待ち行列は、先入れ先出し（ＦＩＦＯ）待ち行列として機能してもよく、コマンドは、それらが受信される順番で実行される。他の実施形態において、行列待ちコマンドは、順序に従わず行われてもよい。例えば、図６および図７に関連してより詳細に説明されるように、コマンドは組み合わされてもよく、その結果、所定のコマンドが、それらが受信される順番とは異なる順番で完了されることになる。いくつかの実施形態において、ＤＳＤは、行列待ちコマンドの重要性または優先度に基づいて動作の性能を編成することが可能であってもよい。例えば、コマンドは優先度値を割り当てられてもよく、ユーザアプリケーションから生じるコマンドは、システムアプリケーションからのコマンドに対して優先度を与えられてもよい。
【００２３】
図５は、概して、５００と指定される、ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いる方法の例示的な実施形態のフローチャートを示す。本方法は、５０２で、ホストからのコマンドをデータ記憶デバイス（ＤＳＤ）で受信することを含んでもよい。例えば、ホストは、有線または無線接続を通じて、データを読み取るまたは書き込むためのコマンドをデータ記憶デバイスに送信してもよい。コマンドは、コントローラまたはプロセッサで受信されてもよく、コントローラまたはプロセッサは、その後、コマンドを、他のメモリコントローラ、またはコントローラまたはプロセッサの他のソフトウェアモジュールに向けてもよい。
【００２４】
本方法はその後、５０４で、例えば、ＤＳＤのコントローラで、コマンドがディスクメモリなどの第１のメモリに、またはソリッドステートＮＡＮＤフラッシュメモリなどの第２のメモリに向けられるかどうかを判定することを含んでもよい。例えば、書き込みコマンドは、関連データを記憶用のフラッシュメモリに送信することを含んでもよく、このデータはその後、ディスクメモリに記憶されてもよい。いくつかの状況において、書き込みデータは、記憶用のディスクメモリに直接、送信されてもよい。読み取りコマンドは、読み取りコマンド内で識別された論理ブロックアドレス（ＬＢＡ）がフラッシュメモリ内に記憶されているかどうかを、またはそれらがディスクメモリから検索されるべきかどうかを判定することを含んでもよい。
【００２５】
５０４で、コマンドをディスクメモリに向けるために判定が行われるとき、本方法は、５０６で、コマンドを行うためにディスクメモリにアクセスすることを含んでもよい。例えば、ディスクはスピンアップされてもよく、データはディスクに書き込まれる、またはディスクから読み取られてもよく、結果（例えば、書き込み完了表示または読み取りデータ）が戻される。コマンドを行った後、またはいくつかの実施形態ではコマンドの受信が成功し、目標メモリを識別後、ＤＳＤは、５０２で、コマンドをホストから受信することに戻ってもよい。例えば、ＤＳＤは、先のコマンドを完了する前に、付加的コマンドを受信することが可能であってもよい。
【００２６】
５０４で、ホストから受信したコマンドをフラッシュメモリに向けるために判定が行われるとき、本方法は、５０８で、コマンドをフラッシュコマンド待ち行列に付加することを含んでもよい。いくつかの実施形態において、コマンドは、例えば、フラッシュメモリが遊んでいて、コマンドの処理を迅速に開始できる場合、フラッシュ待ち行列に設置されることなく迅速に、実行用のフラッシュコントローラに送信されてもよい。他の実施形態において、いずれかの他のコマンドがフラッシュメモリで処理されつつあるかどうかにかかわらず、コマンドはフラッシュ待ち行列に設置されてもよい。
【００２７】
５０８で、いったんコマンドがフラッシュ待ち行列内に設置されてしまうと、本方法は、５１０で、コマンドの実行を開始することを含んでもよい。例えば、フラッシュメモリがすでにビジーでない場合、コマンドは迅速に実行されてもよいし、またはフラッシュメモリがもはやビジーでなくなるまでは、コマンドは待ち行列で保留のままであってもよい。いくつかの実施形態において、先のフラッシュメモリ動作がまだ完了していない場合でさえも、フラッシュコントローラはコマンドを実行する準備をしてもよい。いったんコマンドが実行されてしまうと、本方法は、例えば、ＤＳＤコントローラまたはホストデバイスに、動作の結果を戻すことを含んでもよい。
【００２８】
５０８で、コマンドをフラッシュ待ち行列内に設定した後、本方法はまた、５１４で、フラッシュメモリがコマンドを受信したことを表示しているコマンド受信済み応答を送信することを含んでもよく、コマンド受信済み応答は、ＤＳＤコントローラまたはホストに対して、付加的コマンドがフラッシュに送信され得ることを表示してもよい。同時に、または５１０でコマンドの実行を開始する前に、コマンド受信済み応答が送信されてもよいし、また、付加的コマンドが受信されてもよい。例えば、５０８で、コマンドはフラッシュ待ち行列内に設置されてもよく、５１４で、「コマンド受信済み」応答は送信されてもよく、またコマンドは待ち行列で保留のままであってもよい一方、他の動作がフラッシュメモリ上で完了し、かつ、付加的コマンドが受信されて、これもまたフラッシュ待ち行列内に設置されてもよい。
【００２９】
図６に戻ると、ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いるプロセスの例示的な実施形態の図が示される。図４に示されるように、第１の例６００は、フラッシュメモリのための待ち行列なしのシステムの図を示す。例６００において、先の動作が完了し、状態が戻った後にのみ、各コマンドはフラッシュメモリに送信される。この結果、フラッシュメモリが遊んでいるかもしれない一方でコマンドが転送されつつあるため、非効率になるかもしれない。
【００３０】
待ち行列なしのフラッシュメモリを用いるいくつかのシステムには、付加的な非効率性がある場合がある。いくつかの実施形態において、フラッシュメモリの「ページ」の大きさに基いてデータがフラッシュメモリから徐々に読み取られてもよい。例えば、フラッシュページは、８キロバイト、１６キロバイト、またはなんらかの他の量のデータを含んでもよい。いくつかのシステム構築において、ＤＳＤは、複数のページにまとめて縞模様をつけるように構成されてもよく、その結果、２ページ以上がともに読み取られ、１６キロバイト、３２キロバイトの有効な読み取りサイズ、またはいくつかの他の複数のフラッシュページのサイズとなる。しかしながら、ホストは、データがフラッシュ読み取り要素より小さい大きさになってもよいことを要求する。例えば、ホストは、ＤＳＤから読み取りコマンドごとにわずか４キロバイトのデータを要求してもよいが、ＤＳＤは同時に８または１６キロバイトを読むように構成されていてもよい。このような実施形態において、フラッシュコントローラは、わずか４キロバイトのデータをＨＤＤまたはＤＳＤコントローラに送信してもよく、ホストに続いて、要求された４キロバイト以外のすべての読み取りデータを破棄する。ホストはその後、読み取られただけで破棄された同一のフラッシュ要素に位置していた別の４キロバイトのデータの別の読み取り要求を送信してもよい。同一のフラッシュページが短時間に複数回読み取られる必要があるかもしれないため、これはＤＳＤにおける動作の非効率性につながり得る。
【００３１】
図６の第２の例６２０は、フラッシュ待ち行列を含むシステムを示し、このシステムは、単一の動作でホストコマンドによって要求されるよりも大きなデータ要素をフラッシュメモリから読み取るように構成されていてもよい。例６２０において、第１のコマンド６２２はフラッシュメモリで受信されてもよく、それはその後、６３０で、コマンドの処理を開始してもよい。第１のコマンド６２２が処理されている間、第２のコマンド６２４および第３のコマンド６２６が受信されてフラッシュ待ち行列に設置されてもよい。フラッシュコントローラは、第２のコマンド６２４および第３のコマンド６２６が両方ともに、単一のフラッシュデータ要素に含まれるデータの読み取り要求であるかどうかを判定してもよい。例えば、両方のコマンドが、１６キロバイトの同一のフラッシュページ上に記憶された４キロバイトのデータのための読み取りコマンドであってもよい。第２のコマンド６２４および第３のコマンド６２６が合体できると判定された後、フラッシュコントローラは第２のコマンド６２４および第３のコマンド６２６の両方のデータを含むフラッシュページ上で単一の読み取り動作６３２を行って、その両方のデータを戻してもよい。２つのコマンドの２つの読み取り動作を実行するよりはむしろ、単一の動作が行われてもよい。これは、他のコマンドが完了する一方で待ち行列コマンドの利点を結合させることによって、またコマンドをフラッシュメモリ上のより少ない動作に結合させることによって、受信された動作の応答時間で著しい減少６３４を作成することができる。
【００３２】
いくつかの実施形態において、ＤＳＤは、コマンドを結合する利点を最大限にするために、設定された数のコマンドを動作開始前に行列待ちさせるように構成されてもよい。例えば、ＤＳＤは、コマンドを実行する前に、８つのコマンドがフラッシュメモリのために行列待ちさせられるまで待機してもよく、その結果、関連コマンドがより少ない動作に結合されることが可能になる。関連コマンドは、連続して受信される必要はない。例えば、６つのコマンドがフラッシュ待ち行列内にある場合、フラッシュコントローラは、第１および第５のコマンドが、同一のフラッシュ読み取り可能データ要素のための読み取り要求であることを識別してもよい。両方のコマンドが同一の動作で完了されることが可能であり、第１および第５のコマンドの両方をフラッシュ待ち行列から取り除く。いくつかの実施形態において、ＤＳＤは、付加的な動作が受信されるかどうかを判定するためには短時間、待つだけでよく、その結果、コマンドは、フラッシュ待ち行列で長時間、保留のままにはならない。
【００３３】
いくつかの実施形態において、複数の書き込みコマンドはまた、複数の書き込み動作よりはむしろ１つの動作で、フラッシュメモリに書き込まれるように結合されてもよい。いくつかの実施形態において、フラッシュが使用されて、最近のデータを読み書きから記憶してもよく、また、書き込みコマンドは単一の書き込み動作に結合されてもよい。書き込みは、同一のＬＢＡ範囲に限定される必要はない。明確なＬＢＡ範囲すべてにおける複数の書き込みコマンドは、単一の動作でフラッシュに書き込まれ得る。いくつかの実施形態において、個々の書き込みをフラッシュページ境界に合わせることから生じるような、フラッシュの無駄な空間がないように、一組の書き込みはともにグループ分けされることが可能である。書き込み速度がより早くなるかもしれないため、これは性能だけでなくフラッシュ利用効率も改善できる。
【００３４】
図７は、ハイブリッド素子におけるソリッドステートメモリコマンド待ち行列を用いる方法７００の例示的な実施形態のフローチャートを示す。方法７００は、７０２で、第１のユニットのデータのための読み取りコマンドを受信することを含んでもよい。１つ以上の論理ブロックアドレス（ＬＢＡ）に関連する４ｋＢｙｔｅユニットのデータなどの特定のチャンクデータを検索するために、例えば、これは、ハイブリッドデータ記憶デバイスで、ホストから読み取りコマンドを受信することを含んでもよい。
【００３５】
本方法は、その後、７０４で、要求されたデータがフラッシュメモリ内（例えば、ＮＡＮＤフラッシュメモリのソリッドステートキャッシュ内）にあるかどうか、またはデータがディスクメモリ上にあるのみであるかどうかを判定することを含んでもよい。７０４で、データがディスクから検索されることになっていれば、本方法は、７０６で、ディスクからデータを読み取ることを含んでもよい。ＤＳＤは、７０２で、読み取りデータのコピーをフラッシュメモリに記憶し、要求されたデータをホストデバイスに戻し、さらなるコマンドを待ってもよい。７０４で、要求されたデータがフラッシュ内にすでに位置している場合、本方法は、７０８で、読み取りコマンドをフラッシュ待ち行列内に設置することを含んでもよい。
【００３６】
方法７００は、７１０で、要求された第１のユニットのデータが、別の行列待ち読み取りコマンドに関連するデータと同一の読み取り可能フラッシュ要素上に位置しているかどうかを判定することを含んでもよい。例えば、フラッシュコントローラは、第１のユニットのデータが、他の要求されたデータと同一のフラッシュページ上にあるかどうか、または複数のフラッシュページが同時に読み取られる実施形態において、第１のデータが、他の要求されたデータと同一の組の縞模様がつけられたページ上にあるかどうかを判定してもよい。第１のユニットのデータが、他の要求されたデータと同一のフラッシュ読み取り要素上にない場合、本方法は、７１２で、第１のデータを含むページを読み取り、それをホストに戻すことを含んでもよい。フラッシュ待ち行列内の先の保留の動作がまず完了した後に、これは起きてもよい。
【００３７】
第１のユニットのデータが他の要求されたデータと同一のフラッシュ要素上にあると判定された場合、本方法は、７１４で、第１のデータおよび別の行列待ちコマンドと関連付けられた他のデータの両方を含むフラッシュページまたは要素を読み取って、両方の組のデータをホストに戻すことを含んでもよい。関連コマンドに対する７１０の判定は、各々の新コマンドが受信されるときに行われてもよく、その結果、所与のコマンドは待ち行列内の先のコマンドと組み合わされてもよいし、または後に受信されたコマンドと組み合わされてもよい。例えば、コマンドが先に行列待ちされたコマンドと組み合わされた場合、「順番を無視して」、コマンドが実行されてもよく、それより早く検索されたデータは、いつそれが待ち行列に設置されたかによって、今度は各コマンドが実行されたかどうかになるであろう。
【００３８】
図５および図７の方法は例示的な実施形態であり、本開示の範囲を逸脱しない範囲で変更がなされてもよい。例えば、図６に関して説明された書き込みコマンドなどの、読み取りコマンド以外のコマンドが組み合わされてもよい。ディスクメモリおよびフラッシュメモリ以外の他のタイプのメモリが使用されてもよい。他の変更も可能である。
【００３９】
種々の実施形態によれば、本願に記載された方法は、コンピュータプロセッサまたはコントローラデバイス上で起動している１つ以上のソフトウェアプログラムとして実施されてもよい。別の実施形態によれば、本願に記載された方法は、ディスクドライブなどのデータ記憶デバイスを使用するパーソナルコンピュータなどのコンピュータデバイス上で起動している、１つ以上のソフトウェアプログラムとして実施されてもよい。アプリケーション特有の集積回路、プログラム可能な論理アレイ、および他のハードウェアデバイスを含むがそれらに限定されない専用ハードウェア実装は、同様に本願に記載された方法を実施するように構成され得る。さらに、本願に記載された方法は、命令が実行されたときにプロセッサにその方法を行わせるハードウェア要素命令などのコンピュータ読み取り可能記憶媒体またはデバイスとして実施されてもよい。本願に記載された方法を行う命令はまた、コンピュータ読み取り可能送信媒体を使用する実行用のデバイスに広められてもよい。
【００４０】
本願に記載された実施形態の図示には、種々の実施形態の構造の一般的な理解を提供する意図がある。図示は、本願に記載された構造または方法を利用する装置およびシステムの要素および特徴のすべての完璧な説明として役立つことを意図してはいない。他の多くの実施形態は、本開示を検討するにあたり、当業者にとって自明であってもよい。本開示から他の実施形態が利用されて派生してもよく、その結果、構造的および論理的な代替および変化が、本開示の範囲から逸脱しない範囲でなされてもよい。さらに、特定の実施形態が本願に例示され記載されているものの、同一のまたは同様の目的を達成するために設計されたいずれかの二次的構成が、図示された具体的な実施形態によって代替できてもよいことが理解されるべきである。
【００４１】
この開示は、種々の実施形態のいずれかのかつすべての二次的適合または変更を網羅する意図がある。本願に特に記載されてはいない上述の実施形態の組み合わせ、および他の実施形態は、記載を検討するにあたり、当業者にとって自明であろう。さらに、図示は単に、代表的なものであり、縮尺通りに描かれていなくてもよい。図示における所定の比率は誇張されていてもよく、一方、他の比率は縮小されていてもよい。したがって、開示および図面は、例示的なものとみなされ、限定的なものではない。
【図１】
0005922740.tif 000002
【図２】
0005922740.tif 000003
【図３】
0005922740.tif 000004
【図４】
0005922740.tif 000005
【図５】
0005922740.tif 000006
【図６】
0005922740.tif 000007
【図７】
0005922740.tif 000008