(57)【特許請求の範囲】
【請求項１】
一のマスタマシンと、該マスタマシンにネットワークを介して接続される複数のスレーブマシンとを有するクラスタリングシステムにおいて、
前記マスタマシンは、
前記各スレーブマシンの通信アドレス、および、ジョブの実行状態を示すステータスを記憶するスレーブ管理手段と、
予め定められたジョブを実行するためのジョブプログラムを一以上記憶するプログラム記憶手段と、
前記ジョブプログラムを前記スレーブマシンのいずれかへ送信するプログラム送信手段と、
実行待ちのジョブを、前記スレーブ管理手段により管理されているスレーブマシンのうち、前記登録されているステータスがジョブを割り当てて実行させることが可能な待機状態にあり、かつ、ジョブの実行に要した所要時間の平均値を指標として、処理能力の高いスレーブマシンから優先して割り当てるジョブ割当処理手段と、
前記ジョブがアクセスするデータを格納するファイルを記憶するためのデータ記憶手段と、
前記スレーブマシンから前記データ記憶手段に格納されているファイルに対するジョブＩＤとファイル名を含むオープン通知を受けるとオープン通知において指定されたファイル名に該当するファイルをオープンし、オープンされたファイルについて前記スレーブマシンから要求されたリードまたはライトを行い、ジョブＩＤとファイル名とを含むクローズ通知を受けるとクローズ通知において指定されたファイル名に該当するファイルをクローズし、その結果を返信する入出力処理手段と、を備え、
前記各スレーブマシンは、
前記ジョブプログラムを受信する手段と、
受信したジョブプログラムにより実行されるジョブのデータ入出力要求を処理する入出力処理手段と、を備え、
前記各スレーブマシンの入出力処理手段は、実行中のジョブのデータ入出力要求を検出すると、前記マスタマシンにジョブＩＤとファイル名とを含むファイルオープンを通知し、ジョブからリードまたはライトの要求を受けると、リードまたはライトの要求を前記マスタマシンに通知し、かつ、ジョブからファイルクローズ要求を受けると、マスタマシンにジョブＩＤとファイル名とを含むファイルクローズを通知すること、を特徴とするクラスタリングシステム。
【請求項２】
請求項１に記載のクラスタリングシステムにおいて、
前記ジョブ割当処理手段は、前記ジョブを割り当てるスレーブマシンに、実行しようとしているジョブの実行プログラムがすでに配布されているかをチェックし、未配布であるとき、その実行プログラムを当該スレーブマシンに送信すること、を特徴とするクラスタリングシステム。
【請求項３】
請求項２に記載のクラスタリングシステムにおいて、
前記ジョブ割当処理手段は、前記スレーブマシンに記憶されている実行プログラムのファイル名およびタイムスタンプを用いて、配布する実行プログラムが同一のプログラムであるかを確認することにより、実行プログラムがすでに配布されているかをチェックすること、を特徴とするクラスタリングシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、比較的安価なコンピュータを組み合わせて高速処理を実現するクラスタリングシステムに関し、特に利用者および管理者の双方にとっての使い勝手を向上させたクラスタリングシステムに関する。
【０００２】
【従来の技術】
複数台のコンピュータ、特にパーソナルコンピュータのように比較的安価なコンピュータを用いて、全体として極めて高価なスーパーコンピュータ並みの処理速度を実現するクラスタリングシステムが知られている。従来のクラスタリングシステムは、以下のような特徴を有する。
・管理者等が、クラスタを構成する全コンピュータを事前に登録する。
・管理者等が、登録されているコンピュータに対して、実行プログラムを事前にインストールする。
・各コンピュータ上で実行プログラムを起動し、実行する。
・クラスタリングシステムが、プログラム間通信を行うためのライブラリを提供する。利用者は、予めこのライブラリを用いて通信を行うためのプログラミングを自らして、各実行プログラムは必要とする入力データの配布、および各プログラムが出力したデータの収集を行う。
【０００３】
【発明が解決しようとする課題】
しかしながら、従来のクラスタリングシステムでは、以下のような問題点がある。すなわち、上述のように管理者等がクラスタリングシステムを構成する全コンピュータを設定ファイル等に、事前に登録する必要があり、その設定ファイルの維持、管理が面倒である。また、管理者等は、実行プログラムを設定ファイルに登録されている全コンピュータに事前にインストールしなければならないので、手間がかかる上、作業ミスが発生しやすい。さらに、プログラム間通信を行うためのプログラミングを、利用者自らが行う必要があるため、プログラムの作成コストがかかる。
【０００４】
そこで、本発明の目的は、利用者のプログラミングの手間を軽減したクラスタリングシステムおよびそれを構成する各コンピュータを提供することである。
【０００５】
本発明の別の目的は、管理にかかる手間を軽減したクラスタリングシステムおよびそれを構成する各コンピュータを提供することである。
【０００６】
本発明のまた別の目的は、全体での処理性能を向上させるために、効率的に処理を分散することである。
【０００７】
【課題を解決するための手段】
本発明の一つの態様に従うクラスタリングシステムは、一のマスタマシンと、該マスタマシンにネットワークを介して接続される複数のスレーブマシンとを有するクラスタリングシステムにおいて、
前記マスタマシンは、
前記各スレーブマシンの通信アドレス、および、ジョブの実行状態を示すステータスを記憶するスレーブ管理手段と、
予め定められたジョブを実行するためのジョブプログラムを一以上記憶するプログラム記憶手段と、
前記ジョブプログラムを前記スレーブマシンのいずれかへ送信するプログラム送信手段と、
実行待ちのジョブを、前記スレーブ管理手段により管理されているスレーブマシンのうち、前記登録されているステータスがジョブを割り当てて実行させることが可能な待機状態にあり、かつ、ジョブの実行に要した所要時間の平均値を指標として、処理能力の高いスレーブマシンから優先して割り当てるジョブ割当処理手段と、
前記ジョブがアクセスするデータを格納するファイルを記憶するためのデータ記憶手段と、
前記スレーブマシンから前記データ記憶手段に格納されているファイルに対するジョブＩＤとファイル名を含むオープン通知を受けるとオープン通知において指定されたファイル名に該当するファイルをオープンし、オープンされたファイルについて前記スレーブマシンから要求されたリードまたはライトを行い、ジョブＩＤとファイル名とを含むクローズ通知を受けるとクローズ通知において指定されたファイル名に該当するファイルをクローズし、その結果を返信する入出力処理手段と、を備え、
前記各スレーブマシンは、
前記ジョブプログラムを受信する手段と、
受信したジョブプログラムにより実行されるジョブのデータ入出力要求を処理する入出力処理手段と、を備え、
前記各スレーブマシンの入出力処理手段は、実行中のジョブのデータ入出力要求を検出すると、前記マスタマシンにジョブＩＤとファイル名とを含むファイルオープンを通知し、ジョブからリードまたはライトの要求を受けると、リードまたはライトの要求を前記マスタマシンに通知し、かつ、ジョブからファイルクローズ要求を受けると、マスタマシンにジョブＩＤとファイル名とを含むファイルクローズを通知すること、を特徴とする。
【０００８】
【発明の実施の形態】
以下、本発明の実施形態について、図面を用いて説明する。
【０００９】
本発明を適用した一実施形態であるクラスタリングシステム１の全体構成を図１に示す。本システム１は、マスタマシン１０と複数台のスレーブマシン２０とを備え、互いにネットワーク９で接続されている。各スレーブマシン２０は、それぞれ、割り当てられた処理を実行する。マスタマシン１０は、スレーブマシン２０および本システムが実行するタスクを管理する。本実施形態のクラスタリングシステム１は、マスタマシン１０を一台だけ含んでいるが、二台以上のマスタマシン１０を含んでいてもよい。
【００１０】
マスタマシン１０およびスレーブマシン２０は、いずれも、例えば汎用的なコンピュータにより構成され、以下に説明する各マシン内の個々の構成要素または機能は、例えば、コンピュータのハードウェア上でコンピュータプログラムを実行することにより実現される。
【００１１】
マスタマシン１０は、通信処理部１１と、入出力処理部１２と、スレーブ管理部１３と、ジョブ登録処理部１４と、ジョブ割当処理部１５と、記憶部１７とを備える。記憶部１７は、後述するジョブの実行プログラムを記憶するためのプログラム領域１７ａと、ジョブで使用するデータを格納するためのデータ領域１７ｂとを備える。さらに、マスタマシン１０は、ＣＲＴや液晶ディスプレイ等の表示装置７と、キーボードやポインティングデバイス等の入力装置８と接続されている。
【００１２】
通信処理部１１は、ネットワーク９に接続されているスレーブマシン２０を自動検出し、検出したスレーブマシン２０の通信アドレスをスレーブ管理部１３に登録する。例えば、通信処理部１１は、ネットワーク上に存在するスレーブマシン２０およびそのステータスを確認するための問い合わせをブロードキャストし、これに応答したスレーブマシン２０からの返信を受信する。そして、この返信に含まれているスレーブマシン２０の通信アドレス、およびスレーブマシン２０のステータスをスレーブ管理部１３に登録する。通信処理部１１は、スレーブ管理部１３に登録されているスレーブマシン２０との間でデータ送受信等を行う。
【００１３】
また、通信処理部１１は、通信アドレス及びステータスについてのスレーブマシン２０からの自発的な通知を受け付けたときは、スレーブ管理部１３内の該当スレーブマシン２０に関する情報を更新する。
【００１４】
スレーブ管理部１３は、ネットワークに接続されているスレーブマシン２０を管理する。具体的には、スレーブ管理部１３は、図２に示すようなスレーブ管理テーブル４０を有する。スレーブ管理テーブル４０は、ネットワーク９に接続されているスレーブマシン２０の通信アドレス（ここではＩＰアドレス）４１と、各スレーブマシン２０のステータス４２とを対応付けている。ステータス４２は、ジョブプログラムが割り当てられていて、その処理を実行中であることを示す「実行中」と、ジョブの実行中ではなく、ジョブを割り当てて実行させることが可能である「待機中」と、ジョブプログラムを実行するための前処理、または実行後の後処理を行っていて、実行中から待機中または待機中から実行中へ状態を遷移させている最中であることを示す「遷移中」とがある。
【００１５】
入出力処理部１２は、記憶部１７の入出力に関する処理を行う。特に、スレーブマシン２０から、データ領域１７ｂに記憶されているファイルに対するアクセス指示を受け付けたとき、その指示に従ってファイルのオープン／クローズ、リード／ライト等を行い、その結果を返信する。ファイルアクセスの詳細については後述する。
【００１６】
タスク・ジョブ登録処理部１４は、ジョブ管理テーブル５０（図４参照）を備え、タスクおよびジョブの登録を受け付けて、ジョブ管理テーブル５０に記憶する。ここで、タスクは、一以上のジョブで構成される。一つのジョブは、一つのジョブプログラムで実装される。登録された実行形式のジョブプログラムは、プログラム領域１７ａに格納される。各ジョブが、それぞれ予め定められた処理を実行することにより、全体として所定の機能（タスク）が達成される。本実施形態では、一つのジョブプログラムが一つのＪａｖａ（登録商標）プログラムで実現される。本システム１は、例えば、一つのタスクを構成する複数のジョブプログラムのそれぞれを、別々のスレーブマシン２０に実行させて、並列分散処理を行ったり、一のタスクを構成する単一のジョブプログラムを複数のスレーブマシン２０に実行させて、大量のデータを同時に処理することができる。
【００１７】
タスクの登録は、図３に示すタスク・ジョブ登録画面１００を表示装置７に表示させ、ユーザが入力装置８から入力することにより行う。登録画面１００は、ジョブプログラム単位で入力を受け付けるために、以下の各項目の入力を受け付ける領域１０１〜１０７を有する。すなわち、登録画面１００は、タスク名１０１、先行するタスク名１０２、ジョブプログラムの実行プログラム名１０３、メインクラス１０４、ＶＭパラメータ１０５、ジョブプログラムの引数１０６、およびランタイムディレクトリ１０７の各項目の入力を受け付ける。ユーザは、タスク名１０１にジョブプログラムの属するタスクの名称を入力する。このジョブが属するタスクよりも先行して実行されるべきタスクがあれば、ユーザは先行タスク名１０２にそのタスク名を入力する。ユーザは、実行プログラム名１０３にパスを含めた実行形式のプログラム名を入力する。本実施形態ではＪａｖａを用いて実装した場合について示しているので、メインクラス１０４および必要に応じてＶＭパラメータ１０５を指定する。
【００１８】
登録画面１００から入力された各項目は、図４に示すジョブ管理テーブル５０に登録される。ジョブ管理テーブル５０は、ジョブＩＤ５１と、タスク名５２と、実行プログラム名５３と、実行条件（メインクラス、引数、ＶＭパラメータ、及びランタイムディレクトリ）５４と、先行タスク名５５と、ジョブのステータス５６とを項目として備える。ジョブＩＤ５１は、実行プログラムを一意に識別する識別情報であり、ジョブ管理テーブル５０に登録する際に自動生成される。ジョブステータス５６は、マシンの割り当てを待っている「待ち」と、いずれかのスレーブマシン２０で処理を行っている「実行中」と、処理が終了した状態を示す「終了」とがある。なお、「終了」には、正常に終了した「終了（正常）」と、異常終了した「終了（異常）」とを含む。
【００１９】
ジョブ割当処理部１５は、実行待ちのジョブをどのスレーブマシン２０で実行させるかを決定する。つまり、ジョブ割当処理部１５は、マシンの割当を待っているジョブが存在する場合、スレーブ管理テーブル４０を参照して「待機中」のスレーブマシン２０へジョブの実行を依頼する。このときの詳細な処理手順については、後述する。
【００２０】
各スレーブマシン２０は、それぞれ、通信処理部２１と、入出力処理部２２とを備える。そして、各スレーブマシン２０は、マスタマシン１０から送信されたジョブプログラムを実行する。
【００２１】
通信処理部２１は、マスタマシン１０との間でデータ等の送受信を行う。例えば、通信処理部２１は、マスタマシン１０に対して自己の存在を知らせるために、自己の通信アドレス及びステータスの通知を、ネットワーク９に対してブロードキャストする。この通知は、随時行うことができるが、好ましくは、スレーブマシン２０の起動時に行う。
【００２２】
通信処理部２１は、他のスレーブマシン２０からこのアドレス及びステータス通知を受けることがあるが、これに対しては応答しない。
【００２３】
また、通信処理部２１は、マスタマシン１０からの問い合わせに対して、自己の通信アドレス及びステータスを返信する。
【００２４】
入出力処理部２２は、スレーブマシン２０上で実行されているジョブが、マスタマシン１０のデータ領域１７ｂにアクセスするための処理を行う。以下、ファイルアクセス時の処理について、マスタマシン１０の入出力処理部１２が行う処理と併せて詳細に説明する。
【００２５】
スレーブマシン２０の入出力処理部２２は、実行中のジョブのデータ入出力要求を検出すると、マスタマシン１０へファイルのオープンを通知する。このファイルオープン（またはクローズ）を通知するときのフォーマット例を、図５に示す。すなわち、ファイルオープン／クローズ通知６０は、送信先であるマスタマシンのアドレス６１と、送信元であるスレーブマシンのアドレス６２と、ジョブＩＤ６３と、アクセスするファイル名６４と、オープン／クローズ種別６５とを含む。ファイルオープンを通知するときは、オープン／クローズ種別６５は、「オープン」とし、ファイルクローズを通知するときは、オープン／クローズ種別６５は、「クローズ」とする。マスタマシンのアドレス６１は、ジョブプログラムが起動されたときにマスタマシン１０から通知される（詳細は後述する）。
【００２６】
マスタマシン１０の入出力処理部１２は、オープン／クローズ通知６０のオープン／クローズ種別６５が「オープン」のとき、ファイル名６４のファイルをオープンする。
【００２７】
スレーブマシン２０の入出力処理部２２が、ジョブからリードあるいはライトの要求を受けると、リードあるいはライトの要求をそのままマスタマシン１０へ通知する。
【００２８】
マスタマシン１０の入出力処理部１２は、通知されたリードあるいはライトの要求に従って、オープンされたファイルのリードあるいはライトを行う。
【００２９】
スレーブマシン２０の入出力処理部２２が、ジョブからファイルクローズ要求を受けると、オープン／クローズ種別６５を「クローズ」として、ファイルオープン／クローズ通知６０をマスタマシン１０へ送信する。
【００３０】
マスタマシン１０の入出力処理部１２は、オープン／クローズ通知６０のオープン／クローズ種別６５が「クローズ」のとき、ファイル名６４のファイルをクローズする。
【００３１】
なお、本実施形態では、入出力処理部１２、及び入出力処理部２２は、例えば、Ｊａｖａの入出力ライブラリとして提供される。
【００３２】
上述した通り、スレーブマシン２０で実行されるジョブは、入出力処理部２２へデータアクセスを依頼すれば、マスタマシン１０上にあるデータへアクセスすることができる。これにより、各ジョブプログラムが分散処理を意識せずにプログラミングされたものであっても、本実施形態のクラスタリングシステム１上で正しく動作することができる。すなわち、本システム１の利用者は、プログラム間の通信機能を自らプログラミングする必要がなく、プログラム作成コストが軽減される。
【００３３】
次に、本実施形態における分散処理の手順の一例について、図６に示すフローチャートを用いて説明する。
【００３４】
ジョブ割当処理部１５は、ジョブ登録処理部１４のジョブ管理テーブル５０を参照し、ジョブステータス５６が「待ち」である、マシン割当を待っている実行待ち状態のジョブがあるかどうかをチェックする（Ｓ１１）。実行待ちのジョブがあれば（Ｓ１１：Ｙｅｓ）、以下の手順でそのジョブを実行する。なお、先行タスク５５が設定されている場合は、その先行タスクが終了していることを条件とする。
【００３５】
まず、ジョブ割当処理部１５は、スレーブ管理部１３のスレーブ管理テーブル４０を参照して、ジョブを実行していない「待機中」のスレーブマシン２０があるかどうかをチェックする（Ｓ１２）。待機中のスレーブマシン２０があるときは（Ｓ１２：Ｙｅｓ）、ジョブ割当処理部１５は、そのスレーブマシン２０のステータス４２を「遷移中」にするよう、スレーブ管理部１３へ指示する。そして、ジョブ割当処理部１５は、そのスレーブマシン２０の通信アドレス４１を取得して、実行しようとしているジョブの実行プログラム５３がすでにそのスレーブマシン２０に配布されているかどうかをチェックする（Ｓ１３）。実行プログラムが配布済みであるかどうかのチェックは、例えば、以下のように行う。すなわち、実行プログラムがスレーブマシン２０へ配布されると、スレーブマシン２０は、図示しない記憶装置に実行プログラムを格納する。ジョブ割当処理部１５は、スレーブマシン２０の図示しない記憶装置を参照し、実行プログラムのファイル名とタイムスタンプを用いて、同一の実行プログラムであるかどうかを確認する。
【００３６】
実行プログラムが未配布であるときは（Ｓ１３：Ｎｏ）、ジョブ割当処理部１５は、そのスレーブマシン２０へ実行プログラムを送信する（Ｓ１４）。その時のフォーマットを図７（ａ）に示す。すなわち、実行プログラムの送信データ７０は、送信先であるスレーブマシンのアドレス７１と、送信元であるマスタマシンのアドレス７２と、ジョブＩＤ７３と、実行プログラム７４と、メインクラス７５と、引数７６とを含む。この送信データ７０を受信したスレーブマシン２０は、これらのデータを図示しない記憶装置に格納する。
【００３７】
そして、スレーブマシン２０は、ジョブ割当処理部１５からの通知を受けて、実行プログラムを起動してジョブを実行する（Ｓ１５）。スレーブマシン２０に対する実行プログラムの起動通知には、マスタマシン１０の通信アドレスが含まれる。スレーブマシン２０では、マスタマシン１０の通信アドレスを、プログラムの実行が終了するまで図示しない記憶装置に保持する。
【００３８】
ジョブ割当処理部１５は、実行プログラムを起動したスレーブマシン２０の通信アドレスと併せて、実行プログラムが起動されたことをスレーブ管理部１３へ通知する。スレーブ管理部１３は、ジョブ割当処理部１５からの通知を受けて、該当するスレーブマシン２０のステータス４２を「実行中」へ変化させる。
【００３９】
ジョブが終了すると、スレーブマシン２０がマスタマシン１０へジョブの終了通知を行う。ジョブの終了通知のフォーマットを図７（ｂ）に示す。終了通知８０は、送信先であるマスタマシンのアドレス８１と、送信元であるスレーブマシンのアドレス８２と、ジョブＩＤ８３と、正常終了であるか異常終了であるかを示す終了状態８４とを含む。ジョブの終了通知後、図示しない記憶装置に保持されているマスタマシン１０の通信アドレスが破棄される。
【００４０】
ジョブ割当処理部１５は、スレーブ管理部１３およびジョブ登録処理部１４に対して、終了通知に含まれるスレーブマシンのアドレス８２と、ジョブＩＤ８３と、終了状態８４とを通知する。スレーブ管理部１３は、この通知を受けて、該当するスレーブマシン２０のステータス４２を「待機中」へ変化させる。ジョブ登録処理部１４は、この通知を受けて、該当するジョブのジョブステータス５６を終了状態８４が示す状態に変化させる。
【００４１】
これにより、複数のジョブで構成されたタスクを、ジョブごとにスレーブマシンに分散させて実行することができる。特に、本実施形態では、実行プログラムをマスタマシンで一括して登録し、タスクの実行時に、必要に応じて実行プログラムを自動的に配布し、ジョブを分散して実行させる。これにより、本実施形態では、従来のクラスタリングシステムのように、事前に全スレーブマシンへ実行プログラムを配布しておく必要がない。
【００４２】
また、ジョブ割当処理部１５は、スレーブマシン２０ごとに優先順位を付け、その優先順位に従ってジョブの割当を行うようにしてもよい。優先順位の決定方法は任意であるが、以下にその例を示す。
【００４３】
まず、第１の方法は、スレーブマシンの処理能力を測定し、その結果、処理能力の高いスレーブマシンから優先してジョブを割り当てる。スレーブマシンの処理能力を示す指標としては、ジョブの実行に要した所要時間の平均値を用いる。この所要時間としては、例えば、ジョブ割当処理部１５がスレーブマシンへジョブの実行を指示してから、ジョブの終了通知を受信するまでの時間を用いる。この場合の処理時間は、ネットワーク９の通信速度にも影響を受けるが、マスタマシンから見た、トータルでのスレーブマシンの処理能力と考えることができる。また、所要時間として、特定のジョブについての、スレーブマシンごとの処理時間を用いてもよい。特定のジョブとは、繰り返し実行されたジョブであって、複数のスレーブマシンで実行された実績を持つものである。
【００４４】
次に、第２の方法は、マスタマシンと各スレーブマシンとの通信速度を測定し、その結果、通信速度の速いスレーブマシンから優先してジョブを割り当てる。通信速度は、ジョブ割当処理部１５が通信したデータ量と通信に要した時間とを計測し、これらから算出する。
【００４５】
本実施形態により、本システムの処理性能を向上させ、タスクを高速で処理するために、効率的にジョブを分散させることができる。
【００４６】
上述した本発明の実施形態は、本発明の説明のための例示であり、本発明の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、本発明の要旨を逸脱することなしに、他の様々な態様で本発明を実施することができる。
【００４７】
【発明の効果】
本発明によれば、利用者のプログラミングの手間が軽減される。また、管理にかかる手間も軽減される。さらに、効率的に処理を分散させて、処理性能を向上させることができる。
【図面の簡単な説明】
【図１】本発明を適用した一実施形態であるクラスタリングシステム１の全体構成を示す図である。
【図２】スレーブ管理テーブル４０の一例を示す図である。
【図３】タスク・ジョブ登録画面１００の一例を示す図である。
【図４】ジョブ管理テーブル５０の一例を示す図である。
【図５】ファイルオープン／クローズ通知６０のフォーマットの一例を示す図である。
【図６】ジョブの分散処理の手順を示すフローチャートである。
【図７】（ａ）は、実行プログラムを配布するときの送信データ７０のフォーマット例であり、（ｂ）は、プログラムの終了通知８０のフォーマット例である。
【符号の説明】
１…クラスタリングシステム、１０…マスタマシン、１１…通信処理部、１２…入出力処理部、１３…スレーブ管理部、１４…ジョブ登録処理部、１５…ジョブ割当処理部、１７…記憶部、２０…スレーブマシン、２１…通信処理部、２２…入出力処理部、４０…スレーブ管理テーブル、５０…ジョブ管理テーブル、６０…ファイルオープン／クローズ通知、７０…送信データ、８０…終了通知、１００…タスク・ジョブ登録画面。
【図１】
0004286481.tif 000002
【図２】
0004286481.tif 000003
【図３】
0004286481.tif 000004
【図４】
0004286481.tif 000005
【図５】
0004286481.tif 000006
【図６】
0004286481.tif 000007
【図７】
0004286481.tif 000008