(57)【要約】【課題】第１の外部記憶装置を第２の外部記憶装置のキャッシュとして用いて第２の外部記憶装置のアクセスの高速化を図る場合の更なる効率化を図る。【解決手段】実施形態の情報処理装置は、第１の外部記憶装置を第２の外部記憶装置のキャッシュとして用いて第２の外部記憶装置に対するデータアクセスを処理するドライバを具備する。ドライバは、ホストシステムとの間でデータの受け渡しを行うためにメインメモリ上に確保されるバッファ領域と第１の外部記憶装置および第２の外部記憶装置との間に介在させるキャッシュ領域をメインメモリ上に確保するキャッシュ確保手段を有する。【選択図】図２
2011238176.tif 000002
【特許請求の範囲】
【請求項１】
メインメモリと、
第１の外部記憶装置と、
第２の外部記憶装置と、
前記第１の外部記憶装置と前記第２の外部記憶装置とを制御し、前記第１の外部記憶装置を前記第２の外部記憶装置のキャッシュとして用いて、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理するドライバと
を具備し、
前記ドライバは、
データの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うために前記メインメモリ上に確保されるバッファ領域と前記第１の外部記憶装置および前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段
を有する
ことを特徴とする情報処理装置。
【請求項２】
前記ドライバは、
前記ホストシステムからデータの読み出しが要求されたとき、
（ａ１）読み出し対象データが前記キャッシュ領域内に存在する場合、前記キャッシュ領域内のデータを前記バッファ領域内に格納し、
（ａ２）読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを読み出して前記バッファ領域に格納し、
（ａ３）読み出し対象データが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを前記キャッシュ領域内に読み出し、前記バッファ領域に格納して、前記キャッシュ領域に読み出したデータを前記第１の外部記憶装置に蓄積する
リード制御手段と、
前記ホストシステムからデータの書き込みが要求されたとき、
（ｂ１）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記キャッシュ領域内の書き換え後のデータを前記第１の外部記憶装置に蓄積し、
（ｂ２）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記第１の外部記憶装置上のデータを無効化し、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記キャッシュ領域内の書き換え後のデータを前記第１の外部記憶装置に蓄積し、
（ｂ３）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、書き込み対象データを前記キャッシュ領域に格納して、前記キャッシュ領域に格納したデータを前記第１の外部記憶装置に蓄積する
ライト制御手段と
をさらに有することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記ドライバは、
前記キャッシュ領域内に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納し、前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記キャッシュ領域経由で前記第２の外部記憶装置に格納するフラッシュ制御手段
をさらに有することを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記ライト制御手段は、ライトスルー方式で書き込み処理を実行することを要求するライトＦＵＡ（Force unit access）要求を前記ホストシステムから受けた場合、前記キャッシュ領域内へのデータの格納または前記キャッシュ領域内もしくは前記第１の外部記憶装置上のデータの書き換えを状況に応じて行うと共に、書き込み対象データの書き込み処理を前記第２の外部記憶装置にライトスルー方式で実行させるためのライトＦＵＡ要求を前記第２の外部記憶装置に対して発行することを特徴とする請求項２記載の情報処理装置。
【請求項５】
前記リード制御手段は、読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合（ａ２）における前記第１の外部記憶装置上のデータの前記バッファ領域への格納を、前記キャッシュ領域を経由させないモードと、前記キャッシュ領域を経由させることによって当該データを前記キャッシュ領域に蓄積するモードとの２つのモードで実行可能であることを特徴とする請求項２記載の情報処理装置。
【請求項６】
前記ライト制御手段は、
（ｂ１’）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換えて、前記キャッシュ領域内の書き換え後のデータを前記第１の外部記憶装置に蓄積し、
（ｂ２’）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記キャッシュ領域内のデータ、前記第１の外部記憶装置上のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ３’）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４’）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを書き込み対象データに書き換える
ように動作するライトスルーモードをさらに有する
ことを特徴とする請求項２記載の情報処理装置。
【請求項７】
前記ライト制御手段は、前記ライトスルーモード時、前記第１の外部記憶装置上に更新対象データが存在した場合における前記第１の外部記憶装置上のデータの書き換えに代えて、前記第１の外部記憶装置上のデータの無効化を実行するモードで動作可能であることを特徴とする請求項６記載の情報処理装置。
【請求項８】
前記ドライバは、
前記キャッシュ領域および前記第１の外部記憶装置に蓄積されているデータを管理するための管理データを前記メインメモリ上に確保される管理データ領域内で管理するデータ管理手段と、
前記ホストシステムからシャットダウン通知を受けたとき、
前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納する動作を前記フラッシュ制御手段に行わせ、
前記フラッシュ制御手段の動作完了後、前記メインメモリ上に確保される管理データ領域内の管理データを前記第１の外部記憶装置上に確保される管理データ保存領域に格納する動作を前記データ管理手段に行わせ、
起動時、前記第１の外部記憶装置上に確保される管理データ保存領域内の管理データを前記メインメモリ上に確保される管理データ領域に格納した後、前記キャッシュ領域に関する管理データを初期化する動作を前記データ管理手段に行わせる
データ保証手段と
をさらに有することを特徴とする請求項３記載の情報処理装置。
【請求項９】
前記データ保証手段は、
前記第１の外部記憶装置に蓄積したデータが前記第２の外部記憶装置と一貫性を有するか否かを判定するためのフラグであって、前記ドライバが動作中である場合に第１の値を示し、前記ドライバが非動作中である場合に第２の値を示すフラグを前記第１の外部記憶装置上に確保される管理データ保存領域内に設け、
前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納する動作を前記フラッシュ制御手段に開始させる際、前記フラグの値を前記第２の値に更新し、
前記ドライバの起動時、前記フラグの値が前記第２の値を示している場合、前記第１の外部記憶装置上に確保される管理データ保存領域内の管理データを前記メインメモリ上に確保される管理データ領域に格納する動作を前記データ管理手段に行わせた後、前記フラグの値を前記第１の値に更新し、前記フラグの値が前記第１の値を示している場合、前記第１の外部記憶装置上に確保される管理データ保存領域内の管理データを初期化すると共に、前記第１の外部記憶装置上のデータを破棄した後、前記フラグの値を前記第１の値に更新する
ことを特徴とする請求項８記載の情報処理装置。
【請求項１０】
前記ドライバが動作を開始する前、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理する起動手段を具備し、
前記データ保証手段は、
前記第１の外部記憶装置に蓄積したデータが前記第２の外部記憶装置と一貫性を有するか否かを判定するためのフラグであって、前記ドライバが動作中である場合に第１の値を示し、前記起動手段が動作中である場合に第２の値を示し、前記ドライバおよび前記起動手段のいずれもが非動作中である場合に第３の値を示すフラグを前記第１の外部記憶装置上に確保される管理データ保存領域内に設け、
前記起動手段は、
起動時、前記フラグの値が前記第３の値であった場合、前記フラグを前記第２の値に更新し、前記第２の外部記憶装置に対して発行したライト要求を前記第１の外部記憶装置上に確保される管理データ保存領域内にトレースデータとして蓄積し、
前記データ保証手段は、
前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納する動作を前記フラッシュ制御手段に開始させる際、前記フラグの値を前記第３の値に更新し、
前記ドライバの起動時、前記フラグの値が前記第２の値を示している場合、前記第１の外部記憶装置上に確保される管理データ保存領域内の管理データを前記メインメモリ上に確保される管理データ領域に格納する動作を前記データ管理手段に行わせ、前記トレースデータを参照して、前記第１の外部記憶装置上に存在する更新対象データを無効化した後、前記フラグの値を前記第１の値に更新し、前記フラグの値が前記第２の値以外の値を示している場合、前記第１の外部記憶装置上に確保される管理データ保存領域内の管理データを初期化すると共に、前記第１の外部記憶装置上のデータを破棄した後、前記フラグの値を前記第１の値に更新する
ことを特徴とする請求項８記載の情報処理装置。
【請求項１１】
前記起動手段は、前記トレースデータが所定の量を越えた場合、前記トレースデータの蓄積を終了し、前記フラグを前記第３の値に更新することを特徴とする請求項１０記載の情報処理装置。
【請求項１２】
前記データ保証手段は、
前記第２の外部記憶装置の個体情報および電源投入回数を前記第１の外部記憶装置上に確保される管理データ保存領域内で管理し、
前記ドライバの起動時、前記第２の外部記憶装置から個体情報および電源投入回数を取得し、前記取得した個体情報と前記管理データ保存領域内で管理している個体情報とが異なっていた場合、または、前記取得した電源投入回数から１を減じた値と前記管理データ保存領域内で管理している電源投入回数とが異なっていた場合、前記第１の外部記憶装置上に確保される管理データ保存領域内の前記第２の外部記憶装置に関する管理データを初期化すると共に、前記第１の外部記憶装置上の前記第２の外部記憶装置に関するデータを無効化する
ことを特徴とする請求項８記載の情報処理装置。
【請求項１３】
前記ドライバが動作を開始する前、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理する起動手段を具備し、
前記起動手段は、
起動時、前記第２の外部記憶装置から個体情報および電源投入回数を取得し、前記取得した個体情報と前記管理データ保存領域内で管理している個体情報とが一致しており、かつ、前記取得した電源投入回数から１を減じた値と前記管理データ保存領域内で管理している電源投入回数とが一致している場合、読み出し対象データが前記第１の外部記憶装置に存在していたならば、前記第１の外部記憶装置からの読み出し処理を実行し、前記第２の外部記憶装置への書き込み処理に伴う更新対象データが前記第１の外部記憶装置に存在していたならば、前記第１の外部記憶装置上の当該更新対象データの無効化を実行する
ことを特徴とする請求項１２記載の情報処理装置。
【請求項１４】
前記ドライバは、前記ホストシステムの起動時に読み出しが要求されたデータか否かを示すための第２のフラグを、前記キャッシュ領域および前記第１の外部記憶装置の所定のデータ長のブロック毎に設けるブートデータ管理手段を具備し、
前記起動手段は、読み出し対象データが前記第１の外部記憶装置に存在した場合、前記第１の外部記憶装置上のデータに対応する前記第２のフラグをオンに設定し、読み出し対象データが前記第１の外部記憶装置に存在しない場合、前記第２の外部記憶装置に対して発行したリード要求を前記第１の外部記憶装置上に確保される管理データ保存領域内にトレースデータとして蓄積し、
前記リード制御手段は、前記ドライバの起動時または前記ホストシステムからの起動完了通知受領時、前記トレースデータとして蓄積されるリード要求の読み出し対象データを前記第２の外部記憶装置から読み出して前記第１の外部記憶装置に蓄積し、前記第１の外部記憶装置上のデータに対応する前記第２のフラグをオンに設定すると共に、前記起動完了通知を前記ホストシステムから受領するまでの間、前記ホストシステムからデータの書き込みが要求された際、読み出し対象データが前記キャッシュ領域または前記第１の外部記憶装置に存在した場合、前記第１の外部記憶装置上のデータに対応する前記第２のフラグをオンに設定し、読み出し対象データが前記第１の外部記憶装置に存在しない場合、前記第２の外部記憶装置から読み出したデータを前記第１の外部記憶装置に蓄積し、前記第１の外部記憶装置上のデータに対応する前記第２のフラグをオンに設定し、
前記リード制御手段および前記ライト制御手段は、前記第２のフラグがオンに設定された前記第１の外部記憶装置上のデータが前記第１の外部記憶装置上で維持されるように前記第１の外部記憶装置上のデータの入れ替えを制御し、
前記ブートデータ管理手段は、前記ホストシステムからシャットダウン通知を受けたとき、前記第２のフラグをすべてオフに初期化する
ことを特徴とする請求項１３記載の情報処理装置。
【請求項１５】
前記起動手段および前記ライト制御手段は、更新対象データが、前記第２のフラグがオンに設定されて前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータに対応する前記第２のフラグをオフに設定することを特徴とする請求項１４記載の情報処理装置。
【請求項１６】
前記リード制御手段は、前記第２のフラグがオンに設定されたデータの量が所定量に達した場合、前記起動完了通知の受領前に、前記第２のフラグをオンにする処理を終了することを特徴とする請求項１４または１５記載の情報処理装置。
【請求項１７】
前記フラッシュ制御手段は、キャッシング状態にある未書き込みデータの書き込みを要求するフラッシュ要求を前記ホストシステムから受けた場合に、即応的に、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する未書き込みデータを前記第２の外部記憶装置に書き込むためのライト要求を前記第２の外部記憶装置に対して発行すると共に、前記ライト要求をすべて発行し終えた後、前記第２の外部記憶装置内においてキャッシング状態にある未書き込みデータを書き込ませるためのフラッシュ要求を前記第２の外部記憶装置に対して発行する第１のモードと、何もせずに書き込み完了を前記ホストシステムに通知し、前回のフラッシュ動作時から一定時間が経過した時または前記キャッシュ領域内および前記第１の外部記憶装置上に存在する未書き込みデータのデータ量が所定量に達した時に、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する未書き込みデータを前記第２の外部記憶装置に書き込むためのライト要求を前記第２の外部記憶装置に対して発行すると共に、前記ライト要求をすべて発行し終えた後、前記第２の外部記憶装置内においてキャッシング状態にある未書き込みデータを書き込ませるためのフラッシュ要求を前記第２の外部記憶装置に対して発行する第２のモードとの２つのモードで動作可能であることを特徴とする請求項３記載の情報処理装置。
【請求項１８】
前記ライト制御手段は、前記ライトＦＵＡ要求を受けた場合に、前記キャッシュ領域内へのデータの格納または前記キャッシュ領域内もしくは前記第１の外部記憶装置上のデータの書き換えを行った後、書き込み対象データの書き込み処理を前記第２の外部記憶装置にライトスルー方式で実行させるためのライトＦＵＡ要求を前記第２の外部記憶装置に対して発行することなく、前記ホストシステムに対して書き込み処理の完了を通知するように動作するモードをさらに有することを特徴とする請求項４記載の情報処理装置。
【請求項１９】
メインメモリ、第１の外部記憶装置および第２の外部記憶装置を備える情報処理装置上で動作し、前記第１の外部記憶装置と前記第２の外部記憶装置とを制御し、前記第１の外部記憶装置を前記第２の外部記憶装置のキャッシュとして用いて、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理するドライバであって、
データの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うために前記メインメモリ上に確保されるバッファ領域と前記第１の外部記憶装置および前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段
を具備することを特徴とするドライバ。
【請求項２０】
前記ホストシステムからデータの読み出しが要求されたとき、
（ａ１）読み出し対象データが前記キャッシュ領域内に存在する場合、前記キャッシュ領域内のデータを前記バッファ領域内に格納し、
（ａ２）読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを読み出して前記バッファ領域に格納し、
（ａ３）読み出し対象データが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを前記キャッシュ領域内に読み出し、前記バッファ領域に格納して、前記キャッシュ領域に読み出したデータを前記第１の外部記憶装置に蓄積する
リード制御手段と、
前記ホストシステムからデータの書き込みが要求されたとき、
（ｂ１）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記キャッシュ領域内の書き換え後のデータを前記第１の外部記憶装置に蓄積し、
（ｂ２）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記第１の外部記憶装置上のデータを無効化し、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記キャッシュ領域内の書き換え後のデータを前記第１の外部記憶装置に蓄積し、
（ｂ３）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、書き込み対象データを前記キャッシュ領域に格納して、前記キャッシュ領域に格納したデータを前記第１の外部記憶装置に蓄積する
ライト制御手段と
をさらに具備することを特徴とする請求項１９記載のドライバ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、例えばＳＳＤ（Solid state drive）とＨＤＤ（Hard disk drive）とを搭載し、ＳＳＤをＨＤＤのキャッシュとして用いて、ＨＤＤに対するアクセスの高速化を図るパーソナルコンピュータ等の情報処理装置および同装置上で動作するドライバに関する。
【背景技術】
【０００２】
情報化社会である今日では、日々、大量のデータが取り扱われている。また、データを記憶させる媒体として、大容量で比較的安価なＨＤＤが広く用いられている。大容量で比較的安価である反面、ＨＤＤは、アクセス速度が比較的低速である。
【０００３】
一方、フラッシュメモリは、ＨＤＤと比較して、アクセス速度は高速ではあるが高価であり、例えば複数台のＨＤＤを搭載するファイルサーバ等において、フラッシュメモリが用いられるＳＳＤを、すべてのＨＤＤについて代替として適用しようとすると、大幅なコストアップを招いてしまう。
【０００４】
そこで、特性の異なる複数種のデータ記憶媒体を組み合わせることで、コストアップを最小限に止めつつ、大容量かつアクセス速度が高速なデータ記憶システムを構築するための仕組みが、これまでも種々提案されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−４６９６４号公報
【特許文献２】特開平７−２３０４１１号公報
【特許文献３】特表２００９−５０３７３１号公報
【特許文献４】特開平７−６０９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
例えば、高価・高速という特性を有する第１のデータ記憶媒体と、安価・低速という特性を有する第２のデータ記憶媒体とを組み合わせたデータ記憶システムでは、第１のデータ記憶媒体を第２のデータ記憶媒体のキャッシュとして用いることで、第２のデータ記憶媒体に対するアクセスを外見上高速化することができる。
【０００７】
ところで、このような構成を持つデータ記憶システムでは、第１のデータ記憶媒体に対するアクセスと、第２のデータ記憶媒体に対するアクセスとが、互いに独立して行われているのが一般的である。従って、第１のデータ記憶媒体と第２のデータ記憶媒体との間で必要となるデータの受け渡し等に関しては、例えば高速化や効率化を図るためのさらなる工夫を講ずる余地があった。
【課題を解決するための手段】
【０００８】
実施形態の情報処理装置は、メインメモリと、第１の外部記憶装置と、第２の外部記憶装置と、前記第１の外部記憶装置と前記第２の外部記憶装置とを制御し、前記第１の外部記憶装置を前記第２の外部記憶装置のキャッシュとして用いて、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理するドライバとを具備する。ドライバは、データの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うために前記メインメモリ上に確保されるバッファ領域と前記第１の外部記憶装置および前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段を有する。
【図面の簡単な説明】
【０００９】
【図１】実施形態の情報処理装置のシステム構成を示す図。
【図２】実施形態の情報処理装置上で動作するＨＤＤ／ＳＳＤドライバ（キャッシュドライバ）の動作原理を説明するための概念図。
【図３】実施形態の情報処理装置上に設けられる存在セクタビットマップおよびDirtyセクタビットマップの一例を示す第１の図。
【図４】実施形態の情報処理装置上に設けられる存在セクタビットマップおよびDirtyセクタビットマップの一例を示す第２の図。
【図５】実施形態の情報処理装置上に設けられるDirtyフラグおよびPartialフラグの一例を示す図。
【図６】実施形態の情報処理装置上に設けられるOwnershipフラグの一例を示す図。
【図７】実施形態の情報処理装置上に設けられるライトトレース領域の一例を示す図。
【図８】実施形態の情報処理装置上に設けられるＳＳＤおよびＨＤＤの個体情報および電源投入回数を記録する領域の一例を示す図。
【図９】実施形態の情報処理装置上に設けられるPinフラグの一例を示す図。
【図１０】実施形態の情報処理装置がデータ・マージ時に実行する必要最小分のデータの読み出しを説明するための概念図。
【図１１】実施形態の情報処理装置が実行するセットアソシアティブ方式によるデータの管理を説明するための概念図。
【発明を実施するための形態】
【００１０】
以下、図面を参照して、この発明の一実施形態を説明する。
【００１１】
図１は、この発明の実施形態に係る情報処理装置のシステム構成を示す図である。本実施形態の情報処理装置は、パーソナルコンピュータとして実現されている。
【００１２】
図１に示すように、本情報処理装置は、ＣＰＵ（Central processing unit）１１、ＭＣＨ（Memory controller hub）１２、主メモリ１３、ＩＣＨ（I/o controller hub）１４、ＧＰＵ（Graphics processing unit：表示コントローラ）１５、ビデオメモリ（ＶＲＡＭ）１５Ａ、サウンドコントローラ１６、ＢＩＯＳ−ＲＯＭ（Read only memory）１７、ＨＤＤ１８、ＳＳＤ１９、ＯＤＤ（Optical disc drive）２０、各種周辺機器２１、ＥＥＰＲＯＭ（Electrically erasable programmable ROM）２２、ＥＣ／ＫＢＣ（Embedded controller/keyboard controller）２３等を備えている。
【００１３】
ＣＰＵ１１は、本情報処理装置の動作を制御するプロセッサであり、ＨＤＤ１８やＯＤＤ２０から主メモリ１３にロードされる各種プログラムを実行する。このＣＰＵ１１によって実行される各種プログラムの中には、リソース管理を司るＯＳ１１０や、当該ＯＳ１１０の配下で動作する、ＨＤＤ／ＳＳＤドライバ（キャッシュドライバ）１２０および各種アプリケーションプログラム１３０等が存在する。ＨＤＤ／ＳＳＤドライバ１２０は、ＨＤＤ１８とＳＳＤ１９とを制御するプログラムである。本情報処理装置は、ＳＳＤ１９の一部または全部をＨＤＤ１８のキャッシュとして利用することで、ＨＤＤ１８に対するアクセスの高速化を図る。ＨＤＤ／ＳＳＤドライバ１２０は、そのための仕組みを備えたものであり、以下、その原理について詳述する。
【００１４】
なお、ＳＳＤ１９の一部をＨＤＤ１８のキャッシュとして利用する場合、ＳＳＤ１９のその他の部分は、ＳＳＤ１９に対してコマンドを発行することで、例えば各種アプリケーションプログラム１３０等から利用可能なデータ領域として割り当てられる。ＳＳＤ１９の全部をＨＤＤ１８のキャッシュとして利用する場合、ＳＳＤ１９は、その存在自体が例えば各種アプリケーションプログラム１３０等には秘匿される。
【００１５】
また、ＣＰＵ１１は、ＢＩＯＳ−ＲＯＭ１７に格納されたＢＩＯＳも実行する。ＢＩＯＳは、ハードウェア制御のためのプログラムである。以下では、ＢＩＯＳ−ＲＯＭ１７の格納物であるＢＩＯＳ自体についてもＢＩＯＳ１７と表記することがある。
【００１６】
ＭＣＨ１２は、ＣＰＵ１１とＩＣＨ１４との間を接続するブリッジとして動作すると共に、主メモリ１３をアクセス制御するメモリコントローラとして動作する。また、ＭＣＨ１２は、ＧＰＵ１５との通信を実行する機能を有している。
【００１７】
ＧＰＵ１５は、本情報処理装置に組み込まれ、または、外部接続される表示装置を制御する表示コントローラである。ＧＰＵ１５は、ＶＲＡＭ１５Ａを有し、また、各種プログラムが表示しようとする画像をＣＰＵ１１に代わって描画するアクセラレータを搭載している。
【００１８】
ＩＣＨ１４は、ＨＤＤ１８、ＳＳＤ１９およびＯＤＤ１９を制御するためのＩＤＥ（Integrated device electronics）コントローラを内蔵する。ＩＣＨ１４は、ＰＣＩ（Peripheral component interconnect）バスに接続された各種周辺機器２１の制御も行う。また、ＩＣＨ１４は、サウンドコントローラ１６との通信機能も有している。
【００１９】
サウンドコントローラ１６は音源デバイスであり、各種プログラムが再生対象とするオーディオデータを、本情報処理装置に組み込まれ、または、外部接続されるスピーカ等に出力する。
【００２０】
ＥＥＰＲＯＭ２２は、例えば本情報処理装置の個体情報や環境設定情報などを格納するためのメモリデバイスである。そして、ＥＣ／ＫＢＣ２３は、電力管理を行うためのエンベデッドコントローラと、キーボードやポインティングデバイス等の操作によるデータ入力を制御するためのキーボードコントローラとが集積された１チップＭＰＵ（Micro processing unit）である。
【００２１】
図２は、以上のようなシステム構成を有する本情報処理装置上で動作するＨＤＤ／ＳＳＤドライバ１２０の動作原理を説明するための概念図である。
【００２２】
図２中、ユーザバッファ２５０は、例えば各種アプリケーションプログラム１３０がＨＤＤ１８にデータを書き込み、または、ＨＤＤ１８からデータを読み出すためにＯＳ１１０により主メモリ１３上に確保される領域であり、ＨＤＤ／ＳＳＤドライバ１２０は、このユーザバッファ２５０内の書き込み対象データをＨＤＤ１８に書き込み、または、ＨＤＤ１８から読み出した読み出し対象データをユーザバッファ２５０内に格納する処理を実行する。即ち、ユーザバッファ２５０は、上位システム（ホストシステム）とＨＤＤ／ＳＳＤドライバ１２０との間でデータの受け渡しを行うために主メモリ１３上に確保される領域である。
【００２３】
前述したように、本情報処理装置は、ＳＳＤ１９をＨＤＤ１８のキャッシュとして利用することで、ＨＤＤ１８に対するアクセスの高速化を図る。そこで、ＨＤＤ１８とＳＳＤ１９とを制御するＨＤＤ／ＳＳＤドライバ１２０は、主メモリ１３上のユーザバッファ２５０とＨＤＤ１８およびＳＳＤ１９との間に介在させるＬ１キャッシュ領域２０１を主メモリ１３上に確保する。なお、ここでは、ＨＤＤ１８のキャッシュとして利用するデータ記憶媒体としてＳＳＤ１９を例示しているが、これに限定するものではなく、不揮発性キャッシュ（ＮＶＣ：non-volatile chache）として他のデータ記憶媒体を適用することは当然に可能である。
【００２４】
ＨＤＤ／ＳＳＤドライバ１２０は、この主メモリ１３上に確保したＬ１キャッシュ領域２０１を、例えば６４Ｋバイトといったブロック単位で管理する。また、ＨＤＤ／ＳＳＤドライバ１２０は、ホストシステムからのＨＤＤ１８へのデータの書き込み要求またはＨＤＤ１８からのデータの読み出し要求を、このブロック単位に分割し、ＨＤＤ１８やＳＳＤ１９に対して、（ブロック単位に分割後の）データの書き込み要求またはデータの読み出し要求を必要に応じて発行することによって処理する。そして、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１上および（ＨＤＤ１８のキャッシュとして利用される）ＳＳＤ１９上のデータを管理するために、管理データ領域２０２を主メモリ１３上に確保する。
【００２５】
（データの読み出し処理）
まず、ホストシステムからデータの読み出しを要求された場合のＨＤＤ／ＳＳＤドライバ１２０の基本動作を説明する。
【００２６】
読み出し対象データのすべてがＬ１キャッシュ領域２０１に存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１内のデータをユーザバッファ２５０に格納する（図２の（３））。そして、ＨＤＤ／ＳＳＤドライバ１２０は、ホストシステムに対して、読み出し処理の完了を通知する。
【００２７】
読み出し対象データの一部がＬ１キャッシュ領域２０１に存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１に存在しないその他のデータをＨＤＤ１８からＬ１キャッシュ領域２０１の該当箇所に読み出し（図２の（５））、要求分のデータをユーザバッファ２５０に格納する（図２の（３））。ここで、ＨＤＤ／ＳＳＤドライバ１２０は、ホストシステムに対して、読み出し処理の完了を通知し、この通知後、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、上記要求分のデータを蓄積する（図２の（８））。ユーザバッファ２５０にデータを格納した時点で、つまり当該データをＳＳＤ１９に蓄積する前に、ホストシステムに対し、読み出し処理の完了を通知することで、ホストシステムは、次の処理に進むことができる。また、ＳＳＤ１９上にスペースを確保する場合、ＨＤＤ／ＳＳＤドライバ１２０は、未使用、またはＨＤＤへの未書き込みデータが存在しない最も最近アクセスされていない領域を使用する。以下、ＳＳＤ１９上にスペースを確保する場合も同様である。
【００２８】
読み出し対象データがＬ１キャッシュ領域２０１に存在しておらず、そのすべてがＳＳＤ１９に存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上のデータを読み出してユーザバッファ２５０に格納し（図２の（９））、ホストシステムに対して、読み出し処理の完了を通知する。
【００２９】
読み出し対象データがＬ１キャッシュ領域２０１に存在しておらず、その一部がＳＳＤ１９に存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域上にスペースを確保し、このＬ１キャッシュ領域２０１上に確保したスペースに、ＳＳＤ１９上の一部のデータとＨＤＤ１８上のその他のデータとを読み出す（図２の（５），（７））。Ｌ１キャッシュ領域上にスペースを確保する場合、ＨＤＤ／ＳＳＤドライバ１２０は、未使用、またはＳＳＤへの蓄積が完了していないＨＤＤへの未書き込みデータが存在しない最も最近アクセスされていない領域を使用する。以下、Ｌ１キャッシュ領域２０１上にスペースを確保する場合も同様である。ＨＤＤ／ＳＳＤドライバ１２０は、このＬ１キャッシュ領域２０１上に確保したスペースに読み出したデータ、つまり要求分のデータをユーザバッファ２５０に格納する（図２の（３））。ここで、ＨＤＤ／ＳＳＤドライバ１２０は、ホストシステムに対して、読み出し処理の完了を通知し、この通知後、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、上記要求分のデータを蓄積する（図２の（８））。
【００３０】
そして、読み出し対象データがＬ１キャッシュ領域２０１およびＳＳＤ１９のいずれにも存在しない場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域上にスペースを確保し、このＬ１キャッシュ領域２０１上に確保したスペースに、ＨＤＤ１８上のデータを読み出す（図２の（５））。ＨＤＤ／ＳＳＤドライバ１２０は、このＬ１キャッシュ領域２０１上に確保したスペースに読み出したデータ、つまり要求分のデータをユーザバッファ２５０に格納し（図２の（３））、ホストシステムに対して、読み出し処理の完了を通知し、この通知後、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、上記要求分のデータを蓄積する（図２の（８））。
【００３１】
（データの書き込み処理）
次に、ホストシステムからデータの書き込みを要求された場合のＨＤＤ／ＳＳＤドライバ１２０の基本動作を説明する。
【００３２】
更新対象となるデータがＬ１キャッシュ領域２０１のみに存在する場合、つまりＬ１キャッシュ領域２０１には存在するがＳＳＤ１９には存在しない場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１のデータを書き換え（図２の（４））、ホストシステムに対して、書き込み処理の完了を通知し、この通知後、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、上記書き換え後のデータを蓄積する（図２の（８））。
【００３３】
更新対象となるデータがＬ１キャッシュ領域２０１およびＳＳＤ１９の両方に存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上のデータを無効化し、Ｌ１キャッシュ領域２０１のデータを書き換えて（図２の（４））、ホストシステムに対し、書き込み処理の完了を通知する。この通知後、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、上記書き換え後のデータを改めて蓄積する（図２の（８））。
【００３４】
更新対象となるデータがＳＳＤ１９のみに存在する場合、つまりＬ１キャッシュ領域２０１には存在しないがＳＳＤ１９には存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上のデータを書き換えて（図２の（１０））、ホストシステムに対し、書き込み処理の完了を通知する。
【００３５】
そして、更新対象となるデータがＬ１キャッシュ領域２０１およびＳＳＤ１９のいずれにも存在しない場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１上にスペースを確保し、このＬ１キャッシュ領域２０１上に確保したスペースに、書き込み対象データを格納する（図２の（４））。ここで、ＨＤＤ／ＳＳＤドライバ１２０は、ホストシステムに対して、書き込み処理の完了を通知し、この通知後、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、Ｌ１キャッシュ領域２０１に格納した書き込み対象データを蓄積する（図２の（８））。
【００３６】
（データのフラッシュ処理）
また、ＨＤＤ／ＳＳＤドライバ１２０は、ＨＤＤ１８への未書き込みデータをＨＤＤに書き出すフラッシュ動作を行う。ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１上の未書き込みデータをＨＤＤ１８に書き込み（図２の（６））、ＳＳＤ１９上の未書き込みデータについては、Ｌ１キャッシュ領域２０１で、ＨＤＤ１８への書き込みを実行する（図２の（７），（６））。
【００３７】
このように、本情報処理装置は、ＳＳＤ１９をＨＤＤ１８のキャッシュとして利用することで、ＨＤＤ１８に対するアクセスの高速化を図るにあたって、ＨＤＤ１８とＳＳＤ１９とを制御するＨＤＤ／ＳＳＤドライバ１２０が、主メモリ１３上のユーザバッファ２５０とＨＤＤ１８およびＳＳＤ１９との間に介在させるＬ１キャッシュ領域２０１を主メモリ１３上に確保し、かつ、その管理をブロック単位で実行することにより、ＨＤＤ１８とＳＳＤ１９との間で必要となるデータの受け渡し等に関して、さらなる高速化や効率化を図ることを実現する（図２の（３）〜（８））。
【００３８】
ところで、ホストシステムからは、ライトスルー方式で書き込み処理を実行することを要求するWrite FUA（Force unit access）要求が発行されることがある。このWrite FUA要求を受けた場合、ＨＤＤ／ＳＳＤドライバ１２０は、前述した通常の書き込み処理に加えて、ＨＤＤ１８に対しても、当該書き込み対象データの書き込み処理をライトスルー方式で実行させるべく、Write FUA要求を発行する。そして、この場合は、ＨＤＤ１８から書き込み処理の完了の通知を受けた後、ホストシステムに対して書き込み処理の完了を通知するようにする。
【００３９】
なお、上記（データの読み出し処理）におけるＨＤＤ／ＳＳＤドライバ１２０の基本動作の説明では、読み出し対象データがＬ１キャッシュ領域２０１に存在しておらず、そのすべてがＳＳＤ１９に存在する場合、ＳＳＤ１９上のデータを読み出してユーザバッファ２５０に格納するものとした（図２の（９））。この動作については、Ｌ１キャッシュ領域２０１経由とすることも可能である。即ち、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域上にスペースを確保し、このＬ１キャッシュ領域２０１上に確保したスペースに、ＳＳＤ１９上のデータを読み出し、かつ、このＬ１キャッシュ領域２０１上に読み出したデータをユーザバッファ２５０に格納する（図２の（７），（３））。この場合、再度同じデータの読み出しが要求された際、ＳＳＤ１９よりも性能の高い主メモリ１３上のＬ１キャッシュ領域２０１によって対処することができる。
【００４０】
さらに、（読み出し対象データがＬ１キャッシュ領域２０１に存在しておらず、そのすべてがＳＳＤ１９に存在する場合において）ＳＳＤ１９上のデータを読み出してユーザバッファ２５０に格納する場合、Ｌ１キャッシュ領域２０１経由とするか否かをパラメータ化してＨＤＤ／ＳＳＤドライバ１２０に与えられるようにしても良い。そうすれば、単一のドライバ、つまりＨＤＤ／ＳＳＤドライバ１２０のみで、Ｌ１キャッシュ領域２０１を経由させない方（図２の（９））が有利なシステムと、Ｌ１キャッシュ領域２０１を経由させる方（図２の（７），（３））が有利なシステムとの両方に対応できる。
【００４１】
また、上記（データの書き込み処理）におけるＨＤＤ／ＳＳＤドライバ１２０の基本動作の説明では、Ｌ１キャッシュ領域２０１やＳＳＤ１９への書き込み対象データの蓄積をもってホストシステムに対して書き込み処理の完了を通知するものとした。ここでは、この動作モードをライトバック（ＷＢ）モードと称する。このＷＢモードに加えて、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１やＳＳＤ１９への書き込み対象データの蓄積と共に、当該書き込み対象データのＨＤＤ１８への書き込みを実行し、この書き込みが完了したらホストシステムに対して書き込み処理の完了を通知するように動作する動作モード（ライトスルー（ＷＴ）モード）でも動作可能とし、ＷＢモードおよびＷＴモードのいずれで動作するのかをパラメータ化してＨＤＤ／ＳＳＤドライバ１２０に与えられるようにしても良い。以下に、ＷＴモード時における、ホストシステムからデータの書き込みを要求された場合のＨＤＤ／ＳＳＤドライバ１２０の基本動作を説明する。
【００４２】
更新対象となるデータがＬ１キャッシュ領域２０１のみに存在する場合、つまりＬ１キャッシュ領域２０１には存在するがＳＳＤ１９には存在しない場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１とＨＤＤ１８とについてデータの書き換えを行い（図２の（４），（２））、これらの両方が完了したら、ホストシステムに対し、書き込み処理の完了を通知する。また、ＨＤＤ／ＳＳＤドライバ１２０は、ＨＤＤ１８上のデータの書き換えが完了したら、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、Ｌ１キャッシュ領域２０１に格納した書き込み対象データを蓄積する（図２の（８））。
【００４３】
更新対象となるデータがＬ１キャッシュ領域２０１およびＳＳＤ１９の両方に存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１、ＳＳＤ１９およびＨＤＤ１８のそれぞれについてデータの書き換えを行い（図２の（４），（１０），（２））、これらのすべてが完了したら、ホストシステムに対し、書き込み処理の完了を通知する。ＳＳＤ１９上のデータの書き換えは、ＳＳＤ１９上のデータを無効化し、Ｌ１キャッシュ領域２０１のデータを書き換えた後（図２の（４））、ＳＳＤ１９上にスペースを確保し、このＳＳＤ１９上に確保したスペースに、上記書き換え後のデータを改めて蓄積する（図２の（８））手順としても良い。
【００４４】
更新対象となるデータがＳＳＤ１９のみに存在する場合、つまりＬ１キャッシュ領域２０１には存在しないがＳＳＤ１９には存在する場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９とＨＤＤ１８とについてデータの書き換えを行い（図２の（１０），（２））、これらの両方が完了したら、ホストシステムに対し、書き込み処理の完了を通知する。
【００４５】
そして、更新対象となるデータがＬ１キャッシュ領域２０１およびＳＳＤ１９のいずれにも存在しない場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＨＤＤ１８上のデータの書き換えを行い（図２の（２））、その完了後、ホストシステムに対して、書き込み処理の完了を通知する。なお、Ｌ１キャッシュ領域２０１およびＳＳＤ１９の両方にミスヒットした場合におけるＨＤＤ１８上のデータの書き換えには、既存データの書き換えのほか、新規データの書き込み（無効データを有効データに書き換える）が含まれる。
【００４６】
このように、ＨＤＤ／ＳＳＤドライバ１２０を、パラメータによってＷＢモードとＷＴモードとの２つの動作モードで動作可能とすることにより、単一のドライバ、つまりＨＤＤ／ＳＳＤドライバ１２０のみで、ＷＢモードが有利なシステムと、ＷＴモードが有利なシステムとの両方に対応できる。
【００４７】
また、ＷＴモード時、ＨＤＤ／ＳＳＤドライバ１２０は、さらに、更新対象となるデータがＳＳＤ１９に存在する場合、ＳＳＤ１９上のデータを書き換えることに代えて、ＳＳＤ１９上のデータを無効化するようにしても良い。例えば、この動作モードをＷＩモードと称することととし、これをパラメータによって選択可能とすれば、ＨＤＤ１８よりも書き換え性能が低いＳＳＤ１９を搭載するシステムの場合に、より有利な動作をＨＤＤ／ＳＳＤドライバ１２０に行わせることが可能となる。
【００４８】
（データの管理処理）
ＨＤＤ／ＳＳＤドライバ１２０は、主メモリ１３上に確保したＬ１キャッシュ領域２０１をブロック単位で管理し、ＨＤＤ１８へのデータの書き込みやＨＤＤ１８からのデータの読み出しを、このブロック単位で処理することを先に述べた。そこで、次に、ＨＤＤ／ＳＳＤドライバ１２０が実行するデータの管理処理について説明する。
【００４９】
ＷＢモードの場合、ホストシステムからのデータの書き込み要求は、ブロック全体とは限らない。例えば１ブロックが１２８セクタで構成されるとすると、この１２８セクタ中のどのセクタに有効なデータが存在するのか、また、どのセクタにＨＤＤ１８への未書き込みデータ（Dirty）が存在するのか、を判別するための仕組みが必要になる。ＨＤＤ／ＳＳＤドライバ１２０は、この問題に対応するために、主メモリ１３上に確保した管理データ領域２０２で管理する管理データとして、図３に示す存在セクタビットマップおよびDirtyセクタビットマップを、主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９（ＨＤＤ１８のキャッシュとして利用される部分）のブロック毎に設ける。
【００５０】
存在セクタビットマップは、対応するブロック内のどのセクタが有効であるかを記憶する管理データであり、Dirtyセクタビットマップは、対応するブロック内のどのセクタがDirtyであるかを記憶する管理データである。これら２つのセクタビットマップは、図４に示すように、ブロック内の各セクタの状態を１ビットで記憶する。１ブロックが１２８セクタで構成されている場合、ブロック毎に設けられる各セクタビットマップは、１２８ビット、つまり１６バイトのデータとなる。
【００５１】
これら２つのセクタビットマップを管理することにより、ＨＤＤ／ＳＳＤドライバ１２０は、主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９を利用しつつ、ＨＤＤ１８へのデータの書き込みやＨＤＤ１８からのデータの読み出しを適切に実行することができる。
【００５２】
ところで、ブロック内のどのセクタがDirtyであるかを判別するために、上記Dirtyセクタビットマップを設けると、前述したように、（Ｌ１キャッシュ領域２０１のブロック数＋ＳＳＤ１９のブロック数）×１６バイトという多くのメモリ容量を必要とする。そこで、ＨＤＤ／ＳＳＤドライバ１２０は、このDirtyセクタビットマップに代えて、図５に示す、ブロック内にＨＤＤ１８への未書き込みデータ（Dirty）が存在するか否かを示すDirtyフラグと、ブロック内に存在する未書き込みデータ（Dirty）が部分的なものか否かを示すPartialフラグとを、主メモリ１３上に確保した管理データ領域２０２で管理する管理データとして、主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９（ＨＤＤ１８のキャッシュとして利用される部分）のブロック毎に設けるようにしても良い。
【００５３】
Dirtyフラグは、対応するブロック内にＨＤＤへの未書き込みデータ（Dirty）が存在するときにTrue、存在しないときにFalseとなるフラグである。Partialフラグは、対応するブロック内にすべてのセクタが存在するときにFalse、一部のセクタが存在するときにTrueとなるフラグである。PartialフラグがFalseのときには、全セクタが存在するので、存在セクタビットマップを参照することも不要とすることができる。
【００５４】
（不揮発動作）
次に、ＳＳＤ１９に蓄積したデータを本情報処理装置の再起動後にも使用可能とするためのＨＤＤ／ＳＳＤドライバ１２０による不揮発性動作について説明する。この不揮発性動作は、ホストシステムが、ＨＤＤ／ＳＳＤドライバ１２０に対してシャットダウン通知を送信する機能を有することを前提とする。また、シャットダウン通知後にもデータの書き込み要求や読み出し要求がホストシステムから発行されても良いが、これらすべての要求は、ＨＤＤ／ＳＳＤドライバ１２０に対して発行され、ＨＤＤ／ＳＳＤドライバ１２０を経由しない書き込み処理は発生しないことを前提とする。これらの前提の下、不揮発性動作を行う場合、ＨＤＤ／ＳＳＤドライバ１２０は、主メモリ１３上の管理データ領域２０２で管理する管理データを保存するための管理データ保存領域１９１をＳＳＤ１９上に設ける。
【００５５】
ＨＤＤ／ＳＳＤドライバ１２０は、シャットダウン通知を受けた後は、ＷＢモードであってもＷＴモード時の動作を行い、フラッシュ動作を開始する。これにより、ＨＤＤ／ＳＳＤドライバ１２０は、当該フラッシュ動作が完了した時点において、ＨＤＤ１８への未書き込みデータが主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９のいずれにも存在しないことを保証する。
【００５６】
フラッシュ動作が完了し、すべての書き込み／読み出しを完了したら、ＨＤＤ／ＳＳＤドライバ１２０は、主メモリ１３上の管理データ領域２０２内の管理データをＳＳＤ１９上の管理データ保存領域１９１に保存する。この時、ＨＤＤ／ＳＳＤドライバ１２０は、存在セクタビットマップは書き出す必要があるが、Dirtyなデータは存在しないため、DirtyセクタビットマップまたはDirtyフラグ・Partialフラグは書き出す必要はない。
【００５７】
管理データを主メモリ１３上の管理データ領域２０２からＳＳＤ１９上の管理データ保存領域１９１に書き出した後は、ＨＤＤ／ＳＳＤドライバ１２０は、当該管理データの内容を変更しないよう、かつ、ＨＤＤ１８とＳＳＤ１９との間でデータの矛盾が発生しないように動作する。即ち、ＳＳＤ１９に更新対象データが存在する書き込み要求は、ＨＤＤ１８とＳＳＤ１９との両方において書き換えを行い、また、読み出し要求に対するＳＳＤ１９への読み出し対象データの蓄積（学習）は行わないように動作する。
【００５８】
本情報処理装置の再起動後、ロードされた際、ＨＤＤ／ＳＳＤドライバ１２０は、管理データを初期化せず、ＳＳＤ１９上の管理データ保存領域１９１に保存された管理データを主メモリ１３上に確保した管理データ領域２０２内にロードした後、（Ｌ１キャッシュ領域２０１が確保される主メモリ１３は揮発性であるので）Ｌ１キャッシュ領域２０１に関する管理データのみを初期化する。
【００５９】
以上の不揮発動作によって、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９に蓄積したデータを本情報処理装置の再起動後にも使用可能とし、また、シャットダウン時にＨＤＤ１８への未書き込みデータが存在しないことを保証する。ＨＤＤ／ＳＳＤドライバ１２０が動作する前に、例えばＢＩＯＳ１７などの（ＨＤＤ１８へのアクセスが可能な）他のモジュールが動作するシステムが一般的であり、ＨＤＤ１８への未書き込みデータが存在する可能性を残すと、ＢＩＯＳ１７等にもキャッシュ（主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９）の制御機能が必要となる。これに対し、上記不揮発動作によってＨＤＤ１８への未書き込みデータが存在しないことをＨＤＤ／ＳＳＤドライバ１２０が保証する本情報処理装置では、ＢＩＯＳ１７等にキャッシュの制御機能を持たせることを不要とすることができる。
【００６０】
（不揮発動作のデータ保証）
次に、ＨＤＤ／ＳＳＤドライバ１２０が備える、ＳＳＤ１９に蓄積したデータがＨＤＤ１９と一貫性を有するか否かをロード時にチェックする機能について説明する。この機能によって一貫性が保証できない場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９に蓄積したデータを破棄する揮発動作に切り替える。
【００６１】
この機能を実現するために、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上の管理データ保存領域１９１に、図６に示すOwnershipフラグを設ける。Ownershipフラグは、ＨＤＤ／ＳＳＤドライバ１２０が動作中であることを示す"Driver"と、ドライバが非動作中であることを示す"None"のいずれかの値を持つ。
【００６２】
ＨＤＤ／ＳＳＤドライバ１２０は、ロード時、このOwnershipフラグをチェックし、"None"であれば、データの一貫性を保証できると判断して、管理データをＳＳＤ１９上の管理データ保存領域１９１から主メモリ１３上の管理データ領域２０２にロードする。一方、"None"でなければ、ＨＤＤ／ＳＳＤドライバ１２０は、データの一貫性を保証できないと判断して、管理データを初期化し、ＳＳＤ１９を揮発（無効化）させる。
【００６３】
このOwnershipフラグの更新規則を説明すると、ＨＤＤ／ＳＳＤドライバ１２０は、キャッシュ動作を開始する前に、Ownershipフラグを"Driver"に書き換える。また、上記不揮発動作におけるフラッシュ動作完了後の管理データ保存時に、ＨＤＤ／ＳＳＤドライバ１２０は、Ownershipフラグを"None"に書き換える。
【００６４】
データの一貫性を保証できない状況としては、動作中の電源断、クラッシュ、ハングアップなどが考えられる。これに対し、ＨＤＤ／ＳＳＤドライバ１２０が、上記の通り、Ownershipフラグを使って、データの一貫性を保証できる場合のみ、ＳＳＤ１９に蓄積したデータを使用するように動作することによって、データの信頼性を向上させることができる。
【００６５】
なお、以上では、ＨＤＤ／ＳＳＤドライバ１２０のみによって、不揮発動作のデータ保証を実現する例を説明したが、次に、ＨＤＤ／ＳＳＤドライバ１２０が動作する前にＨＤＤ１８へのアクセスが可能な他のモジュール（ここでは、ＢＩＯＳ１７とする）にも最小限のキャッシュ制御機能を持たせ、当該他のモジュールによってＨＤＤ１８への書き込みが行われても、不揮発動作を実現可能とする例を説明する。
【００６６】
この場合、上記Ownershipフラグの値として、ＢＩＯＳ１７が動作中であることを示す"BIOS"を追加する。これに伴い、"None"は、ＢＩＯＳ１７およびＨＤＤ／ＳＳＤドライバ１２０のいずれも非動作中であることを示すものとする。また、ＳＳＤ１９上の管理データ保存領域１９１内には、ライトトレース領域が確保される。
【００６７】
ＢＩＯＳ１７は、起動時、Ownershipフラグをチェックし、"None"であれば、データの一貫性を保証できると判断して、Ownershipフラグを"BIOS"に書き換える。"None"でなければ、ＢＩＯＳ１７は、データの一貫性を保証できないと判断して、Ownershipフラグを放置する。
【００６８】
データの一貫性を保証できると判断し、Ownershipフラグを"BIOS"に変更した場合、ＢＩＯＳ１７は、ＨＤＤ１８への書き込みを行った際、図７に示すように、そのＨＤＤ１８へのライトコマンドを、ブロック単位でＳＳＤ１９上の管理データ保存領域１９１内のライトトレース領域に蓄積する。ブロック単位とすることで、要求長を不要にできる。つまり、ブロック単位のＬＢＡ（Logical block address）とすることで、トレースデータ量を減らすことを実現する。ライトトレース領域がオーバーフローした場合、ＢＩＯＳ１７は、ライトコマンドの蓄積を終了し、Ownershipフラグを"None"に書き換える。
【００６９】
一方、ＨＤＤ／ＳＳＤドライバ１２０は、ロード時、Ownershipフラグをチェックし、"BIOS"であれば、データの一貫性を保証できると判断し、管理データをＳＳＤ１９上の管理データ保存領域１９１から主メモリ１３上の管理データ領域２０２にロードする。さらに、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上の管理データ保存領域１９１内のライトトレース領域を参照し、更新対象データがＳＳＤ１９に存在したならば、当該データを無効化する。一方、"BIOS"でなければ、ＨＤＤ／ＳＳＤドライバ１２０は、データの一貫性を保証できないと判断して、管理データを初期化し、ＳＳＤ１９を揮発（無効化）させる。
【００７０】
そして、ＨＤＤ／ＳＳＤドライバ１２０は、上記不揮発動作におけるフラッシュ動作完了後の管理データ保存時に、Ownershipフラグを"None"に書き換える。
【００７１】
このように、例えばＢＩＯＳ１７など、ＨＤＤ／ＳＳＤドライバ１２０が動作する前にＨＤＤ１８へのアクセスが可能な他のモジュールに、最小限の機能を追加するだけで、当該他のモジュールによるＨＤＤ１８への書き込みが発生しても、不揮発動作を実現することができる。
【００７２】
続いて、例えばＯＤＤ２０にセットされたＣＤ−ＲＯＭからのブートによりＨＤＤ１８のデータを書き換えるといった、ＨＤＤ／ＳＳＤドライバ１２０を経由しないＨＤＤ１８へのデータの書き込みが発生した場合や、ＨＤＤ１８またはＳＳＤ１９が別のものと交換された場合、あるいは、ＨＤＤ１８またはＳＳＤ１９が一旦本情報処理装置から取り外されて他の情報処理装置上でデータ更新が行われた後、再び本情報処理装置に取り付けられた場合など、データの一貫性を保証できない状況下において、データの一貫性を保証できないと適切に判断することを可能とするためにＨＤＤ／ＳＳＤドライバ１２０が備える機能について説明する。
【００７３】
ここでは、本情報処理装置に適用されるＨＤＤ１８およびＳＤＤ１９が、他の個体と区別可能な情報（以下、個体情報と称する）を保持し、要求に応じて提供する機能と、電源投入回数を保持し、要求に応じて提供する機能とを有していることを前提とする。また、ＨＤＤ／ＳＳＤドライバ１２０を経由しないデータ書き込みの発生時には、電源投入回数が更新されることを前提とする。さらに、ＨＤＤ１８は複数を対象とすることができること（複数のＨＤＤ１８を搭載できること）を前提とする。
【００７４】
この機能を実現するために、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上の管理データ保存領域１９１に、図８に示す、ＳＳＤ１９およびＨＤＤ１８の個体情報および電源投入回数を記録する領域を設ける。
【００７５】
ＨＤＤ／ＳＳＤドライバ１２０は、ロード時、ＳＳＤ１９およびＨＤＤ１８から個体情報および電源投入回数を取得し、ＳＳＤ１９上の管理データ保存領域１９１に記録されたＳＳＤ１９およびＨＤＤ１８の個体情報および電源投入回数と比較してチェックする。ＳＳＤ１９から取得した個体情報がＳＳＤ１９上の管理データ保存領域１９１に記録された個体情報と異なるとき、または、ＳＳＤ１９上の管理データ保存領域１９１に記録された電源投入回数がＳＳＤ１９から取得した（現在の）電源投入回数よりも１だけ小さい値と等しくないとき、ＨＤＤ／ＳＳＤドライバ１２０は、データの一貫性を保証できないと判断して、管理データを初期化し、ＳＳＤ１９を揮発（無効化）させる。
【００７６】
また、ＨＤＤ１８から取得した個体情報がＳＳＤ１９上の管理データ保存領域１９１に記録された個体情報と異なるとき、または、ＳＳＤ１９上の管理データ保存領域１９１に記録された電源投入回数がＨＤＤ１８から取得した（現在の）電源投入回数よりも１だけ小さい値と等しくないとき、ＨＤＤ／ＳＳＤドライバ１２０は、このＨＤＤ１８については、データの一貫性を保証できないと判断して、当該ＨＤＤ１８に関する管理データを初期化すると共に、ＳＳＤ１９上の当該ＨＤＤ１８に関するデータを無効化する。
【００７７】
なお、ＨＤＤ／ＳＳＤドライバ１２０は、上記不揮発動作におけるフラッシュ動作完了後の管理データ保存時に、ＳＳＤ１９およびＨＤＤ１８の（現在の）電源投入回数を、ＳＳＤ１９上の管理データ保存領域１９１に書き出す。
【００７８】
以上により、上記データの一貫性を保証できない種々の状況下において、データの一貫性を保証できないと適切に判断することが可能となる。
【００７９】
（ＢＩＯＳによるキャッシュ制御）
次に、ＨＤＤ／ＳＳＤドライバ１２０に加えて、ＢＩＯＳ１７も、ＳＳＤ１９上に蓄積したデータを活用する例を説明する。
【００８０】
ＢＩＯＳ１７は、起動時、データの一貫性をチェックするために、上記Ownershipフラグを使ったチェックに加えて、ＨＤＤ／ＳＳＤドライバ１２０と同様に、ＳＳＤ１９およびＨＤＤ１８の個体情報および電源投入回数を使ったチェックを実行する。一貫性を保証できると判断した場合、ＨＤＤ／ＳＳＤドライバ１２０は、Ownershipフラグを"BIOS"に書き換え、また、一貫性を保証できないと判断した場合には、Ownershipフラグを放置する。
【００８１】
データの読み出しについて、ＢＩＯＳ１７は、一貫性を保証できると判断した場合、読み出し対象データがすべてＳＳＤ１９上に存在するならば、ＳＳＤ１９からの読み出しを実行する。それ以外、つまり一部がＳＳＤ１９上に存在するとき、または、ＳＳＤ１９上に存在しないとき、ＢＩＯＳ１７は、ＨＤＤ１８からの読み出しを実行する。一貫性を保証できないと判断した場合には、ＢＩＯＳ１７は、常に、ＨＤＤ１８からの読み出しを実行する。
【００８２】
データの書き込みについては、ＢＩＯＳ１７は、常に、ＨＤＤ１８への書き込みを実行する。そして、一貫性を保証できると判断した場合、ＢＩＯＳ１７は、更新対象データがＳＳＤ１９上に存在するならば、当該ＳＳＤ１９上のデータを無効化する。
【００８３】
なお、ＢＩＯＳ１７が上記の動作を実行する本ケースでは、図７に示したライトトレースをＳＳＤ１９上の管理データ保存領域１９１内に記録することは不要となる。
【００８４】
このように、ＢＩＯＳ１７に簡単な機能を追加するだけで、ＢＩＯＳ１７においても、ＳＳＤ１９に蓄積したデータを活用でき、起動時間の短縮を図ることができる。なお、データの書き込み時、更新対象データがＳＳＤ１９上に存在した場合、ＨＤＤ１８とＳＳＤ１９との両方に書き込みを行うようにすることも可能である。一般的に、ＢＩＯＳ１７では、ＨＤＤ１８およびＳＳＤ１９への書き込みについて並列動作できないので、このようにすることは性能的には不利になるが、並列動作可能なモジュールの場合であれば、ＨＤＤ１８とＳＳＤ１９との両方に書き込みを行うようにしても良い。
【００８５】
ところで、ＢＩＯＳ１７でもＳＳＤ１９上に蓄積したデータを活用する場合、読み出し対象データがすべてＳＳＤ１９上に存在するか否かを判別するために、ＢＩＯＳ１７が存在セクタビットマップを参照しなければならなくなる。ＢＩＯＳ１７に存在セクタビットマップを参照させるのは性能的に不利になるので、続いて、ＢＩＯＳ１７が存在セクタビットマップを参照することなく、読み出し対象データがすべてＳＳＤ１９上に存在するか否かを判別することを可能とする仕組みについて説明する。
【００８６】
ＨＤＤ／ＳＳＤドライバ１２０は、上記不揮発動作におけるフラッシュ動作完了後の管理データ保存時に、PartialフラグがTrue（ブロック内の一部のセクタが存在する）のＳＳＤ１９のブロックを予め無効化する。これにより、シャットダウン後は、部分的に有効データが存在するブロック（Partialブロック）がＳＳＤ１９上から排除された状態となり、読み出し対象データがすべてＳＳＤ１９上に存在するか否かの判別を容易にすることを実現する。また、シャットダウン時にPartialブロックが排除されるので、存在セクタビットマップの書き出しを不要とすることができる。
【００８７】
ところで、以上のように、上記不揮発動作におけるフラッシュ動作完了後の管理データ保存時に、Partialブロックを無効化すると、当該管理データ保存後の読み出しに関するＳＳＤ１９のヒット率が低下する。そこで、続いて、管理データ保存後のヒット率を低下させずに、読み出し対象データがすべてＳＳＤ１９上に存在するか否かの判別をＢＩＯＳ１７が容易に行えるようにするための仕組みについて説明する。
【００８８】
ＨＤＤ／ＳＳＤドライバ１２０は、上記不揮発動作におけるフラッシュ動作完了後の管理データ保存時、Partialフラグを意識せずに、管理データの保存を行う。ＢＩＯＳ１７は、読み出し対象データがＳＳＤ１９上に存在し、かつ、PartialフラグがFalse（ブロック内にすべてのセクタが存在する）の場合にのみ、ＳＳＤ１９からのデータの読み出しを実行する。そして、ＨＤＤ／ＳＳＤドライバ１２０は、起動時に、PartialフラグがTrueのＳＳＤ１９のブロックを無効化する。この手順によっても、管理データの保存時に存在セクタビットマップを書き出すことを不要にできる。
【００８９】
（高速ブート）
情報処理装置において、ブートに使用するデータは、毎回同じ領域から読み出されることが多い。この点に着目して、次に、本情報処理装置が備えるブートを高速化するための仕組みについて説明する。
【００９０】
この仕組みを実現するために、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９上の管理データ保存領域１９１に、図９に示すPinフラグを、主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９（ＨＤＤ１８のキャッシュとして利用される部分）のブロック毎に設ける。Pinフラグは、このデータがブートに使用されたことを示すためのフラグである。
【００９１】
ＢＩＯＳ１７は、読み出し対象データがＳＳＤ１９上に存在するとき、当該ブロックに対応するPinフラグを立てる。ＳＳＤ１９上に存在しなかった場合、ＢＩＯＳ１７は、ＳＳＤ１９上の管理データ保存領域１９１内に確保したトレース領域に、ＨＤＤ１９の識別子およびブロックＬＢＡを蓄積する。
【００９２】
本ケースでは、例えば各種アプリケーションプログラム１３０の１つとして、ＯＳ１１０が起動したときに動作するソフトウェアを用意する。このソフトウェアは、動作を開始すると、ＨＤＤ／ＳＳＤドライバ１２０に対して、起動完了通知を送信するように構成されている。
【００９３】
ＨＤＤ／ＳＳＤドライバ１２０は、第１に、起動時または起動完了通知受領時、ＢＩＯＳ１７がＳＳＤ１９上の管理データ保存領域１９１内に蓄積したトレースを参照しながらＨＤＤ１８からＳＳＤ１９へのデータの読み出しを実行し、（ＳＳＤ１９側の）ブロックに対応するPinフラグを立てる。また、ＨＤＤ／ＳＳＤドライバ１２０は、第２に、起動完了通知を受領するまでのデータ読み出しに対して、主メモリ１３上のＬ１キャッシュ領域２０１またはＳＳＤ１９に読み出し対象データが存在した場合、そのブロックに対応するPinフラグを立てる。ＳＳＤ１９に読み出し対象データが存在しない場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＨＤＤ１８からＳＳＤ１９へのデータの読み出しを実行し、（ＳＳＤ１９側の）ブロックに対応するPinフラグを立てる。
【００９４】
その後、ＨＤＤ／ＳＳＤドライバ１２０は、主メモリ１３上のＬ１キャッシュ領域２０１またはＳＳＤ１９を活用しながら、ホストシステムから要求されるＨＤＤ１８へのデータの書き込みおよびＨＤＤ１８からのデータの読み出しを処理するわけであり、その際において、最近アクセスされたデータほど優先的に蓄積されるように、主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９上のデータの入れ替えを実行する。ここで、ＨＤＤ／ＳＳＤドライバ１２０は、（アクセス時刻が古くても）Pinフラグの立ったＳＳＤ１９上のデータを無効化しないように制御する。
【００９５】
つまり、前述した、ブートに使用するデータは毎回同じ領域から読み出されることが多い点に着目して、次回のブート時におけるＳＳＤ１９のヒット率を高めることにより、ブートの高速化を実現する。
【００９６】
なお、ＨＤＤ／ＳＳＤドライバ１２０は、シャットダウン時に管理データをＳＳＤ１９の管理データ保存領域１９１に保存するとき、すべてのPinフラグを落として書き出しを実行する。シャットダウン時にすべてのPinフラグを落とす理由は、毎回ブート時に次回のブート時のための学習を行うためであり、これにより、ブートに利用するデータの領域が変化する場合にも適応的に対応できることとなる。
【００９７】
続いて、Pinフラグの立っているデータに対して書き込み要求（書き換え）が発生した場合の対処方法の一例を説明する。
【００９８】
Pinフラグの立っているデータは、前述したように、次回のブート時にも読み出される可能性が高い。しかしながら、当該データに対して書き込み要求が発生した場合は、その可能性は低くなる。そこで、このような場合、ＢＩＯＳ１７およびＨＤＤ／ＳＳＤドライバ１２０は、当該データのPinフラグを落とすこととする。
【００９９】
即ち、今回のブートで使用されたデータであっても、書き込み要求が発生した場合は次回のブートに使用される可能性が低くなることに着目して、このようなデータのPinフラグを落とすことにより、このデータは必要に応じて無効化され、この領域を別のデータのために使用できるようにして、ヒット率を向上させることを実現する。
【０１００】
また、Pinフラグの立っているデータは、前述したように、次回のブート時にも読み出される可能性が高い。だからこそ、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９に蓄積されたこれらのデータを無効化しないように制御する。つまり、これらのデータは、ＳＳＤ１９上に常駐することになり、その分、キャッシュとして使用するＳＳＤ１９の容量を制限することになる。そこで、ＨＤＤ／ＳＳＤドライバ１２０は、Pinフラグの立っているデータの量を監視して、そのデータ量が予め定められた値を越えた場合、以後の（ブートに使用された）データについては、Pinフラグを立てることを止め、ＳＳＤ１９に常駐させる対象から除外する。これにより、キャッシュとしてのＳＳＤ１９の容量が減り、キャッシュヒット率が低下することを防止する。
【０１０１】
（Flush/Write FUA要求に対するオプション処理）
Flush/Write FUA要求は、厳密に処理すると、ライトバック動作の性能を著しく劣化させてしまう。そこで、ＨＤＤ／ＳＳＤドライバ１２０は、Flush/Write FUA要求に対して、”オプションFlush処理"機能を設け、"Enable"または"Disable"のいずれかを設定可能として、以下の通りに動作する。
【０１０２】
ライトスルー動作中（ＷＴモードまたはＷＢモードでシャットダウン通知受領後）のときは、ＨＤＤ／ＳＳＤドライバ１２０は、”オプションFlush処理"機能が"Enable"または"Disable"のいずれに設定させているかに関わらず、Flush/Write FUA要求を厳密に処理する。また、”オプションFlush処理"機能が"Enable"に設定されている場合も、Flush/Write FUA要求を厳密に処理する。即ち、ＨＤＤ／ＳＳＤドライバ１２０は、Flush FUA要求に対しては、当該要求を受け付けた時点で主メモリ１３上のＬ１キャッシュ領域２０１およびＳＳＤ１９に存在するＨＤＤ１８への未書き込みデータをすべてＨＤＤ１８へ書き込んだ後、ＨＤＤ１８へFlush要求を発行し、その完了を待ってから、Flush FUA要求に対する処理の完了をホストシステムに通知する。Write FUA要求に対しては、前述した通りの動作を行う。
【０１０３】
ライトバック動作中で、”オプションFlush処理"機能が"Disable"に設定されている場合、ＨＤＤ／ＳＳＤドライバ１２０は、Flush FUA要求に対しては、何もせずに処理完了をホストシステムに返送する。また、Write FUA要求に対しては、ＨＤＤ／ＳＳＤドライバ１２０は、（Write FUA要求ではなく）通常のWrite要求として処理し、処理完了をホストシステムの返送する。そして、この場合、ＨＤＤ／ＳＳＤドライバ１２０は、次のいずれかまたは両方を契機としてフラッシュ動作を開始する。１つは、前回のフラッシュ動作から一定時間が経過したときであり、もう１つは、ＳＳＤ１９上のＨＤＤ１８への未書き込みデータ（Dirty）を含むブロック（Dirtyブロック）の数が予め定められた値を越えたときである。ＨＤＤ／ＳＳＤドライバ１２０は、フラッシュ動作を開始した時、Dirtyブロックをすべてフラッシュする。
【０１０４】
上記”オプションFlush処理"機能を設け、"Enable"または"Disable"のいずれかを設定可能とすることで、性能を犠牲にしてデータの保全性を重視するユーザと、データの保全性を犠牲にして性能を重視するユーザとの両方に対応することが可能となる。また、ＨＤＤ１８への未書き込みデータ（Dirty）をまとめてフラッシュするので、ＨＤＤ１８の動作時間を短縮し、省電力化を図ることができる。
【０１０５】
（データのマージ処理）
前述したように、ＨＤＤ／ＳＳＤドライバ１２０は、主メモリ１３上のユーザバッファ２５０とＨＤＤ１８およびＳＳＤ１９との間に介在させるＬ１キャッシュ領域２０１を主メモリ１３上に確保し、かつ、その管理をブロック単位で実行する。そこで、次に、Ｌ１キャッシュ領域２０１またはＳＳＤ１９のデータと、ＨＤＤ１９のデータとを、Ｌ１キャッシュ領域２０１上で効率的に組み合わせる（マージ）ためにＨＤＤ／ＳＳＤドライバ１２０が備える仕組みについて説明する。
【０１０６】
ＨＤＤ１８のデータとマージする必要が生じるのは、読み出し対象データの一部がＬ１キャッシュ領域２０１に存在するとき、および、読み出し対象データがＬ１キャッシュ領域２０１に存在せず、その一部がＳＳＤ１９に存在するときである。一般的には、ＨＤＤ１８の複数に分かれた領域からデータを読み出すことになり、ＨＤＤ１８に対して複数の読み出し要求を発行する必要がある。ＳＳＤ１９のデータとＨＤＤ１８のデータとをマージする場合には、一般的には、ＳＳＤ１９に対しても、複数の読み出し要求を発行する必要がある。このように、複数の読み出し要求を発行することは、オーバヘッドの増加になってしまう。
【０１０７】
そこで、ＨＤＤ／ＳＳＤドライバ１２０は、まず、主メモリ１３上にマージバッファ２０３を確保する。マージバッファ２０３は、ブロックサイズと等しいサイズで、１個または複数個準備して必要なときに排他制御して使用しても良いし、Ｌ１キャッシュ領域２０１の各ブロックごとに専用のマージバッファ２０３を設けても良い。
【０１０８】
Ｌ１キャッシュ領域２０１のデータとＨＤＤ１８のデータとをマージする場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＨＤＤ１８から必要最小分だけデータをマージバッファ２０３に読み出す。必要最小分とは、具体的には、図１０に示すように、Ｌ１キャッシュ領域２０１の該当ブロック内の有効データが欠けている先頭のセクタから最後尾のセクタまでの範囲である。この必要最小分のデータのＨＤＤ１８からマージバッファ２０３への読み出しを行った後、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１上で欠けているデータをマージバッファ２０３からコピーする。
【０１０９】
ＳＳＤ１９のデータとＨＤＤ１８のデータとをマージする場合、ＨＤＤ／ＳＳＤドライバ１２０は、ＳＳＤ１９から必要最小分だけデータをＬ１キャッシュ領域２０１に読み出すと共に、ＨＤＤ１８から必要最小分だけデータをマージバッファ２０３に読み出す。そして、この両方の読み出し完了後、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１上で欠けているデータをマージバッファ２０３からコピーする。
【０１１０】
また、このマージバッファ２０３は、フラッシュ動作時においても利用できる。フラッシュ動作時におけるＨＤＤ１８へのデータ書き込みを必ずＬ１キャッシュ領域２０１から実行する方式である。Ｌ１キャッシュ領域２０１の有効データが分散し、そのままフラッシュする場合、複数の書き込み要求をＨＤＤ１８に対して発行しなければならず、オーバヘッドの増加になってしまう。そこで、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１の有効データが分散している場合、ＨＤＤ１８から必要最小分だけデータをマージバッファ２０３に読み出し、Ｌ１キャッシュ領域２０１にマージ後、１回の書き込み要求の発行でＨＤＤ１８に対する書き込みを完了させる。
【０１１１】
（ページ制御）
次に、ＳＳＤ１９への効率的な書き込みを実現するためにＨＤＤ／ＳＳＤドライバ１２０が備える仕組みについて説明する。
【０１１２】
不揮発性キャッシュ（ＮＶＣ）デバイスであるＳＳＤ１９は、セクタ単位によるデータの読み出し／書き込みが可能であるが、内部的には、ページという単位で管理されているのが一般的である。ページに満たないデータの書き込みは、一旦ページ単位で現在のデータを読み出し、書き込み対象データとマージしてからページ単位で書き戻すことにより実施する。つまりページ単位でのデータの書き込みと比較して遅い。そこで、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１からＳＳＤ１９への書き込みを、ページ境界からページサイズの倍数となるように制御する。ＳＳＤ１９のページサイズは、ＨＤＤ／ＳＳＤドライバ１２０がＳＳＤ１９から取得する方法と、設定項目（例えばパラメータ）の１つとしてＨＤＤ／ＳＳＤドライバ１２０に与える方法とが考えられる。
【０１１３】
そして、ＨＤＤ／ＳＳＤドライバ１２０は、Ｌ１キャッシュ領域２０１からＳＳＤ１９への書き込みを、ページ境界からページサイズの倍数とするために、ＳＳＤ１９の割り付けをページ境界とし、ブロックサイズはページサイズの倍数となるように設定する。
【０１１４】
（セットアソシアティフ）
また、ＨＤＤ／ＳＳＤドライバ１２０は、キャッシュの検索速度向上を図るために、Ｌ１キャッシュ領域２０１上および（ＨＤＤ１８のキャッシュとして利用される）ＳＳＤ１９上のデータを管理するための方式として、セットアソシアティブ方式を採用することができる。より具体的には、図１１に示すようなテーブルを主メモリ１３上の管理データ領域２０２内でＬ１キャッシュ領域２０１およびＳＳＤ１９のそれぞれについて管理し、各ブロックを示すＬＢＡ中、テーブルのエントリ数を表現可能な下位ｎビットを"Index"と位置づけて、当該"Index"部分の値が一致するブロック毎に最大Way数分だけ蓄積されるように制御する。
【０１１５】
また、セットアソシアティブ方式を採用して、ＨＤＤ／ＳＳＤドライバ１２０は、Pinフラグの立っているデータの数を、この"Index"毎に監視して、当該"Index"毎に予め定められた値を越えないように制御することもできる。
【０１１６】
さらに、セットアソシアティブ方式を採用して、ＨＤＤ／ＳＳＤドライバ１２０は、上記”オプションFlush処理"機能が"Disable"に設定されている場合にフラッシュ動作を開始する契機の１つを、いずれかの"Index"のDirtyブロックの数が予め定められた値を越えたときとすることもできる。
【０１１７】
以上のように、本情報処理装置によれば、ＳＳＤ１９をＨＤＤ１８のキャッシュとして利用することで、ＨＤＤ１８に対するアクセスの高速化を図るにあたって、ＨＤＤ１８とＳＳＤ１９とを制御するＨＤＤ／ＳＳＤドライバ１２０が、主メモリ１３上のユーザバッファ２５０とＨＤＤ１８およびＳＳＤ１９との間に介在させるＬ１キャッシュ領域２０１を主メモリ１３上に確保し、かつ、その管理をブロック単位で実行することにより、ＨＤＤ１８とＳＳＤ１９との間で必要となるデータの受け渡し等に関して、さらなる高速化や効率化を図ることを実現する。
【０１１８】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に構成要素を適宜組み合わせてもよい。
【符号の説明】
【０１１９】
１１…ＣＰＵ、１２…ＭＣＨ、１３…主メモリ、１４…ＩＣＨ、１５…ＧＰＵ、１５Ａ…ビデオメモリ（ＶＲＡＭ）、１６…サウンドコントローラ、１７…ＢＩＯＳ−ＲＯＭ、１８…ＨＤＤ、１９…ＳＳＤ、２０…ＯＤＤ、２１…各種周辺機器、２２…ＥＥＰＲＯＭ、２３…ＥＣ／ＫＢＣ、１１０…オペレーティングシステム（ＯＳ）、１２０…ＨＤＤ／ＳＳＤドライバ、１３０…各種アプリケーションプログラム。
【図１】
2011238176.tif 000003
【図２】
2011238176.tif 000004
【図３】
2011238176.tif 000005
【図４】
2011238176.tif 000006
【図５】
2011238176.tif 000007
【図６】
2011238176.tif 000008
【図７】
2011238176.tif 000009
【図８】
2011238176.tif 000010
【図９】
2011238176.tif 000011
【図１０】
2011238176.tif 000012
【図１１】
2011238176.tif 000013
【手続補正書】
【提出日】平成23年6月10日(2011.6.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
バッファ領域が確保されるメインメモリと、
第１の外部記憶装置と、
第２の外部記憶装置と、
前記第１の外部記憶装置を前記第２の外部記憶装置のキャッシュとして用いて、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理するドライバと
を具備し、
前記ドライバは、前記ドライバとデータの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うために確保される前記バッファ領域と前記第１の外部記憶装置との間および前記バッファ領域と前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段を有する情報処理装置。
【請求項２】
前記ドライバは、
前記ホストシステムからデータの読み出しが要求されたとき、
（ａ１）読み出し対象データが前記キャッシュ領域内に存在する場合、前記キャッシュ領域内のデータを前記バッファ領域内に格納し、
（ａ２）読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを読み出して前記バッファ領域に格納し、
（ａ３）読み出し対象データが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを前記キャッシュ領域内に読み出し、前記読み出したデータを前記バッファ領域に格納し、前記読み出したデータを前記第１の外部記憶装置に蓄積する
リード制御手段と、
前記ホストシステムからデータの書き込みが要求されたとき、
（ｂ１）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ２）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記第１の外部記憶装置上のデータを無効化し、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ３）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、書き込み対象データを前記キャッシュ領域に格納し、前記格納したデータを前記第１の外部記憶装置に蓄積する
ライト制御手段と
をさらに有する請求項１記載の情報処理装置。
【請求項３】
前記ドライバは、前記キャッシュ領域内に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納し、前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記キャッシュ領域経由で前記第２の外部記憶装置に格納するフラッシュ制御手段をさらに有する請求項１記載の情報処理装置。
【請求項４】
前記ライト制御手段は、ライトＦＵＡ（Force unit access）要求を前記ホストシステムから受けた場合、前記キャッシュ領域内へのデータの格納または前記キャッシュ領域内もしくは前記第１の外部記憶装置上のデータの書き換えを状況に応じて行い、ライトＦＵＡ要求を前記第２の外部記憶装置に対して発行する請求項２記載の情報処理装置。
【請求項５】
前記リード制御手段は、読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合（ａ２）、前記キャッシュ領域を経由させないモードと、データを前記キャッシュ領域に蓄積するために前記キャッシュ領域を経由させるその他のモードとの２つのモードで前記第１の外部記憶装置上のデータを前記バッファ領域に格納する請求項２記載の情報処理装置。
【請求項６】
前記ライト制御手段は、
（ｂ１’）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ２’）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記キャッシュ領域内のデータ、前記第１の外部記憶装置上のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ３’）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４’）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを書き込み対象データに書き換える
ライトスルーモードで動作する請求項２記載の情報処理装置。
【請求項７】
前記ライト制御手段は、前記ライトスルーモード時、前記第１の外部記憶装置上に更新対象データが存在した場合、前記第１の外部記憶装置上のデータの書き換えに代えて、前記第１の外部記憶装置上のデータの無効化を実行するその他の動作モードで動作可能である請求項６記載の情報処理装置。
【請求項８】
前記ドライバは、
前記キャッシュ領域および前記第１の外部記憶装置に蓄積されているデータを管理するための管理データを前記メインメモリ上の管理データ領域内で管理するデータ管理手段と、
前記ホストシステムからシャットダウン通知を受けたとき、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納する動作を前記フラッシュ制御手段に行わせ、
前記フラッシュ制御手段の動作完了後、前記管理データ領域内の管理データを前記第１の外部記憶装置上の管理データ保存領域に格納する動作を前記データ管理手段に行わせ、
起動時、前記管理データ保存領域内の管理データを前記管理データ領域に格納し、前記キャッシュ領域に関する管理データを初期化する動作を前記データ管理手段に行わせる
データ保証手段と
をさらに有する請求項３記載の情報処理装置。
【請求項９】
前記データ保証手段は、
前記第１の外部記憶装置に蓄積されたデータが前記第２の外部記憶装置と一貫性を有するか否かを示し、前記ドライバが動作中である場合に第１の値を持ち、前記ドライバが非動作中である場合に第２の値を持つフラグを前記管理データ保存領域内に設け、
前記データ管理手段が前記管理データ領域内の管理データを前記第１の外部記憶装置上の管理データ保存領域に格納する際、前記フラグの値を前記第２の値に更新し、
前記ドライバの起動時、前記フラグが前記第２の値を持つ場合、前記管理データ保存領域内の管理データを前記管理データ領域に格納する動作を前記データ管理手段に行わせ、前記フラグの値を前記第１の値に更新し、前記フラグが前記第１の値を持つ場合、前記管理データ保存領域内の管理データを初期化して前記第１の外部記憶装置上のデータを破棄し、前記フラグの値を前記第１の値に更新する
請求項８記載の情報処理装置。
【請求項１０】
前記ドライバが動作を開始する前、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理する起動手段を具備し、
前記データ保証手段は、前記第１の外部記憶装置に蓄積されたデータが前記第２の外部記憶装置と一貫性を有するか否かを示し、前記ドライバが動作中である場合に第１の値を持ち、前記起動手段が動作中である場合に第２の値を持ち、前記ドライバおよび前記起動手段のいずれもが非動作中である場合に第３の値を持つフラグを前記管理データ保存領域内に設け、
前記起動手段は、起動時、前記フラグが前記第３の値を持つ場合、前記フラグを前記第２の値に更新し、前記第２の外部記憶装置に対して発行したライト要求を前記管理データ保存領域内にトレースデータとして蓄積し、
前記データ保証手段は、
前記データ管理手段が前記管理データ領域内の管理データを前記第１の外部記憶装置上の管理データ保存領域に格納する際、前記フラグの値を前記第３の値に更新し、
前記ドライバの起動時、前記フラグが前記第２の値を持つ場合、前記管理データ保存領域内の管理データを前記管理データ領域に格納する動作を前記データ管理手段に行わせ、前記トレースデータを参照して、前記第１の外部記憶装置上に存在する前記起動手段によって更新されたデータを無効化し、前記フラグの値を前記第１の値に更新し、前記フラグが前記第２の値以外の値を持つ場合、前記管理データ保存領域内の管理データを初期化して前記第１の外部記憶装置上のデータを破棄し、前記フラグの値を前記第１の値に更新する
請求項８記載の情報処理装置。
【請求項１１】
前記起動手段は、前記トレースデータが所定の量を越えた場合、前記トレースデータの蓄積を終了し、前記フラグを前記第３の値に更新する請求項１０記載の情報処理装置。
【請求項１２】
前記データ保証手段は、
前記第２の外部記憶装置の個体情報および電源投入回数を前記管理データ保存領域内で管理し、
前記ドライバの起動時、前記第２の外部記憶装置から個体情報および電源投入回数を取得し、
前記第２の外部記憶装置から取得した個体情報が前記管理データ保存領域内で管理されている個体情報と異なっていた場合、または、前記第２の外部記憶装置から取得した電源投入回数から１を減じた値が前記管理データ保存領域内で管理されている電源投入回数と異なっていた場合、前記管理データ保存領域内の前記第２の外部記憶装置に関する管理データを初期化して前記第１の外部記憶装置に格納された前記第２の外部記憶装置に関するデータを無効化する
請求項８記載の情報処理装置。
【請求項１３】
前記ドライバが動作を開始する前、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理する起動手段を具備し、
前記起動手段は、
起動時、前記第２の外部記憶装置から個体情報および電源投入回数を取得し、
前記第２の外部記憶装置から取得した個体情報が前記管理データ保存領域内で管理されている個体情報と一致しており、かつ、前記第２の外部記憶装置から取得した電源投入回数から１を減じた値が前記管理データ保存領域内で管理されている電源投入回数と一致している場合、読み出し対象データが前記第１の外部記憶装置に存在していたならば、前記第１の外部記憶装置からデータを読み出し、前記第２の外部記憶装置への書き込み処理に伴う更新対象データが前記第１の外部記憶装置に存在していたならば、前記第１の外部記憶装置上のデータを無効化する
請求項１２記載の情報処理装置。
【請求項１４】
前記ドライバは、前記ホストシステムの起動時に読み出しが要求されたデータか否かを示すための第２のフラグを、前記キャッシュ領域および前記第１の外部記憶装置の各ブロック毎に前記管理データ保存領域内に設けるブートデータ管理手段を具備し、
前記起動手段は、読み出し対象データが前記第１の外部記憶装置に存在した場合、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、読み出し対象データが前記第１の外部記憶装置に存在しない場合、前記第２の外部記憶装置に対して発行したリード要求を前記管理データ保存領域内にトレースデータとして蓄積し、
前記リード制御手段は、
前記ドライバの起動時または前記ホストシステムからの起動完了通知受領時、前記トレースデータを参照することにより、前記起動手段によって読み出されたデータを前記第２の外部記憶装置から読み出し、前記読み出したデータを前記第１の外部記憶装置に蓄積し、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、
前記起動完了通知を前記ホストシステムから受領するまでの間、前記ホストシステムからデータの書き込みが要求された際、読み出し対象データが前記キャッシュ領域または前記第１の外部記憶装置に存在した場合、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、読み出し対象データが前記第１の外部記憶装置に存在しない場合、前記第２の外部記憶装置から読み出したデータを前記第１の外部記憶装置に蓄積し、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、
前記リード制御手段および前記ライト制御手段は、前記第２のフラグが前記ホストシステムの起動時に読み出しが要求されたデータであることを示す前記第１の外部記憶装置上のデータが前記第１の外部記憶装置上に残るように前記第１の外部記憶装置上のデータを維持し、
前記ブートデータ管理手段は、前記ホストシステムからシャットダウン通知を受けたとき、前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されていないデータであることを示すように初期化する
請求項１３記載の情報処理装置。
【請求項１５】
前記起動手段および前記ライト制御手段は、更新対象データが前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上の更新対象データに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されていないデータであることを示すように初期化する請求項１４記載の情報処理装置。
【請求項１６】
前記リード制御手段は、前記第２のフラグが前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定されたデータの量が所定量に達した場合、前記起動完了通知の受領前に、前記第２のフラグを前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定する処理を終了する請求項１４記載の情報処理装置。
【請求項１７】
前記フラッシュ制御手段は、キャッシングされたデータを書き込むためのフラッシュ要求を前記ホストシステムから受けた場合に、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に書き込むためのライト要求を前記第２の外部記憶装置に対して発行し、前記ライト要求の発行後、前記第２の外部記憶装置内においてキャッシングされたデータを書き込むためのフラッシュ要求を前記第２の外部記憶装置に対して発行する第１のモードと、前記ホストシステムからフラッシュ要求を受けた際には何もせずに、前回のフラッシュ動作時から一定時間が経過した時または前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータのデータ量が所定量に達した時に、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に書き込むためのライト要求を前記第２の外部記憶装置に対して発行する第２のモードとで動作する請求項３記載の情報処理装置。
【請求項１８】
前記ライト制御手段は、前記ライトＦＵＡ要求を受けた場合に、前記キャッシュ領域内にデータを格納し、または、前記キャッシュ領域内もしくは前記第１の外部記憶装置上のデータを書き換えて、ライトＦＵＡ要求を前記第２の外部記憶装置に対して発行することなく、前記ホストシステムに対して書き込み処理の完了を通知するように動作するその他の動作モードを有する請求項４記載の情報処理装置。
【請求項１９】
ドライバとデータの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うためのバッファ領域が確保されるメインメモリ、第１の外部記憶装置および第２の外部記憶装置を備える情報処理装置上で動作し、前記第１の外部記憶装置を前記第２の外部記憶装置のキャッシュとして用いて、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理するドライバであって、
前記バッファ領域と前記第１の外部記憶装置との間および前記バッファ領域と前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段を具備するドライバ。
【請求項２０】
前記ホストシステムからデータの読み出しが要求されたとき、
（ａ１）読み出し対象データが前記キャッシュ領域内に存在する場合、前記キャッシュ領域内のデータを前記バッファ領域内に格納し、
（ａ２）読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを読み出して前記バッファ領域に格納し、
（ａ３）読み出し対象データが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを前記キャッシュ領域内に読み出し、前記読み出したデータを前記バッファ領域に格納し、前記読み出したデータを前記第１の外部記憶装置に蓄積する
リード制御手段と、
前記ホストシステムからデータの書き込みが要求されたとき、
（ｂ１）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ２）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記第１の外部記憶装置上のデータを無効化し、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ３）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、書き込み対象データを前記キャッシュ領域に格納し、前記格納したデータを前記第１の外部記憶装置に蓄積する
ライト制御手段と
をさらに具備する請求項１９記載のドライバ。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
実施形態によれば、情報処理装置は、バッファ領域が確保されるメインメモリと、第１の外部記憶装置と、第２の外部記憶装置と、前記第１の外部記憶装置を前記第２の外部記憶装置のキャッシュとして用いて、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理するドライバとを具備する。前記ドライバは、前記ドライバとデータの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うために確保される前記バッファ領域と前記第１の外部記憶装置との間および前記バッファ領域と前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段を有する。
【手続補正書】
【提出日】平成23年9月2日(2011.9.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
バッファ領域が確保されるメインメモリと、
第１の外部記憶装置と、
第２の外部記憶装置と、
前記第１の外部記憶装置と前記第２の外部記憶装置とを制御するドライバと
を具備し、
前記ドライバは、前記ドライバとデータの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うために確保される前記バッファ領域と前記第１の外部記憶装置との間および前記バッファ領域と前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段を有し、前記キャッシュ確保手段により前記メインメモリ上に確保された前記キャッシュ領域と、前記第１の外部記憶装置の一部または全部とを、前記第２の外部記憶装置のキャッシュとして利用する情報処理装置。
【請求項２】
前記ドライバは、
前記ホストシステムからデータの読み出しが要求されたとき、
（ａ１）読み出し対象データが前記キャッシュ領域内に存在する場合、前記キャッシュ領域内のデータを前記バッファ領域内に格納し、
（ａ２）読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを読み出して前記バッファ領域に格納し、
（ａ３）読み出し対象データが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを前記キャッシュ領域内に読み出し、前記読み出したデータを前記バッファ領域に格納し、前記読み出したデータを前記第１の外部記憶装置に蓄積する
リード制御手段と、
前記ホストシステムからデータの書き込みが要求されたとき、
（ｂ１）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ２）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記第１の外部記憶装置上のデータを無効化し、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ３）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、書き込み対象データを前記キャッシュ領域に格納し、前記格納したデータを前記第１の外部記憶装置に蓄積する
ライト制御手段と
をさらに有する請求項１記載の情報処理装置。
【請求項３】
前記ドライバは、前記キャッシュ領域内に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納し、前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記キャッシュ領域経由で前記第２の外部記憶装置に格納するフラッシュ制御手段をさらに有する請求項１記載の情報処理装置。
【請求項４】
前記ライト制御手段は、ライトＦＵＡ（Force unit access）要求を前記ホストシステムから受けた場合、前記キャッシュ領域内へのデータの格納または前記キャッシュ領域内もしくは前記第１の外部記憶装置上のデータの書き換えを状況に応じて行い、ライトＦＵＡ要求を前記第２の外部記憶装置に対して発行する請求項２記載の情報処理装置。
【請求項５】
前記リード制御手段は、読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合（ａ２）、前記キャッシュ領域を経由させないモードと、データを前記キャッシュ領域に蓄積するために前記キャッシュ領域を経由させるその他のモードとの２つのモードで前記第１の外部記憶装置上のデータを前記バッファ領域に格納する請求項２記載の情報処理装置。
【請求項６】
前記ライト制御手段は、
（ｂ１’）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ２’）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記キャッシュ領域内のデータ、前記第１の外部記憶装置上のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ３’）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータおよび前記第２の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４’）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを書き込み対象データに書き換える
ライトスルーモードで動作する請求項２記載の情報処理装置。
【請求項７】
前記ライト制御手段は、前記ライトスルーモード時、前記第１の外部記憶装置上に更新対象データが存在した場合、前記第１の外部記憶装置上のデータの書き換えに代えて、前記第１の外部記憶装置上のデータの無効化を実行するその他の動作モードで動作可能である請求項６記載の情報処理装置。
【請求項８】
前記ドライバは、
前記キャッシュ領域および前記第１の外部記憶装置に蓄積されているデータを管理するための管理データを前記メインメモリ上の管理データ領域内で管理するデータ管理手段と、
前記ホストシステムからシャットダウン通知を受けたとき、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に格納する動作を前記フラッシュ制御手段に行わせ、
前記フラッシュ制御手段の動作完了後、前記管理データ領域内の管理データを前記第１の外部記憶装置上の管理データ保存領域に格納する動作を前記データ管理手段に行わせ、
起動時、前記管理データ保存領域内の管理データを前記管理データ領域に格納し、前記キャッシュ領域に関する管理データを初期化する動作を前記データ管理手段に行わせる
データ保証手段と
をさらに有する請求項３記載の情報処理装置。
【請求項９】
前記データ保証手段は、
前記第１の外部記憶装置に蓄積されたデータが前記第２の外部記憶装置と一貫性を有するか否かを示し、前記ドライバが動作中である場合に第１の値を持ち、前記ドライバが非動作中である場合に第２の値を持つフラグを前記管理データ保存領域内に設け、
前記データ管理手段が前記管理データ領域内の管理データを前記第１の外部記憶装置上の管理データ保存領域に格納する際、前記フラグの値を前記第２の値に更新し、
前記ドライバの起動時、前記フラグが前記第２の値を持つ場合、前記管理データ保存領域内の管理データを前記管理データ領域に格納する動作を前記データ管理手段に行わせ、前記フラグの値を前記第１の値に更新し、前記フラグが前記第１の値を持つ場合、前記管理データ保存領域内の管理データを初期化して前記第１の外部記憶装置上のデータを破棄し、前記フラグの値を前記第１の値に更新する
請求項８記載の情報処理装置。
【請求項１０】
前記ドライバが動作を開始する前、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理する起動手段を具備し、
前記データ保証手段は、前記第１の外部記憶装置に蓄積されたデータが前記第２の外部記憶装置と一貫性を有するか否かを示し、前記ドライバが動作中である場合に第１の値を持ち、前記起動手段が動作中である場合に第２の値を持ち、前記ドライバおよび前記起動手段のいずれもが非動作中である場合に第３の値を持つフラグを前記管理データ保存領域内に設け、
前記起動手段は、起動時、前記フラグが前記第３の値を持つ場合、前記フラグを前記第２の値に更新し、前記第２の外部記憶装置に対して発行したライト要求を前記管理データ保存領域内にトレースデータとして蓄積し、
前記データ保証手段は、
前記データ管理手段が前記管理データ領域内の管理データを前記第１の外部記憶装置上の管理データ保存領域に格納する際、前記フラグの値を前記第３の値に更新し、
前記ドライバの起動時、前記フラグが前記第２の値を持つ場合、前記管理データ保存領域内の管理データを前記管理データ領域に格納する動作を前記データ管理手段に行わせ、前記トレースデータを参照して、前記第１の外部記憶装置上に存在する前記起動手段によって更新されたデータを無効化し、前記フラグの値を前記第１の値に更新し、前記フラグが前記第２の値以外の値を持つ場合、前記管理データ保存領域内の管理データを初期化して前記第１の外部記憶装置上のデータを破棄し、前記フラグの値を前記第１の値に更新する
請求項８記載の情報処理装置。
【請求項１１】
前記起動手段は、前記トレースデータが所定の量を越えた場合、前記トレースデータの蓄積を終了し、前記フラグを前記第３の値に更新する請求項１０記載の情報処理装置。
【請求項１２】
前記データ保証手段は、
前記第２の外部記憶装置の個体情報および電源投入回数を前記管理データ保存領域内で管理し、
前記ドライバの起動時、前記第２の外部記憶装置から個体情報および電源投入回数を取得し、
前記第２の外部記憶装置から取得した個体情報が前記管理データ保存領域内で管理されている個体情報と異なっていた場合、または、前記第２の外部記憶装置から取得した電源投入回数から１を減じた値が前記管理データ保存領域内で管理されている電源投入回数と異なっていた場合、前記管理データ保存領域内の前記第２の外部記憶装置に関する管理データを初期化して前記第１の外部記憶装置に格納された前記第２の外部記憶装置に関するデータを無効化する
請求項８記載の情報処理装置。
【請求項１３】
前記ドライバが動作を開始する前、前記第２の外部記憶装置へのデータの書き込みおよび前記第２の外部記憶装置からのデータの読み出しを処理する起動手段を具備し、
前記起動手段は、
起動時、前記第２の外部記憶装置から個体情報および電源投入回数を取得し、
前記第２の外部記憶装置から取得した個体情報が前記管理データ保存領域内で管理されている個体情報と一致しており、かつ、前記第２の外部記憶装置から取得した電源投入回数から１を減じた値が前記管理データ保存領域内で管理されている電源投入回数と一致している場合、読み出し対象データが前記第１の外部記憶装置に存在していたならば、前記第１の外部記憶装置からデータを読み出し、前記第２の外部記憶装置への書き込み処理に伴う更新対象データが前記第１の外部記憶装置に存在していたならば、前記第１の外部記憶装置上のデータを無効化する
請求項１２記載の情報処理装置。
【請求項１４】
前記ドライバは、前記ホストシステムの起動時に読み出しが要求されたデータか否かを示すための第２のフラグを、前記キャッシュ領域および前記第１の外部記憶装置の各ブロック毎に前記管理データ保存領域内に設けるブートデータ管理手段を具備し、
前記起動手段は、読み出し対象データが前記第１の外部記憶装置に存在した場合、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、読み出し対象データが前記第１の外部記憶装置に存在しない場合、前記第２の外部記憶装置に対して発行したリード要求を前記管理データ保存領域内にトレースデータとして蓄積し、
前記リード制御手段は、
前記ドライバの起動時または前記ホストシステムからの起動完了通知受領時、前記トレースデータを参照することにより、前記起動手段によって読み出されたデータを前記第２の外部記憶装置から読み出し、前記読み出したデータを前記第１の外部記憶装置に蓄積し、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、
前記起動完了通知を前記ホストシステムから受領するまでの間、前記ホストシステムからデータの書き込みが要求された際、読み出し対象データが前記キャッシュ領域または前記第１の外部記憶装置に存在した場合、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、読み出し対象データが前記第１の外部記憶装置に存在しない場合、前記第２の外部記憶装置から読み出したデータを前記第１の外部記憶装置に蓄積し、前記第１の外部記憶装置上のデータに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定し、
前記リード制御手段および前記ライト制御手段は、前記第２のフラグが前記ホストシステムの起動時に読み出しが要求されたデータであることを示す前記第１の外部記憶装置上のデータが前記第１の外部記憶装置上に残るように前記第１の外部記憶装置上のデータを維持し、
前記ブートデータ管理手段は、前記ホストシステムからシャットダウン通知を受けたとき、前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されていないデータであることを示すように初期化する
請求項１３記載の情報処理装置。
【請求項１５】
前記起動手段および前記ライト制御手段は、更新対象データが前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上の更新対象データに対応する前記第２のフラグを、前記ホストシステムの起動時に読み出しが要求されていないデータであることを示すように初期化する請求項１４記載の情報処理装置。
【請求項１６】
前記リード制御手段は、前記第２のフラグが前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定されたデータの量が所定量に達した場合、前記起動完了通知の受領前に、前記第２のフラグを前記ホストシステムの起動時に読み出しが要求されたデータであることを示すように設定する処理を終了する請求項１４記載の情報処理装置。
【請求項１７】
前記フラッシュ制御手段は、キャッシングされたデータを書き込むためのフラッシュ要求を前記ホストシステムから受けた場合に、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に書き込むためのライト要求を前記第２の外部記憶装置に対して発行し、前記ライト要求の発行後、前記第２の外部記憶装置内においてキャッシングされたデータを書き込むためのフラッシュ要求を前記第２の外部記憶装置に対して発行する第１のモードと、前記ホストシステムからフラッシュ要求を受けた際には何もせずに、前回のフラッシュ動作時から一定時間が経過した時または前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータのデータ量が所定量に達した時に、前記キャッシュ領域内および前記第１の外部記憶装置上に存在する前記第２の外部記憶装置への未書き込みデータを前記第２の外部記憶装置に書き込むためのライト要求を前記第２の外部記憶装置に対して発行する第２のモードとで動作する請求項３記載の情報処理装置。
【請求項１８】
前記ライト制御手段は、前記ライトＦＵＡ要求を受けた場合に、前記キャッシュ領域内にデータを格納し、または、前記キャッシュ領域内もしくは前記第１の外部記憶装置上のデータを書き換えて、ライトＦＵＡ要求を前記第２の外部記憶装置に対して発行することなく、前記ホストシステムに対して書き込み処理の完了を通知するように動作するその他の動作モードを有する請求項４記載の情報処理装置。
【請求項１９】
ドライバとデータの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うためのバッファ領域が確保されるメインメモリ、第１の外部記憶装置および第２の外部記憶装置を備える情報処理装置上で動作し、前記第１の外部記憶装置と前記第２の外部記憶装置とを制御するドライバであって、
前記バッファ領域と前記第１の外部記憶装置との間および前記バッファ領域と前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段を具備し、前記キャッシュ確保手段により前記メインメモリ上に確保された前記キャッシュ領域と、前記第１の外部記憶装置の一部または全部とを、前記第２の外部記憶装置のキャッシュとして利用するドライバ。
【請求項２０】
前記ホストシステムからデータの読み出しが要求されたとき、
（ａ１）読み出し対象データが前記キャッシュ領域内に存在する場合、前記キャッシュ領域内のデータを前記バッファ領域内に格納し、
（ａ２）読み出し対象データが前記キャッシュ領域内に存在しておらず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを読み出して前記バッファ領域に格納し、
（ａ３）読み出し対象データが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、前記第２の外部記憶装置上のデータを前記キャッシュ領域内に読み出し、前記読み出したデータを前記バッファ領域に格納し、前記読み出したデータを前記第１の外部記憶装置に蓄積する
リード制御手段と、
前記ホストシステムからデータの書き込みが要求されたとき、
（ｂ１）更新対象となるデータが前記キャッシュ領域内に存在し、前記第１の外部記憶装置に存在しない場合、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ２）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上の両方に存在する場合、前記第１の外部記憶装置上のデータを無効化し、前記キャッシュ領域内のデータを書き込み対象データに書き換えて、前記書き換えたデータを前記第１の外部記憶装置に蓄積し、
（ｂ３）更新対象となるデータが前記キャッシュ領域内に存在せず、前記第１の外部記憶装置上に存在する場合、前記第１の外部記憶装置上のデータを書き込み対象データに書き換え、
（ｂ４）更新対象となるデータが前記キャッシュ領域内および前記第１の外部記憶装置上のいずれにも存在しない場合、書き込み対象データを前記キャッシュ領域に格納し、前記格納したデータを前記第１の外部記憶装置に蓄積する
ライト制御手段と
をさらに具備する請求項１９記載のドライバ。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
実施形態によれば、情報処理装置は、バッファ領域が確保されるメインメモリと、第１の外部記憶装置と、第２の外部記憶装置と、前記第１の外部記憶装置と前記第２の外部記憶装置とを制御するドライバとを具備する。前記ドライバは、前記ドライバとデータの書き込みおよびデータの読み出しを要求するホストシステムとの間でデータの受け渡しを行うために確保される前記バッファ領域と前記第１の外部記憶装置との間および前記バッファ領域と前記第２の外部記憶装置との間に介在させるキャッシュ領域を前記メインメモリ上に確保するキャッシュ確保手段を有し、前記キャッシュ確保手段により前記メインメモリ上に確保された前記キャッシュ領域と、前記第１の外部記憶装置の一部または全部とを、前記第２の外部記憶装置のキャッシュとして利用する。