(57)【要約】【課題】不揮発性記憶媒体の実質的な記憶容量の低下を極力防止する。【解決手段】実施形態によれば、ストレージ装置は、不揮発性の第１の記憶媒体と、不揮発性の第２の記憶媒体と、キャッシュコントローラと、メインコントローラとを含む。前記第１の記憶媒体と比較して、前記第２の記憶媒体のアクセス速度は低く、且つ前記第２の記憶媒体の記憶容量は大きい。前記メンインコントローラは、ホスト装置からのアクセス要求に基づいて、前記キャッシュコントローラを制御し、且つ前記第２の記憶媒体にアクセスする。前記キャッシュコントローラは、前記第１の記憶媒体に格納されるべきデータを、前記第１の記憶媒体へのアクセスの結果に基づいて記憶性能の劣化が検出された少なくとも２つの領域に多重に書き込む。【選択図】      図１
2015082240.tif 000002
【特許請求の範囲】
【請求項１】
不揮発性の第１の記憶媒体と、
前記第１の記憶媒体と比較してアクセス速度が低速で記憶容量が大きい不揮発性の第２の記憶媒体と、
前記第１の記憶媒体をキャッシュとして制御するキャッシュコントローラと、
ホスト装置からのアクセス要求に基づいて、前記キャッシュコントローラを制御し、且つ前記第２の記憶媒体にアクセスするメインコントローラとを具備し、
前記キャッシュコントローラは、前記第１の記憶媒体に格納されるべきデータを、前記第１の記憶媒体へのアクセスの結果に基づいて記憶性能の劣化が検出された少なくとも２つの領域に多重に書き込む
ストレージ装置。
【請求項２】
前記キャッシュコントローラは、前記少なくとも２つの領域に多重に書き込まれたデータの読み出しを、前記ホスト装置からのリード要求に応じて前記メインコントローラによって要求された場合、前記少なくとも２つの領域から前記要求されたデータを読み出すリード動作を順に実行し、読み出しに成功したデータを前記メインコントローラに返す請求項１記載のストレージ装置。
【請求項３】
前記キャッシュコントローラは、
前記第１の記憶媒体内の空き領域を、第１の管理情報を用いて管理し、
前記ホスト装置からのライト要求に応じて前記メインコントローラによって書き込みが要求された場合、前記要求されたデータを書き込むのに用いられる領域を前記第１の管理情報から探索する
請求項２記載のストレージ装置。
【請求項４】
前記キャッシュコントローラは、
前記劣化が検出された領域を、第２の管理情報を用いて管理し、
前記第１の管理情報からの領域の探索に失敗した場合、前記第１の記憶媒体においてデータが格納されている非多重化領域を選択し、
前記選択された非多重化領域に格納されているデータを前記格納されるべきデータとして、前記少なくとも２つの領域に多重に書き込み、
前記多重書き込みの後、前記選択された非多重化領域を空き領域として前記第１の管理情報に追加する
請求項３記載のストレージ装置。
【請求項５】
前記キャッシュコントローラは、
前記第１の不揮発性記憶媒体に書き込まれたデータの記憶場所と当該記憶場所へのアクセスの状況とを、前記第１の不揮発性記憶媒体内の予め定められたサイズの領域毎に管理し、
前記第１の管理情報からの領域の探索に失敗した場合、前記管理されるアクセス状況に基づいて前記非多重化領域を選択する
請求項４記載のストレージ装置。
【請求項６】
不揮発性の第１の記憶媒体と、前記第１の記憶媒体よりもアクセス速度が低速で記憶容量が大きい不揮発性の第２の記憶媒体とを具備するストレージ装置に適用されるキャッシュコントローラであって、
前記第１の記憶媒体をキャッシュとして制御するプロセッサと、
ホスト装置からのアクセス要求に基づいて前記キャッシュコントローラを制御するメインコントローラであって前記アクセス要求に基づいて前記第２の記憶媒体にアクセスするメインコントローラと前記プロセッサとの間の信号の送信及び受信を制御する第１のインタフェースコントローラと、
前記マイクロプロセッサの制御の下で前記第１の記憶媒体にアクセスする第２のインタフェースコントローラとを具備し、
前記プロセッサは、前記第１の記憶媒体に格納されるべきデータを、前記第１の記憶媒体へのアクセスの結果に基づいて記憶性能の劣化が検出された少なくとも２つの領域に多重に書き込む
キャッシュコントローラ。
【請求項７】
不揮発性の第１の記憶媒体と、前記第１の記憶媒体よりもアクセス速度が低速で記憶容量が大きい不揮発性の第２の記憶媒体と、ホスト装置からのアクセス要求に基づいて前記第２の記憶媒体にアクセスするメインコントローラとを具備するストレージ装置に備えられ、前記アクセス要求に基づく前記メインコントローラによる制御の下で、前記第１の記憶媒体をキャッシュとして制御するキャッシュコントローラに適用される、前記第１の記憶媒体にデータを書き込む方法であって、
前記第１の記憶媒体に格納されるべきデータを、前記第１の記憶媒体へのアクセスの結果に基づいて記憶性能の劣化が検出された少なくとも２つの領域に多重に書き込む
方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、ストレージ装置、キャッシュコントローラ、及び不揮発性記憶媒体にデータを書き込む方法に関する。
【背景技術】
【０００２】
近年、アクセス速度及び記憶容量が異なる複数種類（例えば２種類）の不揮発性記憶媒体を備えたストレージ装置が開発されている。このようなストレージ装置の代表として、ハイブリッドドライブが知られている。ハイブリッドドライブは一般に、第１の不揮発性記憶媒体と、第１の不揮発性記憶媒体と比較してアクセス速度が低く且つ記憶容量が大きい第２の不揮発性記憶媒体とを備えている。
【０００３】
第１の不揮発性記憶媒体には、例えばＮＡＮＤフラッシュメモリのような半導体メモリが用いられる。ＮＡＮＤフラッシュメモリは、単位容量当たりの単価は高いものの高速アクセスが可能な不揮発性記憶媒体として知られている。第２の不揮発性記憶媒体には、例えば磁気ディスクのようなディスク媒体が用いられる。ディスク媒体は、アクセス速度は低いものの単位容量当たりの単価が安い不揮発性記憶媒体として知られている。このため、ハイブリッドドライブは一般に、ディスク媒体（より詳細には、ディスク媒体を含むディスクドライブ）を主たるストレージとして用い、ＮＡＮＤフラッシュメモリ（より詳細には、ディスク媒体よりも高アクセス速度のＮＡＮＤフラッシュメモリ）をキャッシュとして用いる。これにより、ハイブリッドドライブ全体のアクセス速度が高速化される。
【０００４】
このようなハイブリッドドライブでは、ＮＡＮＤフラッシュメモリの領域（記憶領域）が、ディスク媒体の領域よりも頻繁にアクセスされる。ＮＡＮＤフラッシュメモリの領域（より詳細には、領域の記憶性能）は、当該領域へのアクセス（より詳細には、データの書き込み／読み出し）の頻度に依存して劣化する。このため、ＮＡＮＤフラッシュメモリがキャッシュとして用いられるハイブリッドドライブでは、当該ＮＡＮＤフラッシュメモリの領域は劣化しやすい。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１３／００５４８７３号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来技術は、劣化によってリードエラーが発生した、ＮＡＮＤフラッシュメモリの領域を、使用不可能な領域（いわゆるバッド領域）として扱う。このため、バッド領域の数が増えると、ＮＡＮＤフラッシュメモリ（キャッシュ）の実質的な記憶容量が低下する。すると、キャッシュヒット率が低下して、ハイブリッドドライブ全体のパフォーマンスが低下する。
【０００７】
本発明が解決しようとする課題は、不揮発性記憶媒体の実質的な記憶容量の低下を極力防止できる、ストレージ装置、キャッシュコントローラ、及び不揮発性記憶媒体にデータを書き込む方法を提供することにある。
【課題を解決するための手段】
【０００８】
実施形態によれば、ストレージ装置は、不揮発性の第１の記憶媒体と、不揮発性の第２の記憶媒体と、キャッシュコントローラと、メインコントローラとを含む。前記第１の記憶媒体と比較して、前記第２の記憶媒体のアクセス速度は低く、且つ前記第２の記憶媒体の記憶容量は大きい。前記メンインコントローラは、ホスト装置からのアクセス要求に基づいて、前記キャッシュコントローラを制御し、且つ前記第２の記憶媒体にアクセスする。前記キャッシュコントローラは、前記第１の記憶媒体に格納されるべきデータを、前記第１の記憶媒体へのアクセスの結果に基づいて記憶性能の劣化が検出された少なくとも２つの領域に多重に書き込む。
【図面の簡単な説明】
【０００９】
【図１】実施形態に係るハイブリッドドライブの典型的な構成を示すブロック図。
【図２】図１に示されるＮＡＮＤメモリの記憶領域の典型的なフォーマットを示す概念図。
【図３】図１に示されるメモリコントローラに備えられたＲＡＭの記憶領域の典型的なフォーマットを示す概念図。
【図４】図２に示されるキャッシュ管理テーブルのデータ構造の例を示す図。
【図５】図１に示されるメモリコントローラによって実行されるライト処理の典型的な手順を示すフローチャート。
【図６】図１に示されるメモリコントローラによって実行されるリード処理の典型的な手順を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、実施の形態につき図面を参照して説明する。  
図１は実施形態に係るハイブリッドドライブの典型的な構成を示すブロック図である。ハイブリッドドライブは、アクセス速度及び記憶容量が異なる複数種類、例えば２種類の不揮発性記憶媒体（つまり、第１の不揮発性記憶媒体及び第２の不揮発性記憶媒体）を備えている。本実施形態では、第１の不揮発性記憶媒体として、ＮＡＮＤフラッシュメモリ（以下、ＮＡＮＤメモリと称する）１１が用いられ、第２の不揮発性記憶媒体として磁気ディスク媒体（以下、ディスクと称する）２１が用いられる。ディスク２１のアクセス速度及び記憶容量は、ＮＡＮＤメモリ１１のそれらと比較して低速で且つ大容量である。
【００１１】
図１に示されるハイブリッドドライブは、ソリッドステートドライブのような半導体ドライブユニット１０と、ハードディスクドライブユニット（以下、ＨＤＤと称する）２０とから構成される。半導体ドライブユニット１０は、ＮＡＮＤメモリ１１と、メモリコントローラ１２とを含む。
【００１２】
メモリコントローラ１２は、メインコントローラ２７からのアクセス要求（例えば、ライト要求またはリード要求）に応じて、ＮＡＮＤメモリ１１へのアクセスを制御する。本実施形態において、ＮＡＮＤメモリ１１は、ホスト装置（以下、ホストと称する）からハイブリッドドライブへのアクセスの高速化のために、当該ホストによって最近アクセスされたデータを格納するためのキャッシュ（キャッシュメモリ）として用いられる。ホストは、図１に示されるハイブリッドドライブを、自身のストレージ装置として利用する。
【００１３】
メモリコントローラ１２は、ホストインタフェースコントローラ（以下、ホストＩＦと称する）１２１と、メモリインタフェースコントローラ（以下、メモリＩＦと称する）１２２と、マイクロプロセッサユニット（ＭＰＵ）１２３と、読み出し専用メモリ（ＲＯＭ）１２４と、ランダムアクセスメモリ（ＲＡＭ）１２５とを含む。ホストＩＦ（第１のインタフェースコントローラ）１２１は、メインコントローラ２７と接続されている。ホストＩＦ１２１は、メインコントローラ２７（より詳細には、メインコントローラ２７の後述するＭＰＵ２７３）から転送される信号を受信し、且つ当該メインコントローラ２７に信号を送信する。具体的には、ホストＩＦ１２１は、メインコントローラ２７から転送されるコマンド（ライトコマンド、リードコマンド等）を受信して、当該受信されたコマンドをＭＰＵ１２３に渡す。ホストＩＦ１２１はまた、メインコントローラ２７から転送されたコマンドに対するＭＰＵ１２３からの応答を、メインコントローラ２７に返す。ホストＩＦ１２１はまた、メインコントローラ２７とＭＰＵ１２３との間のデータ転送を制御する。メモリＩＦ（第２のインタフェースコントローラ）１２２はＮＡＮＤメモリ１１と接続されており、ＭＰＵ１２３の制御の下でＮＡＮＤメモリ１１にアクセスする。
【００１４】
ＭＰＵ１２３は、メインコントローラ２７から転送されたコマンドに基づいてＮＡＮＤメモリ１１にアクセスするための処理（例えば、ライト処理またはリード処理）を、第１の制御プログラムに従って実行する。本実施形態において第１の制御プログラムは、ＲＯＭ１２４に予め格納されている。なお、ＲＯＭ１２４に代えて、書き換え可能な不揮発性ＲＯＭ、例えばフラッシュＲＯＭを用いても良い。ＲＡＭ１２５の記憶領域の一部は、ＭＰＵ１２３のワーク領域として用いられる。ＲＡＭ１２５の記憶領域の他の一部は、後述するアクセスカウンタテーブル１２５ａを格納するのに用いられる。
【００１５】
ＨＤＤ２０は、ディスク２１と、ヘッド２２と、スピンドルモータ（ＳＰＭ）２３と、アクチュエータ２４と、ドライバ集積回路（ＩＣ）２５と、ヘッドＩＣ２６と、メインコントローラ２７と、フラッシュＲＯＭ（ＦＲＯＭ）２８と、ＲＡＭ２９とを含む。ディスク２１は、例えばその一方の面に、データが磁気記録される記録面を備えている。ディスク２１はＳＰＭ２３によって高速に回転させられる。ＳＰＭ２３は、ドライバＩＣ２５から供給される駆動電流（または駆動電圧）により駆動される。
【００１６】
ディスク２１（より詳細には、ディスク２１の記録面）は、例えば同心円状の複数のトラックを備えている。なお、ディスク２１が、スパイラル状に配置される複数のトラックを備えていても構わない。ヘッド（ヘッドスライダ）２２はディスク２１の記録面に対応して配置される。ヘッド２２は、アクチュエータ２４のアームから延出したサスペンションの先端に取り付けられている。アクチュエータ２４は、当該アクチュエータ２４の駆動源となるボイスコイルモータ（ＶＣＭ）２４０を有している。ＶＣＭ２４０は、ドライバＩＣ２５から供給される駆動電流により駆動される。ヘッド２２は、アクチュエータ２４がＶＣＭ２４０によって駆動されることにより、ディスク２１上を当該ディスク２１の半径方向に、円弧を描くように移動する。
【００１７】
図１の構成では、単一枚のディスク２１を備えたＨＤＤ２０を想定している。しかし、ディスク２１が複数枚積層配置されたＨＤＤであっても構わない。また、図１の構成では、ディスク２１は、その一方の面に記録面を備えている。しかし、ディスク２１がその両面に記録面を備え、当該両記録面にそれぞれ対応してヘッドが配置されても構わない。
【００１８】
ドライバＩＣ２５は、メインコントローラ２７（より詳細には、メインコントローラ２７内のＭＰＵ２７３）の制御に従い、ＳＰＭ２３とＶＣＭ２４０とを駆動する。ドライバＩＣ２５によりＶＣＭ２４０が駆動されることで、ヘッド２２はディスク２１上の目標トラックに位置付けられる。
【００１９】
ヘッドＩＣ２６はヘッドアンプとも呼ばれている。ヘッドＩＣ２６は、例えばアクチュエータ２４の所定の箇所に固定され、フレキシブル印刷回路基板（ＦＰＣ）を介してメインコントローラ２７と電気的に接続されている。但し、図１では、作図の都合で、ヘッドＩＣ２６は、アクチュエータ２４から離れた箇所に配置されている。
【００２０】
ヘッドＩＣ２６は、ヘッド２２のリード素子によりリードされた信号（つまりリード信号）を増幅する。ヘッドＩＣ２６はまた、メインコントローラ２７（より詳細には、メインコントローラ２７内のＲ／Ｗチャネル２７１）から出力されるライトデータをライト電流に変換して、当該ライト電流をヘッド２２のライト素子に出力する。
【００２１】
メインコントローラ２７は、例えば、複数の要素が単一チップに集積された大規模集積回路（ＬＳＩ）によって実現される。メインコントローラ２７は、リード／ライト（Ｒ／Ｗ）チャネル２７１と、ハードディスクコントローラ（ＨＤＣ）２７２と、ＭＰＵ２７３とを含む。
【００２２】
Ｒ／Ｗチャネル２７１は、リード／ライトに関連する信号を処理する。即ちＲ／Ｗチャネル２７１は、ヘッドＩＣ２６によって増幅されたリード信号をデジタルデータに変換し、このデジタルデータからリードデータを復号する。Ｒ／Ｗチャネル２７１はまた、ＭＰＵ２７３を介してＨＤＣ２７２から転送されるライトデータを符号化し、この符号化されたライトデータをヘッドＩＣ２６に転送する。
【００２３】
ＨＤＣ２７２は、ホストインタフェース（ストレージインタフェース）３０を介してホホストと接続されている。ホスト及び図１に示されるハイブリッドドライブは、パーソナルコンピュータ、ビデオカメラ、音楽プレーヤー、携帯端末、携帯電話機、或いはプリンタ装置のような電子機器に備えられている。
【００２４】
ＨＤＣ２７２は、ホストから転送される信号を受信し、且つホストに信号を転送するホストインタフェースコントローラとして機能する。具体的には、ＨＤＣ２７２は、ホストから転送されるコマンド（ライトコマンド、リードコマンド等）を受信して、当該受信されたコマンドをＭＰＵ２７３に渡す。ＨＤＣ２７２はまた、ホストと当該ＨＤＣ２７２との間のデータ転送を制御する。ＨＤＣ２７２は更に、ＭＰＵ２７３、Ｒ／Ｗチャネル２７１、ヘッドＩＣ２６及びヘッド２２を介してディスク２１へのデータのライト及びディスク２１からのデータのリードを制御するディスクインタフェースコントローラとしても機能する。
【００２５】
ＭＰＵ２７３は、ホストからのアクセス要求（ライト要求またはリード要求）に応じて、メモリコントローラ１２を介したＮＡＮＤメモリ１１へのアクセスと、Ｒ／Ｗチャネル２７１、ヘッドＩＣ２６、及びヘッド２２を介したディスク２１へのアクセスとを制御する。この制御は、第２の制御プログラムに従って実行される。本実施形態において、第２の制御プログラムは、ＦＲＯＭ２８に格納されている。ＲＡＭ２９の記憶領域の一部は、ＭＰＵ２７３のワーク領域として用いられる。
【００２６】
なお、イニシャルプログラムローダ（ＩＰＬ）がＦＲＯＭ２８に格納され、第２の制御プログラムがディスク２１に格納されていても構わない。この場合、ハイブリッドドライブの電源が投入された際に、ＭＰＵ２７３がＩＰＬを実行することにより、第２の制御プログラムがディスク２１からＦＲＯＭ２８またはＲＡＭ２９にロードされれば良い。
【００２７】
図２は、図１に示されるＮＡＮＤメモリ１１の記憶領域の典型的なフォーマットを示す概念図である。ＮＡＮＤメモリ１１の記憶領域は、図２に示されるように、システム領域１１１及びキャッシュ領域１１２とに区分される。つまり、ＮＡＮＤメモリ１１は、システム領域１１１とキャッシュ領域１１２とを備えている。システム領域１１１は、システム（例えば、メモリコントローラ１２）が管理のために利用する情報を格納するのに用いられる。キャッシュ領域１１２は、ホストによって最近アクセスされたデータを格納するのに用いられる。ＮＡＮＤメモリ１１の記憶領域は、Ｍ個のブロック（つまり、物理ブロック）から構成される。ＮＡＮＤメモリ１１では、このブロックを単位にデータが一括して消去される。つまりブロックは、データが消去される単位である。
【００２８】
システム領域１１１は、物理ブロック番号が０乃至Ｎ−１のＮ個（Ｎ＜Ｍ）の物理ブロックから構成される。キャッシュ領域１１２は、物理ブロック番号がＮ乃至Ｍ−１のＭ−Ｎ個の物理ブロックから構成される。一般に、Ｍ−ＮはＮに対して十分に大きい。
【００２９】
システム領域１１１の一部は、キャッシュ管理テーブル１１１ａ、第１の空き領域リスト１１１ｂ、第２の空き領域リスト１１１ｃ、及びバッドブロックリスト１１１ｄを格納するのに用いられる。以下の説明では、キャッシュ管理テーブル１１１ａが単にテーブル１１１ａと表記されることもある。また、第１の空き領域リスト１１１ｂ、第２の空き領域リスト１１１ｃ、及びバッドブロックリスト１１１ｄが、それぞれ単にリスト１１１ｂ、リスト１１１ｃ、及びリスト１１１ｄと表記されることもある。
【００３０】
周知のように、ＮＡＮＤメモリ１１では、データが既に格納されているいる領域に、新たなデータ（更新データ）を上書きすることはできない。このため、テーブル１１１ａのシステム領域１１１内の位置は、当該テーブル１１１ａが更新される都度変更される。つまり、更新されたテーブル（新テーブル）１１１ａは、旧テーブル１１１ａが格納されている領域とは異なる領域に書かれる。リスト１１１ｂ，１１１ｃ，及び１１１ｄのシステム領域１１１内の位置についても同様である。
【００３１】
テーブル１１１ａ、リスト１１１ｂ、１１１ｃ、及び１１１ｄの、システム領域１１１内の位置及びサイズの情報は、ＲＡＭ１２５の第１の領域及びディスク２１の第２の領域に格納されているものとする。本実施形態では、ディスク２１の第２の領域に格納されている情報は、ハイブリッドドライブの電源の投入時にＭＰＵ２７３の制御によって読み出されて、ホストＩＦ１２１及びＭＰＵ１２３を介してＲＡＭ１２５の第１の領域にロードされる。テーブル１１１ａ、リスト１１１ｂ、１１１ｃ、または１１１ｄの、システム領域１１１内の位置が変更された場合、ＭＰＵ１２３及びＭＰＵ２７３は、それぞれ、ＲＡＭ１２５の第１の領域内の対応する位置情報及びディスク２１の第２の領域内の対応する位置情報を更新する。
【００３２】
キャッシュ管理テーブル１１１ａは、ＮＡＮＤメモリ１１のキャッシュ領域１１２内のブロック各々を管理するためのブロック管理情報を格納するのに用いられる。本実施形態において、このブロック管理情報は、キャッシュ領域１１２内のブロック（予め定められたサイズの領域）各々に格納されたデータのアドレス（記憶場所）に関するキャッシュディレクトリ情報として用いられる。キャッシュディレクトリ情報は、前記データの物理的なアドレスと前記データの論理的なアドレスとの対応を管理するための情報を含む。前記データの物理的なアドレス（ここでは、物理ブロック番号）は、当該データが格納されているＮＡＮＤメモリ１１内のブロック（領域）の位置を示す。前記データの論理的なアドレス（ここでは、論理ブロック番号）は、当該データの論理アドレス空間内の位置（記憶場所）を示す。キャッシュ管理テーブル１１１ａのデータ構造については後述する。
【００３３】
第１の空き領域リスト１１１ｂは、キャッシュ領域１１２内の第１のタイプの空き領域を登録するのに用いられる。つまり第１の空き領域リスト１１１ｂは、第１のタイプの空き領域を管理するための第１の管理情報として用いられる。第１のタイプの空き領域とは、正常な空き領域を指す。第２の空き領域リスト１１１ｃは、キャッシュ領域１１２内の第２のタイプの空き領域を登録するのに用いられる。つまり第２の空き領域リスト１１１ｃは、第２のタイプの空き領域を管理するための第２の管理情報として用いられる。第２のタイプの空き領域とは、過去にリードエラーが発生した空き領域を指す。バッドブロックリスト１１１ｄは、使用不可能なブロック（物理ブロック）、つまりバッドブロック（領域）を登録するのに用いられる。つまりバッドブロックリスト１１１ｄは、バッドブロックを管理するための第３の管理情報として用いられる。
【００３４】
図３は、図１に示されるメモリコントローラ１２が有するＲＡＭ１２５の記憶領域の典型的なフォーマットを示す概念図である。ＲＡＭ１２５の記憶領域の一部は、アクセスカウンタテーブル１２５ａを格納するのに用いられる。アクセスカウンタテーブル１２５ａは、キャッシュ領域１１２のＭ−Ｎ個のブロック各々のアクセスカウント情報を、当該ブロックの物理ブロック番号に対応付けて格納するのに用いられる。アクセスカウント情報は、アクセスカウントとタイムスタンプとを含む。
【００３５】
アクセスカウントは、対応する物理ブロック番号のブロックへのアクセスの回数を示す。アクセスカウントの初期値はゼロである。タイムスタンプは、例えば、対応する物理ブロック番号のブロックがアクセスされた直近の時刻を示す。
【００３６】
アクセスカウンタテーブル１２５ａは、ハイブリッドドライブの電源が遮断される際に、ＭＰＵ１２３の制御によってＲＡＭ１２５から読み出されて、メインコントローラ２７に転送される。メインコントローラ２７のＭＰＵ２７３は、アクセスカウンタテーブル１２５ａを、ディスク２１の第３の領域に保存する。第３の領域に保存されたアクセスカウンタテーブル１２５ａは、ハイブリッドドライブの電源の投入時にＭＰＵ２７３の制御によって読み出されて、ホストＩＦ１２１及びＭＰＵ１２３を介してＲＡＭ１２５にロードされる。
【００３７】
図４は、図２に示されるキャッシュ管理テーブル１１１ａのデータ構造の例を示す。キャッシュ管理テーブル１１１ａは、キャッシュ領域１１２のＭ−Ｎ個のブロック各々のブロック管理情報を、当該ブロックの物理ブロック番号に対応付けて格納するのに用いられる。ブロック管理情報は、論理ブロック番号及びブロック状態情報を含む。
【００３８】
論理ブロック番号は、対応する物理ブロック番号のブロックが割り当てられた論理ブロックを示す。論理ブロックは、ホストから認識される論理アドレス空間を物理ブロックと同一のサイズで区分することによって得られる領域（論理領域）を指す。ブロック状態情報は、対応する物理ブロック番号のブロックの状態を示す。本実施形態では、ブロック状態情報の示すブロック状態は、Ｗ，Ａ及びＢのいずれかである。ブロック状態Ｗは、対応するブロックのデータが無効であることを示す。ブロック状態Ａは、対応する物理ブロック番号のブロックへのアクセスの回数が１であることを示す。ブロック状態Ｂは、対応する物理ブロック番号のブロックへのアクセスの回数が２以上であることを示す。
【００３９】
このように、ブロック管理情報は、対応する物理ブロック番号のブロックを管理するための情報である。このブロック管理情報は、対応する物理ブロック番号のブロックと、当該ブロックが割り当てられた論理ブロックとの対応を示す。したがってブロック管理情報は、対応する論理ブロックに格納されたデータのＮＡＮＤメモリ１１における記憶場所を管理するためのキャッシュディレクトリ情報であるともいえる。そこで以下の説明では、ブロック管理情報をキャッシュディレクトリ情報と称することもある。
【００４０】
キャッシュ領域１１２のブロックの各々は、複数のページ、例えば１２８のページ（物理ページ）から構成されるものとする。この場合、論理ブロックも１２８のページ（論理ページ）から構成される。本実施形態では、１ブロックは２５６キロバイト（ＫＢ）であり、１ページは２ＫＢである。
【００４１】
キャッシュ管理テーブル１１１ａは更に、キャッシュ領域１１２のＭ−Ｎ個のブロック毎で、且つ当該ブロックのページ毎に、当該ページ毎のページ管理情報を、当該ブロックの物理ブロック番号及び当該ページ毎の物理ページ番号に対応付けて格納するのに用いられる。つまり、ブロック管理情報（キャッシュディレクトリ情報）は、対応するブロックのページ毎のページ管理情報を含む。ページ管理情報は、論理ページ番号及びページ状態情報を含む。
【００４２】
論理ページ番号は、対応する物理ブロック番号及び物理ページ番号のページ（物理ページ）が割り当てられた論理ページ（論理ブロック内の論理ページ）を示す。つまり、論理ページ番号は、対応する物理ページに格納されたデータの論理アドレス空間内の位置（記憶場所）を示す。よって、ページ管理情報もキャッシュディレクトリ情報として用いられる。
【００４３】
ページ状態情報は、対応する物理ページの状態を示す。ページ状態情報の示すページ状態は、ＩＶ及びＶのいずれかである。ページ状態ＩＶは、対応するページのデータが無効であることを示す。ページ状態Ｖは、対応するページのデータが有効であることを示す。
【００４４】
次に、図１のハイブリッドドライブの動作について、ホストから当該ドライブにライト要求（コマンド）が発行された場合を例に、図５を参照して説明する。図５は、ハイブリッドドライブのメモリコントローラ１２（より詳細には、メモリコントローラ１２のＭＰＵ１２３）によって実行されるライト処理の典型的な手順を示すフローチャートである。
【００４５】
まずホストが、図１に示されるハイブリッドドライブに、ホストインタフェース３０を介して第１のライト要求を発行したものとする。この第１のライト要求は、開始論理アドレスと、書き込まれるべきデータ（書き込みデータ）Ｄ１のサイズを示すサイズ情報とを含む。本実施形態において、ホストからハイブリッドドライブへのアクセスの最小単位は２ページ（つまり、４ＫＢ）である。但し、以下では、説明の簡略化のために、ホストはブロックを単位にハイブリッドドライブにアクセスするものとする。ここでは、開始論理アドレスは、論理ブロック番号がＸの論理ブロックＸの開始位置を示し、データＤ１のサイズは、１ブロックのサイズ（２５６ＫＢ）であるものとする。
【００４６】
図１に示されるハイブリッドドライブにおけるメインコントローラ２７のＨＤＣ２７２は、ホストからの第１のライト要求（コマンド）を受信する。ＨＤＣ２７２はまた、第１のライト要求で指定される書き込みデータＤ１を、ホストから受信する。
【００４７】
受信された第１のライト要求は、ＨＤＣ２７２によってメインコントローラ２７のＭＰＵ２７３に渡される。するとＭＰＵ２７３は、第２のライト要求及び書き込みデータＤ１を、メモリコントローラ１２に送出する。第２のライト要求は、第１のライト要求と同様に、開始論理アドレスと、書き込みデータＤ１のサイズを示すサイズ情報とを含む。つまり、第２のライト要求は、受信された第１のライト要求に対応する。
【００４８】
メモリコントローラ１２は、ＭＰＵ２７３からの第２のライト要求に応じてキャッシュコントローラとして機能する。即ちメモリコントローラ１２は、ＮＡＮＤメモリ１１をキャッシュメモリとして制御することにより、第２のライト要求を実行する。
【００４９】
まず、第２のライト要求は、メモリコントローラ１２のホストＩＦ１２１によって受信された後、当該ホストＩＦ１２１によりメモリコントローラ１２のＭＰＵ１２３に渡される。するとＭＰＵ１２３は、第２のライト要求で指定されたデータＤ１をＮＡＮＤメモリ１１のキャッシュ領域１１２に書き込むためのライト処理（つまり、キャッシュライト処理）を、図５のフローチャートによって示される手順で次のように実行する。
【００５０】
ＭＰＵ１２３はまず、パラメータＬＢＡに開始論理アドレスを代入し、且つパラメータＳ（Ｄ１）にデータＤ１のサイズを代入する（ステップ５０１）。次にＭＰＵ１２３は、ＮＡＮＤメモリ１１のシステム領域１１１に格納されている第１の空き領域リスト１１１ｂを参照する（ステップ５０２）。そしてＭＰＵ１２３は、第１の空き領域リスト１１１ｂから、パラメータＳ（Ｄ１）の示す値以上のサイズの空き領域ＦＡを探索する（ステップ５０３）。
【００５１】
本実施形態では、パラメータＳ（Ｄ１）の示す値は、１ブロックのサイズ（２５６ＫＢ）を示す。この場合、ＭＰＵ１２３は、例えば１つの空きブロックを、空き領域ＦＡとして探索する。そしてＭＰＵ１２３は、空き領域ＦＡの探索に成功したかを判定する（ステップ５０４）。
【００５２】
もし、空き領域（ブロック）ＦＡの探索に成功したならば（ステップ５０４のＹｅｓ）、ＭＰＵ１２３は、メモリＩＦ１２２を制御することにより、ＮＡＮＤメモリ１１の空き領域ＦＡにデータＤ１を書き込む（ステップ５０５）。この場合、ＭＰＵ１２３は、探索された空き領域ＦＡに関する情報を、第１の空き領域リスト１１１ｂから削除する。
【００５３】
本実施形態では、第１の空き領域リスト１１１ｂはＮＡＮＤメモリ１１のシステム領域１１１に格納される。このためＭＰＵ１２３は実際には、探索された空き領域ＦＡに関する情報が上述のように削除された新たな第１の空き領域リスト１１１ｂを、システム領域１１１内の空き領域に書き込む。そこで、システム領域１１１内の空き領域も、第１の空き領域リスト１１１ｂを用いて管理されても良い。また、システム領域１１１内の空き領域を管理するための空き領域リストが、第１の空き領域リスト１１１ｂとは別に、当該システム領域１１１に格納されても良い。
【００５４】
ＭＰＵ１２３はデータＤ１の書き込み（ステップ５０５）を実行すると、当該書き込みに成功したかを判定する（ステップ５０６）。ここで、データＤ１の書き込みが正常に完了し、したがってデータＤ１の書き込みに成功したものとする（ステップ５０６のＹｅｓ）。この場合、ＭＰＵ１２３は、領域ＦＡをデータＤ１のデータ領域として管理するためのブロック管理情報（つまり、キャッシュディレクトリ情報）を、キャッシュ管理テーブル１１１ａに登録する（ステップ５０７）。ステップ５０７においてＭＰＵ１２３は、メインコントローラ２７（ＭＰＵ２７３）からの第２のライト要求に対する完了応答（つまり、ライト完了応答）を、ホストＩＦ１２１により当該メインコントローラ２７に返信させる。ＭＰＵ１２３はステップ５０７を実行すると、ライト処理を終了する。
【００５５】
メインコントローラ２７のＭＰＵ２７３は、メモリコントローラ１２のホストＩＦ１２１からの完了応答を受信すると、ホストからの第１のライト要求に対する完了応答を、ＨＤＣ２７２により当該ホストに返信させる。この完了応答は、例えば、第１のライト要求に基づく後述するディスクライト処理の完了を待つことなくホストに返される。
【００５６】
ここで、ステップ５０７における登録動作について、空き領域ＦＡが物理ブロック番号がＮのブロックＮである場合を例に具体的に説明する。まずＭＰＵ１２３は、パラメータＬＢＡの示す開始論理アドレスから論理ブロック番号を抽出する。本実施形態では、論理アドレスの所定の上位アドレス（例えば、論理アドレスの下位１８ビットを除く上位アドレス）によって論理ブロック番号が示される。上述の開始論理アドレスの例では、論理ブロック番号としてＸが抽出される。
【００５７】
そこでＭＰＵ１２３は、論理ブロック番号Ｘ及びブロック状態情報（より詳細には、ブロック状態Ａを示すブロック状態情報）を、物理ブロック番号Ｎに対応付けてキャッシュ管理テーブル１１１ａに登録する。またＭＰＵ１２３は、論理ページ番号０乃至１２７及びページ状態情報（より詳細には、ページ状態Ｖを示すページ状態情報）を、物理ブロック番号Ｎに対応付けられた物理ページ番号０乃至１２７にそれぞれ対応付けてキャッシュ管理テーブル１１１ａに登録する。
【００５８】
このようにして、物理ブロックＮ（より詳細には、物理ブロックＮに格納された、論理ブロックＸのデータＤ１）に関するキャッシュディレクトリ情報が、キャッシュ管理テーブル１１１ａにおいて最新の状態に更新される。このとき、論理ブロックＸの旧データに関するキャッシュディレクトリ情報がキャッシュ管理テーブル１１１ａに登録されているならば、当該キャッシュディレクトリ情報（つまり、旧キャッシュディレクトリ情報）は無効化される。
【００５９】
キャッシュディレクトリ情報の無効化は、次のように行われる。まず、論理ブロックＸの旧データが、物理ブロック番号がＹの物理ブロックＹに格納されているものとする。つまりキャッシュ管理テーブル１１１ａに登録されている、論理ブロックＸの旧データに関する旧キャッシュディレクトリ情報（つまり、物理ブロックＹに関するブロック管理情報）により、論理ブロック番号Ｘが物理ブロック番号Ｙに対応付けられているものとする。この場合、ＭＰＵ１２３は、旧キャッシュディレクトリ情報のブロック状態情報を、状態ＡまたはＢを示す情報から状態Ｗを示す状態に更新する。
【００６０】
本実施形態では、キャッシュ管理テーブル１１１ａはＮＡＮＤメモリ１１のシステム領域１１１に格納される。このため実際には、ステップ５０７では、更新されたキャッシュディレクトリ情報を含む新たなキャッシュ管理テーブル１１１ａが、システム領域１１１内の空き領域に書き込まれる。一方、古いキャッシュ管理テーブル１１１ａは無効化される。
【００６１】
なお上述の例と異なり、データＤ１のサイズが、１ブロックのサイズよりも小さい、例えば２ページのサイズ（４ＫＢ）であるものとする。データＤ１の最初の論理ページ（第１の論理ページ）の論理ページ番号がＸ０で、次の論理ページ（第２の論理ページ）の論理ページ番号がＸ１（Ｘ１＝Ｘ０＋１）であるものとする。第１の論理ページは、論理ブロック番号がＸの論理ブロック内の論理ページであり、論理ページ番号Ｘ０は、開始論理アドレスの所定の中位アドレス（例えば、論理アドレスの下位１８ビットの上位側の７ビット）で示される。つまり、論理ページ番号Ｘ０は、開始論理アドレスから抽出される。
【００６２】
さて、データＤ１のサイズが２ページのサイズの場合、ＭＰＵ１２３は、探索された空き領域ＦＡ（つまり、物理ブロック番号がＮのブロックＮ）における２つの空きページ（例えば、ページ０及び１）にデータＤ１を書き込めば良い。この場合、ＭＰＵ１２３は、論理ページ番号Ｘ０及びＸ１と、ページ状態情報（より詳細には、ページ状態Ｖを示すページ状態情報）とを、物理ブロック番号Ｎに対応付けられた物理ページ番号０及び１にそれぞれ対応付けてキャッシュ管理テーブル１１１ａに登録する。なお、データＤ１のサイズが２ページのサイズの場合、ＭＰＵ１２３は、少なくとも２つの空きページを空き領域ＦＡとして探索すれば良い。
【００６３】
さて、ステップ５０７においてＭＰＵ１２３は、ＲＡＭ１２５に格納されているアクセスカウンタテーブル１２５ａを更新する。上述の例では、ＭＰＵ１２３は、物理ブロック番号Ｎに対応付けてアクセスカウンタテーブル１２５ａに格納されているアクセスカウント情報を更新する。即ちＭＰＵ１２３は、物理ブロック番号Ｎに対応付けられているアクセスカウント情報のアクセスカウントを１だけインクリメントし、且つ当該アクセスカウント情報に現在の時刻を示すタイムスタンプを設定する。
【００６４】
次に、空き領域ＦＡへのデータＤ１の書き込みに失敗した場合（ステップ５０６のＮｏ）について説明する。この場合、ＭＰＵ１２３は、例えば、領域ＦＡを含む物理ブロック（ここでは、物理ブロックＮ）をバッドブロックとして、バッドブロックリスト１１１ｄに追加する（ステップ５０８）。つまりＭＰＵ１２３は、物理ブロックＮを示す情報（例えば、物理ブロックＮの物理ブロック番号Ｎ）を、バッドブロックリスト１１１ｄに追加する。ここで、領域ＦＡのサイズが１ブロックのサイズよりも小さく、且つ領域ＦＡを含む物理ブロック内の別の領域ＡｍのデータＤｍがＮＡＮＤメモリ１１に格納されているものとする。この場合、ステップ５０８においてＭＰＵ１２３は、キャッシュ管理テーブル１１１ａに登録されている、データＤｍ（データＤｍのアドレス）に関するキャッシュディレクトリ情報を無効化する。この無効化は、領域ＡｍのデータＤｍを削除することと等価である。ＭＰＵ１２３は、ステップ５０８を実行すると、ステップ５０２に戻る。
【００６５】
次に、空き領域ＦＡの探索に失敗した場合（ステップ５０４のＮｏ）について説明する。この場合、ＭＰＵ１２３は、空き領域を確保するために、以下の処理（ステップ５０９乃至５１６）を実行する。
【００６６】
まずＭＰＵ１２３は、キャッシュ管理テーブル１１１ａ（より詳細には、キャッシュ管理テーブル１１１ａ内のブロック状態情報）を参照する（ステップ５０９）。そしてＭＰＵ１２３は、アクセス頻度が低く、且つ多重化されていない物理領域（ブロック）、つまり非多重化領域（ブロック）ＮＭＡを探索する（ステップ５１０）。
【００６７】
アクセス頻度が低い物理領域（ブロック）とは、状態（ブロック状態）がＡの物理領域（ブロック）、つまり１回だけアクセスされた物理領域（ブロック）を指す。一方、非多重化領域（ブロック）ＮＭＡとは、１つの論理領域（ブロック）に１つの物理領域（ブロック）のみが割り当てられている場合における、当該物理領域（ブロック）を指す。これに対し、１つの論理領域（ブロック）に少なくとも２つの物理領域（ブロック）が割り当てられている場合における、当該少なくとも２つの物理領域（ブロック）を多重化領域（ブロック）と称する。
【００６８】
本実施形態では、説明の簡略化のために、非多重化領域ＮＭＡとして、アクセス頻度が低い非多重化ブロックが探索されるものとする。この非多重化ブロックの探索は次のように行われる。
【００６９】
まずＭＰＵ１２３は、ブロック状態Ａと対応付けられている物理ブロック番号（以下、第１の物理ブロック番号と称する）及び論理ブロック番号の組をキャッシュ管理テーブル１１１ａから検索する。次にＭＰＵ１２３は、検索された論理ブロック番号と対応付けられていて、且つ第１の物理ブロック番号とは異なる第２の物理ブロック番号を検索する。もし、第２の物理ブロック番号の検索に失敗したならば、ＭＰＵ１２３は、第１の物理ブロック番号で示される物理ブロックは、アクセス頻度の低い非多重化領域ＮＭＡであると判定する。
【００７０】
なお、複数の非多重化領域ＮＭＡがブロック状態Ａと対応付けられている場合、最も古い時刻にアクセスされた非多重化領域ＮＭＡをＭＰＵ１２３が選択すると良い。つまりＭＰＵ１２３がアクセスカウンタテーブル１２５ａを参照することにより、ブロック状態Ａと対応付けられている複数の非多重化領域ＮＭＡから、最も古い時刻を示すタイムスタンプと対応付けられている非多重化領域ＮＭＡを選択すると良い。またＭＰＵ１２３が、最初に探索された非多重化領域ＮＭＡを選択しても良い。
【００７１】
次に、ブロック状態Ａと対応付けられている非多重化領域ＮＭＡが存在しない場合を想定する。この場合、ＭＰＵ１２３が、ブロック状態Ｂと対応付けられている複数の非多重化領域ＮＭＡから、最も古い時刻を示すタイムスタンプと対応付けられている非多重化領域ＮＭＡを選択すれば良い。また、ＭＰＵ１２３がアクセスカウンタテーブル１２５ａを参照することにより、ブロック状態Ａと対応付けられている複数の非多重化領域ＮＭＡから、最小のアクセスカウントと対応付けられている非多重化領域ＮＭＡを選択しても良い。
【００７２】
次に、第２の物理ブロック番号の検索に成功した場合について説明する。この場合、ＭＰＵ１２３は、第１の物理ブロック番号で示される物理ブロックは非多重化領域ＮＭＡでないと判定する。そこでＭＰＵ１２３は、非多重化領域ＮＭＡの探索を継続する。
【００７３】
このようにして、非多重化領域ＮＭＡが探索されたものとする（ステップ５１０）。この場合、ＭＰＵ１２３は、非多重化領域ＮＭＡのサイズ（ここでは、２５６ＫＢ）を、パラメータＳ（Ｄｎ）に代入する（ステップ５１１）。次にＭＰＵ１２３は、第２の空き領域リスト１１１ｃを参照する（ステップ５１２）。そしてＭＰＵ１２３は、第２の空き領域リスト１１１ｃから、パラメータＳ（Ｄｎ）の示す値以上のサイズの２つの空き領域ＦＡ１及びＦＡ２を探索する（ステップ５１３）。
【００７４】
本実施形態では、パラメータＳ（Ｄｎ）の示す値は、１ブロックのサイズ（２５６ＫＢ）を示す。この場合、ＭＰＵ１２３は、例えば２つの空きブロックを、空き領域ＦＡ１及びＦＡ２として探索する。そしてＭＰＵ１２３は、空き領域ＦＡ１及びＦＡ２の探索に成功したかを判定する（ステップ５１４）。
【００７５】
もし、空き領域（ブロック）ＦＡ１及びＦＡ２の探索に成功したならば（ステップ５１４のＹｅｓ）、ＭＰＵ１２３は、メモリＩＦ１２２を制御することにより、ＮＡＮＤメモリ１１の空き領域ＦＡ１及びＦＡ２の双方にデータＤｎを書き込む（ステップ５１５）。つまりＭＰＵ１２３は、データＤｎを空き領域ＦＡ１及びＦＡ２に多重に書き込む。
【００７６】
また、ステップ５１５においてＭＰＵ１２３は、探索された空き領域ＦＡ１及びＦＡ２に関する情報を、第２の空き領域リスト１１１ｃから削除する。また、ステップ５１５においてＭＰＵ１２３は、キャッシュ管理テーブル１１１ａに登録されている、データＤｎに関するキャッシュディレクトリ情報を更新する。更に、ステップ５１５においてＭＰＵ１２３は、空き領域ＦＡ１に対応する物理ブロック番号と対応付けてアクセスカウンタテーブル１２５ａに格納されているアクセスカウント情報と、空き領域ＦＡ２に対応する物理ブロック番号と対応付けてアクセスカウンタテーブル１２５ａに格納されているアクセスカウント情報とを更新する。そしてＭＰＵ１２３は、非多重化領域ＮＭＡを、第１の空き領域リスト１１１ｂに追加する（ステップ５１６）。これにより空き領域の数（つまり、空き領域の記憶容量）が増加する。
【００７７】
非多重化領域ＮＭＡが非多重化領域ブロックである本実施形態では、ＭＰＵ１２３は、当該非多重化領域ＮＭＡを第１の空き領域リスト１１１ｂに登録した際に、当該非多重化領域ＮＭＡのデータを一括して消去する。これにより、当該非多重化領域ＮＭＡは、空き領域として利用可能となる。これに対し、非多重化領域ＮＭＡが物理ブロック内の一部の領域Ａａであるものとする。この場合、物理ブロック内の残りの領域Ａｂが既に第１の空き領域リスト１１１ｂに登録されているならば、ＭＰＵ１２３は当該物理ブロックのデータを一括して消去する。一方、物理ブロック内の領域Ａｂが第１の空き領域リスト１１１ｂに登録されていないならば、ＭＰＵ１２３は、当該領域Ａｂが第１の空き領域リスト１１１ｂに登録されるのを待って当該物理ブロックのデータを一括して消去する。
【００７８】
ＭＰＵ１２３は、ステップ５１６を実行するとステップ５０２に戻る。一方、空き領域ＦＡ１及びＦＡ２の探索に失敗したならば（ステップ５１４のＮｏ）、ＭＰＵ１２３は非多重化領域ＮＭＡのデータＤｎを削除する（ステップ５１７）。具体的には、ＭＰＵ１２３は、キャッシュ管理テーブル１１１ａに登録されている、データＤｎに関するキャッシュディレクトリ情報を無効化する。そしてＭＰＵ１２３は、非多重化領域ＮＭＡを第１の空き領域リスト１１１ｂに追加し（ステップ５１６）、しかる後にステップ５０２に戻る。
【００７９】
さて、メインコントローラ２７のＭＰＵ２７３は、第１のライト要求に対応する第２のライト要求をメモリコントローラ１２に送出した際に、第１のライト要求に基づくディスクライト処理を開始する。つまりＭＰＵ２７３は、ヘッド２２が開始論理アドレスで指定されるディスク２１上の目標トラックに位置付けられるように、ドライバＩＣ２５を制御する。そしてＭＰＵ２７３は、ヘッド２２が目標トラックに位置付けられている状態で、Ｒ／Ｗチャネル２７１及びヘッドＩＣ２６を介して、ヘッド２２によりデータＤ１を書き込ませる。
【００８０】
次に、図１のハイブリッドドライブの動作について、ホストから当該ドライブにリード要求（コマンド）が発行された場合を例に、図６を参照して説明する。図６は、ハイブリッドドライブのメモリコントローラ１２（より詳細には、メモリコントローラ１２のＭＰＵ１２３）によって実行されるリード処理の典型的な手順を示すフローチャートである。
【００８１】
まず、ホストが図１に示されるハイブリッドドライブに第１のリード要求を発行したものとする。この第１のリード要求は、開始論理アドレスと、読み出されるべきデータ（読み出しデータ）Ｄのサイズを示すサイズ情報とを含む。ここでは、開始論理アドレスは、論理ブロック番号がＹの論理ブロックＹの開始位置を示し、データＤのサイズは、１ブロックのサイズであるものとする。
【００８２】
ホストからの第１のリード要求（コマンド）は、メインコントローラ２７のＨＤＣ２７２によって受信された後、当該ＨＤＣ２７２によってＭＰＵ２７３に渡される。するとＭＰＵ２７３は、第２のリード要求を、メモリコントローラ１２に送出する。第２のリード要求は、第１のリード要求と同様に、開始論理アドレスと、読み出しデータＤのサイズを示すサイズ情報とを含む。つまり、第２のリード要求は、受信された第１のリード要求に対応する。ＭＰＵ２７３によって送出された第２のリード要求は、メモリコントローラ１２のホストＩＦ１２１によって受信された後、当該ホストＩＦ１２１によりメモリコントローラ１２のＭＰＵ１２３に渡される。
【００８３】
するとＭＰＵ１２３は、第２のリード要求で指定されたデータＤをＮＡＮＤメモリ１１のキャッシュ領域１１２から読み出すためのリード処理（つまり、キャッシュリード処理）を、図６のフローチャートによって示される手順で次のように実行する。
【００８４】
ＭＰＵ１２３はまず、パラメータＬＢＡに開始論理アドレスを代入し、且つパラメータＳ（Ｄ）にデータＤのサイズを代入する（ステップ６０１）。次にＭＰＵ１２３は、パラメータＬＢＡの示す開始論理アドレスに基づいてキャッシュ管理テーブル１１１ａを参照する（ステップ６０２）。このステップ６０２の詳細は次の通りである。
【００８５】
まずＭＰＵ１２３は、パラメータＬＢＡの示す開始論理アドレスから論理ブロック番号を抽出する。上述の開始論理アドレスの例では、論理ブロック番号としてＹが抽出される。ＭＰＵ１２３は、抽出された論理ブロック番号Ｙに基づいてキャッシュ管理テーブル１１１ａを参照する。そしてＭＰＵ１２３は、抽出された論理ブロック番号Ｙを含む有効なキャッシュディレクトリ情報（つまり、ブロック状態ＡまたはＢを示すキャッシュディレクトリ情報）を、キャッシュ管理テーブル１１１ａから検索する。
【００８６】
なお本実施形態では、キャッシュディレクトリ情報は、物理ブロック番号に対応付けてキャッシュ管理テーブル１１１ａに登録されている。したがって、物理ブロック番号に基づいてキャッシュディレクトリ情報を検索する場合には、高速検索が可能である。これに対し、上述のように論理ブロック番号に基づいてキャッシュディレクトリ情報を検索する場合には、高速検索は難しい。そこで、論理ブロック番号（論理アドレス）を物理ブロック番号（物理アドレス）に変換するのに用いられるアドレス変換テーブルがシステム領域１１１に格納されても構わない。アドレス変換テーブルには、論理ブロック毎に、論理ブロック番号と物理ブロック番号との対応を示すアドレス変換情報が登録される。この場合、ＭＰＵ１２３は、キャッシュディレクトリ情報をキャッシュ管理テーブル１１１ａに登録する際に、当該キャッシュディレクトリ情報に対応するアドレス変換情報を、アドレス変換テーブルに登録すれば良い。
【００８７】
さてＭＰＵ１２３は、キャッシュ管理テーブル１１１ａを参照することによりキャッシュディレクトリ情報検索を実行すると（ステップ６０２）、ステップ６０３に進む。ステップ６０３においてＭＰＵ１２３は、目的のキャッシュディレクトリ情報が検索できたかにより、データＤ（つまり、第２のリード要求で指定されたデータＤ）がＮＡＮＤメモリ１１に格納されているかを判定する。データＤがＮＡＮＤメモリ１１に格納されているキャッシュヒットの場合（ステップ６０３のＹｅｓ）、ＭＰＵ１２３はステップ６０４に進む。
【００８８】
ステップ６０４においてＭＰＵ１２３は、ＮＡＮＤメモリ１１内でデータＤが多重化されているかを判定する。この判定は、次の手順で行われる。まず、ＭＰＵ１２３は前記抽出された論理ブロック番号Ｙに基づいてキャッシュ管理テーブル１１１ａを参照する。そしてＭＰＵ１２３は、抽出された論理ブロック番号Ｙを含み、且つステップ６０２で検索されたキャッシュディレクトリ情報（以下、第１のキャッシュディレクトリ情報と称する）とは異なる有効なキャッシュディレクトリ情報（以下、第２のキャッシュディレクトリ情報と称する）を、キャッシュ管理テーブル１１１ａから検索する。ＭＰＵ１２３は、この第２のキャッシュディレクトリ情報が検索できたかにより、データＤが多重化されているかを判定する。
【００８９】
もし、データＤが多重化されていないならば（ステップ６０４のＮｏ）、ＭＰＵ１２３はステップ６０５に進む。ステップ６０５においてＭＰＵ１２３は、メモリＩＦ１２２を制御することにより、第１のキャッシュディレクトリ情報の示す物理ブロックからデータＤを読み出す。メモリＩＦ１２２は、データＤの読み出しで、誤り訂正が不能なエラー（つまり、リードエラー）が検出されたかを、ＭＰＵ１２３に通知する。また、リードエラーが検出されなかった場合、メモリＩＦ１２２は正常に読み出されたデータＤをＭＰＵ１２３に転送する。
【００９０】
ＭＰＵ１２３は、データＤの読み出しでリードエラーが発生したかを、メモリＩＦ１２２からの前記通知に基づいて判定する（ステップ６０６）。もし、リードエラーが発生しなかったならば（ステップ６０６のＮｏ）、ＭＰＵ１２３は、正常に読み出されたデータＤを、ホストＩＦ１２１によりメインコントローラ２７（ＭＰＵ２７３）に転送させる（ステップ６０７）。即ちホストＩＦ１２１は、メインコントローラ２７からの第２のリード要求に対する完了応答（つまり、リード完了応答）を用いて、当該メインコントローラ２７にデータＤを返す。
【００９１】
また、ステップ６０７においてＭＰＵ１２３は、キャッシュ管理テーブル１１１ａ内の第１のキャッシュディレクトリ情報のブロック状態情報を、当該ブロック状態情報の示すブロック状態ＡまたはＢに応じて更新する。つまり、ブロック状態情報がブロック状態Ａを示しているならば、ＭＰＵ１２３は、当該ブロック状態情報がブロック状態Ｂを示すように、当該ブロック状態情報を更新する。これに対し、ブロック状態情報がブロック状態Ｂを示しているならば、ＭＰＵ１２３は、当該ブロック状態情報の更新を抑止する。これにより、ＮＡＮＤメモリ１１のシステム領域１１１において、キャッシュ管理テーブル１１１ａの更新（つまり書き込み）が頻繁に発生して、当該システム領域１１１が劣化するのを防止できる。
【００９２】
更にステップ６０７においてＭＰＵ１２３は、アクセスカウンタテーブル１２５ａを更新する。即ちＭＰＵ１２３は、アクセスカウンタテーブル１２５ａにおいて、第１のキャッシュディレクトリ情報中の物理ブロック番号と対応付けられているアクセスカウントを１だけインクリメントし、且つ現在の時刻を示すタイムスタンプを当該物理ブロック番号に対応付けて登録する。これにより、ＭＰＵ１２３はリード処理を終了する。
【００９３】
メインコントローラ２７のＭＰＵ２７３は、メモリコントローラ１２のホストＩＦ１２１からのリード完了応答を受信すると、ＨＤＣ２７２によりデータＤをホストに転送させる。即ちＨＤＣ２７２は、ホストからの第１のリード要求に対する完了応答を用いて、当該ホストにデータＤを返す。
【００９４】
次に、データＤが多重化されている場合（ステップ６０４のＹｅｓ）について説明する。図４に示されるキャッシュ管理テーブル１１１ａの例では、論理ブロック番号がＹの論理ブロックＹのデータＤは、物理ブロック番号がＮ＋１の物理ブロックＮ＋１と、物理ブロック番号がＮ＋３の物理ブロックＮ＋３とに、多重に格納されている。このように、データＤが多重化されている場合（ステップ６０４のＹｅｓ）、ＭＰＵ１２３はステップ６０８に進む。物理ブロックＮ＋１及びＮ＋３は、上述のライト処理の説明から明らかなように、第２の空き領域リスト１１１ｃから探索されて、データＤの多重書き込みに用いられたブロックである。つまり物理ブロックＮ＋１及びＮ＋３は、過去にリードエラーが発生した際に第２の空き領域リスト１１１ｃに登録され、その後、データＤの多重書き込みに用いられたブロックである。
【００９５】
ステップ６０８においてＭＰＵ１２３は、データＤが多重に格納されているＮＡＮＤメモリ１１内の領域（ここでは、物理ブロックＮ＋１及びＮ＋３）から、１つの領域を（例えば、物理ブロックＮ＋１）を選択する。するとＭＰＵ１２３は、ステップ６０５に進む。ステップ６０５においてＭＰＵ１２３は、ＮＡＮＤメモリ１１内の選択された領域（物理ブロックＮ＋１）からデータＤを読み出す。ＭＰＵ１２３は、データＤの読み出しでリードエラーが発生したかを判定する（ステップ６０６）。
【００９６】
次に、データＤの読み出しでリードエラーが発生した場合（ステップ６０６のＹｅｓ）について説明する。この場合、ＭＰＵ１２３は、リードエラーが発生した領域（つまり、リードエラーが検出されたデータＤが格納されている領域）を、第２の空き領域リスト１１１ｃに追加する（ステップ６０９）。したがって、ステップ６０８で選択された物理ブロックＮ＋１からのデータＤの読み出しでリードエラーが発生したならば、当該物理ブロックＮ＋１が再び第２の空き領域リスト１１１ｃに追加される。
【００９７】
次にＭＰＵ１２３は、データＤが格納されている未選択の領域が存在するかを判定する（ステップ６１０）。物理ブロックＮ＋１からのデータＤの読み出しでリードエラーが発生した本実施形態では、物理ブロックＮ＋３が未選択の領域として存在する（ステップ６１０のＹｅｓ）。この場合、ＭＰＵ１２３は、ステップ６０４に戻る。そしてＭＰＵ１２３は、ステップ６０４からステップ６０８に進んで、物理ブロックＮ＋３を選択し、しかる後に当該物理ブロックＮ＋３からデータＤを読み出す（ステップ６０５）。
【００９８】
物理ブロックＮ＋１及びＮ＋３は、前述したように過去にリードエラーが発生したブロックである。このような物理ブロックＮ＋１及びＮ＋３は、従来技術では、バッドブロック（つまり、使用不可能なブロック）としてバッドブロックリスト１１１ｄに登録されて、データ格納に使用されない。これに対して本実施形態では、物理ブロックＮ＋１及びＮ＋３は、データの多重化に用いられるブロック（多重化記憶領域）として第２の空き領域リスト１１１ｃに登録される。
【００９９】
このため本実施形態によれば、リードエラーの発生に伴って、キャッシュ領域１１２の記憶容量が単純に減少するのを防止できる。つまり本実施形態によれば、リードエラーが発生した２つの物理ブロックをデータの多重化（二重化）に用いることにより、仮想的なバッドブロックの数を１つ（１／２）に減らすことができる。
【０１００】
本実施形態では、物理ブロックＮ＋１及びＮ＋３の双方に、データＤが多重に書き込まれている。このような物理ブロックＮ＋１及びＮ＋３から、メモリコントローラ１２（ＭＰＵ１２３）がデータＤをそれぞれ読み出す動作ＲＯａ及びＲＯｂを実行する場合を想定する。読み出し動作ＲＯａ及びＲＯｂでリードエラーが発生する確率ＰＥａ及びＰＥｂ（０＜ＰＥａ＜１，０＜ＰＥｂ＜１）は高い。しかし、両読み出し動作のいずれにおいてもリードエラーが発生する確率ＰＥ（ＰＥ＝ＰＥａ・ＰＥｂ）は、ＰＥａ及びＰＥｂよりも低い（ＰＥ＜ＰＥａ，ＰＥ＜ＰＥｂ）。
【０１０１】
つまり本実施形態によれば、物理ブロックＮ＋１及びＮ＋３を用いたデータＤの多重化により、当該データＤの読み出しに成功する確率Ｐｓを高めることができる。これにより、キャッシュメモリとして用いられるＮＡＮＤメモリ１１からのデータ読み出しにおける性能（つまり、リードキャッシュ性能）を向上することができる。ＮＡＮＤメモリ１１では、リードディスターブに起因するリードエラーが、リードの回数に比例して発生する。したがって本実施形態では、このようなリードエラーに特に効果を発揮する。なお、前記確率Ｐｓは、１−ＰＥ（つまり、１−ＰＥａ・ＰＥｂ）で表される。
【０１０２】
本実施形態では、データＤは、第２の空き領域リスト１１１ｃから探索された２つの物理ブロック（空き領域）に多重に書き込まれる。しかしデータＤが、３つ以上の物理ブロックに多重に書き込まれても良い。この場合、データ書き込みの性能が低下し、且つキャッシュ管理テーブル１１１ａの更新回数が増加するものの、データＤの読み出しに成功する確率を一層向上することができる。
【０１０３】
ここで、物理ブロックＮ＋３からのデータＤの読み出しでリードエラーが発生しなかったものとする（ステップ６０６のＮｏ）。この場合、ＭＰＵ１２３はステップ６０７に進む。ステップ６０７においてＭＰＵ１２３は、前述したようにホストＩＦ１２１によりメインコントローラ２７にデータＤを転送させる。
【０１０４】
これに対し、物理ブロックＮ＋３からデータＤの読み出しでリードエラーが発生したならば（ステップ６０６のＹｅｓ）、ＭＰＵ１２３は再びステップ６０９に進む。ステップ６０９においてＭＰＵ１２３は、物理ブロックＮ＋３を再び第２の空き領域リスト１１１ｃに追加する。このとき、データＤが格納されている未選択の領域は存在しない（ステップ６１０のＮｏ）。この場合、ＭＰＵ１２３はステップ６１１に進む。
【０１０５】
ステップ６１１においてＭＰＵ１２３は、メインコントローラ２７からの第２のリード要求の示すデータＤの読み出しでエラーが発生したことを示す応答（エラー応答）を、ホストＩＦ１２１により当該メインコントローラ２７に返信させる。これにより、ＭＰＵ１２３はリード処理を終了する。また、ＭＰＵ１２３は、データＤがＮＡＮＤメモリ１１に格納されていないキャッシュミスヒットの場合にも（ステップ６０３のＮｏ）、ステップ６１１を実行する。
【０１０６】
さて、メインコントローラ２７のＭＰＵ２７３は、第１のリード要求に対応する第２のリード要求をメモリコントローラ１２に送出した際に、第１のリード要求に基づくディスクリード処理を開始する。つまりＭＰＵ２７３は、ヘッド２２が開始論理アドレスで指定されるディスク２１上の目標トラックに位置付けられるように、ドライバＩＣ２５を制御する。そしてＭＰＵ２７３は、ヘッド２２が目標トラックに位置付けられている状態で、ヘッド２２によりデータＤを読み出させる。
【０１０７】
ディスクリード処理の途中で、メモリコントローラ１２から完了応答が返された場合、ＭＰＵ２７３はディスクリード処理を強制終了する。これに対し、ディスクリード処理の途中で、メモリコントローラ１２からエラー応答が返された場合、ＭＰＵ２７３はディスクリード処理を継続する。この場合、ＭＰＵ２７３は、ディスクリード処理でリードされたデータＤを、ＨＤＣ２７２によりホストに転送させる。またＭＰＵ２７３は、ディスクリード処理でリードされたデータＤをＮＡＮＤメモリ１１に書き込むことを指示するためのライト要求（より詳細には、前記第２のライト要求に相当するライト要求）をメモリコントローラ１２に送出する。ＭＰＵ１２３は、このライト要求に基づいて、前述のようなライト処理（キャッシュライト処理）を実行する。但し、ここでは、データＤがＮＡＮＤメモリ１１に書き込まれる。
【０１０８】
なお、メモリコントローラ１２からエラー応答が返された場合に、ＭＰＵ２７３がディスクリード処理を開始しても良い。この場合、ホストからの第１のリード要求に対する応答性は低下するものの、ＭＰＵ２７３の制御は簡略化される。
【０１０９】
前記実施形態では、テーブル１１１ａと、リスト１１１ｂ，１１１ｃ及び１１１ｄとが、ＮＡＮＤメモリ１１に格納される。しかし、テーブル１１１ａと、リスト１１１ｂ，１１１ｃ及び１１１ｄとが、ＲＡＭ１２５に格納されても良い。この場合、ハイブリッドドライブの電源の突然の遮断により、テーブル１１１ａの内容と、リスト１１１ｂ，１１１ｃ及び１１１ｄの内容とが消失する可能性がある。このような消失が起きると、ＭＰＵ１２３は、ＮＡＮＤメモリ１１から目的のデータ（例えばデータＤ）を読み出すことができなくなる。しかし、データＤはディスク２１にも格納されている。このため、データＤは、上述のディスクリード処理により当該ディスク２１から読み出される。したがって、ホストからの第１のリード要求に対するハイブリッドドライブの応答性能は一時的に低下するものの、メインコントローラ２７は、当該第１のリード要求に対する応答として、データＤを当該ホストに返すことができる。
【０１１０】
テーブル１１１ａと、リスト１１１ｂ，１１１ｃ及び１１１ｄとが、ＲＡＭ１２５に格納される構成では、ハイブリッドドライブの電源が遮断される際に、これらがディスク２１の第３の領域に保存されると良い。また前記実施形態において、ＮＡＮＤメモリ１１のシステム領域１１１に格納されているテーブル１１１ａと、リスト１１１ｂ，１１１ｃ及び１１１ｄとが、ハイブリッドドライブの電源が投入された際に、当該ＮＡＮＤメモリ１１からＲＡＭ１２５にロードされて用いられても良い。この場合、ＲＡＭ１２５に格納されているテーブル１１１ａと、リスト１１１ｂ，１１１ｃ及び１１１ｄとが、ハイブリッドドライブの電源が遮断される際にＮＡＮＤメモリ１１に保存され、且つＮＡＮＤメモリ１１内の旧テーブル１１１ａと、旧リスト１１１ｂ，１１１ｃ及び１１１ｄとが無効化されれば良い。このような構成では、アクセスカウント情報がテーブル（キャッシュ管理テーブル）１１１ａに登録されても良い。この場合、アクセスカウンタテーブル１２５ａは不要となる。
【０１１１】
以上説明した少なくとも１つの実施形態によれば、リードエラーが発生した記憶領域を有効に利用することで不揮発性記憶媒体の実質的な記憶容量の低下を極力防止できる
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１１２】
１０…半導体ドライブユニット、１１…ＮＡＮＤメモリ（ＮＡＮＤフラッシュメモリ、第１の不揮発性記憶媒体）、１２…メモリコントローラ（キャッシュコントローラ）、２０…ＨＤＤ（ハードディスクドライブユニット）、２１…ディスク（磁気ディスク、第２の不揮発性記憶媒体）、２２…ヘッド、２７…メインコントローラ、１１１…システム領域、１１１ａ…キャッシュ管理テーブル、１１１ｂ…第１の空き領域リスト、１１１ｃ…第２の空き領域リスト、１１１ｄ…バッドブロックリスト、１１２…キャッシュ領域、１２１…ホストＩＦ（ホストインタフェースコントローラ）、１２２…メモリＩＦ（メモリインタフェースコントローラ）、１２３…ＭＰＵ（マイクロプロセッサユニット、プロセッサ）、１２５…ＲＡＭ、１２５ａ…アクセスカウンタテーブル。
【図１】
2015082240.tif 000003
【図２】
2015082240.tif 000004
【図３】
2015082240.tif 000005
【図４】
2015082240.tif 000006
【図５】
2015082240.tif 000007
【図６】
2015082240.tif 000008