(57)【要約】本発明は，２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，該データを２次記憶装置に記憶させるキャッシュシステムを提供する。アクセスホストからデータを受信した一方のキャッシュ装置は，該データを自装置のキャッシュメモリに記憶するとともに，該データを他方のキャッシュ装置に送信する。他方のキャッシュ装置は，一方のキャッシュ装置から送信されたデータを受信して，自装置のキャッシュメモリに記憶する。一方のキャッシュ装置または他方のキャッシュ装置は，キャッシュメモリに記憶されたデータを２次記憶装置に出力し，記憶する。２次記憶装置への記憶後，記憶を実行した側のキャッシュ装置は，他方のキャッシュ装置にフラッシュメッセージを送信する。データが２つのキャッシュ装置の双方に記憶されるので，キャッシュ装置が単一の場合のボトルネックを解消できるとともに，一方のキャッシュ装置に障害が発生しても，データの喪失を防止できる。
2003090089.tif 000002
【特許請求の範囲】
【請求項１】
２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムにおける各キャッシュ装置であって，
前記アクセスホストから与えられる第１のデータを入力するデータ入力部と，
他方のキャッシュ装置が前記アクセスホストから入力し，自キャッシュ装置に送信した第２のデータを受信するデータ受信部と，
前記第１のデータおよび前記第２のデータの双方またはいずれか一方を記憶するキャッシュ記憶部と，
前記キャッシュ記憶部を管理するキャッシュ管理部と，
前記第１のデータを前記他方のキャッシュ装置に送信するデータ送信部と，
前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力するデータ出力部と，
を有するキャッシュ装置。
【請求項２】
請求の範囲第１項において，
前記データ送信部が前記第１のデータの送信を完了するまでに，前記データ入力部が，該第１のデータの前記２次記憶装置上のアドレス範囲と同一のアドレス範囲を有し，該第１のデータと内容の異なる第３のデータをアクセスホストから入力した場合には，前記キャッシュ管理部は，前記第３のデータを有効なものとして前記キャッシュ記憶部に記憶し，前記第１のデータを無効なものとして取り扱う，
キャッシュ装置。
【請求項３】
請求の範囲第１項または第２項において，
前記データ入力部が前記第１のデータを入力してから前記データ送信部が前記第１のデータの送信を完了するまでに，前記データ受信部が前記第２のデータを受信した場合には，前記第１のデータおよび前記第２のデータの双方の前記２次記憶装置上のアドレス範囲と，双方のデータの内容とに基づいて，前記第１のデータおよび前記第２のデータの衝突の有無を判断する衝突検出部と，
前記衝突検出部が衝突を検出すると，衝突が発生したことを示す衝突検出メッセージを前記他方のキャッシュ装置に送信する衝突検出メッセージ送信部と，
前記他方のキャッシュ装置からの前記衝突検出メッセージを受信する衝突検出メッセージ受信部と，
をさらに有するキャッシュシ装置。
【請求項４】
請求の範囲第３項において，
前記衝突検出部は，前記衝突検出メッセージ受信部が前記他方のキャッシュ装置から前記衝突検出メッセージを受信した場合も衝突を検出する，
キャッシュ装置。
【請求項５】
請求の範囲第３項または第４項において，
前記キャッシュ管理部は，前記衝突検出部が衝突を検出すると，前記第１のデータおよび前記第２のデータのうち，あらかじめ定められた優先順位に基づいて優先されるデータを有効なものとして取り扱い，他方を無効なものとして取り扱う，
キャッシュ装置。
【請求項６】
請求の範囲第３項または第４項において，
前記キャッシュ管理部は，前記衝突検出部が衝突を検出すると，前記第１のデータが前記データ入力部に入力された時刻および前記第２のデータが前記他方のキャッシュ装置のデータ入力部に入力された時刻のうち，早い時刻を有するデータを有効なものとして取り扱い，遅い時刻を有するデータを無効なものとして取り扱う，
キャッシュ装置。
【請求項７】
請求の範囲第３項または第４項において，
前記衝突検出部が衝突を検出すると，ランダムな時間の経過後に，前記第１のデータ，または，前記第１のデータの再送を示す再送メッセージを送信するデータ／メッセージ再送部と，
前記他方のキャッシュ装置の前記データ／メッセージ再送部から送信された前記第２のデータまたは前記第２のデータの再送メッセージを受信するデータ／メッセージ受信部と，
をさらに有し，
前記キャッシュ管理部は，前記データ／メッセージ再送部による再送時刻と，前記データ／メッセージ受信部による受信時刻とのうち，早い時刻に対応するデータを有効なものとして取り扱い，遅い時刻に対応するデータを無効なものとして取り扱う，
キャッシュ装置。
【請求項８】
請求の範囲第７項において，
データ／メッセージ再送部は，前記データ／メッセージ再送部による再送時刻と，前記データ／メッセージ受信部による受信時刻とが同時刻の場合には，再びランダムな時間の経過後，再送を繰り返す，
キャッシュ装置。
【請求項９】
請求の範囲第１項から第８項のいずれか１項において，
前記データ出力部が前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力した後に，該出力が完了したことを示すフラッシュメッセージを前記他方のキャッシュ装置に送信するフラッシュメッセージ送信部と，
前記他方のキャッシュ装置から送信されたフラッシュメッセージを受信するフラッシュメッセージ受信部と，
をさらに有するキャッシュ装置。
【請求項１０】
請求の範囲第９項において，
前記キャッシュ管理部は，前記フラッシュメッセージ送信部による前記フラッシュメッセージの送信後，または，前記フラッシュメッセージ受信部による前記フラッシュメッセージの受信後，該フラッシュメッセージに対応する前記第１のデータまたは前記第２のデータを無効なものとして取り扱う，
キャッシュ装置。
【請求項１１】
請求の範囲第１項から第１０項のいずれか１項において，
前記データ送信部は，前記第１のデータとともに，該第１のデータの前記２次記憶装置への出力をいずれのキャッシュ装置が行うかを示す第１のフラッシュ権限情報を送信し，
前記データ受信部は，前記第２のデータとともに，該第２のデータの前記２次記憶装置への出力をいずれのキャッシュ装置が行うかを示す第２のフラッシュ権限情報を受信し，
前記データ出力部は，前記第１のフラッシュ権限情報が自キャッシュ装置を示している場合には，前記第１のデータを前記２次記憶装置に出力し，前記第２のフラッシュ権限情報が自キャッシュ装置を示している場合には，前記第２のデータを前記２次記憶装置に出力する，
キャッシュ装置。
【請求項１２】
請求の範囲第１１項において，
自キャッシュ装置の負荷を計測し，計測した前記負荷の値を他方のキャッシュ装置に送信する負荷情報送信部と，
前記他方のキャッシュ装置から送信された，他方のキャッシュ装置の負荷の値を受信する負荷情報受信部と，
前記自キャッシュ装置の負荷の値と前記他方のキャッシュ装置の負荷の値とを比較し，負荷の値の小さなキャッシュ装置に，前記第１の記憶データまたは前記第２の記憶データのフラッシュ権限を設定するフラッシュ権限設定部と，
をさらに有するキャッシュ装置。
【請求項１３】
請求の範囲第１２項において，
前記負荷の値が各キャッシュ装置の性能に対する負荷の比である，キャッシュ装置。
【請求項１４】
請求の範囲第１項から第１３項のいずれか１項において，
他方のキャッシュ装置の障害発生を監視し，該障害発生を検出すると，前記キャッシュ記憶部に記憶された前記第１のデータのうち，前記データ出力部または他方のキャッシュ装置のデータ出力部が前記２次記憶装置への出力を完了しておらず，かつ，前記データ送信部が他方のキャッシュ装置への送信を完了したもの，および，前記キャッシュ記憶部に記憶された前記第２のデータのうち，前記データ出力部または他方のキャッシュ装置のデータ出力部が前記２次記憶装置への出力を完了していないものを，前記データ出力部が前記２次記憶装置に出力するように制御する障害監視部をさらに有する，
キャッシュ装置。
【請求項１５】
請求の範囲第１項から第１４項のいずれか１項において，
前記２次記憶装置のアドレス範囲を含むデータ読み出し要求を前記アクセスホストから受け取る読み出し要求入力部と，
前記読み出し要求に含まれるアドレス範囲に対応するデータが前記キャッシュ記憶部に有効なデータとして記憶されている場合には，該データを前記キャッシュ記憶部から読み出し，前記キャッシュ記憶部に存在しない場合，または，有効なデータとして記憶されていない場合には，前記２次記憶装置から読み出すデータ読み出し部と，
前記データ読み出し部により読み出されたデータを前記アクセスホストに送信する読み出しデータ送信部と，
をさらに有するキャッシュ装置。
【請求項１６】
請求の範囲第１５項において，
前記データ管理部は，前記データ読み出し部により前記２次記憶装置から読み出されたデータを，有効なデータとして，前記キャッシュ記憶部に記憶する，
キャッシュ装置。
【請求項１７】
２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムであって，
前記２つのキャッシュ装置のそれぞれは，
前記アクセスホストから与えられる第１のデータを入力するデータ入力部と，
他方のキャッシュ装置が前記アクセスホストから入力し，自キャッシュ装置に送信した第２のデータを受信するデータ受信部と，
前記第１のデータおよび前記第２のデータの双方またはいずれか一方を記憶するキャッシュ記憶部と，
前記キャッシュ記憶部を管理するキャッシュ管理部と，
前記第１のデータを前記他方のキャッシュ装置に送信するデータ送信部と，
前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力するデータ出力部と，
を有するキャッシュシステム。
【請求項１８】
２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムにおけるキャッシュ方法であって，
前記アクセスホストからデータを受信した一方のキャッシュ装置は，該データを自装置のキャッシュメモリに記憶するとともに，該データを他方のキャッシュ装置に送信し，
前記他方のキャッシュ装置は，前記一方のキャッシュ装置から送信された前記データを受信して，自装置のキャッシュメモリに記憶し，
前記一方のキャッシュ装置または前記他方のキャッシュ装置は，前記データを前記２次記憶装置に出力する，
キャッシュ方法。
【発明の詳細な説明】
技術分野
本発明は，データを一時的に記憶するキャッシュ装置，キャッシュシステム，およびキャッシュ方法に関し，特に，２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，アクセスホストからのデータを２次記憶装置に記憶させるキャッシュシステムにおける各キャッシュ装置，該キャッシュシステム，およびキャッシュ方法に関する。
背景技術
従来，ハードディスク等の２次記憶装置は１つのアクセスホストにのみ使用されていたが，近年，ストレージ用ネットワーク等を介して複数のアクセスホストにより共用される，複数の２次記憶装置からなる２次記憶装置群が広く使用されてきている。これら２次記憶装置群に対しては，アクセスホストからストレージ用ネットワークを介してデータの読み出しおよび書き込みが行われる。
このような２次記憶装置は，その構造から，要求アクセスパターンによってはスループット／レスポンス性能が十分に発揮されないことが多い。また，ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）５を使用する場合には，書き込みに要するオーバヘッドが大きい。
そこで，キャッシュ装置（キャッシュメモリ）を用いて，比較的頻繁に使用されるデータや２次記憶装置に書き込まれるデータを一旦キャッシュ装置に記憶させておくことで性能向上を図ることが一般に行われている。
キャッシュ装置は，２次記憶装置から読み出され，または，２次記憶装置に書き込まれるデータを，高速な１次記憶装置を利用して一時的に保管する役割を果たし，計算機システムの性能向上に大きな効果をもたらしている。
特に，共用される２次記憶装置群とアクセスホストとの間に，ストレージ仮想化用アドレス変換装置やファイルシステム用のアプライアンス装置等，データを中間でインタセプトするタイプの装置を経由する必要がある場合に，その装置上でキャッシュ装置を使用することは性能向上に有効な手法となる。
しかし，単一のキャッシュ装置は，ボトルネックとなり，性能を悪化させることが多い。すなわち，キャッシュ装置が単一である場合に，２次記憶装置群に対するアクセスが１つのキャッシュ装置のみを通過する。このため，アクセスホストおよび２次記憶装置が増加しても，キャッシュ装置に対する十分なスループットを確保できず，全体の性能はキャッシュ装置の性能限界により決定される。
また，単一のキャッシュ装置では，そのキャッシュ装置の障害により，データが失われ，その結果，ダウンタイムの増加等の問題を引き起こす。
すなわち，キャッシュ装置に，２次記憶装置群に書き込まれる前のデータが存在し，そのデータがキャッシュ装置にのみ存在する状態はいつでも容易に起こりうる。そのような状態でキャッシュ装置に障害が発生した場合に，キャッシュ装置にのみ存在するデータは失われてしまい，回復不能となる。
また，キャッシュ装置の障害によるシステムのダウンタイムが増加すると，経済的および信頼性の面で，システムに損害を与えることにもなる。
ボトルネックの問題に対しては，キャッシュ装置を複数設けることによりこの問題を解決する方法が考えられる。これは，複数のキャッシュ装置を複数のアクセスホストに割り当てることで，ボトルネックを解消しスケーラビリティを確保しようとするものである。
しかし，あるアクセスホストが一方のキャッシュ装置にデータを書き込み，このデータと同一アドレスで内容の異なるデータを，他のアクセスホストが他方のキャッシュ装置に書き込んだ場合に，双方のキャッシュ装置間で内容の異なるデータがキャッシュされることになる。この状態を放置すると，あるアドレスに対するキャッシュデータが各キャッシュ装置で不一致のままとなり，一貫性（ｃｏｎｓｉｓｔｅｎｃｙ）が保たれなくなる。
また，あるキャッシュ装置が障害で停止した場合に，他のキャッシュ装置には，異なるデータがキャッシュされていることになり，透過性（ｔｒａｎｓｐａｒｅｎｃｙ）が保持されなくなってしまう。
さらに，キャッシュ装置が個々に独立して動作している限り，書き込まれたキャッシュデータが単一障害により失われ，回復不能となる問題は依然解決されないままである。
これに対し，複数のキャッシュ装置間で書き込まれたデータの整合性を保つ方法がある。
この整合性を保つ一般的な方法は，トークンを使用するものである。これは複数のキャッシュ装置間でトークンと呼ばれる情報を通信し合い，排他制御によってデータの一貫性を保証するものである。しかし，トークン制御は，メッセージコスト（トークンの通信コスト）が高くなり，トークンの通信時間のため，比較的多くの時間を要する。したがって，この方法は，キャッシュ装置のように処理速度の向上のために設けられた装置では，逆にボトルネックとなりかねないという問題を抱えている。
また，複数のキャッシュ装置間で共用されるメモリを使用し，このメモリ上で排他制御を行うシステムがある。このような共用メモリを使用するキャッシュ装置は，共用しているキャッシュメモリ装置とその管理部に障害が発生すると，キャッシュデータが失われるという問題を抱えている。また，キャッシュメモリに揮発性メモリを使用した場合には，電源障害によってもデータが失われる可能性がある。このため，不揮発性メモリを使用する必要があるが，その分コストが高くなるという問題がある。
このように，キャッシュ装置を利用する場合には，書き込まれたデータに対する一貫性および透過性が保持される必要があるにも関わらず，既存の多くの方法は，高いコストを要する等の問題を有する。
発明の開示
本発明は，単一のキャッシュ装置におけるボトルネックを解消することを目的とする。
また，本発明は，キャッシュ装置の障害発生時にも，キャッシュ装置に記憶されたデータの喪失を防止することを目的とする。
本発明によるキャッシュ装置は，２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムにおける各キャッシュ装置であって，前記アクセスホストから与えられる第１のデータを入力するデータ入力部と，他方のキャッシュ装置が前記アクセスホストから入力し，自キャッシュ装置に送信した第２のデータを受信するデータ受信部と，前記第１のデータおよび前記第２のデータの双方またはいずれか一方を記憶するキャッシュ記憶部と，前記キャッシュ記憶部を管理するキャッシュ管理部と，前記第１のデータを前記他方のキャッシュ装置に送信するデータ送信部と，前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力するデータ出力部と，を有する。
本発明によるキャッシュシステムは，２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムであって，前記２つのキャッシュ装置のそれぞれは，前記アクセスホストから与えられる第１のデータを入力するデータ入力部と，他方のキャッシュ装置が前記アクセスホストから入力し，自キャッシュ装置に送信した第２のデータを受信するデータ受信部と，前記第１のデータおよび前記第２のデータの双方またはいずれか一方を記憶するキャッシュ記憶部と，前記キャッシュ記憶部を管理するキャッシュ管理部と，前記第１のデータを前記他方のキャッシュ装置に送信するデータ送信部と，前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力するデータ出力部と，を有する。
本発明によるキャッシュ方法は，２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムにおけるキャッシュ方法であって，前記アクセスホストからデータを受信した一方のキャッシュ装置は，該データを自装置のキャッシュメモリに記憶するとともに，該データを他方のキャッシュ装置に送信し，前記他方のキャッシュ装置は，前記一方のキャッシュ装置から送信された前記データを受信して，自装置のキャッシュメモリに記憶し，前記一方のキャッシュ装置または前記他方のキャッシュ装置は，前記データを前記２次記憶装置に出力するものである。
本発明によると，キャッシュシステムに２つのキャッシュ装置が設けられる。各キャッシュ装置は，アクセスホストから２次記憶装置に記憶されるべきデータを入力し，２次記憶装置に出力（記憶）する。したがって，キャッシュ装置が１つの場合に対して，２倍の処理能力を得ることができ，キャッシュ装置が単一の場合のボトルネックを解消することができる。
また，本発明によると，アクセスホストからデータを入力された一方のキャッシュ装置は，データを自装置のキャッシュメモリに記憶するとともに，他方のキャッシュ装置に，入力されたデータを送信する。他方のキャッシュ装置は，一方のキャッシュ装置から送信されたデータを，自装置のキャッシュメモリに記憶する。これにより，キャッシュシステムにおけるデータの不揮発化が達成される。したがって，データが２次記憶装置に記憶されていない状態において，一方のキャッシュ装置に障害が発生しても，他方のキャッシュ装置からデータを得ることができ，障害によるデータの喪失が防止される。
好ましくは，前記データ入力部が前記第１のデータを入力してから前記データ送信部が前記第１のデータの送信を完了するまでに，前記データ受信部が前記第２のデータを受信した場合には，前記第１のデータおよび前記第２のデータの双方の前記２次記憶装置上のアドレス範囲と，双方のデータの内容とに基づいて，前記第１のデータおよび前記第２のデータの衝突の有無を判断する衝突検出部と，前記衝突検出部が衝突を検出すると，衝突が発生したことを示す衝突検出メッセージを前記他方のキャッシュ装置に送信する衝突検出メッセージ送信部と，前記他方のキャッシュ装置からの前記衝突検出メッセージを受信する衝突検出メッセージ受信部と，をさらに有する。
また，前記衝突検出部は，前記衝突検出メッセージ受信部が前記他方のキャッシュ装置から前記衝突検出メッセージを受信した場合も衝突を検出する。
これにより，同一アドレス範囲の内容の異なる２つのデータが，それぞれ，アクセスホストから双方のキャッシュ装置に受信された場合であっても，これら２つのデータの衝突を検出することができる。
衝突が検出された場合には，前記キャッシュ管理部は，前記第１のデータおよび前記第２のデータのうち，あらかじめ定められた優先順位に基づいて優先されるデータを有効なものとして取り扱い，他方を無効なものとして取り扱うことができる。
あるいは，衝突が検出された場合には，前記キャッシュ管理部は，前記第１のデータが前記データ入力部に入力された時刻および前記第２のデータが前記他方のキャッシュ装置のデータ入力部に入力された時刻のうち，早い時刻を有するデータを有効なものとして取り扱い，遅い時刻を有するデータを無効なものとして取り扱うこともできる。
さらに，衝突が検出された場合には，キャッシュ装置は，ランダムな時間の経過後に，前記第１のデータ，または，前記第１のデータの再送を示す再送メッセージを送信するデータ／メッセージ再送部と，前記他方のキャッシュ装置の前記データ／メッセージ再送部から送信された前記第２のデータまたは前記第２のデータの再送メッセージを受信するデータ／メッセージ受信部と，をさらに有し，前記キャッシュ管理部は，前記データ／メッセージ再送部による再送時刻と，前記データ／メッセージ受信部による受信時刻とのうち，早い時刻に対応するデータを有効なものとして取り扱い，遅い時刻に対応するデータを無効なものとして取り扱うこともできる。
これらのいずれかにより，衝突状態を解消でき，２つのキャッシュ装置間でのデータの一貫性および透過性を確保することができる。
好ましくは，前記データ送信部は，前記第１のデータとともに，該第１のデータの前記２次記憶装置への出力をいずれのキャッシュ装置が行うかを示す第１のフラッシュ権限情報を送信し，前記データ受信部は，前記第２のデータとともに，該第２のデータの前記２次記憶装置への出力をいずれのキャッシュ装置が行うかを示す第２のフラッシュ権限情報を受信し，前記データ出力部は，前記第１のフラッシュ権限情報が自キャッシュ装置を示している場合には，前記第１のデータを前記２次記憶装置に出力し，前記第２のフラッシュ権限情報が自キャッシュ装置を示している場合には，前記第２のデータを前記２次記憶装置に出力する。
これにより，２つのキャッシュ装置間で負荷分散を行うことができる。
好ましくは，キャッシュ装置は，他方のキャッシュ装置の障害発生を監視し，該障害発生を検出すると，前記キャッシュ記憶部に記憶された前記第１のデータのうち，前記データ出力部または他方のキャッシュ装置のデータ出力部が前記２次記憶装置への出力を完了しておらず，かつ，前記データ送信部が他方のキャッシュ装置への送信を完了したもの，および，前記キャッシュ記憶部に記憶された前記第２のデータのうち，前記データ出力部または他方のキャッシュ装置のデータ出力部が前記２次記憶装置への出力を完了していないものを，前記データ出力部が前記２次記憶装置に出力するように制御する障害監視部をさらに有する。
これにより，一方のキャッシュ装置に障害が発生した場合にも，キャッシュ装置に存在し，２次記憶装置に存在しないデータを，２次記憶装置に確実にフラッシュ（記憶）させることができる。
発明を実施するための最良の形態
図１は，本発明の一実施の形態によるキャッシュシステムを使用した２次記憶装置アクセスシステムの全体構成を示すブロック図である。この２次記憶装置アクセスシステム（以下，単に「アクセスシステム」という。）は，キャッシュシステム３，アクセスホスト群４，２次記憶装置群５，アクセスネットワーク６，およびストレージネットワーク７を備えている。
キャッシュシステム３は，２つのキャッシュ装置１および２を有する。キャッシュ装置１および２は，ともに同じ構成を有する。キャッシュ装置１は，キャッシュ管理部１１，キャッシュメモリ１２，入出力部１３および１４，メッセージ通信部１５，ならびに障害監視部１６を有する。キャッシュ装置２は，キャッシュ管理部２１，キャッシュメモリ２２，入出力部２３および２４，メッセージ通信部２５，ならびに障害監視部２６を有する。
アクセスホスト群４は，ｎ個（ｎは２以上の整数）のアクセスホスト４１〜４ｎを有する。各アクセスホストは，キャッシュシステム３を介して２次記憶装置群５にデータ（以下「記憶データ（ｓｔｏｒａｇｅ  ｄａｔａ）」という。）を書き込み，また，２次記憶装置群５（またはキャッシュシステム３）に記憶された記憶データをキャッシュシステム３を介して読み出す。各アクセスホストは，たとえばコンピュータにより構成される。
２次記憶装置群５は，アクセスホスト群４の各アクセスホストにより共用される２次記憶装置であり，ｍ個（ｍは２以上の整数）の２次記憶装置５１〜５ｍを有する。各２次記憶装置には，それぞれを一意に識別するための装置番号（たとえばシリアル番号）が付されており，アクセスホスト群４およびキャッシュシステム３は，この装置番号を指定することにより，２次記憶装置群５の１つの２次記憶装置を特定でき，さらにアドレス（またはブロック番号）を指定することにより，特定された２次記憶装置上の記憶データを特定できる。各２次記憶装置は，たとえばハードディスク，光磁気ディスク（ＭＯ），光ディスク（たとえばＤＶＤ−ＲＡＭ）等により構成される。
アクセスネットワーク６は，たとえばＳＣＳＩネットワーク，ファイバチャネル（ｆｉｂｒｅ  ｃｈａｎｎｅｌ），ＬＡＮ（イーサネット）等により構成される。ストレージネットワーク７は，たとえばファイバチャネルにより構成されている。
アクセスホスト４１〜４ｎ，キャッシュ装置１の入出力部１３，およびキャッシュ装置２の入出力部２３は，アクセスネットワーク６に接続されている。これにより，アクセスホスト４１〜４ｎは，アクセスネットワーク６を介して，キャッシュ装置１または２に記憶データを送信し，また，キャッシュ装置１または２から記憶データを受信することができる。
また，２次記憶装置５１〜５ｍ，キャッシュ装置１の入出力部１４，およびキャッシュ装置２の入出力部２４は，ストレージネットワーク７に接続されている。これにより，キャッシュ装置１および２は，ストレージネットワーク７を介して，２次記憶装置群５に記憶データを送信し（書き込み），また，２次記憶装置群５から記憶データを受信する（読み出す）ことができる。
キャッシュ装置１および２は，それぞれ独立して構成され，一方の障害が他方に影響しないようになっている。キャッシュ装置１および２が独立してアクセスホスト群４からの入出力を受け付けることにより，後述するように，記憶データの透過性（ｔｒａｎｓｐａｒｅｎｃｙ）を保ちながら，１つのキャッシュ装置の２倍の性能を得ることが可能となる。
入出力部１３（２３）（括弧内の符号はキャッシュ装置２における対応する構成要素を示す。以下同じ。）は，アクセスネットワーク６を介して送受信される記憶データに対してプロトコル処理等の通信処理を実行する。また，入出力部１４（２４）は，ストレージネットワーク７を介して送受信される記憶データに対して通信処理を実行する。
キャッシュメモリ１２（２２）は，２次記憶装置群５の２次記憶装置よりも高速にアクセス（読み出しおよび書き込み）が可能な記憶デバイス（ＲＡＭ等）により構成される。
キャッシュ管理部１１（２１）は，キャッシュ制御表（後述）を保持し，キャッシュメモリ１２（２２）に記憶されている記憶データをキャッシュ制御表に基づいて管理する。また，キャッシュ管理部１１（２１）は，入出力部１３（２３）および１４（２４），障害監視部１６（２６），ならびにメッセージ通信部１５（２５）を制御し，入出力部１３（２３）もしくは１４（２４）またはメッセージ通信部１５（２５）から入力される記憶データのキャッシュメモリ１２（２２）への書き込みや入出力部からの送信，キャッシュメモリ１２（２２）から読み出した記憶データの入出力部１３（２３）または１４（２４）を介した送信，他方のキャッシュ装置との間の制御メッセージおよび記憶データのメッセージ通信部１５（２５）を介した送受信等を行う。
図２は，キャッシュ管理部１１（２１）により保持されるキャッシュ制御表の構成例を示している。キャッシュ制御表は，キャッシュメモリ１２用のものと，キャッシュメモリ２２用のものとがそれぞれ設けられ，前者はキャッシュ管理部１１により，後者はキャッシュ管理部２１により，それぞれ保持される。
キャッシュ制御表は，キャッシュメモリ１２（２２）に現在記憶されている各記憶データのキャッシュ制御リストを有する。各キャッシュ制御リストは，データ項目として，要素番号，装置番号，装置開始アドレス，データ長，キャッシュ開始アドレス，状態，およびフラグを有する。
「要素番号」は，キャッシュメモリ１２（２２）に現在記憶されている記憶データの要素番号である。ここで，１つの要素は，アクセスホスト群４のあるアクセスホストから書き込まれ，または，あるアクセスホストから読み出された１まとまりのある記憶データに対応する。１つの要素は，１バイトの記憶データに対応する場合もあるし，複数バイトの記憶データに対応する場合もある。
たとえば，あるアクセスホスト４ｉ（ｉは１〜ｎのいずれかの整数）から５１２バイトを１ブロックとする記憶データが送信され，キャッシュメモリ１２（２２）にこの１ブロックの記憶データが記憶された場合には，１つの要素が１ブロック（５１２バイト）の記憶データに対応することとなる。また，他のアクセスホスト４ｊ（ｊは１〜ｎのいずれか）から２ブロックの記憶データが送信され，キャッシュメモリ１２（２２）にこの２ブロックの記憶データが記憶された場合には，１つの要素が２ブロックの記憶データに対応することとなる。
「装置番号」は，記憶データが記憶されるべき２次記憶装置群５の２次記憶装置の装置番号（たとえばシリアル番号）である。「装置開始アドレス」は，対応する装置番号の２次記憶装置における，記憶データの記憶開始アドレス（先頭アドレス）である。「データ長」は，対応する記憶データの長さ（バイト数）である。
なお，記憶データが，複数バイト（たとえば５１２バイト）からなるブロック単位で各２次記憶装置から読み出され，また，各２次記憶装置に書き込まれる場合には，装置開始アドレスを，最初のブロックが書き込まれる開始ブロック番号とし，データ長を，最後のブロックが書き込まれる終了ブロック番号とすることもできる。たとえば，２ブロックの記憶データが２次記憶装置の第５ブロックの記憶領域および第６ブロックの記憶領域に記憶される場合に，開始ブロック番号を５，終了ブロック番号を６とすることもできる。
「キャッシュ開始アドレス」は，キャッシュメモリ１２（２２）における記憶データの記憶開始アドレス（先頭アドレス）である。
「状態」は，記憶データの状態を示し，この状態には，「受信」（以下“ｒｅｃｅｉｖｅｄ”という。），「ダーティ」（以下“ｄｉｒｔｙ”という。），「ノンボラタイル」（以下“ｎｏｎ−ｖｏｌａｔｉｌｅ”という。），「フラッシング」（以下“ｆｌｕｓｈｉｎｇ”という。），「フラッシュメッセージ」（以下“ｆｌｕｓｈｅｄ  ｍｓｇ”という。），「クリーン」（以下“ｃｌｅａｎ”という。），および「インバリデイト」（以下“ｉｎｖａｌｉｄａｔｅｄ”という。）がある。
ｒｅｃｅｉｖｅｄ状態は，その記憶データがアクセスホストから受信され，この記憶データのコピーメッセージ（後述）の送信完了までの状態，または，このコピーメッセージに対する第１の確認応答メッセージ（後述）が受信されるまでの状態をいう。
ｄｉｒｔｙ状態は，その記憶データに関する第１の確認応答メッセージが受信された状態で，この記憶データがまだ２次記憶装置に書き込まれていない状態をいう。
ｎｏｎ−ｖｏｌａｔｉｌｅ状態は，他方のキャッシュ装置から送信されたコピーメッセージに含まれる記憶データがキャッシュメモリに記憶され，かつ，この記憶データがまだ２次記憶装置群には書き込まれていない状態をいう。
ｆｌｕｓｈｉｎｇ状態は，ｄｉｒｔｙ状態とは異なり，その記憶データが２次記憶装置群に書き込まれている間の状態をいう。
ｆｌｕｓｈｅｄ  ｍｓｇ状態は，その記憶データの２次記憶装置への書き込み（フラッシュ）が完了し，他方のキャッシュ装置に記憶されている同じ記憶データの状態をｎｏｎ−ｖｏｌａｔｉｌｅ状態からｃｌｅａｎ状態へ変更させるように他方のキャッシュ装置にフラッシュメッセージ（後述）が通知されている状態をいう。
ｃｌｅａｎ状態は，その記憶データの２次記憶装置への書き込みが終了し，他方のキャッシュ装置へのその旨の通知が終了した状態をいう。この状態では，キャッシュメモリ１２（２２）に記憶された記憶データは，いつでも上書き，消去等の廃棄可能な状態にあるが，アクセスホスト群４からのこの記憶データの読み出しに備えてキャッシュメモリ１２（２２）に記憶されている。
ｉｎｖａｌｉｄａｔｅｄ状態は，その記憶データが，ｃｌｅａｎ状態の後，無効化された状態をいう。この状態にある記憶データには，その後，直ちに，または，所定の時間の経過後，上書き，消去等の廃棄処理がなされる。
「フラグ」は，フラッシュ権限の有無，書き込みが衝突状態であるかどうか，アクセスホストへ既にホスト確認応答メッセージ（ＡＣＫ）を返信したか等を示す。フラッシュ権限の有無，書き込みの衝突状態，および確認応答メッセージについては，後述する。
キャッシュ管理部１１（２１）は，アクセスホスト群４または２次記憶装置群５からデータを受信し，処理する際に，自己が保持するキャッシュ制御表を参照し，処理の結果，必要に応じてキャッシュ制御表の内容を更新する。
メッセージ通信部１５および２５は，通信回線Ｌにより相互に接続され，記憶データ，制御メッセージ等を相互に送受信する。両者を接続する通信回線Ｌには，たとえばＰＣＩバス（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｂｕｓ），ギガビットイーサネット等が使用され，その通信速度はアクセスネットワーク６よりも高速であることが好ましい。
図３は，メッセージ通信部１５と２５との間で通信される制御メッセージのデータ構造例を示している。制御メッセージは，制御情報が格納されるヘッダ部と，記憶データが格納されるデータ部とを有する。ヘッダ部には，タイプ，装置番号，装置開始アドレス，データ長，シーケンス番号，状態，およびフラッシュ権限のデータ項目が置かれる。
「タイプ」は，制御メッセージのタイプである。このタイプには，コピーメッセージを表す“ＣＯＰＹ”，コピーメッセージに対する確認応答メッセージ（第１の確認応答メッセージ）を表す“Ｃ−ＡＣＫ”，フラッシュメッセージを表す“ＦＬＵＳＨＥＤ”，フラッシュメッセージに対する確認応答メッセージ（第２の確認応答メッセージ）を表す“Ｆ−ＡＣＫ”，衝突検出メッセージを表す“ＣＯＬＬＩＳＩＯＮ”，衝突検出メッセージに対する確認応答メッセージ（第３の確認応答メッセージ）を表す“ＣＯＬ−ＡＣＫ”，障害監視メッセージを表す“ＭＯＮＩＴＯＲ”等がある。これらの各制御メッセージについては後述する。
「装置番号」は，コピーメッセージの場合には，データ部に付与される記憶データが記憶される２次記憶装置の装置番号，フラッシュメッセージの場合には，フラッシュされた記憶データが記憶された２次記憶装置の装置番号，衝突検出メッセージの場合には，衝突が検出された記憶データが記憶される２次記憶装置の装置番号，確認応答メッセージの場合には，対応するコピーメッセージ，フラッシュメッセージ，衝突検出メッセージ等の装置番号と同じ装置番号である。
「装置開始アドレス」は，コピーメッセージの場合には，データ部に付与される記憶データが記憶される２次記憶装置の開始アドレス，フラッシュメッセージの場合には，フラッシュされた記憶データが記憶された２次記憶装置の開始アドレス，衝突検出メッセージの場合には，衝突が検出された記憶データが記憶される２次記憶装置の開始アドレス，確認応答メッセージの場合には，対応するコピーメッセージ，フラッシュメッセージ，衝突検出メッセージ等の開始アドレスと同じ開始アドレスである。
「データ長」は，コピーメッセージの場合には，データ部に付与される記憶データの長さ（バイト数，ブロック数等），フラッシュメッセージの場合には，フラッシュされた記憶データの長さ，衝突検出メッセージの場合には，衝突が検出された記憶データの長さである。確認応答メッセージのデータ長の値は０とされる。
「状態」は，前述したキャッシュ制御表における状態と同一のデータである。「シーケンス番号」は，送信される制御メッセージに付されるシリアル番号である。キャッシュ管理部１１および２１は，それぞれ自己が送信する制御メッセージに，たとえば１から始まるシリアル番号を送信する順序に従って順に付与する。これにより，送信する制御メッセージの時間順序を明らかにすることができる。したがって，受信側のキャッシュ管理部１１（２１）は，受信される制御メッセージのシーケンス番号を管理しておくことにより，制御メッセージの受信順序順が送信順序と異なっていても，送信順序を正確に知ることができる。
「フラッシュ権限」は，フラッシュ（キャッシュメモリ１２（２２）に記憶された記憶データを２次記憶装置に記憶する処理）を行うキャッシュ装置が，キャッシュ装置１であるか２であるかを示す。フラッシュ権限を指定しない場合には，この領域は，キャッシュ装置１および２を示す値以外の値（たとえばＮｕｌｌ等）に設定される。
障害監視部１６（２６）は，他方のキャッシュ装置の障害を監視し，障害を検出した場合には，障害の回復に必要な処理を行う。たとえば，障害監視部１６（２６）は，一定時間間隔ごとに障害検出メッセージをメッセージ通信部１５（２５）を介して相互に送受信し合う。そして，一方の障害監視部は，他方の障害監視部からの障害検出メッセージを，所定の時間を経過しても受信しない場合には，他方のキャッシュ装置に障害が発生したと判断する。
また，障害監視部１６（２６）は，他方のキャッシュ装置の障害発生を検出することにより，自己が属するキャッシュ装置１（２）のキャッシュ管理部１１（２１）により保持されるキャッシュ制御表の状態を，必要に応じて書き換え，障害回復処理を実行する。この障害回復処理の詳細については後述する。
このような構成のアクセスシステムにおいて，アクセスホスト群４は，キャッシュシステム３を介して２次記憶装置群５に記憶データを書き込み，また，キャッシュシステム３を介して２次記憶装置群５から記憶データを読み出す。以下，これらの書き込み処理および読み出し処理，ならびにキャッシュシステム３の一方のキャッシュ装置に障害が発生した場合の障害回復処理の詳細について説明する。
＜記憶データの書き込み処理＞
アクセスホスト群４のいずれかのアクセスホスト４ｉが，記憶データをキャッシュ装置１または２を介して２次記憶装置群５に書き込む場合の処理について以下に説明する。
図４は，アクセスホスト４ｉから送信された記憶データの２次記憶装置群５への書き込み処理の流れを示すシーケンス図である。
まず，アクセスホスト４ｉは，アクセスネットワーク６を介して記憶データをキャッシュ装置１または２に送信する。記憶データをキャッシュ装置１または２のいずれに送信するかは，アクセスホスト４ｉにあらかじめ設定されている。キャッシュ装置１または２の一方にのみ送信するように設定されてもよいし，キャッシュ装置１および２に交互に送信するように設定されていてもよい。また，アクセスホスト４ｉが，書き込み要求信号をキャッシュ装置１および２に送信し，キャッシュ装置１および２のうちアイドル状態にあるものが，データ受信可能メッセージをアクセスホスト４ｉに返信し，これにより，記憶データの送信を開始してもよい（キャッシュ装置１および２の双方からデータ受信可能メッセージが送信された場合には，アクセスホスト４ｉが一方を選択する）。以下では，アクセスホスト４ｉからキャッシュ装置１に記憶データが送信される場合を例にとって説明する。
アクセスホスト４ｉは，キャッシュ装置１の入出力部１３に記憶データおよび制御データをアクセスネットワーク６を介して送信する。制御データは，たとえば，記憶データのヘッダとして付加されている。この制御データには，記憶データの記憶されるべき２次記憶装置の装置番号，装置開始アドレス，およびデータ長（以下，装置番号，装置開始アドレス，およびデータ長を「アドレス範囲」という。）が含まれている。
入出力部１３は，アクセスホスト４ｉから送信された制御データおよび記憶データをキャッシュ管理部１１に与える。
キャッシュ管理部１１は，アクセスホスト４ｉから送信された記憶データ（記憶データａ）のアドレス範囲と重なるアドレス範囲を有する記憶データ（記憶データｂ）がキャッシュメモリ１２に既に記憶されているかどうかを，キャッシュメモリ１２のキャッシュ制御表のアドレス範囲に基づいて判断する。
記憶データａのアドレス範囲と重なるアドレス範囲を有する記憶データｂが存在しない場合には，キャッシュ管理部１１は，記憶データａのキャッシュ制御リストを生成し，キャッシュ制御表に付加する。そして，キャッシュ管理部１１は，生成したキャッシュ制御リストのキャッシュ開始アドレスから始まるキャッシュメモリ１２のメモリセルに記憶データａを書き込む（Ｓ１）。
一方，アドレス範囲が重なる場合として，図７Ａ〜図７Ｅに示すように，（１）記憶データａのアドレス範囲と記憶データｂのアドレス範囲とがまったく同一の場合（図７Ａ），（２）記憶データａのアドレス範囲が記憶データｂのアドレス範囲を包含する場合（図７Ｂ），（３）記憶データａのアドレス範囲が記憶データｂのアドレス範囲に包含される場合（図７Ｃ），（４）記憶データａのアドレス範囲と記憶データｂのアドレス範囲とが，ともに一部重なる範囲と重ならない範囲とを有する場合（図７Ｄおよび図７Ｅ），がある。
（１）の場合には，キャッシュ管理部１１は，その記憶データｂのキャッシュ制御リストの装置番号，装置開始アドレス等を記憶データａのものに更新する。あるいは，キャッシュ管理部１１は，記憶データａのキャッシュ制御リストを生成し，キャッシュ制御表に付加するとともに，記憶データｂのキャッシュ制御リストの状態を“ｉｎｖａｌｉｄａｔｅｄ”にするか，または，記憶データｂのキャッシュ制御リストを消去してもよい。そして，キャッシュ管理部１１は，キャッシュ制御リストのキャッシュ開始アドレスから始まるキャッシュメモリ１２の領域に記憶データａを書き込む（Ｓ１）。
記憶データａが書き込まれるキャッシュメモリ１２上の領域は，記憶データｂが記憶されていたキャッシュメモリ１２上の領域と同一であってもよいし，他の空いている領域であってもよい。前者の場合に，記憶データｂは記憶データａにより上書きされる。後者の場合に，記憶データｂは，キャッシュメモリ１２上には残っているものの，そのキャッシュ制御リストは“ｉｎｖａｌｉｄａｔｅｄ”にされているか，または，キャッシュ制御表から消去（上書きを含む。）されているので，有効な記憶データとしては取り扱われない。したがって，記憶データｂは，その後，他の記憶データにより上書きされることとなる。以下の（２）〜（４）の場合も同様である。
（２）の場合も，（１）の場合と同様に処理される（Ｓ１）。したがって，記憶データｂのキャッシュ制御リストはキャッシュ制御表から抹消される。
（３）の場合には、キャッシュ管理部１１は，アドレス範囲が重なる部分については，記憶データａのキャッシュ制御リストを生成して，キャッシュ制御表に付加し，記憶データａをキャッシュメモリ１２に書き込む（Ｓ１）。また，キャッシュ管理部１１は，記憶データｂのうち，記憶データａと重なる部分を除いた２つの部分について，それぞれキャッシュ制御リストを生成（または更新）し，キャッシュ制御表に付加する。
（４）の場合には，キャッシュ管理部１１は，記憶データａのキャッシュ制御リストを生成して，キャッシュ制御表に付加し，記憶データａをキャッシュメモリ１２に書き込む（Ｓ１）。また，キャッシュ管理部１１は，記憶データｂのうち，記憶データａと重なる部分を除いた部分（１つ）について，キャッシュ制御リストを生成または更新し，キャッシュ制御表に付加する。
記憶データａのキャッシュ制御リストの状態には，“ｒｅｃｅｉｖｅｄ”が書き込まれ，この記憶データａがｒｅｃｅｉｖｅｄ状態であることが示される。
続いて，キャッシュ管理部１１は，コピーメッセージ（ＣＯＰＹ）を，メッセージ通信部１５および通信回線Ｌを介してキャッシュ装置２のメッセージ通信部２５に送信する（Ｓ２）。このコピーメッセージのヘッダ部の装置番号，装置開始アドレス，およびデータ長には，記憶データａのキャッシュ制御リストの装置番号，装置開始アドレス，およびデータ長がそれぞれ書き込まれる。また，コピーメッセージのデータ部には，記憶データａが置かれる。
メッセージ通信部２５は，キャッシュ装置１から送信されたコピーメッセージをキャッシュ管理部２１に与える。キャッシュ管理部２１は，コピーメッセージを受信すると，コピーメッセージのデータ部の記憶データａに対して，前述したキャッシュ管理部１１のステップＳ１と同様の処理を実行する。
すなわち，キャッシュ管理部２１は，キャッシュメモリ２２のキャッシュ制御表に基づいてキャッシュ制御リストの更新または生成を行い，記憶データａをキャッシュメモリ２２に書き込む（Ｓ７）。記憶データａのすべてがキャッシュメモリ２２に書き込まれた時に，キャッシュ装置１または２の一方が障害で停止してもこの記憶データａは喪失されない。すなわち，記憶データａの不揮発化が完了する。したがって，この不揮発化を表すために，キャッシュ管理部２１が保持する記憶データａのキャッシュ制御リストの状態には，“ｎｏｎ−ｖｏｌａｔｉｌｅ”が書き込まれる。
記憶データａのキャッシュメモリ２２への書き込み後，キャッシュ管理部２１は，正常に書き込みが終了したことを示す第１の確認応答メッセージ（Ｃ−ＡＣＫ）をメッセージ通信部２５および通信回線Ｌを介してメッセージ通信部１５に送信する（Ｓ８）。
メッセージ通信部１５は，第１の確認応答メッセージをキャッシュ管理部１１に与える。キャッシュ管理部１１は，第１の確認応答メッセージをメッセージ通信部１５から受け取ると，アクセスホスト用の確認応答メッセージ（ホスト確認応答メッセージ）を入出力部１３およびアクセスネットワーク６を介してアクセスホスト４ｉに送信する（Ｓ３）。このホスト確認応答メッセージの送信により，アクセスホスト４ｉは，記憶データａがキャッシュシステム３（キャッシュ装置１および２）に記憶され，不揮発化されたことを知る。
ホスト確認応答メッセージの送信の際に，キャッシュ管理部１１は，データａのキャッシュ制御リストの状態を“ｒｅｃｅｉｖｅｄ”から“ｄｉｒｔｙ”に更新する。
続いて，その後，適当なタイミングで，キャッシュ管理部１１は，キャッシュメモリ１２に記憶した記憶データａに対応するキャッシュ制御リストの状態を“ｆｌｕｓｈｉｎｇ”に更新するとともに，この記憶データａを，入出力部１４およびストレージネットワーク７を介して２次記憶装置群５の２次記憶装置（５ｋとする。）に送信する（Ｓ４）。この２次記憶装置５ｋは，記憶データａのキャッシュ制御リストの装置番号に対応する２次記憶装置である。送信された記憶データａは，２次記憶装置５ｋにおける装置開始アドレスから始まる領域に書き込まれる（Ｓ４）。
記憶データａの２次記憶装置５ｋへの送信（書き込み）が終了すると，キャッシュ管理部１１は，キャッシュ制御表の状態を“ｆｌｕｓｈｅｄ  ｍｓｇ”に更新するとともに，フラッシュメッセージ（ＦＬＵＳＨＥＤ）をメッセージ通信部１５および通信回線Ｌを介してメッセージ通信部２５に送信する（Ｓ５）。このフラッシュメッセージは，メッセージ通信部２５からキャッシュ管理部２１に与えられる。これにより，キャッシュ管理部２１は，フラッシュ（すなわち記憶データａの２次記憶装置への不揮発化）が完了したことを知り，キャッシュメモリ２２に記憶された記憶データａを安全に消去できることを認識する。
続いて，キャッシュ管理部２１は，キャッシュメモリ２２に記憶された記憶データａのキャッシュ制御リストの状態を“ｃｌｅａｎ”に更新するとともに，ｃｌｅａｎ状態に移行したことをキャッシュ装置１に通知するために，第２の確認応答メッセージ（Ｆ−ＡＣＫ）を，メッセージ通信部２５および通信回線Ｌを介してメッセージ通信部１５に送信する（Ｓ９）。
キャッシュ管理部１１は，メッセージ通信部１５から第２の確認応答メッセージを受け取ると，記憶データａをｃｌｅａｎ状態として扱うために，キャッシュ制御リストの状態を“ｃｌｅａｎ”に更新する。
キャッシュ管理部１１および２１は，ｃｌｅａｎ状態にあるキャッシュ制御リストの状態をいつでも“ｉｎｖａｌｉｄａｔｅｄ”（無効化）に更新することができる（Ｓ６，Ｓ１０）。たとえば，ｃｌｅａｎ状態にある記憶データａが不要になった時点，または，キャッシュメモリ１２または２２の空き容量がなくなり，記憶データａを消去する必要が生じた時点等に，記憶データａの状態をｉｎｖａｌｉｄａｔｅｄ状態にすることができる。また，ＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）アルゴリズムを用いて，最も読み出されていない記憶データａをｉｎｖａｌｉｄａｔｅｄ状態にすることもできる。
ｉｎｖａｌｉｄａｔｅｄ状態のキャッシュ制御リストは，その後，新たな記憶データがキャッシュメモリに書き込まれる時等に，キャッシュ制御表から消去されるか，または，他の新たに記憶データのキャッシュ制御リストにより上書きされることとなる。また，ｉｎｖａｌｉｄａｔｅｄ状態の記憶データのキャッシュメモリ上の領域も，他の新たな記憶データにより上書きされる。
これにより，キャッシュシステム３の記憶データの書き込み処理は終了する。キャッシュシステム３のキャッシュ装置１および２は，アクセスホスト群から独立して記憶データを受信し，書き込み処理を独立して実行することができる。したがって，キャッシュシステム３は，キャッシュ装置が１つしか存在しない場合と比較して，ほぼ２倍の処理能力を有する。これにより，キャッシュ装置が１つの場合のボトルネックを解消できる。また，記憶データは，少なくとも一方のキャッシュ装置または２次記憶装置群５に保持されているので，一方のキャッシュ装置に障害が発生しても，記憶データが失われることはない。
キャッシュ装置２がアクセスホスト４ｉから記憶データを受信した場合には，キャッシュ装置１とキャッシュ装置２とが入れ替わるだけであり，上記と同じ処理が実行される。
なお，ステップＳ７において，キャッシュ装置１から通信回線Ｌを介して送信された記憶データａと同一のアドレス範囲を有する別の記憶データ（記憶データｃ）を，キャッシュ装置２がアクセスホスト４ｊから受信し，この記憶データｃがキャッシュ装置２においてｒｅｃｅｉｖｅｄ状態に置かれている場合がある。すなわち，同一のアドレス範囲であって，内容の異なる記憶データａおよびｃを，キャッシュ装置１および２が，ほぼ同時に，異なるアクセスホストからそれぞれ受信する場合がある。この場合の処理については，後述する書き込みデータの衝突時の処理において説明する。
ステップＳ１において，記憶データａにより上書きされ，消去された記憶データｂがｒｅｃｅｉｖｅｄ状態またはｆｌｕｓｈｅｄ  ｍｓｇ状態にあり，この記憶データｂについての第１の確認応答メッセージまたは第２の確認応答メッセージがキャッシュ装置２からキャッシュ装置１へ送信中の場合がある。この場合に，キャッシュ装置１（キャッシュ管理部１１）は，キャッシュ装置２から送信されたこれらの確認応答メッセージを無視することとなる。すなわち，キャッシュ装置１は，キャッシュ装置２からのこれらの確認応答メッセージを受信しても，廃棄するだけであり，確認応答メッセージの受信に伴う処理を実行しない。
確認応答メッセージを無視するかどうかは，メッセージに含まれるシーケンス番号に基づいて判断される。たとえば，シーケンス番号が１から順に１つずる増加する番号である場合において，キャッシュ装置１が第１の確認応答メッセージを２つ受信した場合には，両第１の確認応答メッセージのシーケンス番号のうち，若い（小さな）値を有するものは記憶データｂに対応する応答メッセージである。したがって，この場合には，若いシーケンス番号を有する第１の確認応答メッセージが無視される。
また，キャッシュ装置２によってフラッシュされ，ｆｌｕｓｈｅｄ  ｍｓｇ状態にある記憶データ（記憶データｄ）と同一のアドレス範囲で，内容の異なる記憶データａが，アクセスホストからキャッシュ装置１に送信され，キャッシュ装置１により受信されるときがある。この場合には，キャッシュ装置１は，キャッシュ装置２からのフラッシュメッセージを無視するとともに，キャッシュ装置２は，すでにフラッシュされた記憶データｄを，キャッシュ装置１から送信されるコピーメッセージに含まれる記憶データａに置き換えることにより，同一アドレス範囲の記憶データの不一致を解消することができる。
キャッシュ装置１の記憶データａがｆｌｕｓｈｉｎｇ状態となるまでに，この記憶データａと同じアドレス範囲の新たな記憶データ（記憶データｅ）を，キャッシュ装置１がアクセスホストから受信した場合には，キャッシュ装置１（キャッシュ管理部１１）は，２次記憶装置４ｋへの記憶データａの書き込み（フラッシング）を中止し，記憶データｅのみを２次記憶装置４ｋに書き込むことにより，書き込みの重複を回避することができる。
＜記憶データの書き込み処理の他の形態＞
アクセスホスト４ｉからキャッシュ装置１に送信された記憶データａが複数のバイトからなるブロックデータである場合に，コピーメッセージは，このブロックデータを複数の部分に分割して，各部分ごとに複数個送信されてもよい。この場合に，第１の確認応答メッセージも，各部分ごとに対応して，複数個送信されることとなる。また，このブロックデータのキャッシュ制御リストの状態は，ブロックデータのすべてについて，受信やキャッシュメモリ２２への書き込み等が終了した後に，更新される。さらに，アクセスホスト４ｉへのホスト確認応答メッセージも，ブロックデータのすべてについての第２の確認応答メッセージ受信後に送信される。
ステップＳ５で送信されるフラッシュメッセージは，他のメッセージとは別に送信することもできるし，他の制御メッセージに付加してピギーバック（ｐｉｇｇｙｂａｃｋ）により送信することもできる。すなわち，ステップＳ４の直後，他のメッセージとは分離された個別メッセージとしてフラッシュメッセージを送信することもできるし，その後，他の記憶データについてのコピーメッセージに付加してピギーバックとして送信することもできる。
なお，キャッシュメモリ１２に記憶されている記憶データｂと，アクセスホスト４ｉから受信した記憶データａとが同一内容である場合に，キャッシュ装置１はアクセスホスト４ｉに対して即座に確認応答メッセージを送信し，２次記憶装置（ならびにキャッシュメモリ１２および２２）への書き込み（更新）を行わないようにすることもできる。これによって，書き込みに要するコストを減少させることができる。
＜書き込みデータの衝突時の処理＞
「書き込みデータの衝突」とは，アクセスホスト群からキャッシュシステム３に同一のアドレス範囲で内容の異なる記憶データが複数書き込まれ，これら複数の記憶データがキャッシュシステム３においてｒｅｃｅｉｖｅｄ状態にある状態をいう。
この衝突には，一方のキャッシュ装置のみにおける衝突と，２つのキャッシュ装置１および２の双方における衝突とがある。以下では，これら２つの場合の衝突発生時の処理について説明する。
（１）一方のキャッシュ装置での衝突発生時の処理
キャッシュ装置１が，ある記憶データＡ１をアクセスホスト４ｉから受信後，この記憶データＡ１と同一のアドレス範囲で，内容の異なる記憶データＡ２をアクセスホスト４ｊから受信した場合に，キャッシュ装置１において，記憶データＡ１とＡ２との衝突が発生する。アクセスホスト４ｉと４ｊとは同じ場合もあるし，異なる場合もある。
この場合に，キャッシュ装置１のキャッシュ管理部１１は，記憶データＡ１のキャッシュ制御リストを，記憶データＡ２のキャッシュ制御リストにより上書きするか，あるいは，記憶データＡ１のキャッシュ制御リストを消去またはｉｎｖａｌｉｄａｔｅｄ状態にして，記憶データＡ２のキャッシュ制御リストを新たに生成し，キャッシュ制御表に加える。また，キャッシュ管理部１１は，キャッシュメモリ１２において，記憶データＡ２を，記憶データＡ１と同一の領域または異なる領域に書き込む。
また，キャッシュ管理部１１は，記憶データＡ１についての第１の確認応答メッセージをキャッシュ装置２から受信した場合には，この第１の確認応答メッセージを無視する。なお，２つの第１の確認応答メッセージは，たとえば，上述したのと同様にして，シーケンス番号の大小（老若）により区別することができ，シーケンス番号の小さい（若い）第１の確認応答メッセージが無視される。
同様にして，キャッシュ装置２のキャッシュ管理部２１は，記憶データＡ１のコピーメッセージ（第１のコピーメッセージ）に基づいて生成したキャッシュ制御リストを，記憶データＡ２のコピーメッセージ（第２のコピーメッセージ）に基づいて上書きするか，あるいは，記憶データＡ１のキャッシュ制御リストを消去またはｉｎｖａｌｉｄａｔｅｄ状態にして，記憶データＡ２のキャッシュ制御リストを新たに生成し，キャッシュ制御表に加える。また，キャッシュ管理部２１は，キャッシュメモリ２２において，記憶データＡ２を，記憶データＡ１と同一の領域または異なる領域に書き込む。
なお，通信回線Ｌがたとえばギガビットイーサネットのような場合には，後から送信した第２のコピーメッセージが先に送信した第１のコピーメッセージよりも先にキャッシュ装置２に受信される場合がある。このような場合にも，キャッシュ管理部２１は，第１のコピーメッセージおよび第２のコピーメッセージの各シーケンス番号に基づいて，第１のコピーメッセージを無視（廃棄）し，第２のコピーメッセージの記憶データをキャッシュメモリ２２に記憶することができる。
キャッシュ装置１における記憶データの衝突を説明したが，キャッシュ装置２において同様の衝突が発生した場合も同様の処理が実行される。
（２）両キャッシュ装置間での衝突発生時の衝突検出処理
図５Ａから図５Ｃは，両キャッシュ装置間で衝突が発生した場合の衝突検出の処理の流れを示すシーケンス図である。これらの図において，記憶データＡ１および記憶データＡ２は，同一のアドレス範囲であり，異なる内容を有する記憶データである。
図５Ａから図５Ｃのいずれにおいても，アクセスホスト４ｉから送信された記憶データＡ１は，キャッシュ装置１により受信されてｒｅｃｅｉｖｅ状態にあり，また，アクセスホスト４ｊから送信された記憶データＡ２は，キャッシュ装置２により受信されてｒｅｃｅｉｖｅ状態にある。したがって，記憶データＡ１および記憶データＡ２は衝突状態にある。
なお，キャッシュ装置１の記憶データＡ１の受信時刻とキャッシュ装置２の記憶データＡ２の受信時刻とは同時の場合もあるし，一方が他方より早い場合もあるし，遅い場合もある。
この衝突状態において，キャッシュ装置１および２の双方で，記憶データＡ１およびＡ２がｄｉｒｔｙ状態またはｎｏｎ−ｖｏｌａｔｉｌｅ状態に移行すると，両キャッシュ装置の保持するデータの一貫性および透過性が保持できなくなる。したがって，一貫性および透過性を保持するために，両キャッシュ装置は，まず衝突状態を検出する必要がある。このため，以下の処理が実行される。
図５Ａは，一方のキャッシュ装置（キャッシュ装置２）が記憶データＡ２のコピーメッセージを送信する前に，他方のキャッシュ装置（キャッシュ装置１）から記憶データＡ１のコピーメッセージを受信した場合の衝突検出の処理の流れを示している。
キャッシュ装置１はアクセスホスト４ｉから記憶データＡ１を，キャッシュ装置２はアクセスホスト４ｊから記憶データＡ２を，それぞれ受信することにより，コピーメッセージをそれぞれ送信しようとする（Ｓ１１，Ｓ１３）。しかし，キャッシュ装置２がコピーメッセージを送信する前に，キャッシュ装置１から，記憶データＡ１のコピーメッセージを受信した場合には，キャッシュ装置２（キャッシュ管理部２１）は，記憶データＡ２について衝突が発生していることを検出する（Ｓ１４）。
すなわち，キャッシュ装置２（キャッシュ管理部２１）は，（ａ）記憶データＡ１のコピーメッセージのヘッダ部に含まれるアドレス範囲（つまり装置番号，装置開始アドレス，およびデータ長）と，記憶データＡ２のアドレス範囲とを比較することにより，同じアドレス範囲であることを検出し，（ｂ）コピーメッセージのデータ部に含まれる記憶データＡ１の内容と，記憶データＡ２の内容とを比較することにより，記憶データの内容が異なることを検出し，（ｃ）記憶データＡ２のキャッシュ制御リストにより記憶データＡ２がｒｅｃｅｉｖｅ状態にあること，および，コピーメッセージのヘッダ部の状態により記憶データＡ１がｒｅｃｅｉｖｅ状態にあることを検出する。これら（ａ）〜（ｃ）により，キャッシュ装置２は，記憶データＡ１と記憶データＡ２との衝突の発生を検出する。
キャッシュ装置２は，衝突を検出することにより，記憶データＡ２のコピーメッセージの送信を中止するとともに，第１の確認応答メッセージの代わりに衝突検出メッセージ（ＣＯＬＬＩＳＩＯＮ）をキャッシュ装置１に送信する（Ｓ１４）。
キャッシュ装置１（キャッシュ管理部１１）は，キャッシュ装置２から衝突検出メッセージを受信することにより，記憶データＡ１について衝突が発生していることを検出する（Ｓ１２）。すなわち，キャッシュ装置１（キャッシュ管理部１１）は，メッセージが衝突検出メッセージであること，および，衝突検出メッセージのヘッダ部に含まれるアドレス範囲に基づいて，記憶データＡ１に衝突が発生していることを検出する。
なお，キャッシュ装置１と２とが入れ替わった場合，すなわち，キャッシュ装置２がキャッシュ装置１より先に記憶データＡ２のコピーメッセージをキャッシュ装置１に送信した場合には，キャッシュ装置１が衝突検出メッセージをキャッシュ装置２に送信することとなる。
このようにして，一方のキャッシュ装置がｒｅｃｅｉｖｅ状態にある記憶データについて，同一アドレス範囲の異なる内容の記憶データを有するコピーメッセージを受信した場合には，他方のキャッシュ装置に，コピーメッセージの代わりに，衝突発生を通知する衝突検出メッセージを送信することにより，両キャッシュ装置が衝突の発生を検出することができる。
図５Ｂは，双方のキャッシュ装置がコピーメッセージを送信し，受信した場合の衝突検出の処理の流れを示している。
キャッシュ装置１が記憶データＡ１のコピーメッセージを送信し（Ｓ２１）．キャッシュ装置２が記憶データＡ２のコピーメッセージを送信し（Ｓ２４），両キャッシュ装置が，それぞれ相手方のコピーメッセージを受信した場合に，両キャッシュ装置は，この相手方のコピーメッセージによりそれぞれ衝突を検出する（Ｓ２２，Ｓ２５）。
この場合にも，図５Ａと同様に，衝突を検出したキャッシュ装置は，第１の確認応答メッセージの代わりに衝突検出メッセージを相手方に送信する（Ｓ２２，Ｓ２５）。すなわち，図５Ｂでは，双方のキャッシュ装置が衝突検出メッセージを相手方のキャッシュ装置に送信することとなる。これにより，双方のキャッシュ装置は，既に衝突検出済みの衝突を再度検出することとなる。
このように，両キャッシュ装置が，コピーメッセージを送信し，受信した場合には，このコピーメッセージにより両キャッシュ装置が衝突を検出することができる。さらに，この場合においても，双方のキャッシュ装置が衝突検出メッセージを送信することにより，双方のキャッシュ装置は，相互に衝突を検出したことを通知し合うことができる。
図５Ｃは，図５Ｂと同様に，双方のキャッシュ装置がコピーメッセージを送信するが，記憶データＡ１のコピーメッセージがキャッシュ装置１の衝突検出メッセージよりも後にキャッシュ装置２に受信された場合の衝突検出の処理の流れを示している。
この場合に、キャッシュ装置２は，キャッシュ装置１から送信された衝突検出メッセージにより衝突を検出するが（Ｓ３５），その後，受信された記憶データＡ１のコピーメッセージによって，検出済みの衝突を再度検出することとなる（Ｓ３６）。これにより，両キャッシュ装置で，衝突が検出されたこととなる（Ｓ３２，Ｓ３５，Ｓ３６）。
なお，キャッシュ装置２は，図５Ｃの破線で示すように，検出済みの衝突の検出後，第３の確認応答メッセージ（ＣＯＬ−ＡＣＫ）をキャッシュ装置１に送信してもよい。第３の確認応答メッセージが送信された場合に，キャッシュ装置１は，このメッセージにより，検出済みの衝突を再度検出することとなる（Ｓ３３）。
図５Ｃと逆の状況も生じ得る。すなわち，記憶データＡ２のコピーメッセージがキャッシュ装置１に遅れて到着する場合である。この場合にも，キャッシュ装置１と２とが入れ替わるだけで，同様の処理が行われる。
（３）両キャッシュ装置間での衝突回復処理
上述した両キャッシュ装置間で衝突が検出された場合に，その状況を解消（回復）する処理には以下の３つの方法がある。
（ａ）第１の方法
第１の方法は，衝突が検出された場合に，キャッシュ装置１または２のいずれを優先するかをあらかじめ決めておき，優先されるキャッシュ装置１が受信した記憶データを有効なものとする衝突解消方法である。この場合，優先されるキャッシュ装置の記憶データのみが有効なものとして取り扱われ，優先されないキャッシュ装置の記憶データは無効なものとして取り扱われる。
ここで，「記憶データが有効なものとして取り扱われる」とは，その記憶データのキャッシュ制御リストがｉｎｖａｌｉｄａｔｅｄ状態以外の状態でキャッシュ制御表に存在し，その記憶データがキャッシュメモリに記憶されていることをいう。
「記憶データが無効なものとして取り扱われる」とは，その記憶データのキャッシュ制御リストがキャッシュ制御表から消去される（他のキャッシュ制御リストにより上書きされる場合を含む。）か，または，そのキャッシュ制御リストの状態がｉｎｖａｌｉｄａｔｅｄ状態にされることをいう。その記憶データは，キャッシュメモリに存在する場合もあるし，キャッシュメモリから消去されている場合（他の記憶データにより上書きされる場合を含む。）もある。
たとえば，図５Ａにおいて，キャッシュ装置１が優先される場合に，キャッシュ装置１のキャッシュ管理部１１は，衝突を検出しても（Ｓ１２），記憶データＡ１のキャッシュ制御リストおよびキャッシュメモリ１２を更新する必要はない。すなわち，キャッシュ装置１では，記憶データＡ１が有効なものとして取り扱われ，記憶データＡ２は無効なものとして取り扱われる。
一方，キャッシュ装置２のキャッシュ管理部２１は，衝突検出後，記憶データＡ１のコピーメッセージのヘッダ部の情報により，記憶データＡ１のキャッシュ制御リストをキャッシュ制御表に付加するとともに，キャッシュメモリ２２に記憶データＡ１を書き込む。記憶データＡ２のキャッシュ制御リストは，消去されるか，または，ｉｎｖａｌｉｄａｔｅｄ状態にされる。これにより，キャッシュ装置２でも，記憶データＡ１が有効なものとして取り扱われ，記憶データＡ２は無効なものとして取り扱われる。
図５Ａにおいて，キャッシュ装置２が優先される場合に，キャッシュ装置２のキャッシュ管理部２１は，衝突検出後，記憶データＡ２のキャッシュ制御リストおよびキャッシュメモリ２２を更新する必要はない。そして，キャッシュ管理部２１は，記憶データＡ２のコピーメッセージをキャッシュ装置１に送信する。このコピーメッセージは，衝突検出メッセージとは別に送信されてもよいし，ピギーバックとして，衝突検出メッセージとともに送信されてもよい。
キャッシュ装置１のキャッシュ管理部１１は，このコピーメッセージのヘッダ部の情報により記憶データＡ２のキャッシュ制御リストをキャッシュ制御表に付加し，キャッシュメモリ１２に記憶データＡ２を書き込む。記憶データＡ１のキャッシュ制御リストは、消去されるか，または，ｉｎｖａｌｉｄａｔｅｄ状態にされる。これにより，キャッシュ装置１でも，記憶データＡ２が有効なものとして取り扱われ，記憶データＡ１は無効なものとして取り扱われる。
なお，キャッシュ装置１は，キャッシュ装置２からのコピーメッセージに対して，第１の確認応答メッセージを返してもよいが，メッセージの通信コストを削減するために返さない方が好ましい。第１の確認応答メッセージが返された場合には，キャッシュ装置２は，この第１の確認応答メッセージを無視すればよい。
図５Ｂおよび図５Ｃでは，キャッシュ装置１および２は，ともに記憶データＡ１および記憶データＡ２の双方を保持しているので，両キャッシュ装置は，衝突検出後，優先される側のキャッシュ装置により受信された記憶データを有効なものとして取り扱い，優先されない側のキャッシュ装置により受信された記憶データを無効なものとして取り扱う。
このようにして，衝突状態が解消され，キャッシュ装置１および２において，記憶データの一貫性および透過性が確保される。
（ｂ）第２の方法
第２の方法は，キャッシュ装置１の記憶データの受信時刻とキャッシュ装置２の記憶データの受信時刻とを比較し，より早い受信時刻の記憶データを優先し，有効なものとする衝突解消方法である。
この第２の方法では，衝突検出後，キャッシュ装置１および２が，通信回線Ｌを介して，受信時刻を通信し合うか，あるいは，コピーメッセージまたは衝突検出メッセージにより受信時刻を送信することにより，相互に受信時刻を通知することとなる。そして，より早い受信時刻で受信された記憶データが優先され，その記憶データが有効なものとして取り扱われ，遅い受信時刻で受信された記憶データが無効なものとして取り扱われることとなる。コピーメッセージまたは衝突メッセージにより受信時刻を通知する場合には，これらのメッセージのヘッダ部またはデータ部に時刻を格納する領域が設けられる。
なお，第２の方法では，キャッシュ装置１および２の双方の時刻が同期されていることが前提となる。また，第１の方法と同様にして，図５Ａにおいて，キャッシュ装置１が優先される場合には，キャッシュ装置２からキャッシュ装置１に記憶データＡ２のコピーメッセージが送信されることとなる。図５Ｂおよび図５Ｃでは，キャッシュ装置１および２のいずれが優先されても，双方とも記憶データＡ１およびＡ２を保持しているので，コピーメッセージを新たに送信する必要はない。
この第２の方法によっても，衝突状態が解消され，キャッシュ装置１および２において，記憶データの一貫性および透過性が確保される。
（ｃ）第３の方法
第３の方法は，衝突検出後，両キャッシュ装置がランダムな時間の経過後，再びコピーメッセージ（再送コピーメッセージ）または再送指示メッセージを送信する衝突解消方法である。
より早く再送コピーメッセージまたは再送指示メッセージを送信したキャッシュ装置が優先され，このキャッシュ装置がアクセスホストから受信した記憶データが有効なものとして取り扱われる。
ランダムな時間は，たとえば，キャッシュ管理部１１および２１によりそれぞれ発生された擬似乱数に基づいて求められた時間である。
ランダムな時間の経過後送信されるメッセージは，記憶データＡ１またはＡ２を含む再送コピーメッセージであってもよいが，記憶データＡ１およびＡ２を相手側のキャッシュ装置が既に有する場合には，通信コストを軽減するために，記憶データを含まず，再送を示すための再送指示メッセージであることが好ましい。
再送コピーメッセージは，通常のコピーメッセージと区別するために，ヘッダ部のタイプが，再送コピーメッセージであることを表す“ＲＥ−ＣＯＰＹ”とされる。それ以外のヘッダ部の内容は，通常のコピーメッセージのものと同じである。
再送指示メッセージは，ヘッダ部のみを有し，データ部を有しない。再送指示メッセージのヘッダ部のタイプは，再送指示メッセージを表す“ＲＥＴＸ”であり，ヘッダのアドレス範囲は，先に送信した記憶データと同一のアドレス範囲とされる。これにより，受信側のキャッシュ装置は，先に受信した記憶データについての再送メッセージであることを識別することができる。
たとえば，図５Ａでは，キャッシュ装置１（キャッシュ管理部１１）は，ランダムな時間の経過後，再送指示メッセージを通信回線Ｌを介してキャッシュ装置２に送信する。キャッシュ装置２（キャッシュ管理部２１）は，ランダムな時間の経過後，記憶データＡ２を含む再送コピーメッセージを通信回線Ｌを介してキャッシュ装置１に送信する。
キャッシュ装置１が送信する再送指示メッセージが，キャッシュ装置２が送信する再送コピーメッセージより先に送信された場合には，キャッシュ装置１が優先され，したがって，記憶データＡ１が有効なものとして取り扱われる。
一方，キャッシュ装置２が送信する再送コピーメッセージが，キャッシュ装置１が送信する再送指示メッセージより先に送信された場合には，キャッシュ装置２が優先され，したがって，記憶データＡ２が有効なものとして取り扱われる。なお，この場合に，キャッシュ装置１は，記憶データＡ２を有しないので，キャッシュ装置２は，記憶データＡ２をコピーメッセージ等によりキャッシュ装置１に送信することとなる。
キャッシュ装置１によるランダムな時間とキャッシュ装置２によるランダムな時間が同一であり，キャッシュ装置１が送信する再送指示メッセージと，キャッシュ装置２が送信する再送コピーメッセージとが，同時に送信および受信された場合には，再びランダムな時間が計時され，同様の処理が繰り返される。
図５Ｂおよび図５Ｃの場合にも，同様の処理が実行される。
なお，ランダムな時間が経過するまでの間に，同じアドレス範囲を有する別の記憶データがアクセスホストから送信され，キャッシュ装置１または２により受信される場合がある。この場合には，別の記憶データを受信したキャッシュ装置１または２が，再度コピーメッセージにより，この別の記憶データを相手方のキャッシュ装置に送信することとなる。
この第３の方法によっても，衝突状態が解消され，キャッシュ装置１および２において，記憶データの一貫性および透過性が確保される。
なお，キャッシュ装置１がアクセスホストから受信した記憶データおよびキャッシュ装置２がアクセスホストから受信した記憶データの少なくとも一方が複数バイトを有する場合には，複数バイトの記憶データの一部分に衝突が発生する場合がある。この場合には，この衝突が発生した一部分について，上記衝突検出処理および回復処理が実行される。
＜記憶データの読み出し処理＞
アクセスホスト群４からキャッシュシステム３に対し，記憶データの読み出し要求があった場合の記憶データの読み出し処理について説明する。ここでは，アクセスホスト４ｉがキャッシュ装置１に対して記憶データの読み出し要求を行った場合を説明する。
アクセスホスト４ｉは，読み出す記憶データのアドレス範囲を含む読み出し要求を，アクセスネットワーク６を介してキャッシュ装置１の入出力部１３に送信する。この読み出し要求は，入出力部１３からキャッシュ管理部１１に与えられる。
キャッシュ管理部１１は，読み出し要求に含まれるアドレス範囲の記憶データがキャッシュメモリ１２に存在するかどうかを，キャッシュ制御表に基づいて判断する。ｒｅｃｅｉｖｅｄ状態およびｉｎｖａｌｉｄａｔｅｄ状態にある記憶データを除き，それ以外の状態にある記憶データは，キャッシュメモリ１２に存在すると判断される。
アドレス範囲に対応する記憶データの全部または一部が，キャッシュメモリ１２に記憶されていない場合には，キャッシュ管理部１１は，キャッシュメモリ１２に記憶されていない部分を，入出力部１４およびストレージネットワーク７を介して２次記憶装置群５の対応する２次記憶装置から読み出し，キャッシュメモリ１２に記憶する。また，これに伴い，キャッシュ管理部１１は，２次記憶装置からキャッシュメモリ１２に記憶された記憶データに関するキャッシュ制御リストを生成し，キャッシュ制御表に付加する。なお，このキャッシュ制御リストの状態には“ｃｌｅａｎ”が書き込まれる。
続いて，キャッシュ管理部１１は，読み出し要求に対応する記憶データを，キャッシュメモリ１２から読み出し，入出力部１３およびアクセスネットワーク６を介してアクセスホスト４ｉに送信する。
このとき，本実施の形態では，キャッシュ装置１が２次記憶装置から読み込んた記憶データがキャッシュ装置２のキャッシュメモリ２２に既に存在する場合であっても，２次記憶装置から読み出した記憶データと，キャッシュメモリ２２に存在する記憶データとは同一内容であることが保証されている。したがって、キャッシュ装置１と２との間で記憶データの一貫性を確認するための確認メッセージ等を通信する必要はない。これにより，この通信に伴う通信オーバヘッドおよび通信コストを削減することができる。
なお，アクセスホスト４ｉから読み出し要求があった記憶データが，キャッシュメモリ１２に存在せず，キャッシュメモリ２２に存在する場合に，キャッシュ管理部１１は，キャッシュ装置２（キャッシュメモリ２２）からこの記憶データを受け取ってもよい。
また，アクセスホスト４ｉにおいて，読み出され，受信される記憶データの時間順序が重要な場合には，アクセスホスト４ｉが有する一般的な制御同期機構等を使用することで時間順序を保証することができる。
＜負荷分散処理＞
上記の説明では，アクセスホストから記憶データを受信したキャッシュ装置が２次記憶装置に記憶データの書き込み（フラッシュ）を行っているが，このフラッシュを２つのキャッシュ装置間で分散させることもできる。
たとえば，一方のキャッシュ装置の２次記憶装置へのアクセス頻度が他方のキャッシュ装置のそれよりも高い場合等には，書き込み処理を他方のキャッシュ装置に分担させることができる。また，２つのキャッシュ装置の処理能力や性能に差がある場合も，能力や性能の高いキャッシュ装置により多くの書き込み処理を行わせることもできる。これにより，キャッシュ装置１および２の間で負荷分散が図られる。
このような負荷分散を行うために，キャッシュ管理部１１および２１は，ともに負荷を計測し，制御メッセージ（上述したコピーメッセージ，確認応答メッセージ等とは異なる他の制御メッセージ）により定期的に負荷を相互に通知し合う。計測される負荷としては，たとえば２次記憶装置群５への書き込み回数や書き込んだデータ量（バイト数，ブロック数）等が含まれる。そして，負荷の低いキャッシュ装置がフラッシュを実行する。
図６は，負荷分散が行われた場合の記憶データの書き込み処理の流れを示すシーケンス図である。
キャッシュ装置１がアクセスホスト４ｉから記憶データを受信すると，キャッシュ管理部１１は，図４のステップＳ１と同様に，キャッシュ制御リストを生成するとともに，キャッシュメモリ１２に記憶データを記憶する（Ｓ４０）。
続いて，キャッシュ管理部１１は，コピーメッセージをキャッシュ装置２に送信する（Ｓ４１）。ここで，キャッシュ管理部１１は，キャッシュ装置１の負荷がキャッシュ装置２の負荷よりも高い場合には，コピーメッセージのヘッダ部のフラッシュ権限にキャッシュ装置２を指定する。
キャッシュ管理部２１は，フラッシュ権限にキャッシュ装置２が指定されたコピーメッセージを受信すると，キャッシュ制御リストを生成するとともに，生成したキャッシュリストの状態を，通常の場合に設定されるｎｏｎ−ｖｏｌａｔｉｌｅ状態ではなく，ｄｉｒｔｙ状態に設定し，コピーメッセージに含まれる記憶データをキャッシュメモリ２２に記憶する（Ｓ４２）。
続いて，キャッシュ管理部２１は，第１の確認応答メッセージをキャッシ装置１に返信する（Ｓ８）。
キャッシュ管理部１１は，第１の確認応答メッセージを受信すると，キャッシュ制御リストの状態ｄｉｒｔｙ状態ではなく，ｎｏｎ−ｖｏｌａｔｉｌｅ状態に設定し，また，ホスト確認応答メッセージをアクセスホスト４ｉに送信する（Ｓ４３）。
その後，キャッシュ管理部２１は，適当なタイミングでｄｉｒｔｙ状態の記憶データをｆｌｕｓｈｉｎｇ状態にして，２次記憶装置に書き込む（Ｓ４４）。以降のステップＳ４５〜Ｓ４８の処理は，キャッシュ管理部１１がキャッシュ制御リストの状態をｎｏｎ−ｖｏｌａｔｉｌｅからｃｌｅａｎにし，キャッシュ管理部２１がキャッシュ制御リストの状態をｆｌｕｓｈｉｎｇからｆｌｕｓｈｅｄ  ｍｓｇおよびｃｌｅａｎにする点が異なることを除いて，図４に示すステップＳ５〜Ｓ１０の対応する処理と同じである。
このようにして，適切なアドレス範囲の記憶データのフラッシュ権限を他方のキャッシュ装置に移すことにより，負荷分散が図られる。
なお，上記では，相手のキャッシュ装置にフラッシュ権限を与えているが，自己のキャッシュ装置にフラッシュ権限があることを，相手のキャッシュ装置にコピーメッセージ等の制御メッセージによって通知することもできる。
また，負荷の値を，各キャッシュ装置の性能に対する負荷の比とすることもできる。たとえば，キャッシュ装置１は，自己の負荷の値を自己の性能の値により除算し（すなわち（キャッシュ装置１の負荷の値）÷（キャッシュ装置１の性能の値）），この除算結果をキャッシュ装置２に送信し，キャッシュ装置２も，自装置の除算結果をキャッシュ装置１に送信する。そして，２つの比のうち，低い比の値を有するキャッシュ装置にフラッシュ権限が付与されるようにすることもできる。
＜障害監視および回復装置＞
障害監視部１６および２６は，前述したように，他方のキャッシュ装置の動作状況を監視し，障害が発生したかどうかを判断する。たとえば，障害監視部１６および２６は，相互に一定時間間隔で，他方のキャッシュ装置に通信回線Ｌを介して障害検出メッセージを送信し合う。そして，障害監視部１６および２６は，所定の時間を経過しても，他方のキャッシュ装置から送信される障害検出メッセージを受信しない場合には，他方のキャッシュ装置に障害が発生していると判断する。
以下，キャッシュ装置１に障害が発生し，障害監視部２６がこの障害を検出した場合を例にとり，障害検出時の回復処理について説明する。
キャッシュ装置１の障害が検出されると，キャッシュ装置１がキャッシュメモリ１２から２次記憶装置群５に書き込む予定であるｄｉｒｔｙ状態の記憶データを，キャッシュ装置２がキャッシュ装置１に代わって２次記憶装置に書き込む必要がある。
このため，障害監視部２６は，障害検出後，キャッシュ管理部２１が保持するキャッシュ制御表（すなわち，キャッシュメモリ２２に記憶された記憶データに関するキャッシュ制御表）に基づいて，ｎｏｎ−ｖｏｌａｔｉｌｅ状態にある記憶データの状態をｄｉｒｔｙ状態に書き換える。これにより，ｄｉｒｔｙ状態に変更された記憶データは，キャッシュ管理部２１によって，２次記憶装置群５に書き込まれる（フラッシュされる）こととなる。
キャッシュ装置１によって２次記憶装置群５に書き込み途中にあるｆｌｕｓｈｉｎｇ状態の記憶データも，そのどの部分までが２次記憶装置群５に書き込み済みかを判断することはできない。このキャッシュ装置１におけるｆｌｕｓｈｉｎｇ状態の記憶データも，キャッシュ装置２においては，ｎｏｎ−ｖｏｌａｔｉｌｅ状態の記憶データとしてキャッシュメモリ２２に記憶されている。したがって，このｆｌｕｓｈｉｎｇ状態の記憶データについても，上記同様に，キャッシュ装置２において，ｎｏｎ−ｖｏｌａｔｉｌｅ状態からｄｉｒｔｙ状態に変更されることにより，キャッシュ装置２によって，２次記憶装置に確実に記憶されることとなる。
キャッシュ装置１が障害から回復した場合，または，キャッシュ装置１が他のバックアップ用のキャッシュ装置に切り替えられた場合には，一方のキャッシュ装置にのみｄｉｒｔｙ状態の記憶データが存在する状況が起こり得る。したがって，このような状況が起こらないようにするために，キャッシュメモリ２２に記憶された全てのキャッシュデータがｃｌｅａｎ状態にならない限り，キャッシュ装置１を復帰させないよう，キャッシュ装置１の復帰タイミングが制御される。あるいは，キャッシュ装置１の復帰前までのｄｉｒｔｙ状態にある記憶データを復帰後，キャッシュ装置１に送信してもよい。
なお，キャッシュ装置２に障害が発生した場合には，キャッシュ装置１の障害監視部１６が上述した障害監視部２６と同様の処理を実行することとなる。
産業上の利用の可能性
本発明は，コンピュータ等のアクセスホスト（群）と２次記憶装置（群）との間に配置されるキャッシュシステムに利用することができる。
本発明によると，２つのキャッシュ装置がそれぞれ独立して，アクセスホストから記憶データを受信し，処理するので，単一のキャッシュ装置に対してほぼ２倍の処理能力を得ることができ，単一キャッシュ装置のボトルネックを解消できる。
また，両キャッシュ装置に同じ記憶データが記憶されるので，キャッシュシステムにおける記憶データの不揮発化が可能になる。その結果，一方のキャッシュ装置に障害が発生しても，記憶データの喪失が防止される。
さらに，両キャッシュ装置間で衝突解消処理が実行されるので，両キャッシュ装置間での記憶データの一貫性および透過性が確保される。したがって，記憶データの読み出しごとに，両キャッシュ装置でその記憶データに対する一貫性を確認する必要がなく，確認のためのオーバヘッドをなくすことができる。
結果として，性能を向上させながら，記憶データの一貫性と透過性を実現することが可能となる。
【図面の簡単な説明】
図１は，本発明の一実施の形態によるキャッシュシステムを使用した２次記憶装置アクセスシステムの全体構成を示すブロック図である。
図２は，キャッシュ管理部により保持されるキャッシュ制御表の構成例を示す。
図３は，メッセージ通信部間で通信される制御メッセージのデータ構造例を示す。
図４は，アクセスホストから送信された記憶データの２次記憶装置群への書き込み処理の流れを示すシーケンス図である。
図５Ａから図５Ｃは，両キャッシュ装置間で衝突が発生した場合の衝突検出の処理の流れを示すシーケンス図である。
図６は，負荷分散が行われた場合の記憶データの書き込み処理の流れを示すシーケンス図である。
図７Ａから図７Ｅは，２つの記憶データのアドレス範囲が重なる場合を示す。
【図１】
2003090089.tif 000003
【図２】
2003090089.tif 000004
【図３】
2003090089.tif 000005
【図４】
2003090089.tif 000006
【図５Ａ】
2003090089.tif 000007
【図５Ｂ】
2003090089.tif 000008
【図５Ｃ】
2003090089.tif 000009
【図６】
2003090089.tif 000010
【図７Ａ】
2003090089.tif 000011
【図７Ｂ】
2003090089.tif 000012
【図７Ｃ】
2003090089.tif 000013
【図７Ｄ】
2003090089.tif 000014
【図７Ｅ】
2003090089.tif 000015
【手続補正書】
【提出日】平成16年7月27日(2004.7.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムにおける各キャッシュ装置であって，
前記アクセスホストから与えられる第１のデータを入力するデータ入力部と，
他方のキャッシュ装置が前記アクセスホストから入力し，自キャッシュ装置に送信した第２のデータを受信するデータ受信部と，
前記第１のデータおよび前記第２のデータの双方またはいずれか一方を記憶するキャッシュ記憶部と，
前記キャッシュ記憶部を管理するキャッシュ管理部と，
前記第１のデータを前記他方のキャッシュ装置に送信するデータ送信部と，
前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力するデータ出力部とを有し，
前記データ送信部が前記第１のデータの送信を完了するまでに，前記データ入力部が，前記第１のデータの前記２次記憶装置上のアドレス範囲と同一のアドレス範囲を有し，前記第１のデータと内容の異なる第３のデータをアクセスホストから入力した場合には，前記キャッシュ管理部は，前記第３のデータを有効なものとして前記キャッシュ記憶部に記憶し，前記第１のデータを無効なものとして取り扱い，
さらに，前記データ入力部が前記第１のデータを入力してから前記データ送信部が前記第１のデータの送信を完了するまでに，前記データ受信部が前記第２のデータを受信した場合には，前記第１のデータおよび前記第２のデータの双方の前記２次記憶装置上のアドレス範囲と，双方のデータの内容とに基づいて，前記第１のデータおよび前記第２のデータの衝突の有無を判断する衝突検出部と，
前記衝突検出部が衝突を検出すると，衝突が発生したことを示す衝突検出メッセージを前記他方のキャッシュ装置に送信する衝突検出メッセージ送信部と，
前記他方のキャッシュ装置からの前記衝突検出メッセージを受信する衝突検出メッセージ受信部とを
有するキャッシュシ装置。
【請求項２】
請求の範囲第１項において，
前記衝突検出部は，前記衝突検出メッセージ受信部が前記他方のキャッシュ装置から前記衝突検出メッセージを受信した場合も衝突を検出する，
キャッシュ装置。
【請求項３】
請求の範囲第１項または第２項において，
前記キャッシュ管理部は，前記衝突検出部が衝突を検出すると，前記第１のデータおよび前記第２のデータのうち，あらかじめ定められた優先順位に基づいて優先されるデータを有効なものとして取り扱い，他方を無効なものとして取り扱う，
キャッシュ装置。
【請求項４】
請求の範囲第１項または第２項において，
前記キャッシュ管理部は，前記衝突検出部が衝突を検出すると，前記第１のデータが前記データ入力部に入力された時刻および前記第２のデータが前記他方のキャッシュ装置のデータ入力部に入力された時刻のうち，早い時刻を有するデータを有効なものとして取り扱い，遅い時刻を有するデータを無効なものとして取り扱う，
キャッシュ装置。
【請求項５】
請求の範囲第１項または第２項において，
前記衝突検出部が衝突を検出すると，ランダムな時間の経過後に，前記第１のデータ，または，前記第１のデータの再送を示す再送メッセージを送信するデータ／メッセージ再送部と，
前記他方のキャッシュ装置の前記データ／メッセージ再送部から送信された前記第２のデータまたは前記第２のデータの再送メッセージを受信するデータ／メッセージ受信部と，
をさらに有し，
前記キャッシュ管理部は，前記データ／メッセージ再送部による再送時刻と，前記データ／メッセージ受信部による受信時刻とのうち，早い時刻に対応するデータを有効なものとして取り扱い，遅い時刻に対応するデータを無効なものとして取り扱う，
キャッシュ装置。
【請求項６】
請求の範囲第５項において，
データ／メッセージ再送部は，前記データ／メッセージ再送部による再送時刻と，前記データ／メッセージ受信部による受信時刻とが同時刻の場合には，再びランダムな時間の経過後，再送を繰り返す，
キャッシュ装置。
【請求項７】
請求の範囲第１項から第６項のいずれか１項において，
前記データ出力部が前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力した後に，該出力が完了したことを示すフラッシュメッセージを前記他方のキャッシュ装置に送信するフラッシュメッセージ送信部と，
前記他方のキャッシュ装置から送信されたフラッシュメッセージを受信するフラッシュメッセージ受信部と，
をさらに有するキャッシュ装置。
【請求項８】
請求の範囲第７項において，
前記キャッシュ管理部は，前記フラッシュメッセージ送信部による前記フラッシュメッセージの送信後，または，前記フラッシュメッセージ受信部による前記フラッシュメッセージの受信後，該フラッシュメッセージに対応する前記第１のデータまたは前記第２のデータを無効なものとして取り扱う，
キャッシュ装置。
【請求項９】
請求の範囲第１項から第８項のいずれか１項において，
前記データ送信部は，前記第１のデータとともに，該第１のデータの前記２次記憶装置への出力をいずれのキャッシュ装置が行うかを示す第１のフラッシュ権限情報を送信し，
前記データ受信部は，前記第２のデータとともに，該第２のデータの前記２次記憶装置への出力をいずれのキャッシュ装置が行うかを示す第２のフラッシュ権限情報を受信し，
前記データ出力部は，前記第１のフラッシュ権限情報が自キャッシュ装置を示している場合には，前記第１のデータを前記２次記憶装置に出力し，前記第２のフラッシュ権限情報が自キャッシュ装置を示している場合には，前記第２のデータを前記２次記憶装置に出力する，
キャッシュ装置。
【請求項１０】
請求の範囲第９項において，
自キャッシュ装置の負荷を計測し，計測した前記負荷の値を他方のキャッシュ装置に送信する負荷情報送信部と，
前記他方のキャッシュ装置から送信された，他方のキャッシュ装置の負荷の値を受信する負荷情報受信部と，
前記自キャッシュ装置の負荷の値と前記他方のキャッシュ装置の負荷の値とを比較し，負荷の値の小さなキャッシュ装置に，前記第１の記憶データまたは前記第２の記憶データのフラッシュ権限を設定するフラッシュ権限設定部と，
をさらに有するキャッシュ装置。
【請求項１１】
請求の範囲第１０項において，
前記負荷の値が各キャッシュ装置の性能に対する負荷の比である，キャッシュ装置。
【請求項１２】
請求の範囲第１項から第１１項のいずれか１項において，
他方のキャッシュ装置の障害発生を監視し，該障害発生を検出すると，前記キャッシュ記憶部に記憶された前記第１のデータのうち，前記データ出力部または他方のキャッシュ装置のデータ出力部が前記２次記憶装置への出力を完了しておらず，かつ，前記データ送信部が他方のキャッシュ装置への送信を完了したもの，および，前記キャッシュ記憶部に記憶された前記第２のデータのうち，前記データ出力部または他方のキャッシュ装置のデータ出力部が前記２次記憶装置への出力を完了していないものを，前記データ出力部が前記２次記憶装置に出力するように制御する障害監視部をさらに有する，
キャッシュ装置。
【請求項１３】
請求の範囲第１項から第１２項のいずれか１項において，
前記２次記憶装置のアドレス範囲を含むデータ読み出し要求を前記アクセスホストから受け取る読み出し要求入力部と，
前記読み出し要求に含まれるアドレス範囲に対応するデータが前記キャッシュ記憶部に有効なデータとして記憶されている場合には，該データを前記キャッシュ記憶部から読み出し，前記キャッシュ記憶部に存在しない場合，または，有効なデータとして記憶されていない場合には，前記２次記憶装置から読み出すデータ読み出し部と，
前記データ読み出し部により読み出されたデータを前記アクセスホストに送信する読み出しデータ送信部と，
をさらに有するキャッシュ装置。
【請求項１４】
請求の範囲第１３項において，
前記データ管理部は，前記データ読み出し部により前記２次記憶装置から読み出されたデータを，有効なデータとして，前記キャッシュ記憶部に記憶する，
キャッシュ装置。
【請求項１５】
２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムであって，
前記２つのキャッシュ装置のそれぞれは，
前記アクセスホストから与えられる第１のデータを入力するデータ入力部と，
他方のキャッシュ装置が前記アクセスホストから入力し，自キャッシュ装置に送信した第２のデータを受信するデータ受信部と，
前記第１のデータおよび前記第２のデータの双方またはいずれか一方を記憶するキャッシュ記憶部と，
前記キャッシュ記憶部を管理するキャッシュ管理部と，
前記第１のデータを前記他方のキャッシュ装置に送信するデータ送信部と，
前記第１のデータまたは前記第２のデータを前記２次記憶装置に出力するデータ出力部と，
を有するキャッシュシステム。
【請求項１６】
２つのキャッシュ装置を有し，アクセスホストまたは２次記憶装置から与えられるデータを記憶するとともに，前記アクセスホストからのデータを前記２次記憶装置に記憶させるキャッシュシステムにおけるキャッシュ方法であって，
前記アクセスホストからデータを受信した一方のキャッシュ装置は，該データを自装置のキャッシュメモリに記憶するとともに，該データを他方のキャッシュ装置に送信し，
前記他方のキャッシュ装置は，前記一方のキャッシュ装置から送信された前記データを受信して，自装置のキャッシュメモリに記憶し，
前記一方のキャッシュ装置または前記他方のキャッシュ装置は，前記データを前記２次記憶装置に出力する，
キャッシュ方法。
【国際調査報告】
2003090089.tif 000016
2003090089.tif 000017
2003090089.tif 000018
2003090089.tif 000019