(57)【特許請求の範囲】
【請求項１】
第１の記憶装置および第２の記憶装置にコマンドを発行することによってデータの転送を行うコントローラと、
前記第１の記憶装置を前記第２の記憶装置のリードキャッシュとして用いるキャッシュ手段であって、前記コントローラが発行し、前記第１の記憶装置から完了通知が返ってきていないコマンド数が設定数より大きい数の場合、キャッシュデータを前記第１の記憶装置に書き込むためのライトコマンドを、前記コマンド数が前記設定数以下になるまで前記コントローラへの発行を保留し、前記コマンド数が前記設定数以下になった場合、前記保留されている前記ライトコマンドを前記コントローラに発行する、キャッシュ手段と、
を具備する情報処理装置。
【請求項２】
前記コントローラは、ＵＳＢ（Universal Serial Bus）規格に対応している、
請求項１に記載の情報処理装置。
【請求項３】
前記第１の記憶装置は、フラッシュメモリを有する、
請求項１に記載の情報処理装置。
【請求項４】
前記第２の記憶装置は、ハードディスクドライブを有する、
請求項１に記載の情報処理装置。
【請求項５】
前記第１の記憶装置は、前記コントローラから発行される複数のコマンドを等しい優先度で処理する、
請求項１に記載の情報処理装置。
【請求項６】
コントローラに接続された第１の記憶装置を前記コントローラに接続された第２の記憶装置のリードキャッシュとして用いるキャッシュ方法であって、
前記コントローラが発行し、前記第１の記憶装置から完了通知が返ってきていないコマンド数が設定数より大きい数の場合、キャッシュデータを前記第１の記憶装置に書き込むためのライトコマンドを、発行しているコマンド数が前記設定数以下になるまで前記コントローラへの発行を保留し、
前記コマンド数が前記設定数以下になった場合、前記保留されている前記ライトコマンドを前記コントローラに発行する
キャッシュ方法。
【請求項７】
前記コントローラは、ＵＳＢ（Universal Serial Bus）規格に対応している、
請求項６に記載のキャッシュ方法。
【請求項８】
前記第１の記憶装置は、フラッシュメモリを有する、
請求項６に記載のキャッシュ方法。
【請求項９】
前記第２の記憶装置は、ハードディスクドライブを有する、
請求項６に記載のキャッシュ方法。
【請求項１０】
前記第１の記憶装置は、前記コントローラから発行される複数のコマンドを等しい優先度で処理する、
請求項６に記載のキャッシュ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一つのコントローラに第１の記憶装置および第２の記憶装置が接続され、第１の記憶装置を第２の記憶装置のキャッシュとして用いる情報処理装置、およびキャッシュ方法に関する。
【背景技術】
【０００２】
ＳＳＤ（Solid State Drive）をハードディスクドライブのキャッシュとして利用するＳ−ＡＴＡコントローラを有するチップセットが製品化されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１６３４７４号公報
【特許文献２】特許第３０８３５３０号公報
【特許文献３】特許第２８３４２９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＵＳＢコントローラに接続されたＳＳＤ（ＵＳＢ−ＳＳＤ）をＵＳＢコントローラに接続されたハードディスクドライブ（ＵＳＢ−ＨＤＤ）のリードキャッシュとして用いることが提案されている。
【０００５】
ＵＳＢ−ＳＳＤ（第１の記憶装置）をＵＳＢ−ＨＤＤ（第２の記憶装置）のリードキャッシュとして用いた場合、リードキャッシュを使用しない場合に比べて性能が低下する場合があった。そのため、性能の低下を抑制することが望まれている。
【０００６】
本発明の目的は、コントローラに接続された第１の記憶装置をコントローラに接続された第２の記憶装置のリードキャッシュとして用いた場合に性能の低下を抑制することが可能な情報処理装置およびキャッシュ方法を提供することである。
【課題を解決するための手段】
【０００７】
実施形態によれば、情報処理装置は、コントローラと、キャッシュ手段とを具備する。コントローラは、第１の記憶装置および第２の記憶装置にコマンドを発行することによってデータの転送を行う。キャッシュ手段は、前記第１の記憶装置を前記第２の記憶装置のリードキャッシュとして用いる。キャッシュ手段は、前記コントローラが発行し、前記第１の記憶装置から完了通知が返ってきていないコマンド数が設定数より大きい数の場合、キャッシュデータを前記第１の記憶装置に書き込むためのライトコマンドを、前記コマンド数が前記設定数以下になるまで前記コントローラへの発行を保留し、前記コマンド数が前記設定数以下になった場合、前記保留されている前記ライトコマンドを前記コントローラに発行する。
【図面の簡単な説明】
【０００８】
【図１】実施形態の情報処理装置の構成の一例を示すブロック図である。
【図２】実施形態の情報処理装置の主要部の一例を示すブロック図である。
【図３】図２のＮＶＣをキャッシュとして用いる場合の動作の概要を説明するための図である。
【図４】一般的なリードキャッシュの動作の手順を示すフローチャートである。
【図５】ＵＳＢコントローラに接続されたＳＳＤをＵＳＢコントローラに接続されたＨＤＤのリードキャッシュとして用いた場合に性能が悪化することを説明するための図である。
【図６】実施形態のキャッシュドライバによるキャッシュ処理の手順を示すフローチャートである。
【図７】実施形態の変形例の情報処理装置の構成の一例を示すブロック図である。
【発明を実施するための形態】
【０００９】
以下、実施の形態について図面を参照して説明する。
【００１０】
図１は、実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータとして実現されている。
【００１１】
図１に示すように、本情報処理装置は、ＣＰＵ（Central processing unit）１１、ＭＣＨ（Memory controller hub）１２、メインメモリ（揮発性メモリ）１３、ＩＣＨ（I/o controller hub）１４、ＧＰＵ（Graphics processing unit）１５、ビデオメモリ（ＶＲＡＭ）１５Ａ、サウンドコントローラ１６、ＢＩＯＳ−ＲＯＭ（Read only memory）１７、ＨＤＤ（Hard disk drive）１８、ＯＤＤ（Optical disc drive）２０、各種周辺機器２１、ＥＥＰＲＯＭ（Electrically erasable programmable ROM）２２、ＥＣ／ＫＢＣ（Embedded controller/keyboard controller）２３等を備えている。
【００１２】
ＣＰＵ１１は、本情報処理装置の動作を制御するプロセッサであり、ＨＤＤ１８やＯＤＤ２０からメインメモリ１３にロードされる各種プログラムを実行する。このＣＰＵ１１によって実行される各種プログラムの中には、リソース管理を司るＯＳ１１０や、当該ＯＳ１１０の配下で動作する、キャッシュドライバ１２０および各種アプリケーションプログラム１３０等が存在する。キャッシュドライバ１２０は、後述するＳＳＤ２０２をキャッシュデバイスとして利用するプログラムである。
【００１３】
また、ＣＰＵ１１は、ＢＩＯＳ−ＲＯＭ１７に格納されたＢＩＯＳも実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。以下では、ＢＩＯＳ−ＲＯＭ１７の格納物であるＢＩＯＳ自体についてもＢＩＯＳ１７と表記することがある。
【００１４】
ＭＣＨ１２は、ＣＰＵ１１とＩＣＨ１４との間を接続するブリッジとして動作すると共に、メインメモリ１３をアクセス制御するメモリコントローラとして動作する。また、ＭＣＨ１２は、ＧＰＵ１５との通信を実行する機能を有している。
【００１５】
ＧＰＵ１５は、本情報処理装置に組み込まれ、または、外部接続される表示装置を制御する表示コントローラである。ＧＰＵ１５は、ＶＲＡＭ１５Ａを有し、また、各種プログラムが表示しようとする画像をＣＰＵ１１に代わって描画するアクセラレータを搭載している。
【００１６】
ＩＣＨ１４は、ＨＤＤ１８およびＯＤＤ２０を制御するためのＡＴＡ（AT Attachment）コントローラを内蔵する。ＩＣＨ１４は、ＰＣＩ（Peripheral component interconnect）バスに接続された各種周辺機器２１の制御も行う。また、ＩＣＨ１４は、サウンドコントローラ１６との通信機能も有している。
【００１７】
サウンドコントローラ１６は音源デバイスであり、各種プログラムが再生対象とするオーディオデータを、本情報処理装置に組み込まれた、または、外部接続されるスピーカ等に出力する。
【００１８】
ＥＥＰＲＯＭ２２は、例えば本情報処理装置の個体情報や環境設定情報などを格納するためのメモリデバイスである。そして、ＥＣ／ＫＢＣ２３は、電力管理を行うためのエンベデッドコントローラと、キーボードやポインティングデバイス等の操作によるデータ入力を制御するためのキーボードコントローラとが集積された１チップＭＰＵ（Micro processing unit）である。
【００１９】
キャッシュドライバ１２０は、ＳＳＤ２０２の少なくとも一部の領域（ＮＶＣ（Non-Volatile Cache））をＨＤＤ２０１のキャッシュメモリとして用いる。
【００２０】
次に、キャッシュドライバ１２０の機能について図２を参照して説明する。図２は、図１に示す情報処理装置の主要部を示すブロック図である。  
メインメモリ１３内には、ユーザバッファ領域３０１、Ｌ１キャッシュ領域３０２、およびマージ用バッファ領域３０３が確保される。また、キャッシュドライバ１２０によって、Ｌ１管理情報３０４、ＮＶＣ管理情報３０５、コマンド発行数確認用データ３０６がメモリ１３内に作成される。
【００２１】
Ｌ１キャッシュ領域３０２は、データをＮＶＣ３１１にコピーするときに使用するバッファである。Ｌ１キャッシュ領域３０２は、フィルタドライバがロードされるときにメインメモリに確保される。なお、Ｌ１キャッシュ領域３０２の容量は１６ＭＢ程度である。
【００２２】
また、マージ用バッファ領域３０３は、キャッシュの方式がライトバック（Ｗｒｉｔｅ  Ｂａｃｋ）方式の場合に使用される。マージ用バッファ領域３０３は、リードアクセス時に、Ｌ１キャッシュ領域３０２に一部のデータが格納されている場合に、ＨＤＤ２０１から読み出されたＬ１キャッシュ領域３０２に格納されていないデータを一時的に格納するために用いられる。マージ用バッファ領域３０３は、Ｌ１キャッシュ領域３０２と同じ容量である。Ｌ１管理情報３０４は、Ｌ１キャッシュ領域３０２に格納されているキャッシュデータを管理するための情報である。ＮＶＣ管理情報３０５は、ＮＶＣ３１１に格納されているキャッシュデータを管理するための情報である。ＮＶＣ管理情報３０５内には、複数のエントリが設定され、各エントリ内にはキャッシュデータの格納場所、キャッシュデータに対応するＨＤＤ２０１の格納場所、キャッシュデータとＨＤＤ２０１内のデータとが一致するかを示すデータ等が格納されている。コマンド発行数確認用データ３０６の値は、ＳＳＤ２０２に対して発行中のコマンドを確認するために設けられている。ＳＳＤ２０２に対してコマンド（ライトコマンド、リードコマンド）が発行された時にコマンド発行数確認用データ３０６の値がインクリメントされ、発行されたコマンドの完了通知が返ってきた時にコマンド発行数確認用データ３０６の値がデクリメントされる。
【００２３】
情報処理装置１０はオペレーティングシステム（ＯＳ）１１０が制御し、オペレーティングシステム１１０からＨＤＤ２０１へのアクセスはすべてキャッシュドライバ１２０を介して行われる。キャッシュドライバ１２０はＵＳＢコントローラ１４Ａを直接的または間接的に制御する。ＵＳＢコントローラ１４Ａを介してＨＤＤ２０１が接続されている。また、キャッシュドライバ１２０は、メモリコントローラ１２Ａを介して、メインメモリ１３へのデータのアクセスを行う。
【００２４】
キャッシュドライバ１２０はシステムの起動時にメインメモリ１３にロードされる。キャッシュドライバ１２０は、キャッシュ管理情報３０１を格納するための領域をメインメモリ１３内に確保して初期化し、キャッシュには何も記録されていない状態にした後、キャッシュ制御処理を開始する。キャッシュ管理情報３０１は、キャッシュディレクトリなどのキャッシュデータを管理するためのデータを有する。キャッシュドライバ１２０の動作時、キャッシュドライバ１２０は、メインメモリ１３内のキャッシュ管理情報３０１にライトキャッシュおよびリードキャッシュの学習データを管理するためのデータを記録する。シャットダウン時、キャッシュドライバ１２０は、メインメモリ１３内のキャッシュ管理情報３０１を破棄する。
【００２５】
なお、キャッシュドライバ１２０が動作を開始するまでは、ＢＩＯＳプログラムがＨＤＤ２０１へのアクセスを制御する。ＵＳＢコントローラ１４Ａは、ホストからライトアクセス要求またはリードアクセス要求があった場合、ＨＤＤ２０１にアクセスする。
【００２６】
ＳＳＤ２０２の一部または全部の領域がＨＤＤ２０１のキャッシュとして使用される。オペレーティングシステム１１０は、キャッシュデータの格納領域として使用されるＳＳＤ２０２のキャッシュに直接アクセスすることができない。
【００２７】
本情報処理装置は、ＨＤＤ２０１よりアクセス速度が速いＳＳＤ（Solid State Drive）２０２をＨＤＤ２０１のキャッシュとして利用することで、ＨＤＤ２０１に対するアクセスの高速化を図る。ＳＳＤ２０２は、フラッシュメモリ（不揮発性メモリ）を有する。
【００２８】
次に図３を参照して、ＮＶＣ３１１をキャッシュとして用いる場合の動作の概要を説明する。  
リードアクセスデータがＬ１キャッシュおよびＮＶＣ３１１内のキャッシュデータにヒットしない場合、キャッシュドライバ１２０は、ＨＤＤ２０１からデータを読み出し、読み出したデータをＬ１キャッシュ領域３０２に書き込む（ステップ４０８）。そして、キャッシュドライバ１２０は、Ｌ１キャッシュ領域３０２に書き込まれたデータをユーザバッファ領域３０１に書き込む（ステップ４０４）。また、Ｌ１キャッシュ領域３０２へのアクセスがビジーの場合、キャッシュドライバ１２０は、ＨＤＤ２０１からデータを読み出し、読み出したデータをユーザバッファ領域３０１に書き込む（ステップ４１２）。
【００２９】
リードアクセスデータの全てがＬ１キャッシュ領域３０２内のキャッシュデータにヒットした場合、キャッシュドライバ１２０は、Ｌ１キャッシュ領域３０２からデータを読み出して、ユーザバッファ領域３０１に書き込む（ステップ４０４）。
【００３０】
ライトアクセスデータの一部がＬ１キャッシュ領域３０２内のキャッシュデータにヒットした場合、キャッシュドライバ１２０は、ヒットしなかったデータをＨＤＤ２０１から読み出し、読み出されたデータをマージ用バッファ領域３０３に書き込む（ステップ４１０）。そして、キャッシュドライバ１２０は、Ｌ１キャッシュ領域３０２内で、Ｌ１キャッシュ領域３０２内のヒットしたデータとマージ用バッファ領域３０３に書き込まれたデータとをマージする（ステップ４０９）。キャッシュドライバ１２０は、マージされたデータをユーザバッファ領域３０１に格納する（ステップ４０４）。キャッシュドライバ１２０は、マージされたデータをＮＶＣ３１１に格納する（ステップ４０５）。
【００３１】
リードアクセスデータがＬ１キャッシュ領域３０２内のキャッシュデータにミスし、リードアクセスデータのすべてがＮＶＣ３１１内のキャッシュデータにヒットした場合、キャッシュドライバ１２０は、ＮＶＣ３１１からデータを読み出し、データをユーザバッファ領域３０１に書き込む（ステップ４０２）。
【００３２】
リードアクセスデータがＬ１キャッシュ領域３０２内のキャッシュデータにミスし、リードアクセスデータの一部がＮＶＣ３１１内のキャッシュデータにヒットした場合、ヒットしなかったデータをＨＤＤ２０１から読み出し、読み出されたデータをマージ用バッファ領域３０３に書き込む（ステップ４１０）。そして、キャッシュドライバ１２０は、ＮＶＣ３１１からヒットしたデータを読み出す（ステップ４０６）。キャッシュドライバ１２０は、Ｌ１キャッシュ領域３０２内で、ＮＶＣ３１１から読みだされたデータとマージ用バッファ領域３０３内のデータとをマージする（ステップ４０９）。キャッシュドライバ１２０は、マージしたデータをユーザバッファ領域３０１に転送する（ステップ４０４）。また、キャッシュドライバ１２０は、マージしたデータをＮＶＣ３１１に格納する（ステップ４０５）。
【００３３】
ライトアクセスデータがＬ１キャッシュ領域３０２およびＮＶＣ３１１内のキャッシュデータにヒットしない場合、キャッシュドライバ１２０は、ライトアクセスデータをＬ１キャッシュ領域３０２に一端書き込んだ後に（ステップ４０３）、Ｌ１キャッシュ領域３０２内のライトアクセスデータをＮＶＣ３１１に書き込む（ステップ４０５）。なお、Ｌ１キャッシュ領域３０２へのアクセスがビジーの場合、キャッシュドライバ１２０は、ライトアクセスデータを直接ＨＤＤ２０１に書き込む。
【００３４】
ライトアクセスデータがＬ１キャッシュ領域３０２内のキャッシュデータにヒットした場合、キャッシュドライバ１２０は、ライトアクセスデータをＬ１キャッシュ領域３０２に書き込み（ステップ４０３）、Ｌ１キャッシュ領域３０２内のライトアクセスデータをＮＶＣ３１１に格納する（ステップ４０５）。
【００３５】
ライトアクセスデータがＮＶＣ３１１内のキャッシュデータにヒットした場合、ライトアクセスデータをＮＶＣ３１１に書き込む（ステップ４０１）。  
Ｌ１キャッシュ領域３０２に書き込まれたキャッシュデータがハードディスクドライブに書き込まれていない場合、キャッシュドライバ１２０は、Ｌ１キャッシュ領域３０２に書き込まれているデータをＨＤＤ２０１に書き込む（ｓｔ４０７）。
【００３６】
ＮＶＣ３１１に書き込まれたキャッシュデータがハードディスクドライブに書き込まれていない場合、キャッシュドライバ１２０は、ＮＶＣ３１１からデータを読み出し、読み出したデータをＬ１キャッシュ領域３０２に書き込む（ステップ４０６）。キャッシュドライバ１２０は、Ｌ１キャッシュ領域３０２に書き込まれたデータをＨＤＤ２０１に書き込む（ステップ４０７）。  
キャッシュドライバ１２０は、ステップ４０１〜ステップ４１２の基本データ転送機能の組み合わせで、データの転送を行う。
【００３７】
（ライトスルーキャッシュ）
リードキャッシュはライトスルーキャッシュとも呼ばれている。一般的なリードキャッシュの動作について図４を参照して説明する。  
オペレーティングシステム１１０からＨＤＤ２０１へのアクセスコマンドが発行された場合、キャッシュドライバは、コマンドがリードコマンドであるかを判定する（ステップ５０１）。リードコマンドであると判定した場合（ステップ５０１のＹｅｓ）、キャッシュドライバは、ＮＶＣ管理情報３０５を参照することによって、リードコマンドに対応するデータがＮＶＣ３１１内に存在するかを判定する（ステップ５０２）。データが存在すると判定した場合（ステップ５０２のＹｅｓ）、ＮＶＣ３１１からリードコマンドに対応するデータを読み出す（ステップ５０３）。データが存在しないと判定した場合、キャッシュドライバは、ＨＤＤ２０１からリードコマンドに対応するデータを読み出す（ステップ５０４）。そして、キャッシュドライバは、ＨＤＤ２０１から読み出されたデータをＮＶＣ３１１に書き込み、データを学習する（ステップ５０５）。
【００３８】
ステップ５０１において、リードコマンドではない（つまり、ライトコマンドである）と判定した場合（ステップ５０１のＮｏ）、ライトコマンドに対応するアドレスのデータがＮＶＣ３１１内に存在するかを判定する（ステップ５０６）。データがＮＶＣ３１１内に存在すると判定した場合（ステップ５０６のＹｅｓ）、ＮＶＣ３１１内に存在するデータを書き換えると共に、ライトコマンドに対応するデータをＨＤＤ２０１に書き込む（ステップ５０７）。データがＮＶＣ３１１内に存在しないと判定した場合（ステップ５０６のＮｏ）、ライトコマンドに対応するデータをＨＤＤ２０１に書き込む（ステップ５０８）。  
以上説明したのが、シーケンシャルリードを検出した後のリードアクセスを学習する場合のキャッシュドライバの動作である。
【００３９】
実際のキャッシュ制御は、図４を参照して説明したよな直線的なフローではなく、記憶装置にコマンドを発行したら一旦制御を返し、記憶装置へのコマンドが終了したら続きの処理を行うように実装されるのが一般的である。キャッシュデバイス（ＳＳＤ）へのコマンドは以下のように分類される。
【００４０】
（Ａ）リードコマンドがキャッシュにヒットし、キャッシュからリード
（Ｂ）ライトコマンドがキャッシュにヒットし、キャッシュにライト
（Ｃ）リードコマンドがキャッシュにミスし、ＨＤＤからリードしたデータを学習するために、キャッシュにライト
ここで、（Ａ）および（Ｂ）はホストからのコマンドに対応して発行されるコマンドでる。これらのコマンドが完了するまではホストの実行を継続できないため、最優先で処理すべきコマンドである。これに対し（Ｃ）は、ホストからのリードコマンドはＨＤＤからリードした時点で終了を返しているため、ホストの実行は継続している。すなわち、（Ｃ）は優先度の低い処理である。キャッシュデバイスへのコマンドを下位モジュール(下位ドライバやデバイス)に発行するときは、（Ａ）、（Ｂ）は高優先度で発行し、（Ｃ）は低優先度で発行するのが一般的である。
【００４１】
しかしながら、ＵＳＢ規格のような下位モジュールが優先度制御をサポートしていない場合、すべてのコマンドが等しい優先度で処理される。ホスト側は同時にいくつものプロセスを実行しており、記憶装置に対しても同時に多数のコマンドが発行されるのが一般的である。ここで、多くのリードコマンドがキャッシュにミスし、大量の（Ｃ）を発行中に（Ａ）または（Ｂ）を発行した場合、たまっている（Ｃ）の実行が完了するまでは（Ａ）または（Ｂ）が実行されないことになり、システムの処理性能が低下してしまう。
【００４２】
本実施形態の場合、キャッシュドライバ１２０は、ＳＳＤ２０２に対して１より大きい数のコマンドが発行されている場合、キャッシュデータをＮＶＣ３１１に書き込むためのライトコマンドをＵＳＢコントローラ１４Ａに発行しないことで、システムの処理性能の低下を抑制する。
【００４３】
処理性能が低下する例について図５を参照して説明する。  
オペレーティングシステム１１０は、キャッシュドライバにＨＤＤ２０１へのリードコマンドを発行する（ステップ６０１）。キャッシュドライバは、ＵＳＢコントローラ１４ＡにＨＤＤ２０１へのリードコマンドを発行する（ステップ６０２）。ＵＳＢコントローラ１４Ａは、ＨＤＤ２０１に対してリードコマンドを発行する（ステップ６０３）。ＨＤＤ２０１は、データの転送が完了したら、ＵＳＢコントローラ１４Ａに完了通知を発行する（ステップ６０４）。ＵＳＢコントローラ１４Ａは、キャッシュドライバに完了通知を発行する（ステップ６０５）。キャッシュドライバはオペレーティングシステム１１０に完了通知を発行する（ステップ６０６）。キャッシュドライバは、読み出されたデータを学習するために、読み出されたデータをキャッシュデータとしてＳＳＤ２０２に書き込むためのライトコマンドをＵＳＢコントローラ１４Ａに発行する（ステップ６０７）。オペレーティングシステム１１０は、ＨＤＤ２０１にデータを書き込むためのライトコマンドをキャッシュドライバに発行する（ステップ６０８）。ＵＳＢコントローラ１４Ａは、ＨＤＤ２０１から読み出されたデータをキャッシュデータとしてＳＳＤ２０２に書き込むためのライトコマンドをＳＳＤ２０２に発行する（ステップ６０９）。
【００４４】
キャッシュドライバは、ＵＳＢコントローラ１４ＡにＨＤＤ２０１へのライトコマンドを発行する（ステップ６１０）。ＵＳＢコントローラ１４Ａは、ステップ６０８のライトコマンドが発行中であるため、リードコマンドをＨＤＤ２０１に発行することができない。
【００４５】
ステップ６０８のライトコマンドに応じた書き込みが終了すると、ＳＳＤ２０２は、ＵＳＢコントローラ１４Ａに完了通知を発行する（ステップ６１１）。ＵＳＢコントローラ１４Ａは、キャッシュドライバに完了通知を発行する（ステップ６１２）。ＵＳＢコントローラ１４Ａの発行中のコマンドが０になったので、ＵＳＢコントローラ１４Ａは、ステップ６１０のライトコマンドに応じたライトコマンドをＨＤＤ２０１に発行する（ステップ６１３）。ライトコマンドに応じたデータの書き込みが終了すると、ＨＤＤ２０１は、ＵＳＢコントローラに完了通知を発行する（ステップ６１４）。ＵＳＢコントローラ１４Ａは、完了通知をキャッシュドライバに発行する（ステップ６１５）。キャッシュドライバは、完了通知をオペレーティングシステム１１０に発行する。
【００４６】
ＵＳＢコントローラ１４Ａは、ステップ６１０のＨＤＤ２０１へのライトコマンドを受信しても、ステップ６０８のライトコマンドが発行中であるため、ステップ６１０のライトコマンドに応じたライトコマンドをＨＤＤ２０１に発行することができない。そのため、処理性能が低下する。
【００４７】
本実施形態は、優先度制御をサポートしていないＵＳＢの記憶装置の場合に、（Ｃ）の処理のために（Ａ）または（Ｂ）の処理が待たされないようにして、システムの性能の低下を抑制するキャッシュドライバ１２０を提供する。
【００４８】
次に、図６のフローチャートを参照して、キャッシュドライバ１２０による処理の手順を説明する。  
オペレーティングシステム１１０からＨＤＤ２０１へのアクセスコマンドが発行された場合、キャッシュドライバ１２０は、コマンドがリードコマンドであるかを判定する（ステップ７０１）。リードコマンドであると判定した場合（ステップ７０１のＹｅｓ）、キャッシュドライバ１２０は、ＮＶＣ管理情報３０５を参照することによって、リードコマンドに対応するデータがＮＶＣ３１１内に存在するかを判定する（ステップ７０２）。データが存在すると判定した場合（ステップ７０２のＹｅｓ）、ＮＶＣ３１１からリードコマンドに対応するデータを読み出す（ステップ７０３）。データが存在しないと判定した場合、キャッシュドライバ１２０は、ＨＤＤ２０１からリードコマンドに対応するデータを読み出す（ステップ７０４）。
【００４９】
キャッシュドライバ１２０は、コマンド発行数確認用データ３０６の値を参照することによってＮＶＣ３１１（ＳＳＤ２０２）へのコマンド発行数が設定数を超えているかを判定する（ステップ７０５）。設定数を超えていないと判定した場合（ステップ７０５のＮｏ）、キャッシュドライバ１２０は、ＨＤＤ２０１から読み出されたデータをＮＶＣ３１１に書き込み、データを学習する（ステップ７０６）。設定数を超えていると判定した場合（ステップ７０５のＹｅｓ）、キャッシュドライバ１２０は、ＨＤＤ２０１から読み出されたデータを学習しない。
【００５０】
ステップ７０１において、リードコマンドではない（つまり、ライトコマンドである）と判定した場合（ステップ７０１のＮｏ）、ライトコマンドに対応するアドレスのデータがＮＶＣ３１１内に存在するかを判定する（ステップ７０７）。データがＮＶＣ３１１内に存在すると判定した場合（ステップ７０７のＹｅｓ）、ＮＶＣ３１１内に存在するデータを書き換えると共に、ライトコマンドに対応するデータをＨＤＤ２０１に書き込む（ステップ７０８）。データがＮＶＣ３１１内に存在しないと判定した場合（ステップ７０７のＮｏ）、ライトコマンドに対応するデータをＨＤＤ２０１に書き込む（ステップ７０９）。  
ＳＳＤ２０２に発行されたコマンドに対応する処理が終了していない場合に、データを学習しないことで、性能の低下を抑制することが可能になる。
【００５１】
なお、本実施形態のＳＳＤ２０２をＨＤＤ２０１のキャッシュとして用いる処理はコンピュータプログラムによって実現されているので、このコンピュータプログラムをコンピュータ読み取り可能な記憶媒体を通じて通常のコンピュータにインストールするだけで、本実施形態と同様の効果を容易に実現することができる。また、このコンピュータプログラムは、パーソナルコンピュータのみならず、プロセッサを内蔵した電子機器上で実行することができる。
【００５２】
（変形例）
なお、上記実施形態では、ＨＤＤ２０１とＳＳＤ２０２とが別の例を示したが、図７に示すように、ＨＤＤ２０１とＳＳＤ２０２とが一つの筐体内に設けられたハイブリッドハードディスクドライブ８００にも上記実施形態のキャッシュ制御を用いることが可能である。
【００５３】
なお、キャッシュドライバ１２０は、ＳＳＤ２０２へのアクセスコマンドの発行数が設定数より大きい場合、発行数が設定数以下になるまでコントローラへのアクセスコマンドの発行を保留しておき、保留していたアクセスコマンドを発行してもよい。
【００５４】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５５】
１０…情報処理装置、１１…ＣＰＵ、１４Ａ…ＵＳＢコントローラ、１１０…オペレーティングシステム、１２０…キャッシュドライバ、２０１…ＨＤＤ、２０２…ＳＳＤ、３０１…ユーザバッファ領域、３０２…キャッシュ領域、３０３…マージ用バッファ領域、３０４…管理情報、３０５…ＮＶＣ管理情報、３０６…コマンド発行数確認用データ、３１１…ＮＶＣ。
【図１】
0005492156.tif 000002
【図２】
0005492156.tif 000003
【図３】
0005492156.tif 000004
【図４】
0005492156.tif 000005
【図５】
0005492156.tif 000006
【図６】
0005492156.tif 000007
【図７】
0005492156.tif 000008