(57)【要約】【課題】ストレージシステムにおいて、磁気ディスク等の記憶媒体の増加に対応してホストコンピュータからの見かけ上の性能を改善するためのキャッシュ制御に関して、電源断などの障害に備えて設置されるバッテリーバックアップ用のバッテリーの容量を、ホストコンピュータからの見かけの性能を落とすことなく削減することができるストレージシステムを提供すること。【解決手段】ホストコンピュータからのライトデータをバッテリーバックアップされた不揮発メモリ１０２に格納し、記憶媒体１０４から読み出したリードデータを揮発メモリ１０３に格納する。ライトデータのアドレスに相当するデータを揮発メモリ１０３上で検索し、存在する場合はリードデータの無効化（即ち、揮発メモリ上の、該当アドレスのキャッシュの廃棄）を行った上で、不揮発メモリ１０２にライトデータを格納する。【選択図】図１
2010152747.tif 000002
【特許請求の範囲】
【請求項１】
上位装置の要求データ入出力速度よりもデータ入出力速度が遅い大記憶装置を備えると共に、前記上位装置と前記大記憶装置とのデータ入出力速度の差を緩和するキャッシュ手段のキャッシュメモリとして、停電時記憶保持用のバッテリーを有する不揮発性半導体メモリと、揮発性半導体メモリとを備えたストレージシステムにおいて、
前記上位装置からデータ書き込み要求が送出された場合に、前記書き込み要求データを前記不揮発性半導体メモリに一時格納すると共に、前記不揮発性半導体メモリに前記書き込み要求データを格納した時点で、前記上位装置に、前記書き込み要求データの書き込みを完了した旨の通知を応答する手段と、
前記上位装置からデータ読み出し要求が送出された場合に、前記大記憶装置から前記読み出し要求に合致するデータを読み込んで前記揮発性半導体メモリに格納すると共に、以後、前記上位装置からのデータ読み出し要求が送出された際には、前記揮発性半導体メモリに格納した前記データを読み出して前記上位装置に送出する手段と、
電源断から復旧した時点で、前記揮発性半導体メモリに格納した前記データのページが存在する場合には、前記ページを無効化する手段と、
を備えたことを特徴とするストレージシステム。
【請求項２】
前記不揮発性半導体メモリに前記上位装置からの書き込み要求データを書き込む際に実行する手段として、前記揮発性半導体メモリ上に前記書き込み要求データと同一アドレスのデータが存在するか否かを検証する手段と、前記揮発性半導体メモリ上に前記同一アドレスのデータが存在することが判明した場合には前記揮発性半導体メモリ上の前記データの無効化を行う手段と、を備えたことを特徴とする請求項１記載のストレージシステム。
【請求項３】
前記上位装置にはコンピュータシステムが含まれることを特徴とする請求項１記載のストレージシステム。
【請求項４】
前記大記憶装置には磁気ディスク装置または光ディスク装置が含まれることを特徴とする請求項１記載のストレージシステム。
【請求項５】
停電時記憶保持用のバッテリーを有する不揮発性半導体メモリと、揮発性半導体メモリとを備え、上位装置と大記憶装置とのデータ入出力速度の差を緩和するストレージのキャッシュ制御方法において、
前記上位装置からデータ書き込み要求が送出された場合に、前記書き込み要求データを前記不揮発性半導体メモリに一時格納すると共に、前記不揮発性半導体メモリに前記書き込み要求データを格納した時点で、前記上位装置に、前記書き込み要求データの書き込みを完了した旨の通知を応答するステップと、
前記上位装置からデータ読み出し要求が送出された場合に、前記大記憶装置から前記読み出し要求に合致するデータを読み込んで前記揮発性半導体メモリに格納すると共に、以後、前記上位装置からのデータ読み出し要求が送出された際には、前記揮発性半導体メモリに格納した前記データを読み出して前記上位装置に送出するステップと、
電源断から復旧した時点で、前記揮発性半導体メモリに格納した前記データのページが存在する場合には、前記ページを無効化するステップと、
を有することを特徴とするストレージのキャッシュ制御方法。
【請求項６】
停電時記憶保持用のバッテリーを有する不揮発性半導体メモリと、揮発性半導体メモリとを備え、上位装置と大記憶装置とのデータ入出力速度の差を緩和するキャッシュの制御をコンピュータに実行させるストレージのキャッシュ制御プログラムにおいて、
前記上位装置からデータ書き込み要求が送出された場合に、前記書き込み要求データを前記不揮発性半導体メモリに一時格納すると共に、前記不揮発性半導体メモリに前記書き込み要求データを格納した時点で、前記上位装置に、前記書き込み要求データの書き込みを完了した旨の通知を応答するステップと、
前記上位装置からデータ読み出し要求が送出された場合に、前記大記憶装置から前記読み出し要求に合致するデータを読み込んで前記揮発性半導体メモリに格納すると共に、以後、前記上位装置からのデータ読み出し要求が送出された際には、前記揮発性半導体メモリに格納した前記データを読み出して前記上位装置に送出するステップと、
電源断から復旧した時点で、前記揮発性半導体メモリに格納した前記データのページが存在する場合には、前記ページを無効化するステップと、
を有することを特徴とするストレージのキャッシュ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステム、ストレージのキャッシュ制御方法、及びキャッシュ制御プログラムに関し、特に磁気ディスクなどの、ホストコンピュータの処理速度に較べて低速かつ大容量である記憶媒体への読み書きを行う際に低速な記憶媒体の性能保証を行うための、いわゆるキャッシュメモリと呼ばれる高速な記憶媒体（ＤＲＡＭやフラッシュメモリ等）の制御手段において、電源断時にホストコンピュータからキャッシュメモリに書き込まれたデータの保証を行うストレージシステム、ストレージのキャッシュ制御方法、及びキャッシュ制御プログラムに関する。
【背景技術】
【０００２】
従来のストレージシステムでは、ホストコンピュータからのライトデータをキャッシュメモリ（以下、「キャッシュ」と略称することがある）に一時格納し、キャッシュメモリに格納した時点でホストコンピュータに対してライトデータがストレージに書き込まれた旨を応答し、その後にキャッシュメモリに書き込まれたライトデータを、キャッシュに比して低速ではあるが大容量である媒体（磁気ディスク等）に書き込むことにより、ホストコンピュータから見たデータのライト性能を向上させる手法が用いられてきた（ライトバックキャッシュアルゴリズムと呼ばれている）。
【０００３】
この場合、キャッシュとしては揮発性の半導体メモリ（ＤＲＡＭ等、以下、単に「揮発メモリ」と呼称する）が使用されるのが一般的であり、これらの揮発メモリは、性能は良いが、ビット当たりの単価が高く、かつ停電時などの不意の電源断時においては書き込まれたデータが喪失することがあり、このため、ライトバックキャッシュアルゴリズムによりキャッシュに書き込まれたデータが電源断により喪失することがあるため、バッテリー等を用いてバックアップする方法が採用されている。
【０００４】
例えば、特許文献１に記載のディスクキャッシュ装置では、データの内容の同一性が保たれていない期間が長くなり、停電等の障害によって失われる可能性も高くなるという問題点に対処するために、各エントリに対して、データの書き込みが行われた時刻が記憶されており、書き込み時刻から所定時間が経過しても、ディスク装置への書き込みが行われていないエントリが存在した場合には、そのエントリのデータのディスク装置への書き込みを行うことを開示している。
【０００５】
また、特許文献２に記載のディスクキャッシュ装置では、バッテリーバックアップされていない揮発性メモリと、バッテリーバックアップされている不揮発性メモリとを有しているディスクキャッシュ装置が提案されており、ディスクキャッシュ装置からホスト装置へのリードデータに対しては、揮発性メモリの空エントリに格納し、ホスト装置からディスクキャッシュ装置へのライトデータに対しては、そのアドレスのデータのエントリが揮発性メモリに存在するか否かを判定し、存在すれば当該エントリを無効化した後、存在しなければそのまま、ライトデータを不揮発性メモリの空エントリに格納することを開示している。
【特許文献１】特開平２−１９９４１号公報
【特許文献２】特開平８−１３７７５３号公報：（図１，３〜５、段落１２〜１３，２２〜３２）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、昨今の情報処理量の増加により、ストレージ１台当たりに格納されるデータ量は増加の一途を辿り、内蔵される磁気ディスクの容量も大幅に増え、接続されるホストコンピュータの数も増加している。このため、キャッシュに必要な記憶容量も増加しており、このため、上記背景技術で述べた従来のストレージシステムにあっては、キャッシュに用いられる不揮発メモリをバックアップするためのバッテリーの容量も増加しているが、容量が大きなバッテリーを用いることはコストの増加を招き、かつストレージにおけるバッテリーの占有体積や重量なども増加するという問題点があった。
【０００７】
よって、本発明のストレージシステムにおいては、ストレージの容量増に対応して設けられた前述のキャッシュ（特にＤＲＡＭ等の揮発性半導体メモリ等を用いたキャッシュ）の、電源断時のデータ保護手段として必要な、不揮発メモリをバックアップするためのバッテリーの容量を削減することが課題であった。
このため、従来の手法ではキャッシュ全体に渡って行っていたバッテリーバックアップ手段において、ホストコンピュータからの見かけの性能を落とすことなくバッテリー容量を削減することが具体的な課題であった。
【０００８】
なお、前述の特許文献１の提案は、ディスクキャッシュ装置に関する技術であり、停電等が発生しても、その発生時刻から所定時間以内に書き込まれたデータだけが、失われることになるので、停電等による影響を少なくすることはできる。しかし、キャッシュメモリとしてバッテリバックアップした不揮発メモリを使用していないので、データの喪失を完全には防げないし、また、ライトバックを行っていることによる効果を減ずることにもなる。
また、前述の特許文献２の提案は、やはり、ディスクキャッシュ装置に関する技術であり、目的は本発明のストレージシステムと類似しているが、周知のＬＲＵアルゴリズムのみを述べており、電源断時の保護（バックアップ）に必要な復旧手段については、動作が陽に説明されておらず、また、請求項としても、効果としても全く記載されていない。
【０００９】
本発明は、上記従来の問題点に鑑みてなされたものであって、ストレージシステムにおいて、磁気ディスク等の記憶媒体の増加に対応してホストコンピュータからの見かけ上の性能を改善するためのキャッシュ制御に関して、電源断などの障害に備えて設置されるバッテリーバックアップ用のバッテリーの容量を、ホストコンピュータからの見かけの性能を落とすことなく削減することができるストレージシステムを提供することを目的とする。
本発明の他の目的は、電源断が発生した時にも、格納されているデータを損なうことがないストレージシステムを提供することにある。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明に係るストレージシステムは、上位装置の要求データ入出力速度よりもデータ入出力速度が遅い大記憶装置を備えると共に、前記上位装置と前記大記憶装置とのデータ入出力速度の差を緩和するキャッシュ手段のキャッシュメモリとして、停電時記憶保持用のバッテリーを有する不揮発性半導体メモリと、揮発性半導体メモリとを備えたストレージシステムにおいて、前記上位装置からデータ書き込み要求が送出された場合に、前記書き込み要求データを前記不揮発性半導体メモリに一時格納すると共に、前記不揮発性半導体メモリに前記書き込み要求データを格納した時点で、前記上位装置に、前記書き込み要求データの書き込みを完了した旨の通知を応答する手段と、前記上位装置からデータ読み出し要求が送出された場合に、前記大記憶装置から前記読み出し要求に合致するデータを読み込んで前記揮発性半導体メモリに格納すると共に、以後、前記上位装置からのデータ読み出し要求が送出された際には、前記揮発性半導体メモリに格納した前記データを読み出して前記上位装置に送出する手段と、電源断から復旧した時点で、前記揮発性半導体メモリに格納した前記データのページが存在する場合には、前記ページを無効化する手段と、を備えたことを特徴とするストレージシステムを提供するものである。
【００１１】
また、本発明に係るストレージのキャッシュ制御方法は、停電時記憶保持用のバッテリーを有する不揮発性半導体メモリと、揮発性半導体メモリとを備え、上位装置と大記憶装置とのデータ入出力速度の差を緩和するストレージのキャッシュ制御方法において、前記上位装置からデータ書き込み要求が送出された場合に、前記書き込み要求データを前記不揮発性半導体メモリに一時格納すると共に、前記不揮発性半導体メモリに前記書き込み要求データを格納した時点で、前記上位装置に、前記書き込み要求データの書き込みを完了した旨の通知を応答するステップと、前記上位装置からデータ読み出し要求が送出された場合に、前記大記憶装置から前記読み出し要求に合致するデータを読み込んで前記揮発性半導体メモリに格納すると共に、以後、前記上位装置からのデータ読み出し要求が送出された際には、前記揮発性半導体メモリに格納した前記データを読み出して前記上位装置に送出するステップと、電源断から復旧した時点で、前記揮発性半導体メモリに格納した前記データのページが存在する場合には、前記ページを無効化するステップと、を有することを特徴とするストレージのキャッシュ制御方法を提供するものである。
【００１２】
さらに、本発明に係るストレージのキャッシュ制御は、停電時記憶保持用のバッテリーを有する不揮発性半導体メモリと、揮発性半導体メモリとを備え、上位装置と大記憶装置とのデータ入出力速度の差を緩和するキャッシュの制御をコンピュータに実行させるストレージのキャッシュ制御プログラムにおいて、前記上位装置からデータ書き込み要求が送出された場合に、前記書き込み要求データを前記不揮発性半導体メモリに一時格納すると共に、前記不揮発性半導体メモリに前記書き込み要求データを格納した時点で、前記上位装置に、前記書き込み要求データの書き込みを完了した旨の通知を応答するステップと、前記上位装置からデータ読み出し要求が送出された場合に、前記大記憶装置から前記読み出し要求に合致するデータを読み込んで前記揮発性半導体メモリに格納すると共に、以後、前記上位装置からのデータ読み出し要求が送出された際には、前記揮発性半導体メモリに格納した前記データを読み出して前記上位装置に送出するステップと、電源断から復旧した時点で、前記揮発性半導体メモリに格納した前記データのページが存在する場合には、前記ページを無効化するステップと、を有することを特徴とするストレージのキャッシュ制御プログラムを提供するものである。
【発明の効果】
【００１３】
以上説明したように、本発明のストレージシステムによれば、記憶媒体（磁気ディスク装置等の大記憶装置）から読み出したデータを揮発メモリに格納し、ホストコンピュータから送られてくるライトデータを、バッテリーバックアップ等の手段で保護された不揮発メモリに配置することで、ストレージシステムに必要なメモリの記憶容量を確保するので、システム全体として必要な大規模なキャッシュの容量を確保すると共に、一方では、バッテリーバックアップに必要な不揮発メモリ量を削減することで、バックアップに必要なバッテリーの容量を削減し、かつ、電源断などの障害発生時においてもデータ喪失を防ぐことが可能となる効果がある。
【発明を実施するための最良の形態】
【００１４】
以下、本発明に係るストレージシステムの原理について説明する。
従来のストレージシステムの問題点は、ホストからのライトデータに対するキャッシュと、ストレージシステムの記憶媒体からのリードデータに対するキャッシュとの、いずれのキャッシュについてもバッテリーバックアップを行っていたことにある。通常、記憶媒体（例えば磁気ディスク等）からのリードデータのキャッシュは、この記憶媒体上にデータが有り、よって、電源断にキャッシュのデータは使用不可となっても、記憶媒体上のデータは消えず、再びホストコンピュータからのアクセスがあれば、キャッシュメモリ上に展開できる。
一方、ホストコンピュータからのライトデータは、キャッシュに格納された時点で書き込み完了を応答する場合（即ちライトバックキャッシュ）、一般にホストコンピュータには、このデータは残っておらず、ストレージシステム側のキャッシュに存在するのみであり、よって、ストレージシステムの電源断により保護すべき対象である。
【００１５】
本発明のストレージシステムは、ホストコンピュータからのライトデータを一時格納するための、半導体メモリがバッテリーバックアップされた不揮発メモリと、記憶媒体から読み出したデータを一時格納するための揮発メモリとを備え、ホストからのライトデータは不揮発メモリ、ストレージの記憶媒体（磁気ディスク等）から読み出したデータは揮発メモリに配置する。これにより、バッテリーバックアップに必要なホストコンピュータからのライトデータはシステムの電源断から保護すると共に、バッテリーバックアップの不要なリードキャッシュはバッテリーバックアップの必要が無い揮発メモリに配置する。このように構成することにより、本来必要なライトバックキャッシュのみのバッテリーバックアップを行うので、バッテリー容量を大幅に削減することを可能にする。
【００１６】
より具体的には、ホストコンピュータからライトリクエストが送られた際に、ライトリクエストで示されるアドレスのライトデータが不揮発メモリまたは揮発メモリのいずれに存在するのかを判断するキャッシュ管理手段を有し、このキャッシュ管理手段は不揮発メモリ及び揮発メモリでキャッシュされたデータのホストから見たアドレスとデータとをリンク付けして管理し、この管理に際してはテーブル等のキャッシュ管理情報を参照する。このキャッシュ管理情報は電源断でも消えない不揮発領域上に配置するが、前述の不揮発メモリの一部を利用しても良く、若しくは別途不揮発メモリを確保して使用しても良い。
【００１７】
さらに、キャッシュ管理手段は、ホストコンピュータからのライトデータに対して、不揮発メモリと揮発メモリのいずれにも同一アドレスのデータが存在しなければ、不揮発メモリ上にライトデータを格納する領域を確保し、該領域にデータを格納する。また、ホストコンピュータからのライトデータのアドレスで示されるデータが不揮発メモリ上に存在すれば、該不揮発メモリ上のデータをホストコンピュータから送られたライトデータで置き換える。さらに、ホストコンピュータから送られたライトデータのアドレスで示されるデータが不揮発メモリ上に無く、揮発メモリ上に有れば、該揮発メモリ上の該データを無効化し、不揮発メモリ上に新規の領域を確保して、該領域にホストコンピュータからのライトデータを格納する。
【００１８】
また、ホストコンピュータからストレージシステムに対して、リードのリクエストが送られた場合には、キャッシュ管理手段は、不揮発メモリ上、或いは揮発メモリのいずれかにリードのリクエストで要求されたデータが存在するか否かを確認し、両者のいずれかに存在すれば、該領域のデータをホストコンピュータに送り、さもなくて、リードのリクエストで要求されたデータが不揮発メモリ、揮発メモリのいずれにも存在しなければ、揮発メモリ上に領域を確保し、該リードリクエストで示されるアドレスのデータを記憶媒体から読み出して該領域に確保すると共に、ホストコンピュータに対してはリードリクエストの結果として、該データを送る。
【００１９】
なお、停電等の電源断時には、キャッシュ管理情報上には揮発メモリのデータが有効な状態で復帰し、揮発メモリには実際のデータが無い状態となるため、キャッシュ管理手段は、揮発メモリ上のデータをキャッシュ管理情報の内容を参照して無効化（即ちキャッシュデータとしては破棄）し、電源復帰後に通常の処理に復帰する。
【００２０】
以下、本発明のストレージシステムの最良の実施形態について、図面を参照して詳細に説明する。
図１は、本発明の実施の形態に係るストレージシステムの全体構成を示す構成図である。
同図に示す本実施の形態に係るストレージシステムは、ホストコンピュータ（図示は省略する）からライトデータが送られデータが不揮発メモリまたは揮発メモリのいずれに存在するかを判断するキャッシュ管理手段１０１と、キャッシュ管理情報が電源断でも消えない不揮発メモリ１０２と、キャッシュ管理情報が電源断には消される揮発メモリ１０３と、磁気ディスク等の記憶媒体１０４と、を備えて構成される。
【００２１】
以下、本実施の形態に係るストレージシステムの動作を説明する。
キャッシュ管理手段１０１は、不揮発メモリ１０２と、揮発メモリ１０３のキャッシュされたデータを、ホストコンピュータからリードリクエスト若しくはライトリクエストで指定されるアドレスとデータとをリンク付けて管理するが、この管理はキャッシュ管理情報を参照して行う。キャッシュ管理情報は電源断でも消えない不揮発メモリ１０２に配置する。また、ホストコンピュータからのライトデータは記憶媒体１０４上にマッピングされたアドレスもライトデータと同時に送り、応答性向上のために不揮発メモリ１０２に一時蓄積された後、最終的に記憶媒体１０４に書き込まれる。また、ホストコンピュータは前述の記憶媒体１０４のアドレスを指定して、リードリクエストを発行する。キャッシュ管理手段１０１は、記憶媒体１０４または不揮発メモリ１０２または揮発メモリ１０３に有る、該アドレスで示される最新のデータをホストコンピュータに返す。
【００２２】
キャッシュ管理情報の構成は図２、図６〜９で示される。なお、図２は、本実施の形態に係るストレージシステムのキャッシュ管理情報の全体構成を示し、図６は、空きページ管理情報を示し、図７は、揮発メモリに割り当てられるCleanなキャッシュページのＬＲＵ構成を示し、図８は、不揮発メモリに割り当てられるDirtyなキャッシュページのＬＲＵ構成を示し、図９は、不揮発メモリに割り当てられるCleanなキャッシュページのＬＲＵ構成を示している。
【００２３】
以下、前述の動作を、図２、図６〜９を参照して、さらに詳細に説明する。
図２、図６〜９に構成を示すキャッシュ管理情報は不揮発メモリ１０２上に存在し、電源断などの障害でも記憶内容は維持される。さらに前述のキャッシュ管理手段１０１はキャッシュ管理情報としてキャッシュエントリ２０１、キャッシュタグ２０２の情報を有する。キャッシュエントリ２０１は、ホストコンピュータが指定するアドレスからハッシュなどの手法により計算し、同じアドレスであれば同一のキャッシュエントリ２０１が選択される。ここではハッシュにより計算を行うこととするが、他の同等の方法を利用しても構わない。
キャッシュエントリ２０１のそれぞれのエントリにはキャッシュタグ２０２へのポインタが格納されており、図２に示すような双方向リンク構造を取ることを可能にしている。
【００２４】
図３は、キャッシュタグ２０２の構成を示す構成図である。同図に示すキャッシュタグ２０２は、キャッシュ情報３０１、ページポインタ３０２、ＬＲＵポインタ３０３、及びタグポインタ３０４から成る。キャッシュ情報３０１は、キャッシュタグで管理されるページ（詳細は後述するが、データそのものが格納される領域）が揮発メモリまたは不揮発メモリのいずれかに存在するか否かを示すフラグのメモリ種別３０５と、Dirty情報３０６と、媒体格納アドレス３０７から成る。Dirty情報とは、当該ページのデータがDirty（即ち、ライトバックなどによりホストコンピュータから送られたライトデータがキャッシュに存在し、媒体上に未だ書き込まれていない状態）であるか否かを示す情報である。ここではDirtyであれば１を書き込み、Clean（即ち、媒体上のデータと同一のデータがキャッシュ上に存在する状態）であれば、０を書き込むものとする。
【００２５】
媒体格納アドレス３０７は、ホストコンピュータからのライトデータ、若しくは媒体から読み出したデータをキャッシュメモリ上に一時配置する際に、キャッシュメモリ上のデータが記憶媒体１０４上のどのアドレスに相当するかを示す情報である。
また、ページポインタ３０２は、実際にデータが格納される領域であるページのポインタを示し、このポインタは図４にページ構成を示す不揮発メモリ４０１上のページ、または図５にページ構成を示す揮発メモリ５０１上のページの、いずれかのページのメモリの先頭アドレスを指し示す。
【００２６】
ＬＲＵポインタ３０３はライトバックキャッシュの掃き出しやキャッシュの格納領域であるページが新規に取得できなくなった場合に、Cleanな状態のページの再利用を行う際の優先順位を決める際などに用いる。
以下、図７、図８、図９を参照して説明する。図７は、揮発メモリのCleanページを管理するアルゴリズムがＬＲＵ（先入れ後出しアルゴリズム、または後入れ先出しアルゴリズム）の場合の揮発エントリの構成を示す。このＬＲＵに基づく構成の揮発エントリは、記憶媒体１０４から読み出して揮発メモリ上に一時格納したデータの管理を行うための情報である。揮発Clean LRUエントリ７０１を先頭に、キャッシュタグ２０２のリンク構造をとる。
【００２７】
キャッシュタグ２０２のＬＲＵポインタ３０３ａが次のキャッシュタグ７０２の先頭を示し、ＬＲＵポインタ３０３ｂはエントリに近い側のキャッシュタグの先頭アドレスを格納するリンク構造を取る。リンクの最後のキャッシュタグ７０３のＬＲＵポインタ３０３ａはリンクの最後を示す情報であるＮＵＬＬ（ゼロ）を書き込み、最終のタグであることを示す。また、エントリ直後のキャッシュタグのＬＲＵポインタ３０３ｂは、エントリのアドレスを書き込む。この様な双方向リンク構造を取ることで、リンクの途中のキャッシュタグを取り除くことを容易にする。なお、前述の構成は、図８に示す不揮発メモリ上のDirtyデータを管理するＬＲＵ、及び図９の不揮発メモリ上のCleanデータを管理するＬＲＵでも同様に採用している。
【００２８】
また、キャッシュエントリ２０１のリンク構造を構成するタグポインタ３０４も双方向リンク構造をとり、ＬＲＵポインタと同様な操作を可能にしており、タグポインタ３０４ａはリンクの後ろ側のタグ、タグポインタ３０４ｂはエントリに近い側のタグの先頭アドレスを格納する。
同様に、図８の不揮発メモリのDirtyページを管理するリンク、と図９の不揮発メモリのCleanページを管理するリンクとが存在し、それぞれキャッシュ管理情報として、不揮発メモリ上に存在する。
【００２９】
さらに、現在使用中のページとは別に、キャッシュエントリで管理されていない、つまり未だ割り当てられていないページを管理するためのリンクも存在し、図６の空きページ管理リンクで管理を行い、最初の電源投入時などの初期状態のページが、全く割り当てられていない時などには全てのページがこの空きページ管理リンクに接続される。このリンクは不揮発メモリ、揮発メモリの個別に管理され、不揮発メモリ空きエントリ６０１、あるいは揮発メモリ空きエントリ６０４の何れかに接続され、キャッシュエントリと同様に、キャッシュタグのタグポインタ３０４のリンク構造により管理され、最後のタグはリンクの最後であるＮＵＬＬを示す情報をタグポインタに書き込み、ページポインタ３０２は初期の電源投入時に不揮発メモリまたは揮発メモリ上に割当られた個別のページのポインタを指し示す。
【００３０】
図１０、図１１、及び図１２は、本実施形態に係るストレージシステムの全体の動作を示すフローチャート図であり、図１０は、リードリクエスク時の動作、図１１は、ライトリクエスク時の動作、図１２は、電源再立ち上げ時の動作を、それぞれ示すものである。以下、図１０、図１１、及び図１２に示すフローチャートを使用して、本実施の形態の全体の動作について詳細に説明する。
まず、ステップＳ１では、ホストコンピュータからライトのリクエストを受け取ると、キャッシュ管理手段１０１は、受け取ったライトリクエストのアドレスがキャッシュエントリ２０１のリンクに存在するキャッシュタグ内の核のアドレス３０７と一致するタグを検索する。
ステップＳ２では、この検索を検証し、該当するタグが無かった場合はステップＳ３に進み、該当するタグが有った場合はステップＳ６に移る。
【００３１】
ステップＳ３では、不揮発メモリ空きエントリ６０１のリンクから任意のキャッシュタグを取り出す。
ステップＳ４では、ステップＳ１で検索を行ったキャッシュエントリのリンクに、タグポインタ３０４操作して該取り出したキャッシュタグを挿入し、同キャッシュタグのLRUポインタ３０３を操作して揮発Clean LRUエントリ７０１のリンクに挿入する。そして前述のタグのキャッシュ情報のDirty情報３０６を１のDirtyにセットし、メモリ種別３０５を１の不揮発にセットする。但し、ステップＳ３で、不揮発メモリ空きエントリ６０１のリンクにキャッシュタグが存在しない場合は、不揮発Clean LRUエントリのリンクのキャッシュタグを用いる、更に不揮発Clean LRUエントリのリンクにもキャッシュタグが無い場合には、不揮発Dirty LRUエントリのリンクからキャッシュタグを取り出し、該キャッシュタグのページポインタで示されるページのデータを媒体に書き込んだ後、該キャッシュタグを用いる。
【００３２】
ステップＳ５では、該タグのページポインタ３０２のアドレスにホストコンピュータからのデータを格納し、ホストコンピュータにデータを書き込んだ旨を示す情報を送信し、ホストコンピュータからのライトリクエストを終了する。
ステップＳ６では、ステップＳ２で該当するアドレスの一致する格納アドレス３０７のキャッシュタグが有った場合の処理として、該当するキャッシュタグのキャッシュ情報３０１のDirty情報３０６が１のDirtyであるか否かを判定し、Dirtyであれば、ステップＳ５に移る。
ステップＳ７では、キャッシュ情報３０１のDirty情報３０６がDirtyでない（即ち、Cleanである）場合の処理として、キャッシュ情報３０１のメモリ種別３０５の判定を行い、メモリ種別３０５が１の不揮発であれば、ステップＳ８に進み、さもなくて、メモリ種別３０５が不揮発でなければ、ステップＳ９に移る。
【００３３】
ステップＳ８では、Dirty情報３０６をCleanからDirtyに書き換えた後、該キャッシュタグのページポインタ３０２で示されるアドレスのページにホストコンピュータからのライトデータを書き込み、ステップＳ５に移る。
ステップＳ９では、ステップＳ７でキャッシュ情報３０１のメモリ種別３０５が１の不揮発でない（即ち０のCleanである）場合の処理として、該タグのページの無効化処理を行う。
【００３４】
この無効化処理には、該ページタグをキャッシュエントリ２０１のリンクとＬＲＵのリンク（この場合は揮発Clean LRUエントリのリンク）から取り外し、揮発メモリ空きエントリ６０４のリンクに挿入することで揮発メモリ上のキャッシュを破棄する。その後に、新たに不揮発メモリ空きエントリ６０１のリンクから新たにタグを取り出し、該タグのキャッシュ情報３０１のDirty情報３０６を１のDirtyに、同じくメモリ種別を１の不揮発に変更を行い、ホストコンピュータからのライトリクエストのアドレスでサーチを行ったキャッシュエントリのリンクを接続し、その後、不揮発Dirty LRUエントリ８０１のリンクに接続する。その後に、ステップＳ５に移る。
【００３５】
図１１は、ホストコンピュータからリードリクエストが有った場合の動作を示すフローチャート図である。
まず、ステップＳ２１では、ホストコンピュータからのリードリクエストをキャッシュ管理手段１０１が受け取ると、該リクエストで示されたリードのアドレスを、ハッシュを用いてキャッシュエントリを決定し、該キャッシュエントリのリンクに接続されたキャッシュタグ２０１の格納アドレス３０７に該当するアドレスを検索する。
次に、ステップＳ２１では、この検索結果を検証し、格納アドレス３０７で示されるアドレスが無い場合はステップＳ２３に進み、さもなくて、格納アドレス３０７で示されるアドレスが有る場合はステップＳ２４に移る。
【００３６】
ステップＳ２３では、ステップＳ２２で、リードリクエストで指定されたアドレスがキャッシュタグ２０１の格納アドレス３０７から見つからなかった場合の処理として、新たに揮発メモリ空きエントリ６０４のリンクからキャッシュタグを取り出すか、無ければ揮発Clean LRUエントリのリンクからタグを取り出してデータを格納するページを取得し、その後、該タグのアドレスを最初に検索を行ったキャッシュエントリのリンクと揮発Clean LRUエントリのリンクにそれぞれ挿入する。この時、キャッシュ情報３０１のDirty情報はCleanに、メモリ種別は揮発に設定する。その後、該リードリクエストのアドレスを格納アドレス３０７に書き込むと共に、該アドレスで指定される記憶媒体１０４のデータを読み出して、ページポインタ３０２のアドレスで示されるページに書き込み、ステップＳ２４に進む。
【００３７】
ステップＳ２４では、該タグのページアドレス３０２のアドレスで示されるページのデータをホストコンピュータに送り、リードリクエストが終了した旨も返し、該リードリクエストを終了する。
図１２は、電源断後の再起動時の復旧処理を示すフローチャート図である。
電源断から復旧した直後は、電源断により揮発メモリ１０３上にあるページのデータは消去されており、電源断により保護されたキャッシュ管理情報と矛盾した状態になる。このため、キャッシュ管理情報から、揮発メモリ１０３で消去されたページの情報を取り除かねばならないので、図１２のフローチャート図で示す処理を行う。
【００３８】
まず、ステップＳ３１では、復旧処理中はキャッシュ管理情報が矛盾した状態でホストコンピュータからのライト、若しくはリードのリクエストを受け付けると誤動作を引き起こす可能性があるため、復旧処理が完了するまでリードもしくはライトのリクエストを一時停止する。そして、最初に揮発Clean LRUエントリ６０４のポインタを参照する。
ステップＳ３２では、揮発Clean LRUエントリ６０４のポインタが最後（=NULL）か否かのチェックを行い、揮発Clean LRUエントリ６０４のポインタがNULLでなければ処理するキャッシュタグが有るので次のステップＳ３３に進む。さもなくて、揮発Clean LRUエントリ６０４のポインタがNULLであれば処理するキャッシュタグが無いので、ステップＳ３５に移る。
【００３９】
ステップＳ３３では、該ポインタで示されるキャッシュタグのタグポインタ３０４で示されるキャッシュエントリのリンクから取り除くと共に、揮発Clean LRUエントリ７０１のリンクからも取り除く。その後、ステップＳ３４では、該キャッシュタグを揮発メモリ空きエントリ６０１の最後に繋げ、ステップＳ３１に戻って残りのキャッシュタグの処理の継続を行う。
ステップＳ３５では、揮発性記憶媒体上のページの無効化の処理が完了したことになるので、ホストコンピュータからのリードあるいはライトリクエストの受付可能な状態に設定し、後に通常の状態に復帰する。
【実施例】
【００４０】
図１３は、本実施の形態に係るストレージシステムにおけるキャッシュ制御情報の初期値の１例を示す説明図である。
次に、図１０、図１１、図１２のフローチャートを使用し、図１３に示すキャッシュ制御情報の初期値を参照しながら、本実施形態に係るストレージシステムの動作を具体的な実施例で説明する。
この実施例では、図１に示した記憶媒体１０４は磁気ディスク装置（ＨＤＤ）やシリコンディスク、光ディスク等のリード／ライト可能な記録媒体によって構成してよい。
記憶媒体１０４は前記の記憶媒体を１以上を有し、ホストアドレスからのリードまたはライトリクエストで、指定するアドレスに対して唯一のデータ格納場所を決定可能とする。
【００４１】
また、実際に記憶媒体にデータ書き込まれる際に、媒体欠陥や媒体障害によりリードまたはライトができなくなることに備えて、同一データを複数の媒体に書くことや、ディスクアレイシステムで用いられるＲＡＩＤ制御等により、パリティを使ったデータの冗長化を行ってもよい。キャッシュ管理手段１０１から、これらの記憶媒体に対してリード動作またはライト動作を行う際には、これらの冗長化の処理は隠蔽化され、ホストコンピュータからのリードリクエストまたはライトリクエストで指定されるアドレスにより、仮想的に１つの格納場所に決定する。以下の説明では、記憶媒体１０４に対するリード動作またはライト動作は、これらの冗長化処理が隠蔽化されているものとする。また、これらホストコンピュータが指定するアドレスと格納アドレスは同一のアドレス空間を示すが、キャッシュ管理情報内で示されるポインタは、これらとは別のアドレス空間での管理が行われる。
【００４２】
図１４は、本実施の形態に係るストレージシステムにおけるキャッシュ制御情報の１実施例としての状態図を示す説明図である。
以下、図１、図３、図１０、図１３、及び図１４を参照して、本ストレージシステムに対してホストコンピュータからのライトリクエストが有った場合の１実施例について説明する。ホストコンピュータからライトリクエストを受け取ると、キャッシュ管理手段１０１は、受け取ったライトリクエストのアドレスを、キャッシュエントリ２０１のリンクに存在するキャッシュタグ内で検索する。この時、ホストコンピュータから受け取ったライトリクエストで示されるアドレスが、例えば“４７００”とし、図１３でキャッシュされたデータを管理するキャッシュタグのリンクがキャッシュエントリ１３０１のみに接続された状態であるものとする。
【００４３】
また、アドレス“４７００”のアドレスのハッシュ値の計算がキャッシュエントリ１３０１のエントリを指し示すものとする。すると、キャッシュ管理手段１０１が指定されたアドレスからキャッシュエントリ１３０１のリンクに、該当するアドレスのタグが存在するか否かの検索を行う。キャッシュエントリ１３０１に格納されているポインタがこの時“７８０６”であり、キャッシュ管理手段１０１は、次に、アドレス“７８０６”で指定されるキャッシュタグ１３０２の格納アドレスの内容と、ホストコンピュータから指定されたアドレス“４７００”との比較を行うと、キャッシュタグ１３０２の格納アドレスは“１２Ａ０００”であるため一致しない。
【００４４】
そこで、キャッシュ管理手段１０１は、キャッシュタグ１３０２のタグポインタを参照し、次のキャッシュタグが存在するか否かの判断を行う。このため、キャッシュ管理手段１０１は、キャッシュタグの後方を参照するタグポインタＦ３０４ａの値で示されるキャッシュタグを参照する。この時、キャッシュタグ１３０２のタグポインタＦ３０４ａの値は“６４５０”であるので、この“６４５０”で指定されるキャッシュタグ１３０３を参照する。前回と同様にキャッシュタグ１３０３の格納アドレスを参照すると、“３６Ｃ００”であり、ホストコンピュータから指定されたアドレス“４７００”とは異なるため、更に後方のキャッシュタグの参照を行う。同様にキャッシュタグ１３０３のタグポインタＦ３０４ａの値は“３２００”である。
【００４５】
この“３２００”で示されるキャッシュタグはキャッシュタグ１３０４であり、キャッシュタグ１３０４の格納アドレスは“４７６００”である。やはり、ホストコンピュータの指定するアドレス“４７００”とは異なるため、次のキャッシュタグが存在するか否かを引き続き検索するが、キャッシュタグ１３０４のタグポインタＦ（３０４ａ）（図３に示すキャッシュタグの符号を参照）は“ＮＵＬＬ”を示しているので、キャッシュタグ１３０４はキャッシュエントリ１３０１の最後のタグであることが判定できる。故にホストコンピュータから指定されたアドレスで示されるデータは存在しないこととなり、検索の結果、該当するキャッシュタグは無いと判定する（ステップＳ１）。
【００４６】
次に、該アドレスのタグが無いと判定すると（ステップＳ２：ＮＯ）、不揮発メモリ空きエントリ１３４１のリンクの先頭からタグを取り出す。これには図１４に示す不揮発空きエントリ１３４１を参照し、該不揮発空きエントリ１３４１で指し示されるキャッシュタグ１３４２を取り出す。不揮発空きエントリ１３４１のタグポインタは“７２００”を示しているので、“７２００”のキャッシュタグを参照する。キャッシュタグ１３４２を不揮発空きエントリのリンクから外すには、キャッシュタグエントリ１３４２のタグポインタＦ（３０４ａ）の内容をタグポインタＢ（３０４ｂ）のポインタで示されるキャッシュタグのタグポインタＦ（３０４ａ）にコピーする。
【００４７】
ここで不揮発空きエントリ１３４１のポインタは、他のキャッシュタグのタグポインタＦ（３０４ａ）と同等の扱いと考える。そして、キャッシュタグ１３４２のタグポインタＢ（３０４ｂ）の内容をタグポインタＦ（３０４ａ）のポインタで示されるキャッシュタグ１３４３のタグポインタＢ（３０４ｂ）に書き込むことで実現する。すると、不揮発空きエントリ１３４１の内容はキャッシュタグ１３４３のアドレス“８２５０”となり、キャッシュタグ１３４３のタグポインタＢ（３０４ｂ）の内容は、不揮発空きエントリ１３４１を示す“７２００”で置き換わり、これにてキャッシュタグ１３４２の取り出しを完了する。
【００４８】
他のエントリに関しても、キャッシュタグの取り出しは同様に行う。また、この時不揮発空きエントリ１３４１に空きページが無ければ、不揮発Clean LRUエントリからキャッシュタグを取り出して利用するか、不揮発Dirty LRUのキャッシュタグを取り出して利用する。不揮発Dirty LRUを取り出す際には、ページポインタで示されるページのデータを格納アドレスで一意に決定できる記憶媒体の領域に書き込んだ後に使用する（ステップＳ３）。
【００４９】
キャッシュタグを取り出した後は、キャッシュタグ１３４２をキャッシュエントリ１３０１の最後に接続すると共に、不揮発Dirtyエントリ１３２１の最後に接続する。これには、キャッシュエントリ１３０１のポインタのキャッシュタグを順次後方にタグポインタＦ（３０４ａ）を参照しながらタグポインタＦ（３０４ａ）がＮＵＬＬになるまで順次辿る。キャッシュタグ１３０４が最後のキャッシュタグとなるので、キャッシュタグ１３０４のタグポインタＦ（３０４ａ）の内容を、キャッシュタグ１３４２の先頭アドレスの値に置き換え、キャッシュタグ１３４２のタグポインタＦ（３０４ａ）の値をＮＵＬＬに、キャッシュタグ１３４２のタグポインタＢ（３０４ｂ）の内容をキャッシュタグ１３０４の先頭アドレスを格納する。
【００５０】
ここではキャッシュタグ１３０４のタグポインタ３０４ａの値が“８３１０”に、キャッシュタグ１３４２のタグポインタＦ（３０４ａ）の値が“ＮＵＬＬ”に、そしてキャッシュタグ１３４２のタグポインタＢ（３０４ｂ）の値が“３２００”となり、キャッシュエントリ１３０１を先頭とするリンクが完成する。また、同時に不揮発Dirty LRUエントリも同様にしてリンクの最後に追加を行う。するとキャッシュタグ１３１２のLRUポインタＦ(３０３ａ)の内容はキャッシュタグ１３４２の先頭アドレスである“８３１０”に置き換わり、キャッシュタグ１３４２のLRUポインタF３０３ａは“ＮＵＬＬ”に、同じくLRUポインタ３０３ｂの内容はキャッシュタグ１３２２の先頭アドレスである“６３００”に置き換わり、不揮発Dirty LRUエントリ１３２１を先頭とするリンクが完成する。
【００５１】
この後、キャッシュタグ１３４２のキャッシュ情報のDirty情報３０６を１のDirtyにセットし、メモリ種別３０５を１の不揮発にセットし、格納アドレスをホストコンピュータからリードリクエストまたはライトリクエストで指定されたアドレス“４７００”を格納する（ステップＳ４）。その後、キャッシュタグ１３４２のページポインタ３０２で示されるページ（この場合は“不揮発メモリページ８”のアドレスにホストコンピュータからのデータ）を格納し、ホストコンピュータにデータを書き込んだ旨を示す情報を送信し、ホストコンピュータからのライトリクエストを終了する（ステップＳ５）。
【００５２】
以下、ステップＳ２で、該当するアドレスのタグが有った場合の１実施例について説明する。
この場合は、図１３に示す状態で、ホストコンピュータからのライトリクエストで示されるアドレスが“３６Ｃ００”であった場合に該当する。前述の場合と同様にアドレス“３６Ｃ００”のハッシュ値の計算がキャッシュエントリ１３０１を示すとすると、前述の場合と同様にキャッシュエントリ１３０１のリンクのサーチを行う（ステップＳ１）。すると、キャッシュタグ１３０３の格納アドレスと一致するので、キャッシュにヒットしたと判定する（ステップＳ２）。次に、キャッシュタグ１３０３のキャッシュ情報３０１のDirty情報３０６が１のDirtyであるか否かを判別する（ステップＳ６）。
【００５３】
キャッシュタグ１３０３のDirty情報はDirtyであるので、キャッシュタグ１３０３ページポインタ、ここでは“不揮発メモリページ１”で示されるメモリのアドレスにホストコンピュータからのデータを書き込み、ホストコンピュータからのライトリクエストを完了するステップＳ５）。
キャッシュ情報３０１のDirty情報３０６がDirtyではない場合（即ちCleanである場合）を説明する。この場合、ステップＳ２では、ホストコンピュータからのライトリクエストが“４７６００”である場合と同様に、キャッシュエントリ１３０１のリンクのサーチを行い、その結果キャッシュタグ１３０４の格納情報が一致している。
【００５４】
ステップＳ６では、該キャッシュタグ１３０３のDirty情報がCleanであることを判定する（ステップＳ６：ＮＯ）。次に、同タグのキャッシュ情報３０１のメモリ種別３０５の判定を行い（ステップＳ７）、１の不揮発メモリであるので、キャッシュタグ１３０４の、Dirty情報３０６をCleanからDirtyに書き換えた後、該タグのページポインタ３０２で示されるアドレスのページにホストコンピュータからのライトデータを書き込み、ライトリクエストを完了する（ステップＳ５）。
【００５５】
以下では、ステップＳ７でキャッシュ情報３０１のメモリ種別３０５が１の不揮発ではなかった場合（即ち０の揮発メモリで有った場合）の１実施例について説明する。
ここでホストコンピュータから指定されるライトリクエストのアドレスが“１２Ａ０００”であるとする。アドレス“１２Ａ０００”のハッシュ値の計算結果はキャッシュエントリ１３０１を指し示すものとする。この時、キャッシュエントリ１３０１のリンクを辿ると、キャッシュタグ１３０２の格納アドレスと一致し、該アドレスで指定されるデータがキャッシュに存在することが判定できる（ステップＳ１，Ｓ２：ＹＥＳ）。そこで、ステップＳ６で、キャッシュタグ１３０２のキャッシュ情報がCleanであることを判定し、ステップＳ７で、キャッシュ情報が揮発メモリであることを判定できる。これは、ライトリクエストのデータが揮発メモリに存在することを示す。
【００５６】
ホストコンピュータからのライトリクエストのデータは電源断に備えて不揮発メモリに配置する、このため、揮発メモリのデータは無効化（即ちキャッシュのデータの破棄作業）を行い、同一アドレスの異なるデータが存在すること防止する。これは、キャッシュタグ１３０２をキャッシュエントリ１３０１から取り外すと同時に揮発Clean LRUエントリ１３１１のリンクから取り外し、揮発空きエントリ１３５１に接続することで実現する。
【００５７】
キャッシュタグ１３０２をキャッシュエントリのリンクから外すには、キャッシュタグエントリ１３０２のタグポインタＦ（３０４ａ）の内容をタグポインタＢ（３０４ｂ）のポインタで示されるキャッシュタグのタグポインタＦ（３０４ａ）にコピーする。ここではキャッシュエントリ１３０１の内容を書き換えることになる。そして、キャッシュタグ１３０２のタグポインタＢ（３０４ｂ）の内容をタグポインタＦ（３０４ａ）のポインタで示されるキャッシュタグ１３０３のタグポインタＢ（３０４ｂ）に書き込むことで実現する。これで、キャッシュエントリ１３０１の内容にはキャッシュタグ１３０３のアドレス“６４５０”が入り、キャッシュタグ１３０３のタグポインタＢ（３０４ｂ）の内容は、キャッシュタグエントリ１３０１を示す“３７０８”で置き換わり、キャッシュタグ１３０２の取り出しを完了する。
【００５８】
同様に、揮発Clean LRUエントリ１３１１のリンクからも取り外す作業を行い、キャッシュタグ１３０２の取り出し処理を完了する。この時、揮発Clean LRUエントリ１３１１の内容はキャッシュタグ１３１２のアドレスである“６２００”で置き換わり、キャッシュタグ１３１２のLRUポインタＢ（３０４ｂ）の内容はエントリのアドレスの“１０１０”に置き換わり、揮発Clean LRUエントリからの取り外しを完了する。その後、揮発空きエントリ１３５１のリンクの最後に接続する。これには、揮発空きエントリ１３５１の内容で示されるアドレスのキャッシュタグのLRUポインタＦ（３０３ａ）を順次”NULL"になるまで辿る。
【００５９】
図１３に示す状態ではキャッシュタグ１３５３がリンクの最後となる。ここで、キャッシュタグ１３５３のLRUポインタＦ（３０３ａ）に１３０２の先頭アドレス“７８０６”を格納し、キャッシュタグ１３０２のLRUポインタＦ（３０３ａ）に”NULL"を、LRUポインタＢ（３０３ｂ）にはキャッシュタグ１３５３の先頭アドレスである“８１２０”を書き込むことで実現する。
これらのキャッシュエントリとＬＲＵエントリから取り外すことで、キャッシュの無効化が実現され、他の属性を持つキャッシュに関しても同様の手順で無効化が行われる。その後に、前述の場合と同様に新規に不揮発メモリ空きエントリ１３４１からページを確保する。
この手順はステップＳ３、ステップＳ４の場合と全く同じ処理となる（ステップＳ９）。
その後に、新規に取得されたキャッシュタグのページで示されるアドレスのページにホストコンピュータからのライトデータを書き込み、ホストコンピュータにライト書き込みを完了した旨の情報を返し、ライトリクエストを完了する（ステップＳ５）。
【００６０】
以下、図１１に示すホストコンピュータからリードリクエストがあった場合の１実施例をフローチャートを使用して説明する。
ホストコンピュータからのリードリクエストをキャッシュ管理手段１０１が受け取ると、該リクエストで示されるリードを行うアドレスでハッシュを用いて、キャッシュエントリを決定する。この時、ホストコンピュータから送られて来るリードリクエストのアドレスが“１２Ａ０００”でキャッシュ管理情報が図１３に示す状態であったとすると、前述のライトリクエストの場合と同様にキャッシュエントリ１３０１の内容で示されるキャッシュタグを順次辿り、格納アドレスに指定されたアドレスの検索を行う。この時、キャッシュタグ１３０２の格納アドレスが“１２Ａ０００”で一致する（ステップＳ２１，Ｓ２２）。
【００６１】
その後、キャッシュタグ１３０２のページポインタで示されるページ、即ち“揮発メモリページ０”の情報をホストコンピュータに送信し、ホストコンピュータからのリードリクエストを完了する。また、ホストコンピュータからのリードリクエストで示されるアドレスが“３６Ｃ００”、“４７６００”の場合も同様で、それぞれ該当するアドレスが“３６Ｃ００”の場合は“不揮発メモリページ１”、アドレスが“４７６００”の場合は、“不揮発メモリページ２”のデータをホストコンピュータに送り、リードリクエストが終了した旨も返し、該リードリクエストを終了する（ステップ２４）。
【００６２】
また、ステップＳ２２で、リードリクエストで指定されるアドレスのデータが見つからなかった場合、即ちリードリクエストで指定されたアドレスと、キャッシュタグ２０１の格納アドレス３０７が一致しない場合には、新たに揮発メモリ空きエントリ６０４の先頭からタグを取り出すか、無ければ揮発Clean LRUエントリの先頭のタグを取り出し、データを格納するページを取得する。ここでホストコンピュータからのリードリクエストで指定されたアドレスが“５Ｆ０００”で、アドレス“５Ｆ０００”のハッシュ値がキャッシュエントリ１３０１を示した場合、ステップＳ２１の場合と同様にキャッシュエントリ１３０１のリンクの検索を行う。この場合、それぞれのキャッシュタグの格納アドレスに一致するものが無いため、該当するキャッシュタグが無いと判定する（ステップＳ２２）。
【００６３】
その後、新規に揮発メモリからページを確保する。それには揮発空きエントリ１３５１の内容で示される最初のキャッシュタグを取り出す。揮発空きエントリ１３５１に利用可能なキャッシュタグが無ければ、揮発Clean LRUエントリから取り出して使用する。この時、取り出されたキャッシュタグがキャッシュタグ１３５２であったとすると、キャッシュ情報３０１のDirty情報はCleanに、メモリ種別は揮発に設定し、該キャッシュタグ１３５２に、前述と同じ方法で、揮発LRUエントリ１３１１の最後と、キャッシュエントリ１３０１の最後へのリンク付け（接続）を行う。
【００６４】
次に、該リードリクエストのアドレスを格納アドレス３０７に“５Ｆ０００”を書き込むと共に、該アドレスで指定される記憶媒体１０４のデータをページポインタ３０２にアドレスで示されるページ、即ち“揮発メモリページ１３”に書き込む（ステップＳ２３）。
その後に書き込んだデータをホストコンピュータに送ると共に、リードリクエストが終了した旨を返し、該リードリクエストを完了する（ステップＳ２４）。
以下、図１２に示すフローチャートを使用して、電源断後に行われる再起動時の処理の１実施例について説明する。
電源断から復旧した直後は、電源断により揮発メモリ１０３上にあるページのデータは消去されており、不揮発メモリ１０２上のキャッシュ管理情報と矛盾した状態になる。このため、キャッシュ管理情報から、揮発メモリ１０３で消去されたページの情報を取り除かなければならない（以下で説明する）。
【００６５】
図１３は電源再投入後のキャッシュ管理情報の状態を示している。まず、復旧処理中はキャッシュ管理情報が矛盾した状態でホストコンピュータからのライトリクエストまたはリードリクエストを受け付けると誤動作を引き起こす可能性があるため、復旧処理が完了するまでリードリクエストまたはライトリクエストの動作を一時停止する。そして、最初に揮発Clean LRUエントリ１３１１の示すポインタを参照し（ステップＳ３１）、当該ポインタが最後を示すNULLポインタであるか否かの判定を行う（ここで、NULLであれば処理すべき揮発メモリ上に存在するキャッシュのキャッシュタグの取り除きが完了したこととなる）。
【００６６】
まず、揮発Clean LRUエントリの内容を参照する。ここではキャッシュタグ１３０２がリンクに接続されているので“７８０６”が参照される（ステップＳ３１）。
次に該当するポインタが“ＮＵＬＬ”であるか否かの判定を行う（ステップＳ３２）。
該当のポインタは“ＮＵＬＬ”ではないため、これを揮発LRUエントリ１３１１とキャッシュエントリ１３０１から取り除き、その後に取り出したキャッシュタグ１３０２を揮発空きエントリ１３５１に接続することで完了する。
ちなみに、上記一連の処理は、図１０のステップＳ９におけるキャッシュの無効化処理と同じ手順である（ステップＳ３３，Ｓ３４）。この時点で揮発Clean LRUエントリのリンクは揮発Clean LRUエントリの内容がキャッシュタグ１３１２の先頭アドレス、キャッシュタグ１３１２のタグポインタＢがエントリの先頭アドレス、タグポインタＦが“ＮＵＬＬ”の状態である。この状態で再びステップＳ３１，Ｓ３２に戻り、揮発Cleanエントリの内容が“ＮＵＬＬ”であるか否かを判定する。
【００６７】
ここではキャッシュタグ１３１２の先頭アドレスである“６２００”が格納されているので、次の処理に移行する。前回と同様にキャッシュタグ１３１２の取り出しを行う。この時点で、揮発Clean LRUエントリの内容は“ＮＵＬＬ”の状態となる。そしてステップＳ３１に戻り、再び揮発Clean LRUエントリを参照する。
この時揮発Clean LRUエントリの内容は“ＮＵＬＬ”であるため、無効化すべきキャッシュは全て完了したこととなり、ステップＳ３５に移る（ステップＳ３２）。ステップＳ３５では、抑止されていたホストコンピュータからのリードリクエストまたはライトリクエストの受付の開始を行い、以後、通常のリード／ライトリクエストに対する処理を行って処理を終了する。
【００６８】
以上に示す実施例の各々では、新規若しくは再利用されたキャッシュタグのキャッシュエントリのリンクへの接続はリンクの最後（最後尾）に付けているが、これは任意のキャッシュエントリの直後に接続してもよく、その場合も最後に接続するのと同様の処理で可能である。また、不揮発空きエントリや、揮発空きエントリについても上記と同様である。
揮発Clean LRUエントリ、不揮発Dirty LRUエントリ、不揮発Cleanエントリについても、リンクの最後（最後尾）に接続を行っていたが、これは基本的なＬＲＵ（先入れ後出しアルゴリズム）の考え方に基づいており、LRUのアルゴリズムやキャッシュ再利用の最適化アルゴリズムなどによってはリンクの最後ではなく、途中や先頭に接続することも考えられる。この場合もリンクの最後に接続する処理をリンクの途中に適用することが可能である。
【００６９】
これらの処理を行うことで、媒体から読み出したリードデータを揮発メモリに格納し、ホストから送られたライトデータを不揮発メモリに格納することが可能となり、かつ電源断後の復旧後においても揮発メモリ上で喪失されたキャッシュの無効化が行われ、以降矛盾の無い動作を可能としている。結果として不揮発メモリの使用量を抑えることが可能となり、ひいては不揮発メモリに必要なバッテリーバックアップを最小限にすることが可能となる。
【００７０】
また、この実施例では、不揮発メモリはＤＲＡＭ等の揮発メモリを使用し、これをバッテリーバックアップすることを想定したが、バッテリーバックアップを必要としない他の不揮発半導体メモリ、例えばＦｅＲＡＭやＭＲＡＭ等にも同様に適用可能である。なお、これらの不揮発半導体メモリは価格が高いが、本発明に係るストレージシステムでは、これら高価なメモリの使用量を節減できるので、低価格化が可能になるという別の効果が達成できる。
【００７１】
また、不揮発メモリの代わりに、記憶媒体に比して高速ではあるが価格の高い磁気ディスクなどでも同様の効果が得られる（よって、単なるキャシュメモリだけではなく、いわゆる仮想記憶装置とも呼称される階層構造を有する記憶装置（即ち、磁気ディスク装置を主体に階層化された記憶装置）の構築にも適用可能である）。また、上記の実施例では、記憶媒体は磁気ディスクなどの大容量で比較的低速な記憶媒体としたが、記憶媒体としては、上記の記憶媒体とは別に、１つ以上のストレージを使用してもよい。
【００７２】
なお、本発明に係るストレージシステムの各構成要素の処理の少なくとも一部をコンピュータ制御により実行するものとし、かつ、上記処理を、図１０，１１，１２の各フローチャートで示した手順によりコンピュータに実行せしめるプログラムは、半導体メモリを始め、ＣＤ−ＲＯＭや磁気テープなどのコンピュータ読み取り可能な記録媒体に格納して配付してもよい。そして、少なくともマイクロコンピュータ、パーソナルコンピュータ、汎用コンピュータを範疇に含むコンピュータが、上記の記録媒体から上記プログラムを読み出して、実行するものとしてもよい。
【産業上の利用可能性】
【００７３】
本発明は、ディスクアレイのキャッシュ制御、パーソナルコンピュータやサーバなどが内蔵する磁気ディスクのキャッシュ、特に大容量バッテリーによるバックアップを必要とするキャッシュの構築に好適に適用可能である。また、磁気ディスク装置や光ディスク装置などを主体とする階層記憶装置においても、停電時保証を必要とするキャッシュ機構が用いられる場合には適用可能である。
【図面の簡単な説明】
【００７４】
【図１】本発明の実施の形態に係るストレージシステムの全体構成を示す構成図である。
【図２】本実施の形態に係るストレージシステムのキャッシュ管理情報の全体構成を示す構成図である。
【図３】キャッシュタグ２０２の構成を示す構成図である。
【図４】不揮発メモリ４０１上のページ構成を示す構成図である。
【図５】揮発メモリ５０１上のページ構成を示す構成図である。
【図６】空きページ管理のためのリンク構成を示す構成図である。
【図７】揮発メモリに割り当てられるCleanなキャッシュページのＬＲＵ構成を示す構成図である。
【図８】不揮発メモリに割り当てられるDirtyなキャッシュページのＬＲＵ構成を示す構成図である。
【図９】不揮発メモリに割り当てられるCleanなキャッシュページのＬＲＵ構成を示す構成図である。
【図１０】本発明の実施の形態に係るストレージシステムのライトリクエスク時の動作を示すフローチャート図である。
【図１１】本発明の実施の形態に係るストレージシステムのリードリクエスク時の動作を示すフローチャート図である。
【図１２】本発明の実施の形態に係るストレージシステムの電源断後の復旧動作を示すフローチャート図である。
【図１３】本実施の形態に係るストレージシステムにおけるキャッシュ制御情報の初期値の１例を示す説明図である。
【図１４】本実施の形態に係るストレージシステムにおけるキャッシュ制御情報の１実施例としての状態図を示す説明図である。
【符号の説明】
【００７５】
１０１    キャッシュ管理手段
１０２    不揮発メモリ
１０３    揮発メモリ
１０４    記憶媒体
２０１    キャッシュエントリ
２０２    キャッシュタグ
３０１    キャッシュ情報
３０２    ページポインタ
３０３    ＬＲＵポインタ
３０３ａ  ＬＲＵポインタＦ
３０３ｂ  ＬＲＵポインタＢ
３０４    タグポインタ
３０４ａ  タグポインタＦ
３０４ｂ  タグポインタＢ
３０５    メモリ種別
３０６    Dirty情報
３０７    格納アドレス
４０１    不揮発メモリ
５０１    揮発メモリ
６０１    不揮発メモリ空きエントリ
６０２，６０３  キャッシュタグ
６０４    揮発メモリ空きエントリ
６０５、６０６  キャッシュタグ
７０１    揮発Clean LRUエントリ
７０２〜７０４  キャッシュタグ
８０１    不揮発Dirty LRUエントリ
８０２〜８０４  キャッシュタグ
９０１    不揮発Clean LRUエントリ
９０２〜９０４  キャッシュタグ
【図１】
2010152747.tif 000003
【図２】
2010152747.tif 000004
【図３】
2010152747.tif 000005
【図４】
2010152747.tif 000006
【図５】
2010152747.tif 000007
【図６】
2010152747.tif 000008
【図７】
2010152747.tif 000009
【図８】
2010152747.tif 000010
【図９】
2010152747.tif 000011
【図１０】
2010152747.tif 000012
【図１１】
2010152747.tif 000013
【図１２】
2010152747.tif 000014
【図１３】
2010152747.tif 000015
【図１４】
2010152747.tif 000016