(57)【要約】【課題】  停電等の異常終了が発生した際にも、ダーティデータを外部記憶装置に書き込むことができる情報処理装置及びキャッシュ制御方法を提供すること。【解決手段】  実施形態によれば、第１外部記憶装置をアクセス可能な情報処理装置は、ホストシステム、第２外部記憶装置、揮発性メモリ、第１キャッシュ制御手段、終了処理手段及び初期化手段を具備する。第２外部記憶装置は前記第１外部記憶装置に対する二次キャッシュとして機能する。揮発性メモリは前記第１外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される。第１キャッシュ制御手段は前記第１外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納する。初期化手段は前記情報処理装置が異常終了した後に起動されたとき、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置に書き込む。【選択図】図１
2012078941.tif 000002
【特許請求の範囲】
【請求項１】
第１外部記憶装置をアクセス可能な情報処理装置であって、
ホストシステムと、
前記第１外部記憶装置に対する二次キャッシュとして機能し、前記第１外部記憶装置から読み出されるリードデータ及び前記第１外部記憶装置に書き込むべきライトデータを一時的に格納する第２外部記憶装置と、
前記第１外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される揮発性メモリと、
前記ホストシステムからのライト要求に応答して前記第１外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新する第１キャッシュ制御手段と、
前記情報処理装置が正常終了されるとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む終了処理手段と、
前記情報処理装置が停電によって異常終了した後に起動されたとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む初期化手段とを具備する情報処理装置。
【請求項２】
前記情報処理装置が正常終了した後に起動されたとき、前記情報処理装置が異常終了したことを示す異常終了フラグをセットし、前記情報処理装置が正常終了されるとき前記異常終了フラグをリセットするフラグ制御手段と、
前記初期化手段は、前記異常終了フラグがセットされている場合、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む請求項１記載の情報処理装置。
【請求項３】
前記第１キャッシュ制御手段は、前記ライトデータが書き込まれるべき前記第１外部記憶装置上のアドレスと前記ライトデータが格納された前記揮発性メモリ上のアドレスとの対応を示すアドレス情報を前記揮発性メモリに格納されたキャッシュ管理情報に追加する請求項１記載の情報処理装置。
【請求項４】
前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたライトデータを前記第１外部記憶装置に書き込み、前記揮発性メモリに格納されたキャッシュ管理情報に、当該ライトデータが書込済みであることを示す書込フラグをセットする第２キャッシュ制御手段をさらに具備する請求項３記載の情報処理装置。
【請求項５】
前記終了処理手段は、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたライトデータのうち、前記書込フラグがセットされていないライトデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む請求項４記載の情報処理装置。
【請求項６】
前記ライトデータを前記第２外部記憶装置内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新する第３キャッシュ制御手段をさらに具備する請求項１記載の情報処理装置。
【請求項７】
前記第３キャッシュ制御手段は、前記ライトデータが書き込まれるべき前記第１外部記憶装置上のアドレスと前記ライトデータが格納された前記第２外部記憶装置上のアドレスとの対応を示すアドレス情報を前記揮発性メモリに格納されたキャッシュ管理情報に追加する請求項６記載の情報処理装置。
【請求項８】
前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記第２外部記憶装置内のキャッシュ領域に格納されたライトデータを前記第１外部記憶装置に書き込み、前記揮発性メモリに格納されたキャッシュ管理情報に、当該ライトデータが書込済みであることを示す書込フラグをセットする第４キャッシュ制御手段をさらに具備する請求項７記載の情報処理装置。
【請求項９】
前記終了処理手段は、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記第２外部記憶装置内のキャッシュ領域に格納されたライトデータのうち、前記書込フラグがセットされていないライトデータを前記第１外部記憶装置に書き込む請求項８記載の情報処理装置。
【請求項１０】
第１外部記憶装置をアクセス可能な情報処理装置であって、
ホストシステムと、
前記第１外部記憶装置に対する二次キャッシュとして機能し、前記第１外部記憶装置から読み出されるリードデータ及び前記第１外部記憶装置に書き込むべきライトデータを一時的に格納する第２外部記憶装置と、
前記第１外部記憶装置に対する一次キャッシュとして機能する不揮発性メモリと、
前記ホストシステムからのライト要求に応答して前記第１外部記憶装置に書き込むべきライトデータを前記不揮発性メモリ内のキャッシュ領域に格納し、前記不揮発性メモリに格納されたキャッシュ管理情報を更新する第１キャッシュ制御手段と、
前記情報処理装置が正常終了されるとき、前記不揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記不揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む終了処理手段と、
前記情報処理装置が停電によって異常終了した後に起動されたとき、前記不揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記不揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む初期化手段とを具備する情報処理装置。
【請求項１１】
第１外部記憶装置をアクセス可能な情報処理装置であって、ホストシステムと、前記第１外部記憶装置に対する二次キャッシュとして機能し、前記第１外部記憶装置から読み出されるリードデータ及び前記第１外部記憶装置に書き込むべきライトデータを一時的に格納する第２外部記憶装置と、前記第１外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される揮発性メモリとを具備する情報処理装置のキャッシュ動作を制御するキャッシュ制御方法であって、
前記ホストシステムからのライト要求に応答して前記第１外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新し、
前記情報処理装置が正常終了されるとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込み、
前記情報処理装置が停電によって異常終了した後に起動されたとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込むキャッシュ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、外部記憶装置へのアクセス要求に応じたキャッシュ動作を制御する情報処理装置及び該装置に適用されるキャッシュ制御方法に関する。
【背景技術】
【０００２】
半導体メモリを用いたディスクキャッシュ処理では、ホストシステムによって主メモリからハードディスクへのデータのライトが要求されたとき、例えば、ハードディスクにデータを書き込む前に、半導体メモリ（キャッシュメモリとも云う）にデータを一時記憶して、一時記憶されたデータを所定のタイミングでハードディスクに書き込むライトバック処理が実行される。ライトバック処理では、データがキャッシュメモリに一時記憶されたことに応答して、ホストシステムにデータの書き込み完了を通知する。そのため、ホストシステムに対するハードディスクの見かけ上のアクセス速度を向上させることができる。
【０００３】
しかし、ライトバック処理では、稼働中に停電等が起きたとき、キャッシュメモリに一時記憶されたデータが失われてしまうという問題がある。そのため、揮発性のキャッシュメモリを使用するライトバック処理では、外部電源を用いて供給される電力に異常が検出されたとき、バックアップのためのバッテリによって電力が供給されている間に、キャッシュメモリに格納されているデータを不揮発性メモリに退避する技術が利用されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１９２０２８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述のライトバック処理では、ホストシステムにバックアップのためのバッテリが接続されている必要がある。しかし、ホストシステムに接続される無停電電源装置等を設けることはコストが高い。
【０００６】
ところで、ホストシステムに接続されるＲＡＩＤコントローラ等には、バッテリによってバックアップされる揮発性メモリが設けられることがある。ＲＡＩＤコントローラ内のプロセッサは、この揮発性メモリを作業メモリとして用いることができる。そして、このＲＡＩＤコントローラでは、停電等によって外部電源から電力が供給されないとき、バッテリを用いて揮発性メモリに電力を供給することによって揮発性メモリに格納されたデータを保持する。そのため、バッテリによってバックアップ可能な時間内に外部電源による電力供給が回復した際には、例えば、揮発性メモリに格納されたデータを外部記憶装置に書き込むことができる。
【０００７】
しかし、このＲＡＩＤコントローラ内に設けられた揮発性メモリ（バッテリによってバックアップされる揮発性メモリ）は、ＲＡＩＤコントローラの作業メモリとして用いられ、ホストシステムのキャッシュとして用いることはできなかった。
【０００８】
本発明は、停電等の異常終了が発生した際にも、キャッシュされたダーティデータを外部記憶装置に書き込むことができる情報処理装置及びキャッシュ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
実施形態によれば、第１外部記憶装置をアクセス可能な情報処理装置は、ホストシステム、第２外部記憶装置、揮発性メモリ、第１キャッシュ制御手段、終了処理手段、及び初期化手段を具備する。第２外部記憶装置は、前記第１外部記憶装置に対する二次キャッシュとして機能し、前記第１外部記憶装置から読み出されるリードデータ及び前記第１外部記憶装置に書き込むべきライトデータを一時的に格納する。揮発性メモリは、前記第１外部記憶装置に対する一次キャッシュとして機能し、停電時にバッテリを用いて電力が供給される。第１キャッシュ制御手段は、前記ホストシステムからのライト要求に応答して前記第１外部記憶装置に書き込むべきライトデータを前記揮発性メモリ内のキャッシュ領域に格納し、前記揮発性メモリに格納されたキャッシュ管理情報を更新する。終了処理手段は、前記情報処理装置が正常終了されるとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む。初期化手段は、前記情報処理装置が停電によって異常終了した後に起動されたとき、前記揮発性メモリに格納されたキャッシュ管理情報に基づいて、前記揮発性メモリ内のキャッシュ領域に格納されたダーティデータを前記第１外部記憶装置又は前記第２外部記憶装置に書き込む。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態に係る情報処理装置の構成を示すブロック図。
【図２】同実施形態の情報処理装置に設けられたメインメモリにＲＡＩＤコントローラ内に設けられたメモリが投影される例を示す図。
【図３】同実施形態の情報処理装置のソフトウェア構成を示す概念図。
【図４】同実施形態の情報処理装置によって実行されるキャッシュドライバプログラムの構成を示すブロック図。
【図５】同実施形態の情報処理装置によって用いられるアドレステーブルの一構成例を示す図。
【図６】同実施形態の情報処理装置によって実行される初期化処理の手順の例を示すフローチャート。
【図７】同実施形態の情報処理装置によって実行されるリード処理の手順の例を示すフローチャート。
【図８】同実施形態の情報処理装置によって実行されるライト処理の手順の例を示すフローチャート。
【図９】第２実施形態に係る情報処理装置の構成を示すブロック図。
【図１０】同実施形態の情報処理装置によって実行される初期化処理の手順の例を示すフローチャート。
【発明を実施するための形態】
【００１１】
以下、第１の実施の形態を、図１乃至図８に基づいて説明する。  
まず、図１を参照して、第１の実施形態に係る情報処理装置の構成を説明する。この情報処理装置は、例えば、サーバコンピュータ、パーソナルコンピュータのようなコンピュータ１として実現し得る。
【００１２】
コンピュータ１は、ホストシステム１０、ＲＡＩＤコントローラ２０、及び外部記憶装置３０を備える。ホストシステム１０は、ＲＡＩＤコントローラ２０に接続され、ＲＡＩＤコントローラ２０を介して外部記憶装置３０にアクセスする。ＲＡＩＤコントローラ２０は外部記憶装置３０に接続される。ＲＡＩＤコントローラ２０は、ＲＡＩＤ技術に基づいて、外部記憶装置３０からのデータの読み出し及び外部記憶装置３０へのデータの書き込み等を行う。外部記憶装置３０は不揮発性の記憶装置を含む。外部記憶装置３０は、例えば、ＳＳＤ３１と３台のＨＤＤ３２，３３，３４を含む。
【００１３】
ホストシステム１０は、プロセッサ１１、ＰＣＨ（Platform Controller Hub）１２及びメインメモリ１３を備える。プロセッサ１１は、ホストシステム１０内の各部の動作を制御する。プロセッサ１１は、例えば、外部記憶装置３０からメインメモリ１３上にロードされたオペレーティングシステム（ＯＳ）、キャッシュドライバプログラム５４、サービス４３、各種のアプリケーションプログラム等を実行する。また、プロセッサ１１は、ホストシステム１０に接続されたＲＡＩＤコントローラ２０にコマンドを出力することができる。このコマンドは、例えば、外部記憶装置３０からデータを読み出すためのリードコマンド、外部記憶装置３０にデータを書き込むためのライトコマンドである。
【００１４】
ＰＣＨ１２は、ＰＣＩ（Peripheral Component Interconnect）バス上の各デバイスを制御する。また、ＰＣＨ１２は、ＵＳＢポートに取り外し自在に接続されるＵＳＢデバイスを制御するＵＳＢコントローラを内蔵している。
【００１５】
ＲＡＩＤコントローラ２０は、プロセッサ２１、メモリ２２、バッテリ２３、バッテリ回路２４、ＰＣＩ  Ｅｘｐｒｅｓｓコネクタ２６、ＳＡＳコネクタ２７、ＤＭＡコントローラ２８を備える。
【００１６】
プロセッサ２１は、ＲＡＩＤコントローラ２０内の各部の動作を制御する。プロセッサ２１は、プロセッサ１１（ホストシステム１０）によって出力されたコマンドをＰＣＩ  Ｅｘｐｒｅｓｓバス、ＰＣＩ  Ｅｘｐｒｅｓｓコネクタ２６を介して受け取る。そして、プロセッサ２１は、受け取ったコマンドに応じた処理を実行する。
【００１７】
プロセッサ２１は、バッテリ２３によってバックアップされるメモリ２２に接続される。メモリ２２は、プロセッサ２１による処理に用いられるワーク領域やディスクキャッシュに用いられるキャッシュ領域を含む揮発性メモリである。メモリ２２には、バッテリ２３を用いて停電時にも電力を供給することができる。そのため、メモリ２２は、ライトバックモードによるキャッシュ動作に利用することができる。
【００１８】
すなわち、メモリ２２は、プロセッサ１１（ホストシステム１０）による要求に応じて外部記憶装置３０からリードされるリードデータ及び外部記憶装置３０にライトされるライトデータが、一時的に格納されるキャッシュメモリとして用いられる。つまり、メモリ２２は、外部記憶装置３０（ＨＤＤ３２，３３，３４）に対する一次キャッシュとして機能する。ホストシステム１０には、ＲＡＩＤコントローラ２０内のメモリ２２を使用するためのインタフェースが提供される。ホストシステム１０のキャッシュメモリ（一次キャッシュ）として機能するために、メモリ２２は、キャッシュ管理情報２２１が格納される領域と一時的なキャッシュ領域２２２とを含む。つまり、キャッシュ管理情報２２１が格納される領域と一時的なキャッシュ領域２２２とは、ホストシステム１０のメインメモリ１３ではなく、ＲＡＩＤコントローラ２０のメモリ２２内に配置される。メモリ２２は、上述のようにバッテリ２３によってバックアップされるため、停電時にもキャッシュ管理情報２２１及び一時的なキャッシュ領域２２２に格納されたデータを保持することができる。ホストシステム１０のプロセッサ１１は、キャッシュ管理情報２２１が格納される領域と一時的なキャッシュ領域２２２とを論理的にメインメモリ１３の一部として使用することができるように、メモリ２２をメインメモリ１３に投影してもよい。
【００１９】
ライトバックモードによるキャッシュ動作では、例えば、ホストシステム１０によって発行される、データを外部記憶装置３０に書き込むためのライト要求に応じて、このライト要求によって指定されたデータがメモリ２２内のキャッシュ領域２２２に書き込まれる。そして、ホストシステム１０に、データのライトが完了したことが通知される。また、キャッシュ領域２２２に書き込まれたデータは、所定のタイミングで外部記憶装置３０に書き込まれる。ライトバックモードでは、データ（ライトデータ）がキャッシュ領域２２２に格納されたことに応答して、ホストシステム１０にデータの書き込み完了が通知されるため、ホストシステム１０に対して外部記憶装置３０の見かけ上の書込み速度を向上させることができる。
【００２０】
いままでシステムでライトバックモードを使った場合では、ＲＡＩＤカード（ＲＡＩＤコントローラ２０）を用いないため、ホストシステム１０内のメモリ１３に外部記憶装置３０に書き込むべき一次データ（ダーティデータと云う）が存在する。このため、停電等によって不意の電源断が発生した際には、そのダーティデータを外部記憶装置３０に書き込むことができない。すなわち、揮発性メモリ１３内に格納されたデータが揮発するために、外部記憶装置３０に書き込むべきダーティデータが失われてしまう。また、データが格納された揮発性メモリ１３のアドレス（領域）とデータが格納されるべき外部記憶装置３０上のアドレス（領域）との対応を示す情報を含むキャッシュ管理情報も失われてしまう。
【００２１】
このため、本実施形態では、ＲＡＩＤカード内のメモリ２２が、バッテリ２３によってバックアップされていることに着目し、ホストシステム１０のプロセッサ１１がライト要求を受けたときのデータの一次キャッシュの保存先として、ＲＡＩＤカード内のメモリ２２を用いることにより、停電時にもメモリ２２に格納されたデータを保持することができる。そのため、コンピュータ１が停電から復帰したとき、メモリ２２に保持されたデータを用いて、ダーティデータを外部記憶装置３０に書き込むことができる。
【００２２】
図２は、メインメモリ１３にＲＡＩＤコントローラ２０内に設けられたメモリ２２が投影される例を示す。ＲＡＩＤコントローラ２０内に設けられたメモリ２２は、ＲＡＩＤコントローラ２０（プロセッサ２１）によって使用されるワーク領域と、ホストシステム１０（プロセッサ１１）によって使用されるキャッシュ管理情報２２１が格納される領域及び一時的なキャッシュ領域２２２とを含む。ワーク領域と、ホストシステム１０によって使用されるキャッシュ管理情報２２１が格納される領域及び一時的なキャッシュ領域２２２とは、排他的に使用される。ホストシステム１０によって使用されるキャッシュ管理情報２２１が格納される領域及び一時的なキャッシュ領域２２２は、例えばＢＩＯＳの設定等によってメインメモリ１３上に投影することができる。これにより、ホストシステム１０は、ＲＡＩＤコントローラ２０内のメモリ２２をあたかもメインメモリ１３の一部であるかのように使用することができる。
【００２３】
また、ＲＡＩＤコントローラ２０内のバッテリ２３は、メモリ２２及びバッテリ回路２４をバックアップする。つまり、メモリ２２及びバッテリ回路２４には、停電時にバッテリ２３を用いて電力が供給される。バッテリ２３には、例えばニッケル水素電池やリチウム二次電池等が用いられる。バッテリ２３によるバックアップ時間は、例えば７２時間である。
【００２４】
バッテリ回路２４は、停電が検出されたとき等の所定のタイミングでメモリ２２に電力を供給する。具体的には、バッテリ回路２４は、ＢＢＵ（Battery Backup Unit）オプション２５に基づいて、メモリ２２への電力供給を制御する。ＢＢＵオプション２５は、例えば、メモリ２２に電力を供給するタイミングを規定するパラメータを含む。
【００２５】
バッテリ回路２４は、例えば、ＲＡＩＤコントローラ２０内に設けられたハードウェアによるフラグ（図示せず）を用いて、停電時におけるメモリ２２への電力供給を制御する。このフラグは、メモリ２２にデータが存在するときセットされ、コンピュータ１が正常終了するとき（例えば、シャットダウン処理が正常に完了したとき）リセットされる。停電が発生した際には、コンピュータ１が異常終了し、フラグがセットされたままになる。バッテリ回路２４は、停電の発生が検出され、且つこのフラグがセットされているとき、バッテリ２３を用いてメモリ２２に電力を供給する。メモリ２２を制御するメモリコントローラは、停電が検出されたことに応答して、例えば、メモリ２２に対するリフレッシュ動作を行うセルフリフレッシュモードに設定される。メモリコントローラによるリフレッシュ動作によって、メモリ２２内のデータを保持することができる。
【００２６】
外部記憶装置３０は、上述のように、例えばＳＳＤ３１と３台のＨＤＤ３２，３３，３４とを含む。ＳＳＤ３１は、ＨＤＤ３２，３３，３４に対する二次キャッシュとして機能し、ＨＤＤ３２，３３，３４から読み出されるリードデータ及びＨＤＤ３２，３３，３４に書き込むべきライトデータを一時的に格納する。ＳＳＤ３１は、キャッシュ領域３１Ａとキャッシュ管理情報３１Ｂが格納される領域とを含む。つまり、ＳＳＤ３１の一部がキャッシュデバイスとして利用される。
【００２７】
ＨＤＤ３２，３３，３４は、それぞれキャッシュ対応領域３２Ａ，３３Ａ，３４Ａを含む。つまり、ＨＤＤ３２，３３，３４はキャッシュ対象のデバイスであり、ＨＤＤ３２，３３，３４から読み出されるリードデータ及びＨＤＤ３２，３３，３４に書き込むべきライトデータは、ＳＳＤ３１に設けられたキャッシュ領域３１Ａ（二次キャッシュ）やＲＡＩＤコントローラ２０内のメモリ２２に設けられた一時的なキャッシュ領域２２２（一次キャッシュ）に一時的に格納される。
【００２８】
ＳＳＤ３１は、一般に、ＳＤＲＡＭ等の半導体メモリよりも大容量であり、ＨＤＤ３２，３３，３４よりも高速にアクセスすることができる。そのため、ＳＳＤ３１を、ＨＤＤ３２，３３，３４に対する二次キャッシュとして用いることにより、半導体メモリよりもキャッシュミスが少なく、ＨＤＤ３２，３３，３４よりも高速にアクセス可能なキャッシュ制御を実現することができる。
【００２９】
ホストシステム１０のプロセッサ１１が、ＲＡＩＤコントローラ２０内のメモリ２２を一次キャッシュとして使用し、ＳＳＤ３１を二次キャッシュとして使用するためのキャッシュ制御は、例えば、ソフトウェアによって行われる。図３は、コンピュータ１のソフトウェア構成の例を示す。コンピュータ１は、ユーザ空間４０及びカーネル空間５０に属する階層化されたソフトウェア群を用いて、下位層（物理層）に属するハードウェア６０の動作を制御する。図３に示すように、ユーザ空間４０は、例えば、アプリケーションプログラム４１、ＧＵＩ４２、サービス４３、キャッシュＡＰＩ４４等を含む。カーネル空間５０は、例えば、ＯＳ５１、ファイルシステム５２、ディスククラスドライバ５３、キャッシュドライバ（フィルタ）５４、ストレージドライバ５５、ｉＳＣＳＩ５６、ＴＣＰ／ＩＰ５７を含む。
【００３０】
キャッシュドライバ５４は、図３の階層に示すように、ＯＳ５１によって発行される、データをＨＤＤ３２，３３，３４に書き込むためのライトコマンド、及びデータをＨＤＤ３２，３３，３４から読み出すためのリードコマンドを、それらコマンドがＲＡＩＤコントローラ２０（すなわち、ハードウェア６０）に出力されるよりも前に受信する。そして、キャッシュドライバ５４は、メモリ２２（一次キャッシュ）及びＳＳＤ３１（二次キャッシュ）を用いて、受信したコマンドに応じた処理を実行する。なお、図３に示すように、コンピュータ１内に設けられるＨＤＤ３２，３３，３４ではなく、ネットワーク６５を介して接続されたＨＤＤ（ｉＳＣＳＩターゲット）６６をキャッシュ対象のデバイスとしてもよい。
【００３１】
図４は、キャッシュドライバプログラム５４の構成の例を示す。キャッシュドライバ５４は、メモリ２２をホストシステム１０の一次キャッシュとして使用し、ＳＳＤ３１をホストシステム１０の二次キャッシュとして使用するための制御を行う。キャッシュドライバ５４は、初期化部７１、キャッシュ制御部７２及び終了処理部７３を備える。
【００３２】
初期化部７１は、コンピュータ１（ホストシステム１０）が起動されたことに応答して、キャッシュ管理情報２２１が格納される領域と一時的なキャッシュ領域２２２とに対応する部分に対して初期化処理を施す。通常、メモリ２２は、コンピュータ１の電源がオンになったとき、ＲＡＩＤコントローラ２０によって、初期化のためのクリア処理が施される。しかし、コンピュータ１が停電等によって異常終了した後に起動された際には、メモリ２２に、キャッシュ管理情報２２１と一時的なキャッシュ領域２２２内のデータとが保持されている可能性がある。これらデータが消去されないように、ＲＡＩＤコントローラ２０は、例えば、ＲＡＩＤコントローラ２０のワーク領域部分に対してはデータをクリアするためのクリア処理を行い、キャッシュ管理情報２２１が格納される領域と一時的なキャッシュ領域２２２とに対応する部分に対してはパリティビットを用いた整合性のチェックを行うスクラビング処理を実行するように設定される。初期化部７１は、ＲＡＩＤコントローラ２０によって上述の処理（クリア処理及びスクラビング処理）が施されたメモリ２２に対して初期化処理を施す。
【００３３】
初期化部７１は、停電判定部７１１、第１初期化部７１２及び第２初期化部７１３を備える。  
停電判定部７１１は、コンピュータ１が前回終了したとき、正常終了したか異常終了したかを判定する。メモリ２２に格納されたキャッシュ管理情報２２１のヘッダ情報は、コンピュータ１が正常終了するとき（例えば、シャットダウン処理が正常に完了したとき）、クリアされる。このヘッダ情報の有無をフラグとして利用して、停電判定部７１１は、例えば、メモリ２２内の所定の位置にキャッシュ管理情報２２１のヘッダ情報が存在しないとき、コンピュータ１が前回正常終了したものと判定する。また、停電判定部７１１は、例えば、メモリ２２内の所定の位置にキャッシュ管理情報２２１のヘッダ情報が存在するとき、コンピュータ１が前回異常終了したものと判定する。
【００３４】
なお、停電判定部７１１による正常終了又は異常終了の判定のためのフラグ（異常終了フラグ）を設けてもよい。その場合、例えば、コンピュータ１が正常終了した後に起動されたとき、コンピュータ１が異常終了したことを示す異常終了フラグがセットされ、コンピュータ１が正常終了されるとき、その異常終了フラグがリセットされる。したがって、次回の起動時に異常終了フラグがセットされたままであるとき、停電判定部７１１は、コンピュータ１が前回異常終了したものと判定する。
【００３５】
停電判定部７１１は、コンピュータ１が前回正常終了したと判定したとき、第１初期化部７１２に処理の開始を要求する。第１初期化部７１２は、停電判定部７１１による要求に応答して、メモリ２２を初期化する処理を開始する。具体的には、第１初期化部７１２は、メモリ２２内にキャッシュ管理情報２２１を構築することにより、例えばアドレステーブル２２１Ａ及びコマンドテーブル２２１Ｂ等を作成する。第１初期化部７１２は、作成されたアドレステーブル２２１Ａに、ＳＳＤ３１に格納されたキャッシュ管理情報３１Ｂをロードする。
【００３６】
図５は、アドレステーブル２２１Ａの一構成例を示す。キャッシュ管理情報２２１は、一時的なキャッシュ領域２２２又はキャッシュ領域３１Ａに格納されるデータに対応するエントリを含む。一時的なキャッシュ領域２２２又はキャッシュ領域３１Ａに格納されるデータは、例えば、ＨＤＤ３２，３３，３４からのリードデータ又はＨＤＤ３２，３３，３４へのライトデータに対応するデータである。各エントリは、例えば、キャッシュ領域情報、ＨＤＤ内の領域情報、及びＨＤＤ書き込みフラグを含む。あるデータに対応するエントリにおいて、キャッシュ領域情報は、そのデータが格納されているメモリ２２上の領域（例えば、アドレスで示される範囲）を示す。ＨＤＤ内の領域情報は、そのデータが格納されている（又は格納されるべき）ＨＤＤ３２，３３，３４上の領域を示す。ＨＤＤ書き込みフラグ（ダーティフラグ）は、そのデータがＨＤＤ３２，３３，３４に書き込まれたか否かを示す。例えば、そのデータがＨＤＤ３２，３３，３４に既に書き込まれている場合、ＨＤＤ書き込みフラグには、書き込み済みであることを示す値が設定される（すなわち、ダーティフラグがセットされない）。また、例えば、そのデータがＨＤＤ３２，３３，３４にまだ書き込まれていない場合、ＨＤＤ書き込みフラグには、未書き込みであることを示す値が設定される（すなわち、ダーティフラグがセットされる）。換言すると、ＨＤＤ書き込みフラグは、そのデータがダーティデータ（ＨＤＤ３２，３３，３４にまだ書き込まれていないデータ）であるかどうかを示す。なお、一時的なキャッシュ領域２２２に格納されたデータに対応するエントリと、キャッシュ領域３１Ａに格納されたデータに対応するエントリとは別のテーブル（ディレクトリ）内に記載されてもよい。すなわち、キャッシュ管理情報２２１は、例えば、一時的なキャッシュ領域２２２に格納されたデータに対応するエントリを含むディレクトリ（一次キャッシュのディレクトリとも云う）と、キャッシュ領域３１Ａに格納されたデータに対応するエントリを含むディレクトリ（二次キャッシュのディレクトリとも云う）を含む。
【００３７】
停電判定部７１１は、コンピュータ１が前回異常終了したと判定したとき、第２初期化部７１３に処理の開始を要求する。第２初期化部７１３は、停電判定部７１１による要求に応答して、メモリ２２に格納されたキャッシュ管理情報２２１（アドレステーブル２２１Ａ）に基づいて、一時的なキャッシュ領域２２２に格納されているダーティデータをＨＤＤ３２，３３，３４又はＳＳＤ３１に書き込む。具体的には、第２初期化部７１３は、アドレステーブル２２１Ａに含まれる複数のエントリから、ＨＤＤ書込みフラグがセットされていない（すなわち、対応するデータがダーティデータである）エントリを検出する。そして、第２初期化部７１３は、検出したエントリに含まれるキャッシュ領域情報に基づいて、一時的なキャッシュ領域２２２からデータ（ダーティデータ）を読み出し、該エントリに含まれるＨＤＤ内の領域情報に基づいて、ＨＤＤ３２，３３，３４に読み出したデータを書き込む。なお、第２初期化部７１３は、読み出したダーティデータをキャッシュ領域３１Ａ（ＳＳＤ３１）内の対応する領域や空き領域に書き込んでもよい。第２初期化部７１３は、該エントリのＨＤＤ書込みフラグに、データがＨＤＤ３２，３３，３４に書込み済みであることを示す値を設定する。
【００３８】
なお、第２初期化部７１３は、コマンドテーブル２２１Ｂに基づいて、一時的なキャッシュ領域２２２に格納されているダーティデータをＨＤＤ３２，３３，３４又はＳＳＤ３１に書き込んでもよい。コマンドテーブル２２１Ｂは、例えば、複数のコマンドに対応する複数のエントリを含む。あるコマンドに対応するエントリは、例えば、そのコマンドの種類と完了フラグを含む。コマンドの種類は、リードコマンド、ライトコマンド等の種類を示す。また、その読み出し先又は書込み先が示されてもよい。完了フラグは、そのコマンドの実行が完了したか否かを示す。
【００３９】
コマンドテーブル２２１Ｂを用いる際には、第２初期化部７１３は、完了フラグに基づいて、コマンドテーブル２２１Ｂ内に実行が完了していない（すなわち、実行中の）コマンドがあるか否かを判定する。実行が完了していないコマンドがあるとき、第２初期化部７１３は、そのコマンドがライトコマンドであるか否かを判定する。そして、そのコマンドがライトコマンドであるとき、第２初期化部７１３は、該コマンドに対応する、一時的なキャッシュ領域２２２に格納されたデータをＨＤＤ３２，３３，３４（又はＳＳＤ３１）に書き込む。そして、第２初期化部７１３は、そのコマンドに対応するエントリに含まれる完了フラグに、実行が完了したことを示す値を設定する。また、第２初期化部７１３は、コマンドの実行によってＨＤＤ３２，３３，３４に書き込まれたデータに対応する、アドレステーブル２２１Ａ内のエントリに含まれるＨＤＤ書込みフラグに、ダーティデータでないことを示す値を設定する。コマンドがリードコマンドであるとき、第２初期化部７１３は、当該コマンドに対応するエントリをコマンドテーブル２２１Ｂからクリアする。実行が完了していない全てのコマンドに対して、上述の処理を施すことにより、停電が発生した際にも、一次キャッシュ（メモリ２２）に格納されたダーティデータを失わずに、ＨＤＤ３２，３３，３４に書き込むことができる。
【００４０】
上述の初期化処理が完了した後、キャッシュ制御部７２による処理が開始される。  
キャッシュ制御部７２は、第１初期化部７１２又は第２初期化部７１３によって初期化されたメモリ２２を用いて、キャッシュ動作を制御する。キャッシュ制御部７２は、リード制御部７２２、キャッシュリード部７２２Ａ、ＳＳＤリード部７２２Ｂ、ＨＤＤリード部７２２Ｃ、ライト制御部７２３、キャッシュライト部７２３Ａ、ＳＳＤライト部７２３Ｂ、ＨＤＤライト部７２３Ｃ、リード完了通知部７２４、及びライト完了通知部７２５を備える。
【００４１】
コマンド受信部７２１は、ＯＳ５１（ホストシステム１０）によって発行された、ＨＤＤ３２，３３，３４（キャッシュ対応領域３２Ａ，３３Ａ，３４Ａ）からデータを読み出すためのリードコマンド、及びＨＤＤ３２，３３，３４にデータを書き込むためのライトコマンドを受信する。コマンド受信部７２１は、受信したリードコマンドをリード制御部７２２に出力する。また、コマンド受信部７２１は、受信したライトコマンドをライト制御部７２３に出力する。
【００４２】
リード制御部７２２は、コマンド受信部７２１によって出力されたリードコマンドに指定されたデータを読み出す処理を制御する。具体的には、まず、リード制御部７２２は、キャッシュ管理情報２２１を用いて、リードコマンドによって指定されたデータに対応するデータが一時的なキャッシュ領域２２２に格納されているか否かを判定する。データが一時的なキャッシュ領域２２２に格納されている場合、リード制御部７２２は、キャッシュリード部７２２Ａに一時的なキャッシュ領域２２２から当該データを読み出すことを要求する。キャッシュリード部７２２Ａは、リード制御部７２２による要求に応答して、一時的なキャッシュ領域２２２から当該データを読み出す。読み出されたデータは、例えばメインメモリ１３に格納される。そして、キャッシュリード部７２２Ａは、リードコマンドによって指定されたデータが読み出されたことをリード完了通知部７２４に通知する。リード完了通知部７２４は、ＯＳ５１（ホストシステム１０）にリードコマンドの実行が完了したことを通知する。なお、リード制御部７２２は、キャッシュリード部７２２Ａにデータの読み出しを要求する代わりに、メモリ２２に対して、一時的なキャッシュ領域２２２から当該データを読み出すためのリードコマンドを発行（組み替え発行）してもよい。
【００４３】
データが一時的なキャッシュ領域２２２に格納されていない場合、リード制御部７２２は、キャッシュ管理情報２２１を用いて、リードコマンドによって指定されたデータに対応するデータがＳＳＤ３１内のキャッシュ領域３１Ａに格納されているか否かを判定する。リードコマンドによって指定されたデータに対応するデータがキャッシュ領域３１Ａに格納されている場合、リード制御部７２２は、ＳＳＤリード部７２２Ｂにキャッシュ領域３１Ａから当該データを読み出すことを要求する。ＳＳＤリード部７２２Ｂは、リード制御部７２２による要求に応答して、キャッシュ領域３１Ａから当該データを読み出す。読み出されたデータは、例えばメインメモリ１３に格納される。そして、ＳＳＤリード部７２２Ｂは、リードコマンドによって指定されたデータが読み出されたことをリード完了通知部７２４に通知する。リード完了通知部７２４は、ＯＳ５１（ホストシステム１０）にリードコマンドの実行が完了したことを通知する。また、ＳＳＤリード部７２２Ｂは、読み出したデータを一時的なキャッシュ領域２２２に書き込んでもよい。その場合、ＳＳＤリード部７２２Ｂは、データが書き込まれたメモリ２２内の領域を示す情報（キャッシュ領域情報）と、データが読み出された（ＳＳＤ３１内の領域に対応する）ＨＤＤ３２，３３，３４内の領域を示す情報（ＨＤＤ内の領域情報）とを含むエントリをキャッシュ管理情報２２１に追加する。なお、リード制御部７２２は、ＳＳＤリード部７２２Ｂにデータの読み出しを要求する代わりに、ＳＳＤ３１に対して、ＳＳＤ３１内のキャッシュ領域３１Ａから当該データを読み出すためのリードコマンドを発行してもよい。
【００４４】
また、データがメモリ２２内の一時的なキャッシュ領域２２２とＳＳＤ３１内のキャッシュ領域３１Ａのいずれにも格納されていない場合、リード制御部７２２は、ＨＤＤリード部７２２ＣにＨＤＤ３２，３３，３４から当該データを読み出すことを要求する。ＨＤＤリード部７２２Ｃは、リード制御部７２２による要求に応答して、ＨＤＤ３２，３３，３４から当該データを読み出す。読み出されたデータは、例えばメインメモリ１３に格納される。そして、ＨＤＤリード部７２２Ｃは、リードコマンドによって指定されたデータが読み出されたことをリード完了通知部７２４に通知する。リード完了通知部７２４は、ＯＳ５１（ホストシステム１０）にリードコマンドの実行が完了したことを通知する。また、ＨＤＤリード部７２２Ｃは、読み出したデータを一時的なキャッシュ領域２２２及びキャッシュ領域３１Ａに書き込んでもよい。その場合、ＨＤＤリード部７２２Ｃは、データが書き込まれたメモリ２２内の領域を示す情報（キャッシュ領域情報）と、データが読み出されたＨＤＤ３２，３３，３４内の領域を示す情報（ＨＤＤ内の領域情報）とを含むエントリをキャッシュ管理情報２２１に追加する。また、ＨＤＤリード部７２２Ｃは、データが書き込まれたＳＳＤ３１内の領域を示す情報（キャッシュ領域情報）と、データが読み出されたＨＤＤ３２，３３，３４内の領域を示す情報（ＨＤＤ内の領域情報）とを含むエントリをキャッシュ管理情報２２１に追加する。なお、リード制御部７２２は、ＨＤＤリード部７２２Ｃにデータのリードを要求する代わりに、ＨＤＤ３２，３３，３４に対して、ＨＤＤ３２，３３，３４から当該データを読み出すためのリードコマンドを発行してもよい。
【００４５】
ライト制御部７２３は、コマンド受信部７２１によって出力されたライトコマンドに指定されたデータを書き込む処理を制御する。具体的には、まず、ライト制御部７２３は、キャッシュライト部７２３Ａにライトコマンドによって指定されたデータを一時的なキャッシュ領域２２２に書き込むことを要求する。キャッシュライト部７２３Ａは、ライト制御部７２３による要求に応答して、一時的なキャッシュ領域２２２に当該データを書き込む。キャッシュライト部７２３Ａは、データが書き込まれたメモリ２２内の領域を示す情報（キャッシュ領域情報）と、データが書き込まれるべきＨＤＤ３２，３３，３４内の領域を示す情報（ＨＤＤ内の領域情報）とを含むエントリをキャッシュ管理情報２２１に追加する。追加されるエントリでは、ＨＤＤ書込みフラグに、データがＨＤＤ３２，３３，３４にまだ書き込まれていないことを示す値が設定される。そして、キャッシュライト部７２３Ａは、ライトコマンドによって指定されたデータが書き込まれたことをライト完了通知部７２５に通知する。ライト完了通知部７２５は、ＯＳ５１（ホストシステム１０）にライトコマンドの実行が完了したことを通知する。なお、ライト制御部７２３は、キャッシュライト部７２３Ａにデータの書込みを要求する代わりに、メモリ２２に対して、一時的なキャッシュ領域２２２に当該データを書き込むためのライトコマンドを発行（組み替え発行）してもよい。
【００４６】
次いで、ライト制御部７２３は、所定のタイミングで（例えば、一定期間毎に）、一時的なキャッシュ領域２２２に格納されたダーティデータを書き込むことができる領域が、キャッシュ領域３１Ａ（ＳＳＤ３１）内にあるかどうかを判定する。具体的には、ライト制御部７２３は、キャッシュ管理情報２２１を用いて、ＳＳＤ３１内のキャッシュ領域３１Ａに格納されたデータに対応する複数のエントリの中に、一時的なキャッシュ領域２２２に格納されたダーティデータに対応するエントリと、ＨＤＤ３２，３３，３４内の領域情報が一致するエントリがあるかどうかを判定する。ＨＤＤ３２，３３，３４内の領域情報が一致するエントリがあるとき、ライト制御部７２３は、一時的なキャッシュ領域２２２に格納されたダーティデータを、対応するＳＳＤ３１内のキャッシュ領域３１Ａに書き込むことを、ＳＳＤライト部７２３Ｂに要求する。ＳＳＤライト部７２３Ｂは、対応するＳＳＤ３１内のキャッシュ領域３１Ａに、一時的なキャッシュ領域２２２に格納されたダーティデータを書き込む。そして、ＳＳＤライト部７２３Ｂは、そのデータが格納されている一時的なキャッシュ領域２２２に対応するエントリ（第１エントリと云う）と、そのデータが書き込まれたＳＳＤ３１内のキャッシュ領域３１Ａに対応するエントリ（第２エントリと云う）とを更新する。すなわち、ＳＳＤライト部７２３Ｂは、第１エントリのＨＤＤ書込みフラグにダーティデータでないことを示す値を設定し、第２エントリのＨＤＤ書込みフラグにダーティデータであることを示す値を設定する。
【００４７】
また、ＨＤＤ３２，３３，３４内の領域情報が一致するエントリがないとき、ライト制御部７２３は、ＳＳＤ３１内のキャッシュ領域３１Ａに、一時的なキャッシュ領域２２２に格納されたダーティデータを書き込むことができる空き領域があるかどうかを判定する。ダーティデータを書き込むことができる空き領域があるとき、ライト制御部７２３は、一時的なキャッシュ領域２２２に格納されたダーティデータをキャッシュ領域３１Ａ内の空き領域に書き込むことを、ＳＳＤライト部７２３Ｂに要求する。そして、ＳＳＤライト部７２３Ｂは、ＳＳＤ３１のキャッシュ領域３１Ａ内の空き領域に、一時的なキャッシュ領域２２２に格納されたダーティデータを書き込む。そして、ＳＳＤライト部７２３Ｂは、そのデータが格納されている一時的なキャッシュ領域２２２に対応するエントリ（第１エントリ）と、そのデータが書き込まれたＳＳＤ３１内のキャッシュ領域３１Ａに対応するエントリ（第２エントリ）とを更新する。すなわち、ＳＳＤライト部７２３Ｂは、第１エントリのＨＤＤ書込みフラグにダーティデータでないことを示す値を設定する。また、ＳＳＤライト部７２３Ｂは、このデータが書き込まれたＳＳＤ３１内の領域を示す情報、このデータが書き込まれるＨＤＤ３２，３３，３４内の領域を示す情報、及びダーティデータであることを示すＨＤＤ書込みフラグを含むエントリをキャッシュ管理情報２２１に追加する。なお、ライト制御部７２３は、ＳＳＤライト部７２３Ｂにデータの書込みを要求する代わりに、ＳＳＤ３１に対して、キャッシュ領域３１Ａに当該データを書き込むためのライトコマンドを発行（組み替え発行）してもよい。
【００４８】
さらに、キャッシュ領域３１Ａ内にダーティデータを書き込むことができる空き領域がないとき、ライト制御部７２３は、一時的なキャッシュ領域２２２に格納されたダーティデータを、対応するＨＤＤ３２，３３，３４内の領域に書き込むことを、ＨＤＤライト部７２３Ｃに要求する。ＨＤＤライト部７２３Ｃは、キャッシュ管理情報２２１に基づいて、一時的なキャッシュ領域２２２に格納されたダーティデータを、対応するＨＤＤ３２，３３，３４内の領域に書き込む。そして、ＨＤＤライト部７２３Ｃは、このデータに対応するエントリのＨＤＤ書込みフラグに、データがダーティデータでないことを示す値を設定する。なお、ライト制御部７２３は、ＨＤＤライト部７２３Ｃにデータの書込みを要求する代わりに、ＨＤＤ３２，３３，３４に対して、キャッシュ対応領域３２Ａ，３３Ａ，３４Ａに当該データを書き込むためのライトコマンドを発行（組み替え発行）してもよい。
【００４９】
終了処理部７３は、コンピュータ１がシャットダウン（正常終了）されるとき、キャッシュ管理情報２２１に基づいて、一時的なキャッシュ領域２２２に格納されているダーティデータをＨＤＤ３２，３３，３４に書き込む。また、終了処理部７３は、メモリ２２に格納されたキャッシュ管理情報２２１を用いて、ＳＳＤ３１に格納されたキャッシュ管理情報３１Ｂを更新する。そして、終了処理部７３は、キャッシュ管理情報２２１のヘッダ情報をクリアする。上述のように、キャッシュ管理情報２２１のヘッダ情報がクリアされていることによって、停電判定部７１１は、コンピュータ１が前回正常終了されたことを検出する。なお、終了処理部７３は、キャッシュ管理情報２２１に基づいて、ＳＳＤ３１のキャッシュ領域３１Ａに格納されているダーティデータをＨＤＤ３２，３３，３４に書き込み、対応するキャッシュ管理情報２２１のエントリを更新してもよい。
【００５０】
上述の構成により、停電によって異常終了が発生した際にも、一時的なキャッシュ領域２２２に格納されたダーティデータをＨＤＤ３２，３３，３４に書き込むことができる。なお、上述の処理は、キャッシュドライバプログラム５４に限らず、図３に示す他の階層に対応するソフトウェア及びハードウェアによる処理と連携して行われてもよい。
【００５１】
次いで、図６に示すフローチャートを参照して、キャッシュドライバ５４によって実行される初期化処理の手順の例について説明する。  
まず、停電判定部７１１は、ＲＡＩＤコントローラ２０内のメモリ２２にキャッシュ管理情報２２１が格納されているか否かを判定する（ブロックＢ１１）。具体的には、停電判定部７１１は、例えば、メモリ２２内の所定の位置にキャッシュ管理情報２２１のヘッダ情報が存在するとき、メモリ２２にキャッシュ管理情報２２１が格納されていると判定する。また、停電判定部７１１は、例えば、メモリ２２内の所定の位置にキャッシュ管理情報２２１のヘッダ情報が存在しないとき、メモリ２２にキャッシュ管理情報２２１が格納されていないと判定する。上述のように、メモリ２２内の所定の位置にキャッシュ管理情報２２１のヘッダ情報が存在することは、コンピュータ１が前回、停電等によって異常終了したことを示す。また、メモリ２２内の所定の位置にキャッシュ管理情報２２１のヘッダ情報が存在しないことは、コンピュータ１が前回、正常終了したことを示す。
【００５２】
ＲＡＩＤコントローラ２０内のメモリ２２にキャッシュ管理情報２２１が格納されていない場合（すなわち、コンピュータが前回、正常終了している場合）（ブロックＢ１１のＮＯ）、第１初期化部７１２は、ＲＡＩＤコントローラ２０内のメモリ２２にキャッシュ管理情報２２１を再構築する（ブロックＢ１２）。そして、第１初期化部７１２は、ＳＳＤ３１に格納されたキャッシュ管理情報３１ＢをＲＡＩＤコントローラ２０内のメモリ２２にロードする（ブロックＢ１３）。
【００５３】
ＲＡＩＤコントローラ２０内のメモリ２２にキャッシュ管理情報２２１が格納されている場合（すなわち、コンピュータが前回、異常終了している場合）（ブロックＢ１１のＹＥＳ）、第２初期化部７１３は、ＲＡＩＤコントローラ２０内のメモリ２２に格納されたキャッシュ管理情報２２１を使用することを決定する（ブロックＢ１４）。そして、第２初期化部７１３は、キャッシュ管理情報２２１に基づいて、実行が完了していないコマンドが存在するか否かを判定する（ブロックＢ１５）。
【００５４】
実行が完了していないコマンドが存在する場合（ブロックＢ１５のＹＥＳ）、第２初期化部７１３は、そのコマンドがライトコマンドであるか否かを判定する（ブロックＢ１６）。コマンドがライトコマンドである場合（ブロックＢ１６のＹＥＳ）、第２初期化部７１３はコマンドを実行し直す（ブロックＢ１７）。そして、第２初期化部７１３は、ブロックＢ１５に戻り、キャッシュ管理情報２２１にさらに実行が完了していないコマンドが存在するか否かを判定する。
【００５５】
また、コマンドがライトコマンドでない場合（例えば、リードコマンドである場合）（ブロックＢ１６のＮＯ）、第２初期化部７１３は、そのコマンドをキャッシュ管理情報２２１（コマンドテーブル２２１Ｂ）からクリアする（ブロックＢ１８）。そして、第２初期化部７１３は、ブロックＢ１５に戻り、キャッシュ管理情報２２１にさらに実行が完了していないコマンドが存在するか否かを判定する。
【００５６】
実行が完了していないコマンドが存在していない場合（ブロックＢ１５のＮＯ）、第２初期化部７１３は処理を終了する。
【００５７】
以上の処理により、キャッシュメモリとして使用されるＲＡＩＤコントローラ２０内のメモリ２２を初期化することができ、メモリ２２を用いたキャッシュ動作を開始することができる。なお、コンピュータが前回、異常終了していると判定された場合、キャッシュ管理情報２２１のコマンドテーブル２２１Ｂではなく、アドレステーブル２２１Ａを用いて、ＨＤＤ書込みフラグにデータがＨＤＤ３２，３３，３４に書込み済みであることを示す値が設定されていないダーティデータをＨＤＤ３２，３３，３４に書き込む処理を行ってもよい。
【００５８】
図７のフローチャートは、コンピュータ１によって実行されるリード処理の手順の例を示す。リード処理は、例えばＯＳ５１がＨＤＤ３２，３３，３４からデータを読み出すためのリードコマンドを発行することによって開始される。
【００５９】
まず、リード制御部７２２は、リードコマンドによって指定されたデータが一時的なキャッシュ領域２２２に格納されているか否かを判定する（ブロックＢ２０１）。具体的には、リード制御部７２２は、キャッシュ管理情報２２１を用いて、キャッシュ対応領域３２Ａ，３３Ａ，３４Ａに格納されたリード対象のデータが一時的なキャッシュ領域２２２に格納されているか否かを判定する。
【００６０】
リードコマンドによって指定されたデータが一時的なキャッシュ領域２２２に格納されている場合（ブロックＢ２０１のＹＥＳ）、リード制御部７２２は、一時的なキャッシュ領域２２２からデータを読み出すためのリードコマンドを発行する（ブロックＢ２０２）。リード制御部７２２は、発行したリードコマンドをキャッシュリード部７２２Ａに出力する。キャッシュリード部７２２Ａは、リードコマンドによって指定されたデータを一時的なキャッシュ領域２２２から読み出す（ブロックＢ２０３）。そして、リード完了通知部７２４は、ホストシステム１０にリードの完了を通知する（ブロックＢ２０４）。
【００６１】
リードコマンドによって指定されたデータが一時的なキャッシュ領域２２２に格納されていない場合（ブロックＢ２０１のＮＯ）、リード制御部７２２は、リードコマンドによって指定されたデータがキャッシュ領域３１Ａに格納されているか否かを判定する（ブロックＢ２０５）。リードコマンドによって指定されたデータがキャッシュ領域３１Ａに格納されている場合（ブロックＢ２０５のＹＥＳ）、リード制御部７２２は、キャッシュ領域３１Ａからデータを読み出すためのリードコマンドを発行する（ブロックＢ２０６）。リード制御部７２２は、発行したリードコマンドをＳＳＤリード部７２２Ｂに出力する。ＳＳＤリード部７２２Ｂは、リードコマンドによって指定されたデータをキャッシュ領域３１Ａから読み出す（ブロックＢ２０７）。そして、リード完了通知部７２４は、ホストシステム１０にリードの完了を通知する（ブロックＢ２０８）。また、ＳＳＤリード部７２２Ｂは、読み出したデータを一時的なキャッシュ領域２２２に格納する（ブロックＢ２０９）。そして、ＳＳＤリード部７２２Ｂは、対応するエントリをキャッシュ管理情報２２１に追加する（ブロックＢ２１０）。ＳＳＤリード部７２２Ｂは、例えばデータが格納されたメモリ２２（一時的なキャッシュ領域２２２）内の領域を示す情報、データが格納されるＨＤＤ３２，３３，３４（キャッシュ対応領域３２Ａ，３３Ａ，３４Ａ）内の領域を示す情報、データがダーティデータでないことを示すフラグ（ＨＤＤ書込みフラグ）を含むエントリを追加する。
【００６２】
リードコマンドによって指定されたデータがキャッシュ領域３１Ａに格納されていない場合（ブロックＢ２０５のＮＯ）、ＨＤＤリード部７２２Ｃは、リードコマンドによって指定されたデータをＨＤＤ３２，３３，３４から読み出す（ブロックＢ２１１）。そして、リード完了通知部７２４は、ホストシステム１０にリードの完了を通知する（ブロックＢ２１２）。ＨＤＤリード部７２２Ｃは、読み出したデータを一時的なキャッシュ領域２２２に格納する（ブロックＢ２１３）。また、ＨＤＤリード部７２２Ｃは、読み出したデータをキャッシュ領域３１Ａに格納する（ブロックＢ２１４）。そして、ＨＤＤリード部７２２Ｃは、対応するエントリをキャッシュ管理情報２２１に追加する（ブロックＢ２１５）。ＨＤＤリード部７２２Ｃは、例えばデータが格納されたメモリ２２（一時的なキャッシュ領域２２２）内の領域を示す情報、データが格納されるＨＤＤ３２，３３，３４（キャッシュ対応領域３２Ａ，３３Ａ，３４Ａ）内の領域を示す情報、データがダーティデータでないことを示すフラグ（ＨＤＤ書込みフラグ）を含むエントリと、データが格納されたＳＳＤ３１（キャッシュ領域３１Ａ）内の領域を示す情報、データが格納されるＨＤＤ３２，３３，３４（キャッシュ対応領域３２Ａ，３３Ａ，３４Ａ）内の領域を示す情報、データがダーティデータでないことを示すフラグ（ＨＤＤ書込みフラグ）を含むエントリとを追加する。
【００６３】
以上の処理により、ＯＳ５１によって発行された、ＨＤＤ３２，３３，３４からデータを読み出すためのリードコマンドに応じて、対応するデータを一時的なキャッシュ領域２２２、キャッシュ領域２２２又はＨＤＤ３２，３３，３４から読み出すことができる。
【００６４】
次いで、図８のフローチャートは、コンピュータ１によって実行されるライト処理の手順の例を示す。ライト処理は、例えばＯＳ５１がＨＤＤ３２，３３，３４にデータを書き込むためのライトコマンドを発行することによって開始される。
【００６５】
まず、キャッシュライト部７２３Ａは、ライトコマンドによって指定されたデータ（ライトデータとも云う）をＲＡＩＤコントローラ２０内のメモリ２２に設けられた一時的なキャッシュ領域２２２に格納する（ブロックＢ３０１）。キャッシュライト部７２３Ａは、対応するエントリをキャッシュ管理情報２２１に追加する。キャッシュライト部７２３Ａは、例えば、データが格納されたメモリ２２（一時的なキャッシュ領域２２２）内の領域を示す情報、データが格納されるべきＨＤＤ３２，３３，３４（キャッシュ対応領域３２Ａ，３３Ａ，３４Ａ）内の領域を示す情報、データがダーティデータであることを示すフラグ（ＨＤＤ書込みフラグ）を含むエントリを追加する。そして、ライト完了通知部７２５は、ホストシステム１０にライトの完了を通知する（ブロックＢ３０２）。
【００６６】
次いで、ライト制御部７２３は、ＳＳＤ３１内に設けられたキャッシュ領域３１Ａに、ライトデータが書き込まれるべきＨＤＤ３２，３３，３４内の領域（ライト対象領域）に対応する領域があるか否かを判定する（ブロックＢ３０３）。キャッシュ領域３１Ａに、ＨＤＤ３２，３３，３４内のライト対象領域に対応する領域がない場合（ブロックＢ３０３のＮＯ）、ライト制御部７２３は、キャッシュ領域３１にライトデータを書き込むことができる空き領域があるか否かを判定する（ブロックＢ３０９）。
【００６７】
キャッシュ領域３１Ａに、ＨＤＤ３２，３３，３４内のライト対象領域に対応する領域がある場合（ブロックＢ３０３のＹＥＳ）、又はキャッシュ領域３１にライトデータを書き込むことができる空き領域がある場合（ブロックＢ３０９のＹＥＳ）、ライト制御部７２３は、一時的なキャッシュ領域２２２に格納されたライトデータをキャッシュ領域３１Ａに書き込むためのライトコマンドを発行する（ブロックＢ３０４）。ライト制御部７２３は、発行したライトコマンドをＳＳＤライト部７２３Ｂに出力する。そして、ＳＳＤライト部７２３Ｂは、一時的なキャッシュ領域２２２に格納されたライトデータをキャッシュ領域３１Ａに書き込む（ブロックＢ３０５）。そして、ＳＳＤライト部７２３Ｂは、キャッシュ管理情報２２１内のエントリを更新（追加）する。例えば、ＳＳＤライト部７２３Ｂは、対応するエントリをキャッシュ管理情報２２１に追加する。ＳＳＤライト部７２３Ｂは、例えば、データが格納されたＳＳＤ３１（キャッシュ領域３１Ａ）内の領域を示す情報、データが格納されるＨＤＤ３２，３３，３４（キャッシュ対応領域３２Ａ，３３Ａ，３４Ａ）内の領域を示す情報、データがダーティデータであることを示すフラグ（ＨＤＤ書込みフラグ）を含むエントリを追加する。
【００６８】
次いで、ライト制御部７２３は、ライトデータがキャッシュ領域３１Ａに格納されてから一定時間が経過したか否かを判定する（ブロックＢ３０６）。一定時間が経過していない場合（ブロックＢ３０６のＮＯ）、ライト制御部７２３は、再度、ブロックＢ３０６の処理を実行し、一定時間が経過したか否かを判定する。
【００６９】
一定時間が経過した場合（ブロックＢ３０６のＹＥＳ）、ライト制御部７２３は、キャッシュ領域３１Ａに格納されたライトデータを、ＨＤＤ３２，３３，３４内のライト対象領域に書き込むためのライトコマンドを発行する（ブロックＢ３０７）。そして、ＨＤＤライト部７２３Ｃは、キャッシュ領域３１Ａに格納されたライトデータを、ＨＤＤ３２，３３，３４内のライト対象領域に書き込む（ブロックＢ３０８）。ＨＤＤライト部７２３Ｃは、キャッシュ管理情報２２１内の対応するエントリを更新する。ＨＤＤライト部７２３Ｃは、例えば、対応するエントリに含まれるＨＤＤ書込みフラグに、ダーティデータでないことを示す値を設定する。
【００７０】
キャッシュ領域３１内にライトデータを書き込むことができる空き領域がない場合（ブロックＢ３０９のＮＯ）、ライト制御部７２３は、一時的なキャッシュ領域２２２に格納されたライトデータを、ＨＤＤ３２，３３，３４内のライト対象領域に書き込むためのライトコマンドを発行する（ブロックＢ３１０）。そして、ＨＤＤライト部７２３Ｃは、一時的なキャッシュ領域２２２に格納されたライトデータを、ＨＤＤ３２，３３，３４内のライト対象領域に書き込む（ブロックＢ３１１）。ＨＤＤライト部７２３Ｃは、キャッシュ管理情報２２１内の対応するエントリを更新する。ＨＤＤライト部７２３Ｃは、例えば、対応するエントリに含まれるＨＤＤ書込みフラグに、ダーティデータでないことを示す値を設定する。
【００７１】
以上の処理により、データをＨＤＤ３２，３３，３４に書き込むためのライトコマンドに応じて、一時的なキャッシュ領域２２２及びキャッシュ領域３１Ａを用いた、ライトバックモードによるキャッシュ動作を実現することができる。
【００７２】
なお、ＲＡＩＤコントローラ２０内のメモリ２２へのアクセスには、ＤＭＡコントローラ２８を用いてもよい。これにより、ホストシステム１０のプロセッサ１１及びＲＡＩＤコントローラ２０のプロセッサ２１による処理量を低減することができる。例えば、メインメモリ１３とＲＡＩＤコントローラ２０内のメモリ２２との間のデータ転送は、プロセッサ１１によって実行されるが、このデータ転送をＲＡＩＤコントローラ２０内のＤＭＡコントローラ２８を用いて実行することによって、プロセッサ１１にかかる負荷を分散することができる。
【００７３】
次いで、第２の実施の形態を、図９及び図１０に基づいて説明する。図９は、第２の実施形態に係る情報処理装置（コンピュータ１）の構成を示す。
【００７４】
第２の実施形態では、ＲＡＩＤコントローラ２０内のメモリ２２ではなく、不揮発性メモリ（ＳＳＤ）２９がキャッシュメモリ（一次キャッシュ）として利用される。不揮発性メモリ（ＳＳＤ）２９は、キャッシュ管理情報２９１が格納される領域と一時的なキャッシュ領域２９２とを含む。キャッシュドライバ５４は、第１の実施形態と同様にして、不揮発性メモリ２９をキャッシュメモリとして利用する。
【００７５】
一般に、不揮発性メモリ２９はメインメモリ１３よりも低速であることが想定される。そのため、不揮発性メモリ２９に格納されたキャッシュ管理情報２９１を読み出すことによって、コンピュータ１（ホストシステム１０）の処理速度が低下する可能性がある。これは、不揮発性メモリ２９がメインメモリ１３よりも低速であるために、キャッシュ管理情報２９１のリードに多大な時間が必要になるためである。そこで、キャッシュ管理情報２９１をメインメモリ１３にも格納し、キャッシュ管理情報２９１に対する更新がある際には、メインメモリ１３に格納されたキャッシュ管理情報２９１と、不揮発性メモリ２９に格納されたキャッシュ管理情報２９１の両方に対して更新を施す。キャッシュ動作では、キャッシュ管理情報２９１をサーチする読み込みが多いことが想定されるため、キャッシュ管理情報２９１の更新のみが行われる不揮発性メモリ２９へのアクセス回数を減らすことができる。
【００７６】
図１０は、キャッシュドライバ５４によって実行される初期化処理の手順の例を示す。なお、キャッシュドライバ５４の構成は図４に示す構成と同様である。
【００７７】
まず、停電判定部７１１は、ＳＳＤ（不揮発性メモリ）２９にキャッシュ管理情報２９１が格納されているか否かを判定する（ブロックＢ４１）。具体的には、停電判定部７１１は、例えば、ＳＳＤ２９内の所定の位置にキャッシュ管理情報２９１のヘッダ情報が存在するとき、ＳＳＤ２９にキャッシュ管理情報２９１が格納されていると判定する。また、停電判定部７１１は、例えば、ＳＳＤ２９内の所定の位置にキャッシュ管理情報２９１のヘッダ情報が存在しないとき、ＳＳＤ２９にキャッシュ管理情報２９１が格納されていないと判定する。ＳＳＤ２９内の所定の位置にキャッシュ管理情報２９１のヘッダ情報が存在することは、コンピュータ１が前回、停電等によって異常終了したことを示す。また、ＳＳＤ２９内の所定の位置にキャッシュ管理情報２９１のヘッダ情報が存在しないことは、コンピュータ１が前回、正常終了したことを示す。
【００７８】
ＳＳＤ２９にキャッシュ管理情報２９１が格納されていない場合（すなわち、コンピュータが前回、正常終了している場合）（ブロックＢ４１のＮＯ）、第１初期化部７１２は、メインメモリ１３にキャッシュ管理情報２９１を再構築する（ブロックＢ４２）。そして、第１初期化部７１２は、ＳＳＤ３１に格納されたキャッシュ管理情報３１Ｂをメインメモリ１３にロードする（ブロックＢ４３）。
【００７９】
ＳＳＤ２９にキャッシュ管理情報２９１が格納されている場合（すなわち、コンピュータが前回、異常終了している場合）（ブロックＢ４１のＹＥＳ）、第２初期化部７１３は、ＳＳＤ２９に格納されたキャッシュ管理情報２９１をメインメモリ１３上のキャッシュ管理情報が格納される領域に転送する（ブロックＢ４４）。そして、第２初期化部７１３は、キャッシュ管理情報２９１に基づいて、実行が完了していないコマンドが存在するか否かを判定する（ブロックＢ４５）。
【００８０】
実行が完了していないコマンドが存在する場合（ブロックＢ４５のＹＥＳ）、第２初期化部７１３は、そのコマンドがライトコマンドであるか否かを判定する（ブロックＢ４６）。コマンドがライトコマンドである場合（ブロックＢ４６のＹＥＳ）、第２初期化部７１３はコマンドを実行し直す（ブロックＢ４７）。そして、第２初期化部７１３は、ブロックＢ４５に戻り、キャッシュ管理情報２９１にさらに実行が完了していないコマンドが存在するか否かを判定する。
【００８１】
また、コマンドがライトコマンドでない場合（例えば、リードコマンドである場合）（ブロックＢ４６のＮＯ）、第２初期化部７１３は、そのコマンドをキャッシュ管理情報２９１（コマンドテーブル）からクリアする（ブロックＢ４８）。そして、第２初期化部７１３は、ブロックＢ４５に戻り、キャッシュ管理情報２９１にさらに実行が完了していないコマンドが存在するか否かを判定する。
【００８２】
実行が完了していないコマンドが存在していない場合（ブロックＢ４５のＮＯ）、第２初期化部７１３は処理を終了する。
【００８３】
以上の処理により、キャッシュメモリとして使用されるメインメモリ１３とＳＳＤ２９とを初期化することができ、メインメモリ１３とＳＳＤ２９とを用いたキャッシュ動作を開始することができる。
【００８４】
以上説明したように、第１及び第２の実施形態によれば、停電等の異常終了が発生した際にも、キャッシュされたダーティデータを外部記憶装置に書き込むことができる。ホストシステム１０は、停電時にバッテリ２３によって電力が供給されるメモリ２２をＨＤＤ３２，３３，３４対する一次キャッシュとして用いる。そして、停電時にバッテリ２３によって電力が供給されるメモリ２２に、キャッシュ管理情報２２１が格納される領域及び一時的なキャッシュ領域２２２を設ける。また、ホストシステム１０は、起動時に、前回コンピュータ１が正常終了したか異常終了したかを判定する機能を有する。これにより、コンピュータ１が異常終了したと判定された際には、停電時にバッテリ２３によって電力が供給されるメモリ２２に格納されたダーティデータをＨＤＤ３２，３３，３４に書き込むことができる。つまり、停電等の異常終了が発生した際にも、ダーティデータを失うことなく、ＨＤＤ３２，３３，３４に反映させることができる。なお、停電時にバッテリ２３によって電力が供給されるメモリ２２の代わりに、不揮発性メモリ２９を用いてもよい。
【００８５】
なお、本実施形態の初期化処理、リード処理、ライト処理、及び終了処理の手順は全てソフトウェアによって実行することができる。このため、初期化処理、リード処理、ライト処理、及び終了処理の手順を実行するプログラムを格納したコンピュータ読み取り可能な記憶媒体を通じてこのプログラムを通常のコンピュータにインストールして実行するだけで、本実施形態と同様の効果を容易に実現することができる。
【００８６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００８７】
１０…ホストシステム、２０…ＲＡＩＤコントローラ、３０…外部記憶装置、１１…プロセッサ、１２…ＰＣＨ、１３…メインメモリ、２１…プロセッサ、２２…メモリ、２３…バッテリ、２４…バッテリ回路、２５…ＢＢＵオプション、２６…ＰＣＩ  Ｅｘｐｒｅｓｓコネクタ、２７…ＳＡＳコネクタ、２８…ＤＭＡコントローラ、２２１…キャッシュ管理情報、２２２…一時的なキャッシュ領域、３１…ＳＳＤ、３２、３３、３４…ＨＤＤ、３１Ａ…キャッシュ領域、３１Ｂ…キャッシュ管理情報、３２Ａ、３３Ａ、３４Ａ…キャッシュ対応領域、４３…サービス、５４…キャッシュドライバプログラム。
【図１】
2012078941.tif 000003
【図２】
2012078941.tif 000004
【図３】
2012078941.tif 000005
【図４】
2012078941.tif 000006
【図５】
2012078941.tif 000007
【図６】
2012078941.tif 000008
【図７】
2012078941.tif 000009
【図８】
2012078941.tif 000010
【図９】
2012078941.tif 000011
【図１０】
2012078941.tif 000012