(57)【要約】【課題】  大容量の記憶領域に対応する差分ビットマップが必要とするメモリ量を削減する。【解決手段】  差分ビットマップ２７を階層化する。２段目のエントリ３２０のビット３２１で差分を表現する。１段目のエントリ３１０に、２段目のエントリへのポインタ３１１と代表ビット３１３を設け、対応するビット３２１の値が全て代表ビット３１３の値と等しい場合、２段目のエントリ３２０を不要とする。【選択図】        図３
2006331100.tif 000002
【特許請求の範囲】
【請求項１】
ストレージ装置内の論理ボリュームに対応するボリュームの差分を差分ビットマップで管理する差分ビットマップ管理方法において、
前記差分ビットマップは、１階層目のテーブルのエントリと２階層目のテーブルのエントリとの２階層のテーブルの組み合わせで表現し、
前記１階層目のテーブルのエントリで示される差分の有無は、前記２階層目のテーブルのエントリに格納する第１のビットの値で表現し、
前記１階層目のテーブルのエントリは前記２階層目のテーブルのエントリを指定する第１の識別情報と、前記２階層目のテーブルのエントリの存在有無を表す第２の識別情報とを格納し、
前記２階層目のテーブルのエントリの第１のビットが、全てあらかじめ定めた値と等しい場合に、対応する１階層目のテーブルのエントリに格納する第２の識別情報に、２階層目のテーブルのエントリが存在しないことを記録する
ことを特徴とする差分ビットマップ管理方法。
【請求項２】
請求項１に記載の差分ビットマップ管理方法において、
前記差分ビットマップの管理のための処理は、前記ストレージ装置内のビットマップ制御プログラムが実行する
ことを特徴とする差分ビットマップ管理方法。
【請求項３】
請求項１に記載の差分ビットマップ管理方法において、
前記第１のビットの値は、連続する同じ値である
ことを特徴とする差分ビットマップ管理方法。
【請求項４】
請求項１に記載の差分ビットマップ管理方法において、
前記第１の識別情報は、前記２階層目のテーブルのエントリのアドレスを示す２階層アドレスビットである
ことを特徴とする差分ビットマップ管理方法。
【請求項５】
請求項１に記載の差分ビットマップ管理方法において、
前記第２の識別情報は、前記２階層目のテーブルのエントリに格納されるビットを有効としてこのビットを全部使うか、または前記２階層目のテーブルのエントリに格納されるビットを無効として連続する同じ値を使うかを判断するための２階層有効ビットである
ことを特徴とする差分ビットマップ管理方法。
【請求項６】
請求項１に記載の差分ビットマップ管理方法において、
前記１階層目のテーブルのエントリに、第３のビットを格納し、
前記２階層目のテーブルのエントリの第１のビットが、全て第３のビットの値と等しい場合に、対応する１階層目のテーブルのエントリに格納する第２の識別情報に、前記２階層目のテーブルのエントリが存在しないことを記録する
ことを特徴とする差分ビットマップ管理方法。
【請求項７】
請求項６に記載の差分ビットマップ管理方法において、
前記第３のビットは、前記２階層目のテーブルのエントリに格納される連続する同じ値が前記１階層目のテーブルのエントリに代表して格納される代表ビットである
ことを特徴とする差分ビットマップ管理方法。
【請求項８】
請求項６に記載の差分ビットマップ管理方法であって、
前記２階層目のテーブルのエントリを解放する場合に、第３のビットにあらかじめ定められた値を格納して、対応する１階層目のテーブルのエントリに格納する第２の識別情報に、２階層目のテーブルの存在しないことを記録する
ことを特徴とする差分ビットマップ管理方法。
【請求項９】
請求項１に記載の差分ビットマップ管理方法であって、
前記１階層目のエントリと前記２階層目のエントリを、前記ストレージ装置内の入出力処理に使用されるキャッシュメモリを管理するディレクトリに格納する
ことを特徴とする差分ビットマップ管理方法。
【請求項１０】
論理ボリュームの差分を管理する差分ビットマップを有するストレージ装置において、
前記差分ビットマップの１階層目のテーブルを格納する１階層格納部と、
前記差分ビットマップの２階層目のテーブルを格納する２階層格納部と、
前記２階層のテーブルのエントリに差分の有無を表す第１のビットを格納する第１ビット格納部と、
前記１階層目のテーブルのエントリに前記２階層目のテーブルのエントリを指定する第１の識別情報と、前記２階層目のテーブルの存在有無を表す第２の識別情報とを格納する第１及び第２識別情報格納部と、
前記２階層目のテーブルのエントリの第１のビットが、全てあらかじめ定めた値と等しい場合に、対応する前記１階層目のテーブルのエントリに格納する第２の識別情報に、前記２階層目のテーブルのエントリが存在しないことを記録する第２識別情報更新部と
を有することを特徴とするストレージ装置。
【請求項１１】
請求項１０に記載のストレージ装置において、
前記差分ビットマップの管理をする前記１階層格納部、前記２階層格納部、前記第１ビット格納部、前記第１及び第２識別情報格納部及び前記第２識別情報更新部の各機能は、
ビットマップ制御プログラムが実行する
ことを特徴とするストレージ装置。
【請求項１２】
請求項１０に記載のストレージ装置において、
前記第１のビットの値は、連続する同じ値である
ことを特徴とするストレージ装置。
【請求項１３】
請求項１０に記載のストレージ装置において、
前記第１の識別情報は、前記２階層目のテーブルのエントリのアドレスを示す２階層アドレスビットである
ことを特徴とするストレージ装置。
【請求項１４】
請求項１０に記載のストレージ装置において、
前記第２の識別情報は、前記２階層目のテーブルのエントリに格納されるビットを有効としてこのビットを全部使うか、または前記２階層目のテーブルのエントリに格納されるビットを無効として連続する同じ値を使うかを判断するための２階層有効ビットである
ことを特徴とするストレージ装置。
【請求項１５】
請求項１０に記載のストレージ装置であって、
前記１階層目のテーブルのエントリに、第３のビットを格納する第３ビット格納部と、
前記２階層目のテーブルのエントリの第１のビットが、全て第３のビットの値と等しい場合に、対応する前記１階層目のテーブルのエントリに格納する第２の識別情報に、前記２階層目のテーブルのエントリが存在しないことを記録する第２識別情報更新部と
を有することを特徴とするストレージ装置。
【請求項１６】
請求項１５に記載のストレージ装置において、
前記第３のビットは、前記２階層目のテーブルのエントリに格納される連続する同じ値が前記１階層目のテーブルのエントリに代表して格納される代表ビットである
ことを特徴とするストレージ装置。
【請求項１７】
請求項１０に記載のストレージ装置であって、
前記１階層目のエントリと前記２階層目のエントリを、入出力処理に使用されるキャッシュメモリを管理するディレクトリに格納する
ことを特徴とするストレージ装置。
【請求項１８】
ホスト計算機からの入出力指令に基づいてストレージ装置の論理ボリュームに対する入出力処理を行うために論理ボリュームの差分を管理する差分ビットマップを用いる情報処理システムにおいて、
前記ストレージ装置は、
前記差分ビットマップの１階層目のテーブルを格納する１階層格納部と、
前記差分ビットマップの２階層目のテーブルを格納する２階層格納部と、
前記２階層のテーブルのエントリに差分の有無を表す第１のビットを格納する第１ビット格納部と、
前記１階層目のテーブルのエントリに２階層目のテーブルのエントリを指定する第１の識別情報と、前記２階層目のテーブルの存在有無を表す第２の識別情報とを格納する第１及び第２識別情報格納部と、
前記２階層目のテーブルのエントリの第１のビットが、全てあらかじめ定めた値と等しい場合に、対応する前記１階層目のテーブルのエントリに格納する第２の識別情報に、前記２階層目のテーブルのエントリが存在しないことを記録する第２識別情報更新部と
を有することを特徴とする情報処理システム。
【請求項１９】
請求項１８に記載の情報処理システムにおいて、
前記第１の識別情報は、前記２階層目のテーブルのエントリのアドレスを示す２階層アドレスビットである
ことを特徴とする情報処理システム。
【請求項２０】
請求項１８に記載の情報処理システムにおいて、
前記第２の識別情報は、前記２階層目のテーブルのエントリに格納されるビットを有効としてこのビットを全部使うか、または前記２階層目のテーブルのエントリに格納されるビットを無効として連続する同じ値を使うかを判断するための２階層有効ビットである
ことを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置およびその制御方法に関し、特に、ストレージ装置内において、ボリューム間の差分を記録する差分ビットマップ管理方法、ストレージ装置及び情報処理システムに関する。
【背景技術】
【０００２】
従来、ストレージ装置内におけるボリュームの差分をビットマップで管理する方法については、例えば特許文献１に開示されているように、ストレージ装置は、内部のメモリにビットマップを持ち、あるボリュームについて、差分データの取得を行うスナップショット取得後にホストプロセッサが書き込んだブロックがどれかを特定していた。さらに、特許文献１によれば、そのビットマップの各ビットはブロックと１：１に対応していた。
【０００３】
また、このストレージ装置内におけるキャッシュメモリをディレクトリで管理する方法においては、キャッシュディレクトリ（キャッシュメモリを管理するディレクトリ）はキャッシュメモリ上の領域を制御するための情報を有していた。
【特許文献１】米国特許第６，６１８，７９４号特許明細書
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、上述した特許文献１に記載のビットマップ管理方法では、差分を記録するためのビットマップ（以下、「差分ビットマップ」と呼ぶ）のためのメモリ領域を、差分を記録したいボリュームのサイズに比例した分だけ、ストレージ装置に用意する必要がある。そのため、差分を記録したいボリュームの総量が多くなれば、それだけ多くのメモリが必要になるという不都合があった。
【０００５】
そこで、本発明は、差分ビットマップに必要なメモリサイズを削減することを課題とするものである。
【課題を解決するための手段】
【０００６】
上記課題を解決し、本発明の目的を達成するため、本発明の差分ビットマップ管理する方法では、差分ビットマップは、１階層目のテーブルのエントリと２階層目のテーブルのエントリとの２階層のテーブルの組み合わせで表現し、１階層目のテーブルのエントリで示される差分の有無は、２階層目のテーブルのエントリに格納する第１のビットの値で表現し、１階層目のテーブルのエントリは２階層目のテーブルのエントリを指定する第１の識別情報と、２階層目のテーブルのエントリの存在有無を表す第２の識別情報とを格納し、２階層目のテーブルのエントリの第１のビットが、全てあらかじめ定めた値と等しい場合に、対応する１階層目のテーブルのエントリに格納する第２の識別情報に、２階層目のテーブルのエントリが存在しないことを記録することを特徴とするものである。
【０００７】
本発明は、少なくともメモリとプロセッサを内蔵したストレージ装置を用いて構成される。
差分ビットマップは少なくとも２階層のテーブルで構成する。差分の有無は、第１のビットの値（例えば０（差分なし）または１（差分あり））で示す。第１のビットは差分を記録すべき第１のボリューム上の１個あるいはあらかじめ定めた個数のブロックに対応する。第１のビットはビット列として、第２のエントリに格納する。
１階層目のテーブルの第１のエントリは、少なくとも第２のエントリへのポインタと、該ポインタが有効か無効かを示す第２のビットを持つ。２階層目のテーブルの第２のエントリは少なくとも第１のビットの、あらかじめ定めた個数の列を含む。
【０００８】
第１のエントリは、先頭からその順番に第１のボリューム上の複数のブロックと対応しており、そのブロック数は第２のエントリ１個が対応するブロック数と同じである。さらに、第２のビットが無効を示すとき、対応すべき第１のビット列が例えば全て１または０のいずれかを表すとあらかじめ定めておく（例えばここでは０とする）。すると、第１のビットが例えば全て０となっている第２のエントリは全て解放することができるため、差分ビットマップ上で例えば０が多い場合、差分ビットマップに必要なメモリ量を削減することができる。
【０００９】
さらに、第２のビットが無効である場合に、第１のエントリに対応すべき第１のビット列の値を格納するための第３のビットを第１のエントリに備える。これにより、第１のエントリごと、すなわち第１のボリュームの一部分の領域ごとに第１のビットが例えば全て０の場合でも全て１の場合でも、第２のエントリが不要になる。そのため、差分ビットマップに必要なメモリ量を削減できる機会が増える。
【００１０】
さらなる効果として、差分ビットマップに必要なメモリ量が足りなくなった場合に、第１のエントリに相当する第１のビットを差分ありのビット（例えば１）で連続して塗りつぶすことによって、（無駄なコピーが発生し得るかわりに）メモリの枯渇を回避できる。具体的には、第２のエントリの割り当てが不可能になったときに、他の適当な第２のエントリを探し、対応する第３のビットを１に、対応する第２のビットを無効に設定し、解放可能になった第２のエントリを新たに使用する。
さらに、差分ビットマップをキャッシュディレクトリに格納する。これによって、差分ビットマップ参照の際に、ディレクトリ検索の一部が行えるため、メモリアクセスを削減でき、性能を向上に寄与する。
【発明の効果】
【００１１】
本発明によれば、差分ビットマップ上で同じ値のビットが連続する場合に、これらに対して割当てるメモリ領域を削減するため、差分ビットマップに必要なメモリ容量を削減することができる。
【００１２】
さらに、差分ビットマップをキャッシュディレクトリに格納することによって、差分ビットマップ参照とディレクトリ検索の一部を同時に行うことができるため、メモリアクセスを削減でき、性能を向上することができる。
【発明を実施するための最良の形態】
【００１３】
以下、本発明の実施形態を、図面を用いて説明するが、本発明は以下に説明する実施形態に限定されるものではないことは言うまでもない。
まず、図１から図４を用いて本発明を適用した情報処理システムの第１の実施の形態例を説明する。
図１は、第１の実施の形態例のストレージ装置の全体構成を示す図である。
このシステムは、少なくとも１台のホストプロセッサ１２、少なくとも１台のストレージ装置１３、ＳＡＮ（ストレージ・エリア・ネットワーク）リンク１７を備える。
ホストプロセッサ１２は、ストレージ装置１３に格納されたデータを使用する計算機である。ホストプロセッサ１２はＳＡＮインタフェース（ＳＡＮ  Ｉ／Ｆ）１７１を内蔵している。ＳＡＮ  Ｉ／Ｆ１７１はホストプロセッサ１２がＳＡＮリンク１７を介してストレージ装置１３とデータを入出力するためのアダプタであり、より具体的には、ファイバー・チャネル（Fibre Channel（ＦＣ））のホスト・バス・アダプタ（ＨＢＡ）である。但し、ホストプロセッサ１２とストレージ装置１３との間の接続には、ＳＣＳＩ、ｉＳＣＳＩ、InfiniBandなど、他のプロトコルを使用してもよく、ＳＡＮ  Ｉ／Ｆ１７１はそれぞれのプロトコルに対応したアダプタであればよい。また、ＳＡＮリンク１７は単一のリンクである必要は無く、ＦＣスイッチを介したＳＡＮであってもよい。
【００１４】
ストレージ装置１３は、制御装置１３２及びハードディスクドライブ等のディスク装置１３３を有するストレージサブシステムである。また、ストレージ装置１３は、少なくとも１つの論理ボリューム１３１を有する。論理ボリューム１３１は、ストレージ装置１３が有する物理的な記憶領域から構成されている論理的な記憶領域である。論理ボリューム１３１は、ホストプロセッサ１２などストレージ装置１３に対して入出力を行う装置には、論理的に独立した１つのストレージ装置として認識される。
【００１５】
制御装置１３２はＣＰＵ１３４、メモリ１３５、ＳＡＮ  Ｉ／Ｆ１７２を内蔵している。メモリ１３５はＩＯ処理プログラム２１１とペア制御プログラム２１２、初期化プログラム２１３、コピープログラム２１４、差分ビットマップ（ＢＭ）制御プログラム２１５を格納しており、それぞれをＣＰＵ１３４が処理する。さらにメモリ１３５はペア管理テーブル２５、少なくとも１個の差分ビットマップ（ＢＭ）２７を含む。差分ビットマップ２７は論理ボリューム１３１の差分、すなわち、ある時点からホストプロセッサ１２が書き込みを行ったブロック（群）の位置を記録するビットマップであり、差分を記録したいボリュームごとに備える。差分ビットマップ２７の構造は後に詳しく説明する。
差分ビットマップ制御プログラム２１５は論理ボリューム１３１上のアドレスに対応する差分ビットマップ２７上のビットの値を検査またはセットまたはクリアするためのプログラムである。差分ビットマップ制御プログラム２１５は後に詳しく説明する。
【００１６】
ところで、第１の実施の形態例のストレージ装置１３は論理ボリューム１３１ａと論理ボリューム１３１ｂとを有している。ペア制御プログラム２１２は、論理ボリューム１３１ａと論理ボリューム１３１ｂを内容を一致させるためのペアとして定義することと、その定義の抹消、ペアの分離、再同期化を行うためのプログラムである。これらの処理内容、および初期化プログラム２１３、コピープログラム２１４の処理内容は、ペア管理テーブル２５の説明とあわせて後で説明する。
【００１７】
ＩＯ処理プログラム２１１は、ホストプロセッサ１２が発行した読み書きの要求を処理するためのプログラムである。ＩＯ処理プログラム２１１の処理は、後に図９を用いて説明する。
ＳＡＮ  Ｉ／Ｆ１７２はＳＡＮリンク１７を介して、ホストプロセッサ１２がデータを入出力するためのアダプタである。
また、上述した構成のほかに、このシステムは管理端末１５を備えていて、管理端末１５はＳＡＮリンク１７を介してストレージ装置１３に対してペア定義、ペア定義抹消、ペア分離、ペア再同期化の要求をすることができるように構成されている。なお、管理端末１５とストレージ装置１３との接続は、ＬＡＮ（ローカルエリアネットワーク）またはシリアルケーブルなど、互いに通信を可能にできれば他の方法でも良い。さらに、管理端末１５はホストプロセッサ１２と同じ計算機とし、管理端末１５の機能をホストプロセッサ１２が内部に格納したソフトウエアで実現しても良い。
また、上述した構成のほかに、このシステムは他のストレージ装置１４を備えていて、ペアの状態となるストレージ装置１３のディスク装置１３３に設けられる論理ボリューム１３１から他のストレージ装置１４のディスク装置１４１に設けられる論理ボリューム１４２に対するリモートコピーを図示しない回線を介してすることができるように構成されている。
【００１８】
図２は第１の実施の形態例において、ストレージ装置１３内に設けられるペア管理テーブル２５の内容を示す構成図である。
ペア管理テーブル２５は複数のエントリ２５０からなり、それぞれのエントリ２５０は１組の論理ボリューム１３１のペアに対応する。エントリ２５０は正ボリューム識別子２５１、副ボリューム識別子２５２、ペア状態２５３、正ＢＭアドレス２５４、副ＢＭアドレス２５５を含む。正ボリューム識別子２５１および副ボリューム識別子２５２は論理ボリューム１３１を特定するための識別子であり、正ボリューム識別子２５１はペアの正側の論理ボリューム１３１ａ、副ボリューム識別子２５２はペアの副側の論理ボリューム１３１ｂに対応する。正副論理ボリューム１３１に対するＣＰＵ１３４の処理内容は後に示すペア状態２５３によって変わる。正ＢＭアドレス２５４、副ＢＭアドレス２５５はともに差分ビットマップ２７を指すアドレスである。
【００１９】
ペア状態２５３は、少なくとも同期、分離の２状態のいずれかを表す。ペア状態２５３が同期の場合は、正側の論理ボリューム１３１ａに対するホストプロセッサ１２からの書き込みが、論理ボリューム１３１ｂに対しても反映されることを意味する。また、ペア状態２５３が分離の場合は、正側の論理ボリューム１３１ａに対するホストプロセッサ１２からの書き込みは、論理ボリューム１３１ｂに対する差分として、更新されたブロック（群）の位置を、正ＢＭアドレス２５４が指す差分ビットマップ２７が記憶することを意味している。ホストプロセッサ１２から論理ボリューム１３１ｂに対する書き込みも同様に副ＢＭアドレス２５５が指す差分ビットマップ２７が記憶する。なお、差分ビットマップ２７の更新は、実際にはＣＰＵ１３４が差分ビットマップ制御プログラム２１５を実行することにより行う。
【００２０】
図３は第１の実施の形態例において、ストレージ装置１３内に設けられる差分ビットマップ２７の内容を示す構成図である。
差分ビットマップ２７は制御情報２７０、Ｌ１テーブル２７１、Ｌ２テーブル２７２を含む。制御情報２７０には粒度３０１、Ｌ２サイズ３０２、Ｌ１サイズ３０３を含む。
Ｌ２テーブル２７２は複数のＬ２エントリ３２０からなる。Ｌ２エントリ３２０はＬ２サイズ３０２で示す個数のビット３２１からなる。ビット３２１の１個は、論理ボリューム１３１上の、粒度３０１で示す個数のブロックに対応する。Ｌ２エントリ３２０の１個に対応する論理ボリューム１３１上のブロック数は、粒度３０１の値にＬ２サイズ３０２の値を乗じた数である。
【００２１】
Ｌ１テーブル２７１は、Ｌ１サイズ３０３が示す個数のＬ１エントリ３１０からなる。Ｌ１エントリ３１０はＬ１テーブル２７１内の順に、論理ボリューム１３１のブロック（群）に対応する。なお、Ｌ１エントリ３１０の１個が対応する論理ボリューム１３１上のブロック数はＬ２エントリ３２０の１個が対応するブロック数と同数である。
Ｌ１エントリ３１０は対応するＬ２エントリのアドレス３１１とアドレス３１１が有効か無効かを示すＬ２有効ビット３１２、代表ビット３１３を含む。
【００２２】
ビット３２１の値が、全て代表ビット３１３の値と同じ場合は、Ｌ２有効ビット３１２を無効（０）にクリアして、Ｌ２アドレスが指すＬ２エントリを解放することができる。逆に言えば、Ｌ２有効ビット３１２を無効にする場合、対応するビット３２１の値は代表ビット３１３の値と同じとみなすようにしている。
【００２３】
このように、差分ビットマップ２７をＬ１エントリ３１０とＬ２エントリ３２０の２階層にすることで、Ｌ２エントリ３２０に対応するビット３２１が全て同じ値であるときにメモリ容量を削減することができる。また、Ｌ１エントリ３１０に代表ビット３１３を持つことで、差分ビット中で連続するビット列として０の列と１の列が混在しても、Ｌ２エントリ３２０の割り当てを回避することができ、メモリ容量を削減できる機会が増える。
【００２４】
次に図４から図７を用いて、ストレージ装置１３内に設けられるビットマップ２７を操作する際のＣＰＵ１３４の処理を説明する。
図４は第１の実施の形態例において、ストレージ装置１３内に設けられる差分ビットマップ制御プログラム２１５の処理を示すフローチャートである。
差分ビットマップ制御プログラム２１５においてＣＰＵ１３４は、操作の対象となる論理ボリューム１３１上のブロックに対応するビットの値を検査する（ステップＳ１〜ステップＳ５）。各ステップにおいてＣＰＵ１３４は、まず操作の対象となる論理ボリューム１３１上のブロックに対応するＬ１エントリ３１０を読み出す（ステップＳ１）。
【００２５】
具体的には、操作の対象となる論理ボリューム１３１上のブロックアドレスをＬ１エントリ３１０の１個が対応するブロック数で除し、その商をインデクスとしてＬ１テーブル２７１を参照してＬ１エントリ３１０を特定する。次にＣＰＵ１３４は、ステップＳ１で読み出したＬ１エントリ３１０中のＬ２有効ビット３１２を検査し、有効なら（判断ステップＳ２のＹ分岐）Ｌ２エントリのアドレス３１１が指すＬ２エントリ３２０を読み出し（ステップＳ３）、操作の対象となる論理ボリューム１３１上のブロックアドレスに対応するビット３２１の値を読み出す（ステップＳ４）。一方ステップＳ２でＬ２有効ビット３１２が無効なら（判断ステップＳ２のＮ分岐）ＣＰＵ１３４は代表ビット３１３の値を読み出し（ステップＳ５）、ステップＳ４で読み出したビット３２１又はステップＳ５で読み出した代表ビット３１３の値を差分ビットの値とする。
【００２６】
さらにＣＰＵ１３４は、差分ビットマップ制御プログラム２１５がどの制御を行うかの要求種別に従って分岐する（ステップＳ１１）。要求種別が検査の場合、ＣＰＵ１３４は何も処理せず、ステップＳ１〜ステップＳ５で検査した差分ビットの値を呼び出し元に返し、処理を終了する。
【００２７】
要求種別がセットまたはクリアの場合、ＣＰＵ１３４は、ブロックに対応するビットの値を設定する。すなわちＣＰＵ１３４は、要求種別がセットの場合は１を（ステップＳ１２）、要求種別がクリアの場合は０を設定する（ステップＳ１３）。さらに、ＣＰＵ１３４は、ステップＳ１２、ステップＳ１３で設定した値と、ステップＳ１〜ステップＳ５で検査した差分ビットの値とを比較し、一致していた場合（判断ステップＳ１４のＹ分岐）は設定しようとしている値とビット３２１の現在値とが等しい場合であるため、特に処理が必要ないのでそのまま終了する。
【００２８】
ステップＳ１４で一致しない場合は、ビット３２１の値を更新する必要があるので、ＣＰＵ１３４は、ステップＳ２で検査したＬ２有効ビット３１２を検査し、有効なら（判断ステップＳ１５のＹ分岐）、ステップＳ３０〜ステップＳ３４を実行して、ビット３２１の更新と、Ｌ２エントリ３２０の解放試行を行う。
【００２９】
すなわちＣＰＵ１３４は、ステップＳ４で読み出したビット３２１に、ステップＳ１２、ステップＳ１３で設定した値を設定する（ステップＳ３０）。さらに、ＣＰＵ１３４はＬ２エントリ３２０に含まれる全てのビット３２１が一致するか検査し、一致する場合（ステップＳ３１）は対応する代表ビット３１３をビット３２１の値に設定し（ステップＳ３２）、対応するＬ２有効ビット３１２をクリアし（ステップＳ３３）、Ｌ２エントリ３２０を解放する（ステップＳ３４）。Ｌ２有効ビット３１２を検査し、無効なら（判断ステップＳ１５のＮ分岐）未使用のＬ２エントリ３２０を、ステップＳ１で読み出したＬ１エントリ３１０に対して割当てる（ステップＳ２０）。
【００３０】
具体的には、Ｌ２テーブル２７２から未使用のＬ２エントリを検出して、そのアドレスをＬ２エントリのアドレス３１１に格納する。なお、Ｌ２エントリ３２０の使用・未使用の管理は、差分ビットマップ２７上に空きＬ２エントリキューのアドレスリストを用意して管理しても良いし、Ｌ２エントリ間をポインタでつないでポインタをたどることで空きＬ２エントリを管理するなど任意の方法でよい。さらに、ＣＰＵ１３４は、割当てたＬ２エントリ３２０の内容を設定する。まず、ＣＰＵ１３４はＬ２エントリ３２０を対応する代表ビット３１３の値で連続して塗りつぶし（ステップＳ２１）、操作の対象となる論理ボリューム１３１上のブロックアドレスに対応するビット３２１の値に、ステップＳ１２、ステップＳ１３で設定した値を設定する（ステップＳ２２）。そして、対応するＬ２有効ビット３１２をセットする（ステップＳ２３）。
【００３１】
ＣＰＵ１３４は、ステップＳ１〜ステップＳ５に示した方法によって、差分ビットマップ２７からのＬ２エントリ３２０のビット３２１又はＬ１エントリ３１０の代表ビット３１３により差分ビットの値の読み取りが可能となり、ステップＳ２０〜ステップＳ２３に示した方法により、Ｌ２エントリ３２０が割当てられていない領域に対するビット３２１の値の設定が可能となる。さらに、ステップＳ３０〜ステップＳ３４に示した方法により、ＣＰＵ１３４はビット３２１を設定した後、Ｌ２エントリ３２０の全ビット３２１が一致することにより集約可能になった場合、Ｌ２エントリ３２０の解放を可能とする。以上述べた方法により、ＣＰＵ１３４は差分ビットマップ２７に対する読み書きを正常に行うことができる。すなわち、差分ビットマップ２７はＬ１エントリ３１０およびＬ２エントリ３２０との２階層の構成をとり、さらにＬ２エントリ３２０を論理ボリュームのすべてに対して用意する必要がなく、その一部で足りる構成をとることができ、メモリ容量を削減することができる。
【００３２】
次に、図５を用いて本発明の第２の実施の形態例について説明する。
図５は第２の実施の形態例において、ストレージ装置１３内に設けられる差分ビットマップ制御プログラム２１５の処理内容を示すフローチャートである。
図５は図４と異なり、判断ステップＳ１５のＮ分岐とステップＳ２０の間に、ステップＳ４１〜ステップＳ４５を設けている。
ステップＳ４１でＣＰＵ１３４は、未使用のＬ２エントリ３２０に空きがないか否かを検査する。空きがある場合はステップＳ２０に戻り、以降図４の処理と共通である。当該Ｌ２エントリに空きがない場合（判断ステップＳ４１のＮ分岐）、ＣＰＵ１３４は他の適当な空きＬ２エントリ３２０を選択して、その中のビット３２１が全て１（差分が蓄積されている状態）に連続して同じ値に塗りつぶす。これにより、他の空きＬ２エントリ３２０を開放してステップＳ２０のＬ２エントリ３２０の割当に利用する。
【００３３】
すなわちＣＰＵ１３４は、他の適当なＬ２エントリ３２０を選択して（ステップＳ４２）、対応する代表ビット３１３に１を設定する（ステップＳ４３）。続いて、対応するＬ２有効ビット３１２を無効に設定し（ステップＳ４４）、他のＬ２エントリ３２０を解放して（ステップＳ４５）、ステップＳ２０に戻る。以後の処理は図４の処理と共通である。ステップＳ４２で選択される他のＬ２エントリ３２０は、ステップＳ４１で検査される当該Ｌ２エントリ３２０とは異なる他のＬ２エントリ３２０である。
【００３４】
ステップＳ４３の処理は、他のＬ２エントリ３２０のビット３２１を１で連続して同じ値に塗りつぶすことに相当するが、これは対応する論理ボリューム１３１に（本来書き込んでいない）差分が蓄積されたことを意味し、これにより余分なコピー処理が必要になる可能性がある。しかし、それと引き換えに、Ｌ２エントリ３２０の枯渇を防止することができる。つまり、当該Ｌ２エントリ３２０が枯渇した場合でも、直前のステップＳ４５により他のＬ２エントリを解放しているのでステップＳ２０では、ＣＰＵ１３４はＬ２エントリ３２０を必ず割当てることができる。
【００３５】
次に、図６から図８を用いて、本発明の第３の実施の形態例について説明する。
図６は第３の実施の形態例のストレージ装置１３の全体構成を示す図である。
図６は図１と異なり、このストレージ装置１３は、メモリ１３５内にキャッシュセグメント４９とキャッシュディレクトリ４０を含む。また、メモリ１３５内に差分ビットマップ２７（図１参照。）を持たない。図１に示す差分ビットマップ２７の内容は、キャッシュディレクトリ４０内に格納されている。キャッシュセグメント４９は論理ボリューム１３１上のデータを、ホストプロセッサ１２からの読み書きに備えて保持しておくためのバッファであり、セグメントと呼ぶ小領域の集合である。それぞれのセグメントは独立に、論理ボリューム１３１上のデータを保持する。キャッシュディレクトリ４０はキャッシュセグメント４９を制御するための構造体である。ＩＯ処理プログラム２１１は、このキャッシュディレクトリを検索して、ホストプロセッサ１２が要求した入出力先のデータが、キャッシュセグメントにあるか否かを判別する処理を含む。キャッシュディレクトリ４０の構成は次に詳しく説明する。
【００３６】
エラー! 参照元が見つかりません。図７は、ストレージ装置１３内に設けられるキャッシュディレクトリ４０の構成図である。
キャッシュディレクトリ４０は、Ｌ１ディレクトリ４１、Ｌ２ディレクトリ４２、Ｌ３ディレクトリ４３、セグメント管理ブロック４４の４階層からなる。
Ｌ１ディレクトリ４１は、有効ビット４１１とポインタ４１２との組が、複数並んだ構造をなしている。ポインタ４１２はＬ２ディレクトリ４２のアドレスを格納しており、有効ビット４１１はポインタ４１２が有効か無効かを示している。
【００３７】
Ｌ２ディレクトリ４２は、ポインタ４２２、有効ビット４２１、Ｌ２有効ビット３１２、代表ビット３１３の組が、複数並んだ構造をなしている。ポインタ４２２はＬ３ディレクトリ４３のアドレスを示している。有効ビット４１２およびＬ２有効ビット３１２の機能は後述する。
Ｌ３ディレクトリ４３は、ビット３２１の列と、有効ビット４３１、ポインタ４３２の組が、複数並んだ構造をなしている。
【００３８】
有効ビット４２１はポインタ４２２が指すＬ３ディレクトリ４３の、有効ビットおよび有効ビットが１のときはポインタ４３２もともに有効であることを示す。Ｌ２有効ビット３１２はビット３２１の列が有効であることを示す。
ここで、ポインタ４２２は、有効ビット４２１あるいはＬ２有効ビット３１２のいずれかが１のとき有効である。
【００３９】
また、ポインタ４３２はセグメント管理ブロック４４のアドレスを格納しており、有効ビット４３１はポインタ４３２が有効か無効かを示している。
セグメント管理ブロック４４は、制御フラグ４４１およびポインタ４４２を含む。ポインタ４４２はキャッシュセグメント４９のアドレスを格納し、制御フラグ４４１はポインタ４４２が有効か無効かを示すビット、およびキャッシュセグメント４９の状態、少なくともデータが格納されているか否かを含む。
【００４０】
本発明の第３の実施の形態例では、ビット３２１の検査を行うと、それと同時に、Ｌ３ディレクトリ４３の参照まで可能になる。ところで、例えばビット３２１が副ボリューム１３１ｂから転送すべきデータの存在を示している場合には、差分ビット３２１の参照とディレクトリ４０の参照を同時に行う必要がある。本発明の第３の実施例では、このような場合にメモリアクセスの回数を削減できるため、ＩＯ処理の高速化に寄与する。
【００４１】
図８は第３の実施の形態例において、ストレージ装置１３内に設けられる差分ビットマップ制御プログラム２１５の処理の内容を示すフローチャートである。
図８は図５と異なり、ステップＳ２０の代わりに、ステップＳ５０、ステップＳ５１を、ステップＳ３４の代わりに、ステップＳ５２、ステップＳ５３を、ステップＳ４１、ステップＳ４２の代わりに、ステップＳ５４、ステップＳ５５を、ステップＳ４５の代わりに、ステップＳ５６、ステップＳ５７を設けている。
【００４２】
ステップＳ５０では、ＣＰＵ１３４はＬ３ディレクトリが存在しないかを確認し、存在しない場合（判断ステップＳ５０のＹ分岐）のみ、Ｌ３ディレクトリの割当を行う（ステップＳ５１）。これは、Ｌ３ディレクトリ自体は、先に接続されるセグメント管理ブロック４４のために既に割り当てられている可能性があり、その場合には割当が不要であるためである。
ステップＳ５２では、ＣＰＵ１３４は有効ビット４２１が無効かどうかを検査し、無効であるときのみ（判断ステップＳ５２のＹ分岐）、Ｌ３ディレクトリ４３を解放する（ステップＳ５３）。
【００４３】
ステップＳ５４では、ＣＰＵ１３４はＬ３ディレクトリに空きがあるかどうかを検査し、空きがない場合（判断ステップＳ５４のＹ分岐）、Ｌ３ディレクトリ４３を解放する（ステップＳ５５）。破棄可能なＬ３ディレクトリ４３とは、対応するセグメント４９が存在しないＬ３ディレクトリ４３か、存在しても破棄可能なデータ（ディスク装置１３３上に同じデータが存在する、いわゆるクリーンデータ）を格納しているセグメント４９にのみ対応づいているＬ３ディレクトリ４３である。
ステップＳ５６では、ＣＰＵ１３４は有効ビット４２１をクリアし、さらにＬ３ディレクトリ４３を解放する（ステップＳ５７）。その他の処理は本発明の第２の実施の形態例と共通である。
【００４４】
次に、図４、図５及び図８に示した差分ビットマップ制御プログラム２１５の呼び出し元となる図９〜図１１のフローチャートについて説明する。図９〜図１１のフローチャートは、差分ビットマップ２７の内容に書替えの必要が生じる契機となる処理を含むものである。
図９は、ＩＯ処理プログラム２１１の処理を示すフローチャートである。
図９は、ホストプロセッサ１２からストレージ装置１３に対してデータのライトやリードなどのＩＯ要求があったとき、ストレージ装置１３のＩＯ処理プログラム２１１が実行する処理を示すものである。
【００４５】
図９において、ＩＯ処理対象のビットが含まれるボリュームが他のボリュームとペア定義済みかつ処理するＩＯがライトであるか否かを判断する（ステップＳ６０）。具体的には、ＩＯ処理プログラム２１１は図２に示したペア管理テーブル２５のＩＯ処理対象のビットが含まれるボリューム上のブロックに対応するエントリ２５０をチェックすることによりペア定義の判断をし、コマンドによりＩＯのライトの判断をする。
判断ステップＳ６０でペア定義済みかつ処理するＩＯがライトであるときは、ペア状態が分離か又は同期であるか否かを判断する（ステップＳ６１）。具体的には、ＩＯ処理プログラム２１１は図２に示したペア管理テーブル２５のペア状態２５３からＩＯ処理対象のビットが含まれるボリュームが同期、分離のいずれかの状態であるかを判断する。
【００４６】
ここで、分離の状態では、以下の差分ビットマップ制御プログラム２１５の呼び出しの処理が実行される。
判断ステップＳ６１でペア状態が分離のときは、差分ビットマップ制御プログラム２１５を呼び出し、要求種別をセットとしてビットマップのＩＯに対応するビットに１をセットする（ステップＳ６２）。具体的には、ペア状態２５３が分離の場合は、正側のＩＯ処理対象のビットが含まれるボリュームに対するホストプロセッサ１２からの書き込みは、副側の論理ボリュームに対する差分として、更新されたブロック（群）の位置を、正ＢＭアドレス２５４が指す差分ビットマップ２７に記憶するため、ＩＯ処理プログラム２１１は要求種別をセットとして差分ビットマップ制御プログラム２１５を呼び出し、差分ビットマップ制御プログラム２１５はビットマップのＩＯに対応するビットに１をセットする処理をする。
そして、ＩＯ処理プログラム２１１はコマンドによりＩＯのライトの処理をする（ステップＳ６３）。
【００４７】
また、判断ステップＳ６１でペア状態が同期のときは、ＩＯ処理プログラム２１１はＩＯ処理をした後に（ステップＳ６４）、コピープログラム２１４を呼び出し、コピーを実行する（ステップＳ６５）。具体的には、ペア状態２５３が同期の場合は、正側のＩＯ処理対象のビットが含まれるボリュームに対するホストプロセッサ１２からの書き込みが、副側の論理ボリュームに対して反映される。
また、判断ステップＳ６０でペア定義済みかつ処理するＩＯがライトでないときは、ＩＯ処理プログラム２１１はＩＯ処理のみをする（ステップＳ６６）。
【００４８】
図１０は、ペア制御プログラム２１２の処理を示すフローチャートである。
図１０は、管理端末１５からストレージ装置１３に対してペア定義、ペア定義抹消、ペア分離、ペア再同期化のペア制御要求があったとき、ストレージ装置１３のペア制御プログラム２１２が実行する処理を示すものである。
図１０において、まず、制御対象のボリューム上のブロックに対する要求種別がペア定義であるか否かを判断する（ステップＳ８０）。具体的には、ペア制御プログラム２１２は管理端末１５からのペア制御要求のコマンドによりペア定義の判断をする。判断ステップＳ８０で要求種別がペア定義であるときは、初期化プログラムの呼び出しを実行する（ステップＳ８１）。具体的には、ペア制御プログラム２１２は初期化プログラム２１３により正側のボリュームに対応する正側ビットマップと副側のボリュームに対応する副側ビットマップとの間に差分がない状態であって、正側のボリュームと副側のボリュームとがペア状態である初期化状態にする。初期化プログラム２１３は後述する図１１で説明する。
【００４９】
判断ステップＳ８０で要求種別がペア定義でないときは、制御対象のボリューム上のブロックに対する要求種別がペア定義抹消であるか否かを判断する（ステップＳ８２）。具体的には、ペア制御プログラム２１２は管理端末１５からのペア制御要求のコマンドによりペア定義抹消の判断をする。判断ステップＳ８２で要求種別がペア定義抹消であるときは、ペア管理テーブルのエントリのクリアを実行する（ステップＳ８３）。具体的には、ペア制御プログラム２１２は図２に示したペア管理テーブル２５の制御対象のボリューム上のブロックに対応するエントリ２５０を消去する。
さらに、正副ビットマップに割り当てられていたメモリ領域を開放する（ステップＳ８４）。具体的には、ペア制御プログラム２１２は正側及び副側で割り当てられていた図３に示した差分ビットマップ２７のメモリ領域を開放する。
【００５０】
判断ステップＳ８２で要求種別がペア定義抹消でないときは、制御対象のボリューム上のブロックに対する要求種別がペア分離であるか否かを判断する（ステップＳ８５）。具体的には、ペア制御プログラム２１２は管理端末１５からのペア制御要求のコマンドによりペア分離の判断をする。
判断ステップＳ８５で要求種別がペア分離であるときは、ペア管理テーブルのエントリの更新を実行する（ステップＳ８６）。具体的には、ペア制御プログラム２１２は図２に示したペア管理テーブル２５の制御対象のボリューム上のブロックに対応するエントリ２５０のペア状態２５３を分離の状態にする。
【００５１】
判断ステップＳ８５で要求種別がペア分離でないときは、制御対象のボリューム上のブロックに対する要求種別がペア再同期化であるか否かを判断する（ステップＳ８７）。具体的には、ペア制御プログラム２１２は管理端末１５からのペア制御要求のコマンドによりペア再同期化の判断をする。
判断ステップＳ８７で要求種別がペア再同期化であるときは、ペア管理テーブルのエントリの更新を実行する（ステップＳ８８）。具体的には、ペア制御プログラム２１２は図２に示したペア管理テーブル２５の制御対象のボリューム上のブロックに対応するエントリ２５０のペア状態２５３を再同期の状態にする。
【００５２】
ここで、再同期の状態では、以下の差分ビットマップ制御プログラム２１５の呼び出しの処理が実行される。
まず、正ビットマップに対して要求種別を検査として、差分ビットマップ制御プログラム２１５の呼び出しを実行する（ステップＳ８９）。具体的には、ペア制御プログラム２１２は差分ビットマップ制御プログラム２１５を呼び出し、差分ビットマップ制御プログラム２１５は制御対象のボリューム上のブロックに対応して、再同期によりペア状態となる正側のボリュームに対応する正側ビットマップに対する検査を行う。
次に、副ビットマップに対して要求種別を検査として、差分ビットマップ制御プログラム２１５の呼び出しを実行する（ステップＳ９０）。具体的には、ペア制御プログラム２１２は差分ビットマップ制御プログラム２１５を呼び出し、差分ビットマップ制御プログラム２１５は制御対象のボリューム上のブロックに対応して、再同期によりペア状態となる副側のボリュームに対応する副側ビットマップに対する検査を行う。
【００５３】
正側ビットマップ又は副側ビットマップのいずれかが１となっているか否かを判断する（ステップＳ９１）。具体的には、ペア制御プログラム２１２は検査の結果により正側ビットマップ又は副側ビットマップのいずれかのビットが１であるブロックを検出する。
判断ステップＳ９１で正側ビットマップ又は副側ビットマップのいずれかが１であるときは、コピープログラム２１４を呼び出し、コピーを実行する（ステップＳ９２）。具体的には、ペア制御プログラム２１２はコピープログラム２１４を呼び出し、コピープログラム２１４は検査の結果により正側ビットマップ又は副側ビットマップのいずれかのビットが１であるブロックについて、正側のボリュームから副側のボリュームへのコピーを実行する。この場合、副側のボリュームから正側のボリュームへのリストアは実行しない。
【００５４】
そして、正側ビットマップ及び副側ビットマップに対して要求種別をクリアとして、差分ビットマップ制御プログラム２１５の呼び出しを実行する（ステップＳ９３）。具体的には、ペア制御プログラム２１２は差分ビットマップ制御プログラム２１５を呼び出し、コピーにより正側ビットマップ及び副側ビットマップの差分が解消されたので、正側ビットマップ又は副側ビットマップのビットが１であるブロックについて、ビットを０にする。
制御対象のボリューム上の全てのブロックについてステップＳ８９〜ステップＳ９３までの処理及び判断を繰り返す（ステップＳ９４）。なお、判断ステップＳ９１で正側ビットマップ又は副側ビットマップのいずれかが１でないときは、ステップＳ９４で未処理の他のブロックについて判断される。
【００５５】
図１１は、初期化プログラム２１３の処理を示すフローチャートである。
図１１は、管理端末１５からストレージ装置１３に対してペア定義のペア制御要求があったとき、ストレージ装置１３の初期化プログラム２１３が実行する正側のボリュームに対応する正側ビットマップと副側のボリュームに対応する副側ビットマップとの間に差分がない状態であって、正側のボリュームと副側のボリュームとがペア状態である初期化状態にする処理を示すものである。
まず、ペア状態を分離に設定する（ステップＳ１１０）。具体的には、初期化プログラム２１３は図２に示したペア管理テーブル２５の制御対象のボリューム上のブロックに対応するエントリ２５０のペア状態２５３を分離の状態にする。
【００５６】
ここで、分離の状態では、以下の差分ビットマップ制御プログラム２１５の呼び出しの処理が実行される。
副側ビットマップに対して要求種別をクリアとして、差分ビットマップ制御プログラム２１５の呼び出しを実行する（ステップＳ１１１）。具体的には、初期化プログラム２１３は差分ビットマップ制御プログラム２１５を呼び出し、正側ビットマップ及び副側ビットマップの差分を解消するために、副側ビットマップのビットが１であるブロックについて、ビットを０にする。
【００５７】
そして、正側ビットマップに対して要求種別をセットとして、差分ビットマップ制御プログラム２１５を呼び出しを実行する（ステップＳ１１２）。具体的には、初期化プログラム２１３は差分ビットマップ制御プログラム２１５を呼び出し、初期化中にもＩＯ処理があっても正側ビットマップに差分を蓄えるために、正側ビットマップのビットが０であるブロックについて、ビットを１にする。
制御対象のボリューム上の全てのブロックについてステップＳ１１１〜ステップＳ１１２の処理を繰り返す（ステップＳ１１３）。
【００５８】
判断ステップＳ１１３で全てのブロックについて終了したときは、コピープログラム２１４を呼び出し、コピーを実行する（ステップＳ９２）。具体的には、初期化プログラム２１３はコピープログラム２１４を呼び出し、コピープログラム２１４はセットの結果により正側ビットマップのビットが１であるブロックについて、正側のボリュームから副側のボリュームへのコピーを実行する。この場合、副側のボリュームから正側のボリュームへのリストアは実行しない。
【００５９】
そして、正側ビットマップ及び副側ビットマップに対して要求種別をクリアとして、差分ビットマップ制御プログラム２１５の呼び出しを実行する（ステップＳ１１５）。具体的には、初期化プログラム２１３は差分ビットマップ制御プログラム２１５を呼び出し、コピーにより正側ビットマップ及び副側ビットマップの差分が解消されたので、正側ビットマップ又は副側ビットマップのビットが１であるブロックについて、ビットを０にする。
【００６０】
制御対象のボリューム上の全てのブロックについてステップＳ１１４〜ステップＳ１１５までの処理を繰り返す（ステップＳ１１６）。
その後、ペア状態を同期に設定する（ステップＳ１１７）。具体的には、初期化プログラム２１３は図２に示したペア管理テーブル２５の制御対象のボリューム上のブロックに対応するエントリ２５０のペア状態２５３を同期の状態にする。
【００６１】
上述した本発明の実施の形態に限らず、本発明の特許請求の範囲内であれば、適宜、構成を変更しうることはいうまでもない。
【図面の簡単な説明】
【００６２】
【図１】本発明によるストレージ装置の全体構成を示す図である。
【図２】ペア管理テーブルの内容を示す構成図である。
【図３】差分ビットマップの内容を構成図である。
【図４】差分ビットマップ制御プログラムの処理を示すフローチャートである。
【図５】他の差分ビットマップ制御プログラムの処理を示すフローチャートである。
【図６】他のストレージ装置の全体構成を示す図である。
【図７】キャッシュディレクトリの構成図である。
【図８】他の差分ビットマップ制御プログラムの処理を示すフローチャートである。
【図９】ＩＯ処理プログラムの処理を示すフローチャートである。
【図１０】ペア制御プログラムの処理を示すフローチャートである。
【図１１】初期化プログラムの処理を示すフローチャートである。
【符号の説明】
【００６３】
１２…ホストプロセッサ、１３…ストレージ装置、１３１…論理ボリューム、１３４…ＣＰＵ、２１５…差分ビットマップ制御プログラム、２７…差分ビットマップ、３１０…１段目のエントリ、３１１…２段目のエントリへのポインタ、３１３…代表ビット、３２０…２段目のエントリ、３２１…ビット
【図１】
2006331100.tif 000003
【図２】
2006331100.tif 000004
【図３】
2006331100.tif 000005
【図４】
2006331100.tif 000006
【図５】
2006331100.tif 000007
【図６】
2006331100.tif 000008
【図７】
2006331100.tif 000009
【図８】
2006331100.tif 000010
【図９】
2006331100.tif 000011
【図１０】
2006331100.tif 000012
【図１１】
2006331100.tif 000013