(57)【要約】      （修正有）【課題】複数のホストプロセッサからなるクラスタシステムにおいて，それぞれのホストプロセッサのログ保存のオーバーヘッドを小さくするシステムおよび方法を提供。【解決手段】ホストプロセッサ101，102間で共有する磁気ディスク装置103のディスクキャッシュ119，120の一部を，ログ保存用の領域とする。この目的のために、各ホストプロセッサから参照，更新を可能にするインタフェースを通常IOインタフェースとは別に設ける。ストレージプロセッサ117，118は，ディスクキャッシュ119，120において，通常IOの処理に使用する領域をディスクキャッシュ管理テーブル126で管理し，ログ用領域をエクスポートセグメント管理テーブル128で管理する。ディスクキャッシュ領域は，メインプロセッサ107，112の仮想アドレス空間にマップされる。ホストプロセッサ101，102は，前記ログ領域へのアクセスでは，マップされた仮想アドレスを指定して，アクセスする。【選択図】  図１
2004199420.tif 000002
【特許請求の範囲】
【請求項１】
複数のホストプロセッサと、磁気ディスク装置と、上記ホストプロセッサと磁気ディスク装置を接続するチャネルを有する計算機システムであって、
上記各ホストプロセッサはメインプロセッサとメインメモリを有し、
上記磁気ディスク装置は複数の磁気ディスク駆動装置と、該磁気ディスク駆動装置のデータの少なくとも一部のコピーを保持するディスクキャッシュと、上記メインプロセッサの仮想アドレス空間と上記ディスクキャッシュの物理アドレス空間の対応付けを行う情報の少なくとも一部を含む構成情報用メモリと、上記ディスクキャッシュ、メインプロセッサおよび構成情報用メモリを接続する内部ネットワークを有する計算機システム。
【請求項２】
上記ホストプロセッサは、上記メインプロセッサの仮想アドレス空間と上記メインメモリの物理アドレス空間の対応付けを行う第１のアドレス変換テーブルを有し、
上記磁気ディスク装置は、上記メインプロセッサの仮想アドレス空間と上記ディスクキャッシュの物理アドレス空間の対応付けを行う第２のアドレス変換テーブルと、上記ディスクキャッシュの物理アドレス空間と該ディスクキャッシュの物理アドレス空間を使用する上記ホストプロセッサのIDの対応付けを行うエクスポートセグメント管理テーブルを有し、該エクスポートセグメント管理テーブルは上記構成情報用メモリに記憶される請求項１記載の計算機システム。
【請求項３】
上記第２のアドレス変換テーブルおよびエクスポートセグメント管理テーブルは、マッピングされたディスクキャッシュの物理アドレス空間の識別子を有し、該識別子を参照することにより、上記ホストプロセッサのIDと該ホストプロセッサの使用する上記ディスクキャッシュの物理アドレス空間の関連づけが可能となる請求項２記載の計算機システム。
【請求項４】
所定の上記ホストプロセッサによって使用される上記ディスクキャッシュの物理アドレス空間には、該所定のホストプロセッサのログ情報が格納される請求項２記載の計算機システム。
【請求項５】
上記ログ情報は、上記ホストプロセッサのメインメモリに格納されているログのコピーである請求項４記載の計算機システム。
【請求項６】
上記ホストプロセッサと上記磁気ディスク装置の間を、複数のチャネルインタフェースで結合する請求項１記載の計算機システム。
【請求項７】
上記ホストプロセッサと上記磁気ディスク装置は、上記磁気ディスク装置に対する入出力に関する通信と、上記ホストプロセッサの仮想アドレス空間の一部に対応づけられた上記ディスクキャッシュ領域へのアクセスに関する通信では異なるチャネルインタフェースを用いる請求項６記載の計算機システム。
【請求項８】
上記ホストプロセッサと上記磁気ディスク装置は、１つののチャネルインタフェースの中で複数の仮想的なコネクションを確立して通信を行う請求項１記載の計算機システム。
【請求項９】
上記ホストプロセッサと上記磁気ディスク装置は、上記磁気ディスク装置に対する入出力に関する通信と，上記ホストプロセッサの仮想アドレス空間の一部に対応づけられた該ディスクキャッシュへのアクセスに関する通信では異なる仮想的なコネクションを用いる請求項８記載の計算機システム。
【請求項１０】
1つ乃至複数のホストプロセッサと接続して使用されるディスク装置であって、
複数のディスク駆動装置と、
該ディスク駆動装置に蓄積されるデータのすくなくとも一部のコピーを記録するすくなくとも１つのディスクキャッシュと、
上記ディスクキャッシュ上のメモリアドレスと上記ホストプロセッサの仮想アドレス空間とを対応づける管理部を有し、
上記ディスクキャッシュの一部領域を上記ホストプロセッサの仮想アドレス空間の一部としてアクセス可能とすることを特徴とするディスク装置。
【請求項１１】
上記ディスク駆動装置内のデータと上記ディスクキャッシュ上に存在するデータとを対応づけるディスクキャッシュ管理テーブルと，
上記ディスクキャッシュ上の未使用領域を管理するフリーセグメント管理テーブルと，
上記ディスクキャッシュの領域であって上記ホストプロセッサの仮想アドレス空間の一部に対応付けられた領域を管理するエクスポートセグメント管理テーブルとを持つ請求項１０記載のディスク装置。
【請求項１２】
上記ディスクキャッシュ管理テーブル、フリーセグメント管理テーブル、およびエクスポートセグメント管理テーブルが、上記管理部に格納されており、
該管理部は内部ネットワークを介して、上記ディスク駆動装置およびディスクキャッシュと接続されている請求項１１記載のディスク装置。
【請求項１３】
上記ディスク装置を制御するとともに上記ホストプロセッサと上記内部ネットワークを接続するストレージプロセッサを有し、
該ストレージプロセッサは、上記ホストプロセッサの仮想アドレス空間と上記ディスクキャッシュの物理アドレス空間とを対応づけるアドレス変換テーブルを有する請求項１２記載のディスク装置。
【請求項１４】
複数のホストプロセッサと、複数の磁気ディスク駆動装置と、該磁気ディスク駆動装置のデータの少なくとも一部のコピーを保持するディスクキャッシュと、上記ホストプロセッサ、磁気ディスク駆動装置、およびディスクキャッシュを接続する接続経路を有する計算機システムのディスクキャッシュ制御方法であって、
上記ディスクキャッシュ上の物理アドレスと上記ホストプロセッサの仮想アドレスとを対応づけるステップと、
上記ディスクキャッシュの一部領域を上記ホストプロセッサの仮想アドレス空間の一部としてアクセスするステップを有するディスクキャッシュ制御方法。
【請求項１５】
ディスクキャッシュ上の物理アドレスと上記ホストプロセッサの仮想アドレスとを対応づけるステップは、
(a)  該ホストプロセッサが割り当てを希望する仮想アドレスと，割り当てを希望する領域のサイズと，該ホストプロセッサの識別子とを送信して該ディスクキャッシュの領域を要求するステップと、
(b)  該ディスクキャッシュの未使用領域を管理する第１のテーブルを検索して，未使用領域を検索するステップと、
(c)  該ディスクキャッシュの未使用領域が存在した場合に，該未使用領域に対して，一意的な識別子を設定するステップと、
(d)  該ホストプロセッサの仮想アドレス空間の一部に対応付けられた領域を管理する第２のテーブルに当該未使用領域のメモリアドレスと該識別子を登録するステップと、
(e)  該登録された領域に関する情報を該ディスクキャッシュの未使用領域を管理する第１のテーブルから削除するステップと、
(f)  該ホストプロセッサの仮想アドレス空間と該ディスクキャッシュとを対応づける第３のテーブルに該領域のディスクキャッシュ上のメモリアドレスと，対応する仮想アドレスを登録するステップと、
(g)  該ホストプロセッサに対して，該ディスクキャッシュ領域の，該ホストプロセッサの仮想アドレス空間への割り当てに成功したことを報告するステップと、
(h)  該登録された領域の識別子を該ホストプロセッサに送信するステップとを含む請求項１４記載のディスクキャッシュ制御方法。
【請求項１６】
さらに、
(a)  ディスクキャッシュ領域を割り当てられたホストプロセッサが，他のホストプロセッサへ割り当てられた領域の該識別子と領域のサイズを送信するステップと、
(b)  該受信したホストプロセッサが該受信した識別子と対応付けを希望する仮想アドレスと該ホストプロセッサの識別子を該磁気ディスク装置に送信して，該識別子のディスクキャッシュ領域を仮想アドレスに対応づけるように要求するステップと、
(c)  該要求を受信した磁気ディスク制御装置は，ホストプロセッサの仮想アドレス空間の一部に対応付けられた領域を管理するテーブルを検索するステップと、
(d)  該テーブル内に該識別子の領域が存在した場合には，該磁気ディスク制御装置は，該ホストプロセッサの仮想アドレス空間と該ディスクキャッシュとを対応づけるテーブルに，該領域のディスクキャッシュ上のメモリアドレスと対応する仮想アドレスを登録するステップと、
(e)  該磁気ディスク制御装置は，該ホストプロセッサに対して，該ディスクキャッシュ領域の，該ホストプロセッサの仮想アドレス空間への割り当てに成功したことを報告するステップを含む請求項１６記載のディスクキャッシュ制御方法。
【請求項１７】
該ホストプロセッサが仮想アドレス空間に割り当てたディスクキャッシュ領域に，該ホストプロセッサが該磁気ディスク装置内のファイルに対して行った変更の履歴を記録したログを保存する請求項１５記載のディスクキャッシュ制御方法。
【請求項１８】
(a)  該ログを読み取るステップと、
(b)  該ログの履歴に従ってファイル変更を再び実行するステップを有する請求項１７記載のディスクキャッシュ制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，計算機システム，特に複数の計算機により可用性を向上させることを特徴とする計算機クラスタシステムに関する。
【０００２】
【従来の技術】
（特許文献１）
特開2002-24069号
現代の計算機システムは，すでに電気，水道のような社会インフラの1つとなっている。社会インフラとなった計算機システムは，サービスを停止させると莫大な損害を社会に与える。そのため，サービス停止を防ぐさまざまな方法が考案されている。その1つにクラスタという技術がある。クラスタでは複数の計算機を1つの集団(これをクラスタという)として運転し，前記計算機の中の1つが故障しても，残りの計算機が故障した計算機の業務を引き継ぐ。クラスタ構成により利用者がホストコンピュータの停止に気づくことはない。そして，他の計算機が業務を代行している間に，故障した計算機を正常なものに交換し，業務を再開する。クラスタを構成する個々の計算機をノード，故障したノードの業務を他のノードが引き継ぐ処理をフェイルオーバ(Fail Over)という。
【０００３】
フェイルオーバを行うためには，障害ホストプロセッサの情報を他のホストプロセッサが参照可能であることが必要である。ここでいう情報には，障害ホストプロセッサのシステム構成情報(IPアドレス，使用するディスクの情報など)の他に，処理の履歴を記録したログ情報がある。システム構成情報は，他ホストプロセッサが業務を引き継ぐために必須の情報であるが，静的な情報(更新頻度が極めて小さい)であるため，各ホストプロセッサが他ホストプロセッサのシステム構成情報を保持するなどの方法をとっても性能上問題ない。なぜなら，更新頻度が小さい場合，変更を他ホストプロセッサに通報する頻度が小さく，通信処理の負担が小さいからである。ログ情報とは，ホストプロセッサの処理の履歴を記録した情報である。計算機の処理はファイルの変更を伴うのが通例である。処理の途中でホストプロセッサが故障した場合，ファイルの変更がどこまで正しく実行されたか判定することは難しい。そこで，処理の履歴を記録すれば，フェイルオーバにより処理を引き継いだホストプロセッサがログ情報に従って処理を再実行することで，ファイルの変更が正しく実行されたことを保証できる。この技術は，特開2002-24069(以下公知例1)に開示されている。公知例1では触れられていないが，このようなログ情報は磁気ディスクに保存されるのが一般的である。
【０００４】
このようなログ保存はクラスタシステムでは必須であるが，磁気ディスクアクセスは，10msec程度の時間を要し，nsecあるいはpsecのオーダで演算を行うホストプロセッサの計算性能を著しく低下させる。そこで，ログを「ログメモリ」なるメモリに保存する方法が公知例1に開示されている。メモリならば，磁気ディスクと比較して，低オーバーヘッドでログ保存が可能となる。
【０００５】
【発明が解決しようとする課題】
しかし，公知例1では，ログメモリはホストプロセッサ間で共有されていないため，ログ情報が更新された場合，「ミラー機構」によってホストプロセッサ間でコピーされる。公知例1は，ホストプロセッサ数が2に限定されているため，コピーのオーバーヘッドは大きくない。しかし，ホストプロセッサ数が増えればコピーのオーバーヘッドは大きくなっていく。ホストプロセッサ数nのときのコピーオーバーヘッドはnの2乗に比例する。また，性能が向上すれば，ログの更新頻度も増加する。そのため，ログを他ホストプロセッサへ配信することは性能のボトルネックとなる。
【０００６】
さらに，公知例1において，ログメモリは不揮発という記述がなく，停電のような電源障害でログ消失の危険がある。ログが消失すれば，障害時にファイル変更が正しく実行されたことを保証することはできない。
【０００７】
前記課題を解決するためには，低オーバーヘッドで，複数ホストプロセッサから共有可能な，不揮発媒体にログを保存する必要がある。複数のホストプロセッサより共有できる不揮発媒体としては磁気ディスクがあるが，前述のようにオーバーヘッドが大きい。
【０００８】
近年，磁気ディスクにはディスクキャッシュという半導体メモリが搭載されるようになった。ディスクキャッシュとは，磁気ディスク上のデータを一時的に保存する半導体メモリであり，バッテリバックアップなどによって不揮発となっている。さらに半導体メモリを2重化し信頼性を高めた製品もある。ディスクキャッシュは，上記3件の要件を満たす媒体であり，ログ保存に適している。すなわち，ディスクキャッシュは，半導体メモリであるため，低オーバーヘッドである。ディスクキャッシュは，磁気ディスクの一部であるため，複数ホストプロセッサから共有可能である。さらにバッテリバックアップなどで不揮発である。
【０００９】
しかし，ディスクキャッシュはホストプロセッサ上を走行するソフトウェアからは認識できない領域である。なぜなら，前記ソフトウェアが磁気ディスクに対して磁気ディスクの識別子，磁気ディスク媒体上のアドレス，データ転送長を指定するインタフェースであり，ディスクキャッシュ上のアドレスを指定することはできないからである。例えば，一般的な磁気ディスク用インタフェース規格であるSCSI(Small Computer System Interface)規格(以下公知例2)では，ホストプロセッサがディスクキャッシュを制御するコマンドはあるものの，ディスクキャッシュ上に自由にアクセスはできない。
【００１０】
【課題を解決するための手段】
本発明の１つの観点では、従来ホストプロセッサから磁気ディスクと一体としてしか認識できなかったディスクキャッシュについて、アクセス可能なメモリとして認識することを許容する。このため、本発明では磁気ディスクがディスクキャッシュの一部をホストプロセッサの仮想メモリ空間にマッピングするインタフェースを設けることで，前記課題を解決する。ディスクキャッシュがホストプロセッサの仮想メモリ空間にマッピングされることで，ホストプロセッサ上を走行するソフトウェアは，ディスクキャッシュに自由にアクセスすることができ，ログを不揮発で，複数ホストプロセッサから共有でき，低オーバーヘッド媒体に保存することが可能になる。
【００１１】
本発明の他の１つの観点は、複数のホストプロセッサと、磁気ディスク装置と、ホストプロセッサと磁気ディスク装置を接続するチャネルを有する計算機システムであって、各ホストプロセッサはメインプロセッサとメインメモリを有し、磁気ディスク装置は複数の磁気ディスク駆動装置と、磁気ディスク駆動装置のデータの少なくとも一部のコピーを保持するディスクキャッシュと、メインプロセッサの仮想アドレス空間とディスクキャッシュの物理アドレス空間の対応付けを行う情報の少なくとも一部を含む構成情報用メモリと、ディスクキャッシュ、メインプロセッサおよび構成情報用メモリを接続する内部ネットワークを有する計算機システムである。システム的にはホストプロセッサとメインプロセッサを区別する意義は小さいが、厳密にはホストプロセッサの中に複数あるプロセッサのうち主たる処理を行うものをここではメインプロセッサと称している。
【００１２】
メインプロセッサの仮想アドレス空間とディスクキャッシュの物理アドレス空間の対応付けを行う情報の少なくとも一部を含む構成情報用メモリは、典型的な例としては、メインプロセッサの仮想アドレス空間とディスクキャッシュの物理アドレス空間の対応テーブルを格納する。このテーブルは、単一のテーブルで構成されてもよいし、関連づけられた複数のテーブルで構成されても良い。後に詳述される実施例においては、複数のテーブルをメモリハンドルと呼ばれる識別子で関連づける例を示している。関連づけられた複数のテーブルは、物理的に分散して配置されていてもよく、例えばホストプロセッサ側と磁気ディスク装置側に分かれていてもよい。
【００１３】
構成情報用メモリは物理的にキャッシュメモリと独立したメモリとしても良い。例えば、構成情報用メモリとキャッシュメモリを、同一ボード上に搭載された別々のメモリとして構成する。また、物理的には単一のメモリの領域を分割してしてキャッシュメモリと構成情報用メモリとしても良い。このメモリには、さらに他の情報を記憶することにしても良い。
【００１４】
例えば、ホストプロセッサは、メインプロセッサの仮想アドレス空間とメインメモリの物理アドレス空間の対応付けを行う第１のアドレス変換テーブルを有し、磁気ディスク装置は、メインプロセッサの仮想アドレス空間と上記ディスクキャッシュの物理アドレス空間の対応付けを行う第２のアドレス変換テーブルと、ディスクキャッシュの物理アドレス空間と該ディスクキャッシュの物理アドレス空間を使用する上記ホストプロセッサのIDの対応付けを行うエクスポートセグメント管理テーブルを有し、エクスポートセグメント管理テーブルが構成情報用メモリに記憶される。
【００１５】
第２のアドレス変換テーブルおよびエクスポートセグメント管理テーブルは、マッピングされたディスクキャッシュの物理アドレス空間の識別子（メモリハンドル）を有し、該識別子を参照することにより、ホストプロセッサのIDとホストプロセッサの使用するディスクキャッシュの物理アドレス空間の関連づけが可能となる。
【００１６】
以上のような構成によると、ディスクキャッシュのメモリ領域をホストプロセッサのメモリ領域として利用することが可能となる。注目すべきは、ディスクキャッシュとメインプロセッサはネットワーク等を介して相互接続されているので、複数のメインプロセッサ（ホストプロセッサ）はディスクキャッシュを共有することが可能となる点である。このため、複数のメインプロセッサ間で引き継がれるデータを格納するのに適しており、典型的な例としては、ホストプロセッサによって使用されるディスクキャッシュの物理アドレス空間には、そのホストプロセッサのログ情報が格納される。ログ情報として重要なものは、たとえばホストプロセッサの作業の履歴であって、その作業の結果がまだディスクに反映されていないようなものである。あるホストプロセッサに障害が発生した場合、他のホストプロセッサが障害を起こしたホストプロセッサの仕事を引き継ぐ（フェイルオーバー）が、本発明においては、仕事を引き継いだホストプロセッサが上記ログ情報を引き継いで処理し、結果をディスクに記録することができる。
【００１７】
また、構成情報用メモリは、論理的にはホストプロセッサからアクセス可能であればよいが、メインプロセッサが接続されているネットワーク等に接続されていれば、ディスクキャッシュと同様にホストプロセッサ間で共有することができる。
【００１８】
ディスクキャッシュに記録されホストプロセッサよりアクセスされる情報（例えばログ情報）は、ホストプロセッサのメインメモリに格納されている情報のコピーであってもよいし、ディスクキャッシュにしかないオリジナルの情報でも良い。ログ情報の場合には、通常の処理においてアクセスするには、ホストプロセッサのメインメモリに格納しておいた方がアクセスは早いので、メインメモリにログを残すと共に、フェイルオーバ時の作業のためにディスクキャッシュにログのコピーを格納するという方式は高性能となるが、コピーを形成するオーバーヘッドを避けたい場合には、メインメモリのログ情報は省略し、ディスクキャッシュのみにログ情報を格納しても良い。
【００１９】
本発明の他の観点は、ディスクキャッシュ以外の特別なメモリであって、ディスクキャッシュ、メインプロセッサおよび構成情報用メモリを接続する内部ネットワークに接続されたメモリにログ情報を格納することである。この構成によっても、上述のように複数のホストプロセッサ間でログ情報の共有が容易に可能である。しかし、ディスクキャッシュは通常バッテリーなどによりバックアップされる信頼性の高いメモリであるため、信頼性が要求されるログ情報の格納には適している。また、特別のメモリの増設、制御などシステムの大幅な変更が不要であるという利点もある。従って、ログ情報用の特別のメモリを別途設けるよりも、ディスクキャッシュを利用する方に合理性がある。
【００２０】
本発明は、ディスク装置単体としても成立するものであり、その場合の特徴は、1つ乃至複数のホストプロセッサと接続して使用されるディスク装置であって、複数のディスク駆動装置と、ディスク駆動装置に蓄積されるデータのすくなくとも一部のコピーを記録するすくなくとも１つのディスクキャッシュと、ディスクキャッシュ上のメモリアドレスとホストプロセッサの仮想アドレス空間とを対応づける管理部を有し、ディスクキャッシュの一部領域をホストプロセッサの仮想アドレス空間の一部としてアクセス可能とすることを特徴とすることにある。
【００２１】
具体例としては、ディスク駆動装置内のデータとディスクキャッシュ上に存在するデータとを対応づけるディスクキャッシュ管理テーブルと，ディスクキャッシュ上の未使用領域を管理するフリーセグメント管理テーブルと，ディスクキャッシュの領域であってホストプロセッサの仮想アドレス空間の一部に対応付けられた領域を管理するエクスポートセグメント管理テーブルとを持つ。
【００２２】
また、本発明の他の側面は、複数のホストプロセッサと、複数の磁気ディスク駆動装置と、磁気ディスク駆動装置のデータの少なくとも一部のコピーを保持するディスクキャッシュと、ホストプロセッサ、磁気ディスク駆動装置、およびディスクキャッシュを接続する接続経路を有する計算機システムのディスクキャッシュ制御方法であって、ディスクキャッシュ上の物理アドレスとホストプロセッサの仮想アドレスとを対応づけるステップと、ディスクキャッシュの一部領域を上記ホストプロセッサの仮想アドレス空間の一部としてアクセスするステップを有するディスクキャッシュ制御方法である。
ディスクキャッシュ上の物理アドレスと上記ホストプロセッサの仮想アドレスとを対応づけるステップは、
(a)  該ホストプロセッサが割り当てを希望する仮想アドレスと，割り当てを希望する領域のサイズと，該ホストプロセッサの識別子とを送信して該ディスクキャッシュの領域を要求するステップと、
(b)  該ディスクキャッシュの未使用領域を管理する第１のテーブルを検索して，未使用領域を検索するステップと、
(c)  該ディスクキャッシュの未使用領域が存在した場合に，該未使用領域に対して、一意的な識別子を設定するステップと、
(d)  該ホストプロセッサの仮想アドレス空間の一部に対応付けられた領域を管理する第２のテーブルに当該未使用領域のメモリアドレスと該識別子を登録するステップと、
(e)  該登録された領域に関する情報を該ディスクキャッシュの未使用領域を管理する第１のテーブルから削除するステップと、
(f)  該ホストプロセッサの仮想アドレス空間と該ディスクキャッシュとを対応づける第３のテーブルに該領域のディスクキャッシュ上のメモリアドレスと，対応する仮想アドレスを登録するステップと、
(g)  該ホストプロセッサに対して，該ディスクキャッシュ領域の，該ホストプロセッサの仮想アドレス空間への割り当てに成功したことを報告するステップと、
(h)  該登録された領域の識別子を該ホストプロセッサに送信するステップとを含む。
【００２３】
本発明をより効果的に運用するために、以下のコマンドを使用することができる。
（１）ホストプロセッサが仮想アドレス空間にマッピングされたディスクキャッシュ領域にアクセスするコマンドであって，当該領域のデータを一旦読み取り，変更する間に他ホストプロセッサのアクセスを禁止することを特徴とする排他アクセスコマンド。
（２）ホストプロセッサが仮想アドレス空間にマッピングされたディスクキャッシュ領域にアクセスするコマンドであって，当該領域のデータを一旦読み取り，与えられた期待値と比較し，期待値と等しい場合は，当該データを変更し，この一連の動作で他ホストプロセッサのアクセスを禁止することを特徴とする排他アクセスコマンド。
（３）ホストプロセッサが仮想アドレス空間にマッピングされたディスクキャッシュ領域にアクセスするコマンドであって，当該領域のデータを一旦読み取り，与えられた期待値と比較し，期待値と異なる場合は，当該データを変更し，この一連の動作で他ホストプロセッサのアクセスを禁止することを特徴とする排他アクセスコマンド。
【００２４】
本発明をより効果的に運用するために、以下の機能を持つ端末を使用することができる。
（１）磁気ディスク装置は使用者が操作できる操作端末を持ち，使用者は端末を使って該ホストプロセッサの仮想アドレス空間に対応づけられるディスクキャッシュ領域の容量を設定する。
（２）さらに、使用者が操作端末を使って，ディスクキャッシュの一部をホストプロセッサの仮想アドレス空間に対応づけられる容量を設定する場合に，ホストプロセッサごとに容量を設定する。
【００２５】
【発明の実施の形態】
以下，図面を用いながら，本発明の実施の形態を説明する。
＜実施例1＞
図1に本発明の計算機システムを示す。このシステムは、例えばネットワークアタッチドストレージ（NAS）等と称するシステムである。本計算機システムは，2台のホストプロセッサ101，102と磁気ディスク装置103からなる。ホストプロセッサ101，102と磁気ディスク装置103は，IOチャネル１０４，105によって結合される。ホストプロセッサ101，102間はイーサネット（登録商標）のようなLAN(Local Area Network)106で結合されている。
ホストプロセッサ101は，メインプロセッサ107とメインメモリ108，IOプロセッサ109，LANコントローラ110が内部バス111で結合した構成となっている。IOプロセッサ109は，メインプロセッサ107からの指示でメインメモリ108とIOチャネル104の間のデータ転送を担当する。本実施例でいうメインプロセッサはその形態から，いわゆるマイクロプロセッサとホストブリッジを含んだものとなっている。本実施例を説明するのに，マイクロプロセッサとホストブリッジを区別することは重要ではないので，あわせてメインプロセッサ107と呼ぶ。ホストプロセッサ102の構成はホストプロセッサ101と同様で，メインプロセッサ112，メインメモリ113，IOプロセッサ114，LANコントローラ115が内部バス116で結合した構成となっている。
【００２６】
磁気ディスク装置103の構成を説明する。磁気ディスク装置103は，ストレージプロセッサ117，118と，ディスクキャッシュ119，120と，構成情報用メモリ121と，磁気ディスク駆動装置122，123，124，125が内部ネットワーク126で結合された構成となっている。ストレージプロセッサ117，118は磁気ディスク装置103のデータ入出力の制御を行う。ディスクキャッシュ119，120は，磁気ディスク駆動装置122-125のデータを一時的に保存する。信頼性向上のため2重化され，データをディスクキャッシュ119，120の両方に2重に書き込むことができる。さらに，バッテリ(図示せず)で電源を供給し，障害の中でも多く発生する電源障害に対しても，データ消失しない措置がとられている。構成情報用メモリ121は，磁気ディスク装置103の構成情報(図示せず)を保存する。またディスクキャッシュ上のデータを管理するための情報も格納する。ストレージプロセッサが複数あるので，すべてのストレージプロセッサから参照できるように，内部ネットワーク126に直接結合している。構成情報もまた，消失するとデータの消失につながるため，2重化(図示せず)，バッテリによる電源供給(図示せず)の措置が施されることがある。構成情報用メモリには，ディスクキャッシュ上のデータと磁気ディスク駆動装置122-125との対応づけを管理するディスクキャッシュ管理テーブル126，未使用のディスクキャッシュ領域を管理するフリーセグメント管理テーブル127，ディスクキャッシュ119，120の中でホストプロセッサ101，102にマッピングした領域を管理するエクスポートセグメント管理テーブル128が格納されている。
【００２７】
図2を用いて、次に，IOプロセッサ109について説明する。IOプロセッサ109は内部バスと結合する内部バスインタフェース部201，IOチャネル104上の通信を制御する通信制御部202，メインメモリ108とIOチャネル104の間でデータを転送するデータ転送制御部203，IOチャネル104と結合するIOチャネルインタフェース部204からなる。通信制御部202は，ネットワーク層制御部205からなる。本実施例ではIOチャネルインタフェース104，105はネットワークの一種を使用することを前提とする。すなわち，磁気ディスク装置103に対するデータ入出力はSCSI規格のようなIOプロトコルによって行うが，IOプロトコルはネットワーク層の上位層プロトコルとして実装される。ネットワーク層制御部205は，IOチャネル104のネットワーク層の制御を行う。アドレス変換テーブル206は，ディスクキャッシュの一部をホストプロセッサ101の物理アドレスと仮想アドレスを対応づけるテーブルである。ここではIOプロセッサ109について説明したが，IOプロセッサ114についても同様である。なお、ここでは通信制御部202をソフトウェアで、その他をハードウェアで構成することとしたが、これに限られるものではない。また、アドレス変換テーブル２０６は内部バスインタフェース部201に内蔵させてあるが、バスまたはネットワークを介してアクセス可能で有れば、他の場所でも良い。
【００２８】
図3にアドレス変換テーブル206を示す。仮想アドレス301は，外部装置(ここでは磁気ディスク装置103)内のメモリ領域のアドレスである。物理アドレス302は，仮想アドレス301に対応するハードウェアのアドレスを示す。ここでは，メインメモリ108の物理アドレスを示す。サイズ３03は，本変換テーブルで管理される領域のサイズである。物理アドレス302からサイズ303だけのサイズの領域が仮想空間にマップされている。メモリハンドル304は，本変換テーブルで管理される仮想メモリ領域の一意な識別子である。メインプロセッサ107は，物理アドレス302の領域にデータを書き，IOプロセッサ109に仮想アドレス301への書き込み命令を発行すると，IOプロセッサ109は，外部装置(ここでは磁気ディスク装置103)内の対応するメモリ領域へデータを送信する。逆に，メインプロセッサ107が仮想アドレス301に対する読み込み命令をIOプロセッサ109に発行すると，物理アドレス302に外部装置から転送されてきたデータが保存される。
【００２９】
図4にストレージプロセッサ117の構成を説明する。ストレージプロセッサ117は，磁気ディスク装置103の制御を行う。ストレージプロセッサ117は，IOチャネル104の通信を行うIOチャネルインタフェース部401，内部ネットワーク123との通信を行う内部ネットワークインタフェース部402，データ転送を制御するデータ転送制御部403，磁気ディスク装置を制御するストレージ制御部404，ストレージ制御部が制御に必要な情報を保存する内部メモリ405からなる。ストレージ制御部404は，IOチャネル通信におけるネットワーク層の制御を行うネットワーク層制御部406，IO層の制御を行うIO層制御部407，ホストプロセッサ101のIO命令に従って磁気ディスク駆動装置122-125の制御を行う磁気ディスク制御部408，ディスクキャッシュ119，120のデータを管理し，キャッシュのヒット，ミス判定などを行うディスクキャッシュ制御部409からなる。内部メモリ405は，送受信制御キュー群410，アドレス変換テーブル411を保存する。送受信制御キュー群410とは，本実施例におけるIOチャネル通信に使用するキューである。送信キュー，受信キューが1対となりキューペアを成し，それが複数生成し，キュー群を形成することが可能である。詳細は後述する。なお，本発明は本通信方式に依存しないことはいうまでもない。また，ストレージプロセッサ117に関して説明を行ったが，ストレージプロセッサ118についても同様である。
【００３０】
図5を用いて送受信キュー群410の説明を行う。本実施例ではIOチャネル104の通信は，通信する2つの装置(ここではホストプロセッサ101とストレージプロセッサ117)が仮想的な通信路(以下コネクション)501-503を確立してから通信を開始する。ここでは，コネクション501の確立の過程を説明する。まず，メインプロセッサ107が，メインメモリ108内に送信キュー510と受信キュー511からなるキューペア504を生成する。送信キュー510には，メインプロセッサ107がIOプロセッサ109に対してデータ送信のためのコマンドが格納される。IOプロセッサ109は送信キュー510から順にコマンドを取り出し送信処理を実行する。送信命令には，送信対象のデータ522へのポインタが格納されている場合もある。受信キュー511は，外部から送信されてきたコマンド，データを格納する。IOプロセッサ109は受信したコマンド，データを順に受信キュー511に格納する。メインプロセッサ107は受信キュー511から順にコマンド，データを取り出し受信処理を実行する。キューペア506が生成され，メインプロセッサ107からコネクション確立要求が発行されると，IOプロセッサ109にコネクション確立要求を出す。さらに，IOプロセッサ109内のネットワーク層制御部205がストレージプロセッサ117にコネクション確立要求をだす。コネクション確立要求を受けたストレージプロセッサ117のネットワーク層制御部406は，対応する送信キュー507，受信キュー508からなるキューペア509を生成し，コネクションを確立したことをIOプロセッサ109に報告する。その他のコネクション501-503の確立過程も同様である。
【００３１】
本実施例におけるIOチャネル通信方法では，通信路上をフレーム単位で情報が送受信されることを前提とする。送信側はフレームにキューペアの識別子(図示せず)を記述してIOチャネル104，105に送出する。受信側はフレーム内のキューペア識別子を参照し，指定された受信キューにフレームを格納する。このような方法は，Infiniband等のプロトコルで一般的な実装である。本実施例では，磁気ディスク装置103に対するIO命令とその命令に対するデータ転送に関して専用のコネクションを確立する。磁気ディスク装置103への入出力以外の通信は，また別のコネクション(すなわち，別のキューペア)を確立して通信を行う。
【００３２】
本実施例でのIOチャネルの通信方法では，磁気ディスク装置103に対するIOコマンドに対するストレージプロセッサ117，118の動作は次のようになる。フレームを受信すると，ネットワーク層制御部406がフレームを解析する。キューペア識別子(図示せず)を参照する。そして対応する受信キューにフレームを挿入する。IO層制御部407は，IO処理用受信キューを監視し，IOコマンドがキュー内にあれば，IO処理を開始する。データの入出力処理において，必要があればディスクキャッシュ管理部409がディスクキャッシュ119，120を制御し，磁気ディスク制御部408が磁気ディスク駆動装置122-125にアクセスする。その他の受信キューにコマンドがあった場合，ネットワーク層制御部406が処理を続行する。このとき，磁気ディスク駆動装置122-125へアクセスしない。
【００３３】
次にディスクキャッシュ119，120の管理方法について図6-10を用いて説明する。
【００３４】
図6は論理ディスク601のディスク空間の管理方法を示している。論理ディスクとは磁気ディスク装置103がホストプロセッサ101，102に対してエミュレートした仮想的なディスクのことである。磁気ディスク駆動装置122-125と一致していてもよいし，一致しなくてもよい。磁気ディスク装置103がRAID(Redundant Array of Inexpensive Disks)技術を使用していた場合，必然的に論理ディスクをエミュレートすることになる。本実施例では，簡単のため，個々の論理ディスクと磁気ディスク駆動装置122-125は一致しているものとする。このようにしてエミュレートされた論理ディスク601は，n個のセクタからなる。セクタとはある固定サイズの連続領域であり，論理ディスク601に対する最小アクセス単位である。SCSI規格では，セクタサイズ512Bである。そして，論理ディスク601はホストプロセッサ101，102に対してセクタの1次元配列として取り扱われる。すなわち，セクタ番号とデータ長を指定すればアクセスできる。SCSI規格ではセクタ番号を論理ブロックアドレス(Logical Block Address)ともいう。さて，本実施例では，複数のセクタをまとめた単位をセグメントという。図6では，セクタ#0  602からセクタ#(k-1)  605を一まとめにしてセグメント#0 ６０８として管理する。そして，ディスクキャッシュ119，120への転送はセグメント単位で実行する。一般に，セクタのサイズは512Bと小さく，1セクタサイズで転送するのは，効率が悪いからである。また，データの局所性があるためセグメント単位で入出力すれば，次回のアクセスではキャッシュヒットすることも期待できる。従って，本実施例におけるディスクキャッシュ119，120の管理単位(最小アクセス単位)はセグメントとする。本実施例では，セグメントサイズ64KBで説明する。
【００３５】
図7に論理ディスク上のセグメントがディスクキャッシュ119，120のアドレス空間にマップされた状態を示す。ディスクキャッシュのアドレス空間701は，セグメントの1次元配列として取り扱われる。図7ではディスクキャッシュ119，120あわせて128GBのメモリ空間を持ち，単一のメモリ空間としてアドレッシングされている。ディスクキャッシュ119の部分は0x00000000_00000000から0x0000000f_ffffffffまで，ディスクキャッシュ120の部分は0x00000010_00000000から0x0000001f_ffffffffが割り当てられている。そして，論理ディスク#64  702のセグメント#2048 705がディスクキャッシュ上の領域709に配置されている。論理ディスク#125 703のセグメント#128 706は，ディスクキャッシュ上の領域710，716に配置されている。これは，ホストプロセッサ101，102が磁気ディスク装置103へデータを書き込むときに，一時的にディスクキャッシュ119，120に保存するが，信頼性向上のため，2重書きされたことを示している。論理ディスク#640のセグメント#514 707とセグメント#515 708はそれぞれ領域712，713に配置されている。これは，ホストプロセッサ101，102の要求するデータサイズが大きく，要求されたデータがセグメント#514，#515に跨ってしまったことを示している。このような形態で論理ディスクのデータがディスクキャッシュ空間701に配置されている。
【００３６】
図8にディスクキャッシュ管理テーブル126を示す。ディスクキャッシュ管理テーブル126は，構成情報用メモリ121に格納される。ディスクキャッシュ119，120の領域がどの論理ディスクのどのセグメントが占有しているかを管理するテーブルである。ディスク番号801の列は，占有しているデータの論理ディスク番号を記述する。セグメント番号802の列は占有しているデータの論理ディスク内のセグメント番号を示す。ディスクキャッシュアドレスの列803は，2列ある。これは，ディスクキャッシュ119と120で2重化されているためである。左の列がディスクキャッシュ119のアドレス，右の列がディスクキャッシュ120のアドレスを示す。状態の列804は，その領域の状態を示す。状態にはフリー，クリーン，ダーティがある。フリーとは，未使用の状態をいう。クリーンとは，論理ディスク上のセグメントがディスクキャッシュ上にマップされているが，磁気ディスク上とディスクキャッシュ上でデータが一致している状態をいう。ダーティとは，ディスクキャッシュ119，120上のデータと対応する論理ディスク上のデータが不一致の状態をいう。ホストプロセッサ101，102が磁気ディスク装置103にデータを書き込むとき，磁気ディスク装置103は，ディスクキャッシュ119，120にデータを保存した時点でホストプロセッサ101，102に終了報告する。この時点では，ディスクキャッシュ119，120上のデータと磁気ディスク上のデータで不一致が発生する。このとき，ディスクキャッシュ119，120に障害が発生すると，データ消失につながる。そのため，磁気ディスクへの書き込みを速やかに実行する必要がある。行805は，ディスク#64，セグメント#2048のデータがディスクキャッシュ119上のアドレス0x00000000_00000000に存在することを示す。そして，クリーンな状態となっている。ディスクキャッシュ120にデータがないのは，セグメントがクリーンな状態のため，ディスクキャッシュ119が故障してもデータ消失にならないからである。行806は，ディスク#125，セグメント#128がディスクキャッシュ119，120上のアドレス0x00000000_00010000，0x00000008_00010000に存在し，状態はダーティとなっていることを示す。これは前述のように，ホストプロセッサ101，102からの書き込みデータがディスクに未反映となっており，ディスクキャッシュ119，120の故障に備えて2重化されていることを示している。行807，808は，ディスク#640のセグメント#514，#515がディスクキャッシュ119上にあることを示している。これらはセグメントがクリーンな状態となっているため，ディスクキャッシュ119にのみ存在する。
【００３７】
図9にフリーな状態のディスクキャッシュセグメントを管理する，フリーセグメント管理テーブル127を示す。フリーセグメント管理テーブルも構成情報用メモリに格納される。フリーなディスクキャッシュセグメントのアドレスが記述されている。ディスクキャッシュ割り当て時には，本テーブルを参照し，利用可能なセグメントをディスクキャッシュ管理テーブル126に登録する。そして，当該セグメントの情報をフリーセグメント管理テーブル127から削除する。番号901は，テーブルに登録されたエントリの番号である。未使用ディスクキャッシュセグメントアドレス902は，フリーなセグメントのディスクキャッシュ上のアドレスを設定する。
【００３８】
ストレージプロセッサ117，118は，ホストプロセッサ101，102から読み込み命令を受信したときの動作は以下のとおりである。ストレージプロセッサ117，118は，ディスクキャッシュ管理テーブル126を検索し，ホストプロセッサ101，102が要求したデータを含むセグメントがディスクキャッシュ119，120上にあるか判定する。当該セグメントがディスクキャッシュ管理テーブル126登録されていれば，当該セグメントは，ディスクキャッシュ119，120上に存在する。そして，ストレージプロセッサ117，118は，当該データをディスクキャッシュ119，120からホストプロセッサ101，102に転送する。当該セグメントがディスクキャッシュ管理テーブル126に登録されていなければ，当該セグメントはディスクキャッシュ119，120上に存在しない。そこで，ストレージプロセッサ117，118がフリーセグメント管理テーブル127を参照し，フリーセグメントをディスクキャッシュ管理テーブル126に登録する。その後，磁気ディスク駆動装置122-125に当該セグメントをディスクキャッシュ119，120上に転送するように指示をだす。ディスクキャッシュ119，120への転送が完了すると，ストレージプロセッサ117，118は当該データをディスクキャッシュ119，120からホストプロセッサ101，102へ転送する。
【００３９】
ストレージプロセッサ117，118がホストプロセッサ101，102から書き込み命令を受信した時の動作は以下のとおりである。ストレージプロセッサ117，118がフリーセグメント管理テーブル127を検索し，ディスクキャッシュ119と120それぞれのフリーセグメントをディスクキャッシュ管理テーブル126に登録する。その後，ストレージプロセッサ117，118は，ホストプロセッサ101，102からデータを受信し，前記セグメントに書き込む。このとき，ディスクキャッシュ119，120両方に当該データを書き込む。ディスクキャッシュ119，120への保存が完了した時点でストレージプロセッサ117，118はホストプロセッサ101，102に完了を報告する。その後，ストレージプロセッサは当該データをディスクキャッシュ119，120から磁気ディスク駆動装置122-125に当該データを転送する。
【００４０】
図１０に本発明のエクスポートセグメント管理テーブル128を示す。エクスポートセグメント管理テーブル128は，ディスクキャッシュ119，120の一部をホストプロセッサ101，102の仮想アドレス空間にマップすることを実現する。エクスポートセグメント管理テーブル128も構成情報用メモリ121に格納される。ストレージプロセッサ117，118は，ディスクキャッシュ119，120のセグメントをホストプロセッサ101，102の仮想メモリ空間に割り当てるときに，割り当てたセグメントをエクスポートセグメント管理テーブルに登録する。当然，フリーセグメント管理テーブル127からは当該セグメントのエントリを削除する。メモリハンドル1001は，マップされたメモリ領域の識別子である。ストレージプロセッサ117，118がディスクキャッシュ119，120の領域をホストプロセッサ101，102へマップするときに，メモリハンドルを生成し，ホストプロセッサ101，102に送信する。メモリハンドル1001は磁気ディスク装置103内で一意である。そして，ホストプロセッサ101，102は，このメモリハンドルを用いてホストプロセッサ101，102間の共有を行う。ホストID1002は，当該セグメントを要求したホストプロセッサの識別子が記述される。この識別子は，ホストプロセッサ101，102のIPアドレス，MACアドレス，WWN(World Wide Name)などを使用してもよい。あるいは，ホストプロセッサ間でネゴシエーションして一意な識別子を割り当ててもよい。本実施例では，ホストプロセッサ間でネゴシエーションをし，一意な識別子を割り当てる方式で説明を行う。ディスクキャッシュアドレス1003は，ホストプロセッサ101，102の仮想アドレス空間内にマップされたディスクキャッシュのセグメントアドレスを示している。このマップされたセグメントは，磁気ディスク駆動装置122-125に書き込まないので，常に2重化されている。そのため，2列のエントリを持つ。左の列がディスクキャッシュ119，右の列がディスクキャッシュ120のセグメントアドレスである。共有ビット1004は，当該セグメントをホストプロセッサ101，102間で共有させるか，させないかを決定するビットである。図10では，共有ビット1004は16ビットある。ビット15が1ならばホストID15のホストプロセッサは，本領域をリード，ライト操作ができる。占有サイズ1005は，マップされたセグメントの先頭からどこまでが使用されているかを示す。ホストプロセッサ101，102が常にセグメントサイズと等しいサイズのメモリを要求するとは限らないからである。行1006では，ホストID0x04のホストプロセッサが64KBだけディスクキャッシュ領域を自らの仮想メモリ空間に割り当てた状態を示している。共有ビットが0xffffなので，全ホストプロセッサから参照，更新が可能である。行1007では，ホストID0x08が32KBだけディスクキャッシュ領域を仮想メモリ空間にマップした場合を示している。共有ビットが0x0000なので他のホストプロセッサからは参照，更新できない。この場合，割り当てられたセグメントをすべて使用していない。行1008，1009は，ホストID0x0cのホストプロセッサがディスクキャッシュ119，120の中から72KBの領域を仮想メモリ空間にマップした場合を示している。セグメントサイズは64KBなので，ストレージプロセッサ117，118はディスクキャッシュセグメントを2つ確保している。ホストプロセッサは72KBだけディスクキャッシュ領域を要求し��いるので，行1010では，32KBだけセグメントを使用している。
【００４１】
図11にストレージプロセッサ117の内部メモリ405内に格納したアドレス変換テーブル411を示す。仮想アドレス1101はホストプロセッサの仮想メモリ空間のアドレスを示す。物理アドレス1102は，対応するメモリアドレスを示す。ここではディスクキャッシュ119，120をマップしているので，ディスクキャッシュのセグメントアドレスを示す。ディスクキャッシュは2重化されているので，2列になっている。左の列がディスクキャッシュ119，右の列がディスクキャッシュ120のセグメントアドレスを記述する。占有サイズ1103は，図10と同様に当該セグメントの先頭からどこまで利用しているかを示す。メモリハンドル1104は，図10と同じ情報である。エクスポートセグメント管理テーブル128とアドレス変換テーブル411は同一の情報を格納しているので，統合してもよい。
【００４２】
以上の例では、アドレス変換テーブル４１１はストレージプロセッサ内に、ディスクキャッシュ管理テーブル126、フリーセグメント管理テーブル127、エクスポートセグメント管理テーブル128は構成情報用メモリの中に格納されている。しかし、バスやネットワークを介してメインプロセッサからアクセス可能であれば、これらはホストプロセッサなどシステム内の別の場所でも良い。ただし、アドレス変換テーブル４１１はホストプロセッサ対応で設けることが便利であり、また、ディスクキャッシュ管理テーブル126、フリーセグメント管理テーブル127、エクスポートセグメント管理テーブル128はいずれのホストプロセッサからも自由にアクセスできることが望ましいので、図１の例は優れていると思われる。
【００４３】
図12にディスクキャッシュ119，120の領域確保処理のラダーチャートを示す。本ラダーチャートでは，すでにコネクションが確立された後の処理を示している。そして，ディスクキャッシュ確保に成功した場合のラダーチャートである。
ステップ1204:メインプロセッサ107がメインメモリ108上にディスクキャッシュ119，120にマップされるメモリ領域を確保する。
ステップ1205:メインプロセッサ107がIOプロセッサ109にディスクキャッシュ確保要求を発行する。このとき，物理アドレス1206，仮想アドレス1207，要求サイズ1208，共有ビット1209をIOプロセッサ109に送信する。
ステップ1210: IOプロセッサ109は，ストレージプロセッサ117にディスクキャッシュ確保要求を送信する。このとき，仮想アドレス1207，要求サイズ1208，共有ビット1209，ホストID1211を送信する。
ステップ1212: ストレージプロセッサ117は，ディスクキャッシュ確保要求を受信すると，フリーセグメント管理テーブル127を検索し，未使用セグメントを検索する。
ステップ1213:ストレージプロセッサ117は，未使用セグメントがあれば，エクスポートセグメント管理テーブル128に登録する。このとき，メモリハンドルも生成し，エクスポートセグメント管理テーブル128に設定する。共有ビット1209，ホストID1211も同時にエクスポートセグメント管理テーブル128に登録する。
ステップ1214: ストレージプロセッサ117は，エクスポートセグメント管理テーブル128に登録したセグメントをフリーセグメント管理テーブル127から削除する。
ステップ1215: ストレージプロセッサ117は，受信した仮想アドレス1207と確保したセグメントのディスクキャッシュ上アドレスをアドレス変換テーブル411に登録する。
ステップ1216: ストレージプロセッサ117は，ディスクキャッシュ確保完了報告をIOプロセッサ109に送信する。このとき，生成したメモリハンドル1217も送信する。
ステップ1218: IOプロセッサ109はアドレス変換テーブル411に物理アドレス１２０６,
仮想アドレス1207，要求サイズ1208，メモリハンドル1217を記述する。
ステップ1219：IOプロセッサ109はメインプロセッサ107にディスクキャッシュ確保完了を報告する。
【００４４】
図13にディスクキャッシュ確保が失敗した場合のラダーチャートを示す。図12と同様にコネクションが確立した後の処理である。
ステップ1304:メインプロセッサ107がメインメモリ108上にディスクキャッシュ119，120にマップされるメモリ領域を確保する。
ステップ1305:メインプロセッサ107がIOプロセッサ109にディスクキャッシュ確保要求を発行する。このとき，物理アドレス1306，仮想アドレス1307，要求サイズ1308，共有ビット1309をIOプロセッサ109に送信する。
ステップ1310: IOプロセッサ109は，ストレージプロセッサ117にディスクキャッシュ確保要求を送信する。このとき，仮想アドレス1307，要求サイズ1308，共有ビット1309，ホストID1311を送信する。
ステップ1312: ストレージプロセッサ117は，ディスクキャッシュ確保要求を受信すると，フリーセグメント管理テーブル127を検索し，未使用セグメントを検索する。
ステップ1313: 確保可能なフリーセグメントがない場合には，ストレージプロセッサ117は，IOプロセッサ109にディスクキャッシュ確保失敗を報告する。
ステップ1314: IOプロセッサ109はメインプロセッサ107にディスクキャッシュ確保失敗を報告する。
ステップ1315:ステップ1304で確保したメインメモリ108の領域を解放する。
【００４５】
なお、図１２、図１３の例ではメインメモリの所定領域とキャッシュの所定領域がペアになり、例えばメインメモリ領域のコピーをキャッシュメモリ領域に格納することを想定している。しかし、メインメモリ領域とは無関係に、ディスクキャッシュの所定メモリ領域を確保することもできる。この場合には、メインメモリ確保動作1204、1304とメモリ解放動作1315を省略すればよい。
【００４６】
図14には、このようにして，メインメモリ108とディスクキャッシュ119，120とのマッピングが完了すると，次にデータ転送を行うことができる。メインメモリ108からディスクキャッシュ119，120へのデータ転送のラダーチャートを示す。図14の点線で囲まれた部分1405はメインメモリ108を表している。
ステップ1404:  メインプロセッサ107は，IOプロセッサ109にデータ送信コマンドを発行する。このデータ送信コマンドは，送信キュー(図示せず)に登録することで実現される。さらに，転送先仮想アドレス1405，データ長1406も送信キューに登録される。
ステップ1407: IOプロセッサ109は，ストレージプロセッサ117にデータ送信コマンドを送信する。このとき，仮想アドレス1405，データサイズ1406，ホストID1408を送信する。
ステップ1409: ストレージプロセッサ117は，データ受信の準備を行い，データの受信が可能になると，データ転送許可通知をIOプロセッサ109に送信する。データ受信の準備であるが，ネットワーク層制御部406がアドレス変換テーブル411を使って転送先ディスクキャッシュアドレスを割り出し，データ転送制御部403にディスクキャッシュ119，120への転送指示をだす。データ転送制御部403は，IOチャネル104から到着するデータを待つ。
ステップ1410:IOプロセッサは，メインメモリ108内のデータ1411-1413をストレージプロセッサ117に送信する。データ1411-1413は，アドレス変換テーブル206において物理アドレス302として記述されたデータであり，IOプロセッサ内のデータ転送制御部203がメインメモリ108よりデータを読み出し，IOチャネル上にデータ1411-1413を送出する。一方，ストレージプロセッサ117では，IOチャネル104から受信したデータをデータ転送制御部403がステップ1409においてネットワーク層制御部406が発行した指示に従い，ディスクキャッシュ119，120まで転送する。このとき，データ転送制御部403は，ディスクキャッシュ119，120両方にデータを転送している。
ステップ1414: データ転送が完了すると，ストレージプロセッサ117は，コマンド完了通知をIOプロセッサ109に送信する。
ステップ1415: IOプロセッサ109は，メインプロセッサ107にデータ転送完了を報告する。この報告は，受信キュー(図示せず)に報告を登録することで実現できる。
【００４７】
ディスクキャッシュ119，120からメインメモリ108への転送は，データ転送の方向が異なるだけで図14と同様である。
【００４８】
このようにして，ディスクキャッシュ119，120にホストプロセッサ101，102は任意のデータを保存することができる。本発明での目的であるディスクキャッシュへのログ保存について説明する。ホストプロセッサ101，102上で稼動するアプリケーション(図示せず)は，なんらかのファイルの変更を行っている。ファイルの変更はメインメモリ108上で実行され，磁気ディスク装置103内のデータにその変更が反映されるのは，30秒に1回程度の頻度である。性能向上のためこのような操作を行っているが，磁気ディスク装置103への変更前にホストプロセッサ101が故障した場合，ファイルの整合性が保障できなくなってしまう。そこで，変更の履歴をログとしてディスクキャッシュ119，120に保存する。故障後に処理を引きついだホストプロセッサがログに従って処理を再現すればファイルの整合性は保たれる。
【００４９】
図15にログの形式例を示す。1回のオペレーションのログ1501は，ファイルに対して行った操作(オペレーション)を記述したオペレーション種別1503，オペレーションの対象となったファイル名1504，変更されたときに，変更部分のファイル先頭からのオフセット値1505，変更された部分のデータ長1506，変更データ1507からなる。1回のオペレーションのログ1501，1502が時系列順に記録されていき，ファイルの変更が磁気ディスク駆動装置122-125まで反映された時点でログ1501，1502は消去される。フェイルオーバ動作においては、ファイルの変更が磁気ディスク駆動装置まで反映されておらず、残存しているログをホストプロセッサ間で引き継ぐことが重要となる。
【００５０】
図1の計算機システムにおいて，図15のログを使用したフェイルオーバ動作について説明する。
【００５１】
図16にホストプロセッサ101，102の動作のラダーチャートを示す。
ステップ1603:ホストプロセッサ101は起動するとログ領域をディスクキャッシュ119，１120に確保する。
ステップ1604: ホストプロセッサ102は起動するとログ領域をディスクキャッシュ119，１120に確保する。
ステップ1605: ホストプロセッサ101は，磁気ディスク装置103より与えられたログ領域のメモリハンドルとログ領域のサイズをホストプロセッサ102にLAN106経由で送信する。ホストプロセッサ102は，本メモリハンドルとログ領域のサイズを保存する。メモリハンドルは磁気ディスク装置103内で一意なので，ホストプロセッサ102はホストプロプロセッサ101のログ領域を特定することができる。
ステップ1606 ホストプロセッサ102は，磁気ディスク装置103より与えられたログ領域のメモリハンドルとログ領域のサイズをLAN106経由でホストプロセッサ101に送信する。ホストプロセッサ101は，本メモリハンドルとログ領域のサイズを保存する。メモリハンドルは磁気ディスク装置103内で一意なので，ホストプロセッサ101はホストプロプロセッサ102のログ領域を特定することができる。
ステップ1607: ホストプロセッサ101は運転を開始する。
ステップ1608: ホストプロセッサ102は運転を開始する。
ステップ1609: ホストプロセッサ101で障害が発生し，ホストプロセッサ101は停止する。
ステップ1610:ホストプロセッサ102は，なんらかの手段でホストプロセッサ101に障害が発生したことを検出する。このような障害検出手段としては，ネットワーク上を互いに定期的に信号を送信するハードビートが一般的である。相手からの信号が途絶えたとき，相手に障害が発生したと判断する。本発明では，障害検出手段に依存しないので，これ以上の説明はしない。
ステップ1611: ホストプロセッサ102は，ホストプロセッサ101のログ領域のメモリハンドルをストレージプロセッサ118に送信し，ホストプロセッサ101のログ領域をホストプロセッサ102の仮想メモリ空間にマッピングする。手順の詳細は，図17で説明する。
ステップ1612:ホストプロセッサ102は，ホストプロセッサ101のログ領域を参照できるようになったので，ログに従って処理を再現してデータの整合性を保つ。その後，ホストプロセッサ101の処理を引き継ぐ。
【００５２】
図17にステップ1611の詳細を示す。
ステップ1704: ホストプロセッサ102内のメインプロセッサ112が，ホストプロセッサ101が送信したログ領域のサイズ分だけメインメモリ113の領域を確保する。
ステップ1705:メインプロセッサ112は，IOプロセッサ114にホストプロセッサ101のログ領域の問い合わせ要求を行う。ここで，メインプロセッサ112はIOプロセッサ114に，ホストプロセッサ101から受信したログ領域のメモリハンドル1706と，当該ログ領域をマッピングしてほしい仮想アドレス1707とログ領域のサイズ1708とステップ1704で確保したメインメモリ内の物理アドレス1709を与える。
ステップ1710：IOプロセッサ114は，ストレージプロセッサ118に問い合わせ要求を発行する。このとき，メモリハンドル1706，仮想アドレス1707，ホストID1711をストレージプロセッサ118に送信する。
ステップ1712: ストレージプロセッサ118は，エクスポートセグメント管理テーブル128を検索し，与えられたメモリハンドル1706が登録されているか検査する。メモリハンドル1706のメモリ領域が登録されていれば，ホストプロセッサ101が登録したエントリをコピーし，コピーしたエントリに対し，ホストID1002のエントリをホストプロセッサ102のホストID1711に変更する。さらに，ストレージプロセッサ118がアドレス変換テーブル411に対して，仮想アドレス1707とエクスポートセグメント管理テーブル128を検索して得られたログ領域のセグメントアドレスを設定する。ストレージプロセッサ118は，メモリハンドルとして，受信したメモリハンドル1706を登録する。
ステップ1713: アドレス変換テーブル411の変更が完了すればストレージプロセッサ118側でのマッピング処理は完了する。ストレージプロセッサ118はIOプロセッサ114にマッピング完了報告を行う。
ステップ1714: IOプロセッサ114はアドレス変換テーブル206を変更し前記ログ領域をメインプロセッサ112の仮想アドレス空間にマッピングする。
ステップ1715: IOプロセッサ114は，マッピング完了をメインプロセッサ112に報告する。
＜実施例2＞
これまでは，図1のように2つのホストプロセッサのシステムにおけるフェイルオーバについて説明した。これは公知例1で開示された方法でも，ログ保存について問題ない。しかし，3つ以上のホストプロセッサから構成されるクラスタでは，公知例1の方法では，各ホストプロセッサがログを変更するたびに，他ホストプロセッサに変更分を送信しなくてはならい。従って，ログの送受信オーバーヘッドが大きくなり，性能劣化の原因となる。
【００５３】
図18に本発明を適用した計算機システムを示す。ホストプロセッサ1801-1803はLAN1804によって相互に通信可能である。ホストプロセッサ1801-1803はそれぞれIOチャネル1805-1807で磁気ディスク装置103内のストレージプロセッサ1808-1810と結合している。磁気ディスク装置103内の構成は，図1と同様である(磁気ディスク駆動装置は図示せず)。ホストプロセッサ1801-1803は，ディスクキャッシュ119，120内にログ領域1811，1812を確保している。可用性向上のため，1811と1812は同一内容である。そしてログ領域1811，1812を管理するログ管理テーブル1813，1814もディスクキャッシュ119，120に保存される。ログ管理テーブル1813，1814も可用性向上のため，同一内容である。磁気ディスク装置103には，操作端末1815が接続されている。操作端末1815は使用者が磁気ディスク装置103の構成変更，設定変更，起動，終了を行うための装置である。
【００５４】
図19にログ領域1811の構成を示す。黒い太枠がそれぞれホストプロセッサ1台のログ領域である。ホストID1904は，ログを書き込むホストプロセッサのIDである。ログサイズ1905は，ログの実際のサイズである。ログ1906が実際の処理の履歴であり，内容は，図15と同様である。ログ1902，1903についても同様である。
【００５５】
図20にログ管理テーブル1813を示す。ログ管理テーブル1813はホストプロセッサの障害発生時に他ホストプロセッサが障害ホストプロセッサのログを検索できるようにするためのテーブルである。ホストID2001は，ログの所有者のホストIDである。オフセット値2002は，ログが格納されているアドレスをログ領域1811の先頭からのオフセットで示している。引継ぎホストID2003は，処理を引き継いだホストプロセッサのホストIDが設定される。処理を引き継ぐホストプロセッサは，このエントリが無効かどうかを判断する。無効ならば自らのホストIDを設定し，他ホストプロセッサのホストIDが設定されていれば，先に他ホストプロセッサが引き継ぎ処理を実行しているので，引継ぎ処理を中断する。この引継ぎホストID2003の変更はatomic的に実行されなければならない。
【００５６】
図21にホストプロセッサ1801-1803の起動時処理のフローチャートを示す。
ステップ2101: 処理の開始。
ステップ2102: ホストプロセッサ1801-1803間で調停を行い，個々のホストプロセッサにホストIDを割り当てる。
ステップ2103: ホストプロセッサ1801-1803の中でログ領域の生成を行うホストプロセッサを1台決定する処理を行う。本実施例では，このホストプロセッサをマスタホストプロセッサと呼ぶ。マスタホストプロセッサの決定方法には，ホストIDが最小のホストプロセッサに決定する，あるいは，ホストIDが最大のホストプロセッサに決定するなどの方式がある。本実施例では，ホストプロセッサ1801がマスタホストプロセッサに決定したとして説明する。
ステップ2104:ホストプロセッサ1801がディスクキャッシュ119，120の一部をログ領域として確保する。確保の手順は図12と同様である。ログ領域1811の確保には，ログ領域1811のサイズが必要である。個々のホストプロセッサ1801-1803が使用するログ領域1901-1903が固定サイズとすると，図18の計算機システムに参加しているホストプロセッサ1801-1803の台数はステップ2102で判明しているので，ログ領域1811のサイズは計算可能である。
ステップ2105: ホストプロセッサ1801は，ディスクキャッシュ119，120上にログ管理テーブル1813，1814を作成する。ディスクキャッシュ119，120の領域確保の手順は図12と同様である。
ステップ2106: ホストプロセッサ1801は，ログ領域1811とログ管理テーブル1813のメモリハンドル，サイズを各ホストプロセッサに配信する。メモリハンドルはステップ2104，2105で取得できているので，配信可能である。
ステップ2107: 各ホストプロセッサ1801-1803がログ領域1811，ログ管理テーブル1813を自らの仮想メモリ空間にマッピングする。マッピングの手順は，図17と同様である。このようにして，ホストプロセッサのログ領域が共有できるようになる。
【００５７】
図22にホストプロセッサ1801-1803の中の1台の障害発生時処理のフローチャートを示す。
ステップ2201: 処理の開始。
ステップ2202: ホストプロセッサが他ホストプロセッサの障害を検出する。障害検出は図16で説明した手法と同様。
ステップ2203:ログ管理テーブル1813を参照，障害ホストプロセッサのエントリを検索する。
ステップ2204: 目的のログ管理テーブル1813のエントリをロックする。他ホストプロセッサも障害を検出し，ログ管理テーブル1813の内容を更新しようとするからである。
ステップ2205: 引継ぎホストID2003のエントリを検査する。本エントリが無効値になっていた場合，引継ぎ処理を実行してよい。他ホストIDが設定されてあったら，すでに他ホストプロセッサが引き継ぎ処理を実行しているので，本ホストプロセッサは引継ぎ処理を中断してよい。
ステップ2206: 他ホストプロセッサがすでに引き継ぎ処理を実行している場合，ロックを解除して，処理を終了させる。
ステップ2207: 引継ぎホストID2003が無効値になっていた場合，みずからのホストIDを設定する。
ステップ2208: ロックを解除する。
ステップ2209: 障害ホストプロセッサのログを読み取り，処理を再実行する。
ステップ2210: データの整合性に問題のない状態になったら，障害ホストプロセッサの処理もあわせて実行する。
ステップ2211: 処理の終了。
さて，ディスクキャッシュ119，120をホストプロセッサ1801-1803の仮想アドレス空間にマッピングすると，これまで説明したような効果があるが，磁気ディスク駆動装置への入出力に使用できるディスクキャッシュ119，120の容量が小さくなる。これは性能劣化につながるため，無制限に仮想アドレス空間にマッピングしてよいものではない。そこで，容量を制限する必要がある。制限容量の設定は，使用者が操作端末を使って行う。
図23に操作画面を示す。ホスト名表示領域2302-2304には，ディスクキャッシュ119，120の一部を仮想アドレス空間に割り当ててもらっているホストIDが表示されている。マッピング最大容量設定領域2305-2307は，対応するホストプロセッサのアドレス空間にマッピングできる最大容量である。このように，ホストプロセッサごとに最大容量が設定可能である。このような設定を行うとストレージプロセッサ1808-1810は，ホストプロセッサ1801-1803がディスクキャッシュの割り当てを要求したときに，最大容量2305-2307をチェックし，最大容量を越える場合には，ディスクキャッシュ領域を割り当てない。
以上説明したように，ディスクキャッシュの一部領域をホストプロセッサ間で共有，参照できるログ領域として利用すると，ログ更新を他ホストプロセッサに配信せずに済むため，性能劣化を防ぎつつ，可用性を向上させることが可能となる。
【００５８】
【発明の効果】
以上，実施例にて説明したように，ディスクキャッシュは，不揮発，低オーバーヘッド，複数ホストプロセッサより共有，参照可能な媒体であり，ディスクキャッシュにログを保存することで，性能劣化を抑えながら可用性を高めることができる。
【図面の簡単な説明】
【図１】本発明を適用した計算機システムのブロック図である。
【図2】IOプロセッサ109のブロック図である。
【図3】アドレス変換テーブル206を示した表図である。
【図4】ストレージプロセッサ117を示したブロック図である。
【図5】IOチャネル104，105における通信方式を示した概念図である。
【図6】論理ディスク601の領域管理方式を示した概念図である。
【図7】ディスクキャッシュアドレス空間701と論理ディスク702，703，704の間のデータの対応関係を示した概念図である。
【図8】ディスクキャッシュ管理テーブル126を示した表図である。
【図9】フリーセグメント管理テーブル127を示した表図である。
【図１0】エクスポートセグメント管理テーブル128を示した表図である。
【図１1】アドレス変換テーブル411を示した表図である。
【図１2】ディスクキャッシュ領域割り当て処理(割り当て成功時)を示したラダーチャートである。
【図１3】ディスクキャッシュ領域割り当て処理(割り当て失敗時)を示したラダーチャートである。
【図１4】ホストプロセッサとディスクキャッシュ間のデータ転送処理を示したラダーチャートである。
【図１5】ログの内容を示した概念図である。
【図１6】ホストプロセッサ101障害時の動作を示したラダーチャートである。
【図１7】ホストプロセッサ101障害時にホストプロセッサ102がホストプロセッサ101のログ領域を自らの仮想メモリ空間にマッピングする処理を示したラダーチャートである。
【図１8】本発明を適用した，ホストプロセッサが3台以上ある計算機システムを示したブロック図である。
【図１9】ログ領域1811，1812を示した概念図である。
【図20】ログ管理テーブル1813，1814を示した表図である。
【図21】ホストプロセッサ1801-1803起動時処理を示したフローチャートである。
【図22】他ホストプロセッサの障害を検出したときのホストプロセッサ処理を示したフローチャートである。
【図23】操作端末1815の設定画面を示した概念図である。
【符号の説明】
101  ホストプロセッサ
102  ホストプロセッサ
103  磁気ディスク装置
104  IOチャネル
105  IOチャネル
106  LAN
107  メインプロセッサ
108  メインメモリ
109  IOプロセッサ
110  LANコントローラ
111  内部バス
112  メインプロセッサ
113  メインメモリ
114  IOプロセッサ
115  LANコントローラ
116  内部バス
117  ストレージプロセッサ
118  ストレージプロセッサ
119  ディスクキャッシュ
120  ディスクキャッシュ
121  構成情報用メモリ
122  磁気ディスク駆動装置
123  磁気ディスク駆動装置
124  磁気ディスク駆動装置
125  磁気ディスク駆動装置
126  ディスクキャッシュ管理テーブル
127  フリーセグメント管理テーブル
128  エクスポートセグメント管理テーブル
201  内部バスインタフェース部
202  通信制御部
203  データ転送制御部
204  IOチャネルインタフェース部
205  ネットワーク層制御部
206  アドレス変換テーブル
301  仮想アドレスの列
302  物理アドレスの列
303  サイズの列
304  メモリハンドルの列
305  アドレス変換テーブルに登録されたメモリ領域のエントリ
306  アドレス変換テーブルに登録されたメモリ領域のエントリ
401  IOチャネルインタフェース部
402  内部ネットワークインタフェース部
403  データ転送制御部
404  ストレージ制御部
405  内部メモリ
406  ネットワーク層制御部
407  IO層制御部
408  磁気ディスク制御部
409  ディスクキャッシュ管理部
410  送受信制御キュー群
411  アドレス変換テーブル
501  仮想的な通信路(コネクション)
502  仮想的な通信路(コネクション)
503  仮想的な通信路(コネクション)
504  受信キュー
505  送信キュー
506  キューペア
507  送信キュー
508  受信キュー
509  キューペア
510  受信キュー
511  送信キュー
512  キューペア
513  送信キュー
514  受信キュー
515  キューペア
516  受信キュー
517  送信キュー
518  キューペア
519  送信キュー
520  受信キュー
521  キューペア
522  転送対象データ
601  論理ディスク
602  セクタ#0
603  セクタ#1
604  セクタ#2
605  セクタ#(k-1)
606  セクタ#(n-2)
607  セクタ#(n-1)
608  セグメント#0
609  セグメント#m
701  ディスクキャッシュアドレス空間
702  論理ディスク#64
703  論理ディスク#125
704  論理ディスク#640
705  セグメント#2048
706  セグメント#128
707  セグメント#514
708  セグメント#515
709  ディスクキャッシュ上に存在するセグメント#2048
710  ディスクキャッシュ上に存在するセグメント#128
711  未使用ディスクキャッシュセグメント
712  ディスクキャッシュ上に存在するセグメント#514
713  ディスクキャッシュ上に存在するセグメント#515
714  未使用セグメント
715  未使用セグメント
716  ディスクキャッシュ上に存在するセグメント#128
801  ディスク番号の列
802  セグメント番号の列
803  ディスクキャッシュアドレスの列
804  セグメントの状態の列
805  ディスクキャッシュ上に存在するセグメントの情報
806  ディスクキャッシュ上に存在するセグメントの情報
807  ディスクキャッシュ上に存在するセグメントの情報
808  ディスクキャッシュ上に存在するセグメントの情報
901  エントリの番号
902  未使用ディスクキャッシュセグメントアドレス
903  未使用のディスクキャッシュセグメントの情報
904  未使用のディスクキャッシュセグメントの情報
905  未使用のディスクキャッシュセグメントの情報
1001  メモリハンドルの列
1002  ホストIDの列
1003  ディスクキャッシュアドレスの列
1004  共有ビットの列
1005  占有サイズの列
1006  エクスポートされたセグメントに関する情報
1007  エクスポートされたセグメントに関する情報
1008  エクスポートされたセグメントに関する情報
1009  エクスポートされたセグメントに関する情報
1101  仮想アドレスの列
1102  物理アドレス(ディスクキャッシュ上のアドレス)の列
1103  占有サイズの列
1104  メモリハンドルの列
1105  登録されたセグメントに関する情報
1106  登録されたセグメントに関する情報
1107  登録されたセグメントに関する情報
1201  メインプロセッサ107の処理の流れ
1202  IOプロセッサ109の処理の流れ
1203  ストレージプロセッサ117の処理の流れ
1204  メインメモリ108に領域を確保するステップ
1205  ディスクキャッシュ確保要求のステップ
1206  メインメモリ108上のアドレス
1207  仮想アドレス
1208  割り当てを要求するディスクキャッシュ領域のサイズ
1209  共有ビット
1210  ディスクキャッシュ確保要求のステップ
1211  ホストID
1212  フリーセグメント管理テーブルを検索するステップ
1213  ディスクキャッシュの未使用セグメントをエクスポートセグメント管理テーブルに登録するステップ
1214  割り当てたセグメントをフリーセグメント管理テーブルから削除するステップ
1215  アドレス変換テーブルを変更するステップ
1216  ディスクキャッシュ確保完了報告のステップ
1217  メモリハンドル
1218  アドレス変換テーブルを変更するステップ
1219  メインプロセッサに割り当て成功を報告するステップ
1401  メインプロセッサ107の処理の流れ
1402  IOプロセッサ109の処理の流れ
1403  ストレージプロセッサ117の処理の流れ
1404  データ送信コマンドを発行するステップ
1405  仮想アドレス
1406  データサイズ
1407  データ送信コマンドを発行するステップ
1408  ホストID
1409  データ送信許可を通知するステップ
1410  データ転送
1411  メインメモリ108内にある転送対象のデータ
1412  メインメモリ108内にある転送対象のデータ
1413  メインメモリ108内にある転送対象のデータ
1414  コマンド完了通知を行うステップ
1415  コマンド完了通知を行うステップ
1501  1回のオペレーションのログ
1502  1回のオペレーションのログ
1503  オペレーション種別
1504  対象ファイル名
1505  ファイルオフセット値
1506  データ長
1507  変更データ
1508  オペレーション種別
1509  対象ファイル名
1510  ファイルオフセット値
1511  データ長
1512  変更データ
1601  ホストプロセッサ101の処理の流れ
1602  ホストプロセッサ102の処理の流れ
1603  ディスクキャッシュの領域を確保するステップ
1604  ディスクキャッシュの領域を確保するステップ
1605  メモリハンドル，領域サイズを送信するステップ
1606  メモリハンドル，領域サイズを送信するステップ
1607  運転開始
1608  運転開始
1609  障害発生
1610  障害検出のステップ
1611  ホストプロセッサ101のログ領域をマッピングするステップ
1612  ログに従ってホストプロセッサの処理を再現するステップ
1701  メインプロセッサ112の処理の流れ
1702  IOプロセッサ114の処理の流れ
1703  ストレージプロセッサ118の処理の流れ
1704  メモリ確保のステップ
1705  ホストプロセッサ101が送信してきたメモリハンドルに対応する領域がディスクキャッシュ上にあるか，問い合わせるステップ
1706  ホストプロセッサ101が送信したメモリハンドル
1707  メインプロセッサ112がマッピングを希望する仮想アドレス
1708  マッピングを行う領域のサイズ
1709  ステップ1704で確保したメモリの物理アドレス
1710  ホストプロセッサ101が送信してきたメモリハンドルに対応する領域がディスクキャッシュ上にあるか，問い合わせるステップ
1711  ホストID
1712  アドレス変換テーブルを変換するステップ
1713  マッピング完了報告のステップ
1714  アドレス変換テーブルを変換するステップ
1715  マッピング完了報告のステップ
1801  ホストプロセッサ
1802  ホストプロセッサ
1803  ホストプロセッサ
1804  LAN
1805  IOチャネル
1806  IOチャネル
1807  IOチャネル
1808  ストレージプロセッサ
1809  ストレージプロセッサ
1810  ストレージプロセッサ
1811  ログ領域
1812  ログ領域
1813  ログ管理テーブル
1814  ログ管理テーブル
1901  ホストプロセッサのログ
1902  ホストプロセッサのログ
1903  ホストプロセッサのログ
1904  ホストID
1905  ログサイズ
1906  ログ
1907  ホストID
1908  ログサイズ
1909  ログ
1910  ホストID
1911  ログサイズ
1912  ログ
2001  ホストIDの列
2002  オフセット値の列
2003  引継ぎホストID
2004  ホストID0x00に関するエントリ
2005  ホストID0x01に関するエントリ
2101  処理の開始
2102  ホストIDを決定するステップ
2103  マスタホストプロセッサを決定するステップ
2104  ログ領域をディスクキャッシュに確保するステップ
2105  ログ管理テーブルを作成するステップ
2106  メモリハンドルを配信するステップ
2107  各ホストプロセッサで，ログ領域を仮想メモリ空間にマッピングするステップ
2201  処理の開始
2202  他ホストプロセッサの障害を検出したステップ
2203  ログ管理テーブルを検索するステップ
2204  ログ管理テーブルをロックするステップ
2205  すでに他ホストプロセッサが引き継ぎ処理を実行しているか判定するステップ
2206  ロック解除のステップ
2207  引継ぎホストIDに自らのホストIDを設定するステップ
2208  ロック解除のステップ
2209  ログを読み取り再実行するステップ
2210  障害ホストプロセッサの処理を引き継ぐステップ
2211  処理の終了
2301  操作画面
2302  ホスト名表示領域
2303  ホスト名表示領域
2304  ホスト名表示領域
2305  マッピング最大容量設定領域
2306  マッピング最大容量設定領域
2307  マッピング最大容量設定領域。
【図１】
2004199420.tif 000003
【図２】
2004199420.tif 000004
【図３】
2004199420.tif 000005
【図４】
2004199420.tif 000006
【図５】
2004199420.tif 000007
【図６】
2004199420.tif 000008
【図７】
2004199420.tif 000009
【図８】
2004199420.tif 000010
【図９】
2004199420.tif 000011
【図１０】
2004199420.tif 000012
【図１１】
2004199420.tif 000013
【図１２】
2004199420.tif 000014
【図１３】
2004199420.tif 000015
【図１４】
2004199420.tif 000016
【図１５】
2004199420.tif 000017
【図１６】
2004199420.tif 000018
【図１７】
2004199420.tif 000019
【図１８】
2004199420.tif 000020
【図１９】
2004199420.tif 000021
【図２０】
2004199420.tif 000022
【図２１】
2004199420.tif 000023
【図２２】
2004199420.tif 000024
【図２３】
2004199420.tif 000025