(57)【要約】【課題】ＣＰＵが任意に決定するスレッドの順番によるバリア同期の誤動作を防止したバリア同期実行方法を提供する。【解決手段】バリア同期管理部３２に、各々のスレッドが子スレッドを発生する毎に、動作中のスレッドを管理する動作部３５に子スレッドを登録して管理する登録手段と、合流待ち処理が発生した時に、スレッドの管理を動作部３５から合流待ちのスレッドを管理する合流待ち部３４に移動させて管理する合流待ち移行手段と、バリア同期ポイントに達した時に、スレッドの管理を動作部３５から停止部３６に移動させ、全てのスレッドが動作部３５から停止部３６に移動したときにバリア同期実行を行うバリア同期実行手段と、このバリア同期実行手段によるバリア同期実行が行われる前に少なくとも停止部３６を新たな動作部として切替える切替手段と、スレッドの終了の際に、同期待ちしているスレッドがある場合に、合流待ちするスレッドを合流待ち部３４から動作部３５に移動させた後、スレッドを動作部３５から削除してスレッドを終了する動作部削除手段とを設けた。【選択図】図1
2005135082.tif 000002
【特許請求の範囲】
【請求項１】
マルチタスキングオペレーティングシステムにおけるバリア同期実行方法において、各々のスレッドが子スレッドを発生する毎に、動作中のスレッドを管理する動作部に子スレッドを登録して管理する登録手段と、合流待ち処理が発生した時に、スレッドの管理を動作中のスレッドを管理する動作部から合流待ちのスレッドを管理する合流待ち部に移動させて管理する合流待ち移行手段と、スレッドの終了の際に、同期待ちしているスレッドがある場合に、合流待ちするスレッドを上記合流待ち部から上記動作部に移動させた後、そのスレッドを上記動作部から削除してスレッドを終了する動作部削除手段とを設けたことを特徴とするバリア同期実行方法。
【請求項２】
請求項１記載のものにおいて、さらに、バリア同期ポイントに達した時に、スレッドの管理を上記動作部から上記停止部に移動させ、全てのスレッドが上記動作部から上記停止部に移動したときにバリア同期実行を行うバリア同期実行手段を付加したことを特徴とするバリア同期実行方法。
【請求項３】
請求項２記載のものにおいて、さらに、上記バリア同期実行手段によるバリア同期実行が行われる前に少なくとも上記停止部を新たな上記動作部として切替える切替手段とを付加したことを特徴とするバリア同期実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチタスキングオペレーティングシステムにおけるバリア同期実行方法に関する。
【背景技術】
【０００２】
従来のバリア同期実行方法は、バリア同期の対象となるスレッド数を予め用意し、そのスレッドの数をカウンタにセットし、子スレッドが発生する毎にカウンタ数を増やし、バリア同期ポイントに到達する毎にスレッド数を減らして停止し、０になった時点で停止していたスレッドを呼び起こしバリア同期を実現していた。
【０００３】
図１４は、従来のバリア同期実行方法の処理動作を示すタイムチャ−トである。図中のスレッドの動作は、最初に時刻ｔ０にバリア同期の対象となるスレッドＴＨ１、ＴＨ２、ＴＨ３が実行され、時刻ｔ１にスレッドＴＨ１が子スレッドＴＨ１＄１、ＴＨ１＄２を発生させて、子スレッドＴＨ１＄１、ＴＨ１＄２の終了を待つために合流待ちの停止状態となると同時に、スレッドＴＨ２が終了し、スレッドＴＨ３がバリア同期ポイントに達して停止状態となる。次に時刻ｔｎ−１に子スレッドＴＨ１＄１がバリア同期ポイントに達して停止状態となり、最後に、時刻ｔｎに子スレッドＴＨ１＄２がバリア同期ポイントに達したことにより、全てのスレッドがバリア同期ポイントに達したため、バリア同期が実行されることを表している。従来のバリア同期実行方法におけるカウンタ値は、図１４に示したように時刻ｔ０でスレッド数の３がセットされる。時刻ｔ１では、子スレッドＴＨ１＄１、ＴＨ１＄２の発生個数である２を増やすと共に、終了および停止したスレッドＴＨ１、ＴＨ２、ＴＨ３の数３を減らし、結果としてカウンタ値は２となる。その後、時刻ｔｎ−１では、停止したスレッドＴＨ１＄１の数である１を減らし、時刻ｔｎでは停止したスレッドＴＨ１＄２の数である１を減らし、その結果、カウンタ値は０となるためバリア同期を実行する。
【０００４】
この種のバリア同期実行方法に関連して、バリア同期を除くマルチスレッド処理を容易にする技術（例えば、特許文献１参照）や、また、Ｔｅｓｔ  Ａｎｄ  Ｓｅｔ命令を利用したバリア同期の高速化処理方式（例えば、特許文献２参照）が提案されている。
【特許文献１】特開平１０−２７１０８号公報
【特許文献２】特開平９−４４４６０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来のバリア同期実行方法は、図１５に示すように時刻ｔ１にスレッドＴＨ１が子スレッドＴＨ１＄１、ＴＨ１＄２を発生させ、同一時刻にスレッドＴＨ３が終了したとき、カウンタ値が０となるために、バリア同期ポイントに到着していないにも関わらずバリア同期ポイントとしてしまうことにある。このように従来のバリア同期実行方法では、同一時刻に複数のスレッドが発生と合流、もしくは終了が同時に行われると、中央演算処理装置（以下、ＣＰＵと称する）が任意に決定するスレッドの順番により誤動作を起こし、バリア同期ポイントを不当なものとしてしまうことがある。
本発明の目的は、ＣＰＵが任意に決定するスレッドの順番によるバリア同期の誤動作を防止したバリア同期実行方法を提供することにある。
【課題を解決するための手段】
【０００６】
本発明は上記目的を達成するために、マルチタスキングオペレーティングシステムにおけるバリア同期実行方法において、各々のスレッドが子スレッドを発生する毎に、動作中のスレッドを管理する動作部に子スレッドを登録して管理する登録手段と、合流待ち処理が発生した時に、スレッドの管理を動作中のスレッドを管理する動作部から合流待ちのスレッドを管理する合流待ち部に移動させて管理する合流待ち移行手段と、スレッドの終了の際に、同期待ちしているスレッドがある場合に、合流待ちするスレッドを上記合流待ち部から上記動作部に移動させた後、そのスレッドを上記動作部から削除してスレッドを終了する動作部削除手段とを設けたことを特徴とする。
【０００７】
また請求項２に記載の本発明は、請求項１記載のもににおいて、さらに、バリア同期ポイントに達した時に、スレッドの管理を上記動作部から上記停止部に移動させ、全てのスレッドが上記動作部から上記停止部に移動したときにバリア同期実行を行うバリア同期実行手段と、このバリア同期実行手段によるバリア同期実行が行われる前に少なくとも上記停止部を新たな上記動作部として切替える切替手段とを付加したことを特徴とする。
【０００８】
さらに請求項３に記載の本発明は、請求項２記載のものにおいて、さらに、上記バリア同期実行手段によるバリア同期実行が行われる前に少なくとも上記停止部を新たな上記動作部として切替える切替手段とを付加したことを特徴とする。
【発明の効果】
【０００９】
本発明のバリア同期実行方法は、合流待ち移行手段と動作部削除手段とによってスレッドを処理するので、バリア同期ポイントに到着していないにも拘わらずバリア同期ポイントとして誤判定してしまう状況は無くなり、ＣＰＵの処理順番による誤動作を防止することができる。
【００１０】
また請求項２に記載の本発明のバリア同期実行方法は、バリア同期実行手段は全てのスレッドが動作中のスレッドを管理する動作部から停止中のスレッドを管理する停止部に移動したときにバリア同期実行を行うようにしているため、上述した誤動作を防止すると共に、正しい同期ポイントで正確にバリア同期を実行させることができる。
【００１１】
また請求項３に記載の本発明のバリア同期実行方法は、さらにバリア同期実行手段によるバリア同期実行が行われる前に少なくとも停止部を新たな動作部として切替える切替手段とを付加することによって、これまで使用してきた停止部の情報を今度は新たな動作部の情報として簡単に活用することができる。
【発明を実施するための最良の形態】
【００１２】
図１は、本発明のバリア同期処理方法が実施される処理システムのブロック構成図である。
この処理システムは、キーボード、マウス等の入力装置２１と、ディスプレイ装置やプリンタ装置等の出力装置２２と、情報を記憶する記憶装置２４と、アプリケーションプログラムのプログラム空間３１と、これらの演算を行なうＣＰＵ２３とを有して構成されている。プログラム空間３１内にはバリア同期管理部３２があり、このバリア同期管理部３２は動作中のスレッドを管理する動作中管理制御部（以下、動作部と称す）３５と、停止中のスレッドを管理する動作中管理制御部（以下、停止部と称す）３６と、これらを管理する動作切替え制御部３３と、合流待ちのスレッドを管理する合流待ち管理制御部（以下、合流待ち部と称す）３４とを有して構成されている。
【００１３】
詳細は後述するがバリア同期管理部３２は、各々のスレッドが子スレッドを発生する毎に、動作中のスレッドを管理する動作部３５に子スレッドを登録して管理する登録手段と、合流待ち処理が発生した時に、スレッドの管理を動作中のスレッドを管理する動作部３５から合流待ちのスレッドを管理する合流待ち部３４に移動させて管理する合流待ち移行手段と、バリア同期ポイントに達した時に、スレッドの管理を動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動させ、全てのスレッドが、動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動したときにバリア同期実行を行うバリア同期実行手段と、このバリア同期実行手段によるバリア同期実行が行われる前に少なくとも停止部３６を新たな動作部として切替える切替手段と、スレッドの終了の際に、同期待ちしているスレッドがある場合に、合流待ちするスレッドを合流待ちのスレッドを管理する合流待ち部３４から動作中のスレッドを管理する動作部３５に移動させた後、スレッドを動作中のスレッドを管理する動作部３５から削除してスレッドを終了する動作部削除手段とを有している。
【００１４】
図２は、図１に示した処理システムによるバリア同期処理方法を実行するためのフローチャートを示している。
先ず、ステップＳ１でスレッド実行が開始されると、ステップＳ２で現在の時刻において子スレッドを発生するか否かを判定し、子スレッドを発生する場合には、ステップＳ３で動作部３５に子スレッドを登録した上で、子スレッドを発生させる。従来のカウンタ方式のバリア同期処理方法では、最初に開始するスレッド数をカウンタにセットすることから始まるが、ここではスレッド発生の度に動作部３５に登録すればよいので従来のような設定が不要である。次に、ステップＳ４で現在の時刻において合流待ち処理を行うか否かを判定し、合流待ちを行なう場合は、ステップＳ５でスレッドを動作部３５から合流待ち部３４に移動させ、その後、合流待ちを実行する。
【００１５】
続くステップＳ６では現在の時刻においてバリア同期ポイントに到達したか否かを判定し、到達したならステップＳ７でスレッドを動作部３５から停止部３６に移動させる。ステップＳ８で動作部３５が空になったか否かを判定し、ステップＳ９で動作部３５を監視しながら動作部３５が空になったならステップＳ１０で動作切替制御部３３によって動作部３５を停止部３６に、また停止部３６を動作部３５にそれぞれ切り替えて、バリア同期処理を実行する。
【００１６】
ステップＳ１１ではスレッド実行が終了か否かを判定し、終了しない場合はステップＳ２に戻って同様の処理を繰り返す。この判定で終了の場合は、ステップＳ１２で前述の合流待ちがあるか否かを判定し、合流待ちがない場合は、ステップＳ１４で動作部３５で管理されているスレッドを削除し、ステップＳ１５で終了となる。一方、前述の合流待ちがある場合は、ステップＳ１３で合流待ちスレッドを合流待ち部３４から動作部３５に移動した後、ステップＳ１４で動作部３５で管理されているスレッドを削除し、ステップＳ１５で終了となる。
【００１７】
次に、図１に示した処理システムによるバリア同期処理方法を図１５に示したタイムチャ−トを例に具体的な動作を説明する。
先ず、現在の時刻が図３で示した位置状態とすると、その後、子スレッドＴＨ１＄１および子スレッドＴＨ１＄２を発生させ、スレッドＴＨ１が合流待ちに移り、スレッドＴＨ３が停止状態になる。このとき、バリア同期管理部３２には、各々のスレッドが子スレッドを発生する毎に、動作中のスレッドを管理する動作部３５に子スレッドを登録して管理する登録手段が構成されているため、この登録手段により、図２に示したステップＳ２で子スレッドの発生と判定されて、ステップＳ３で動作部３５に発生する子スレッドＴＨ１＄１および子スレッドＴＨ１＄２が登録される。このとき、図４に示すように動作部３５に登録した子スレッドＴＨ１＄１、ＴＨ１＄２がスレッド欄４３に、またそれぞれの子スレッドの数「０」が子欄４２に、さらにそれぞれの合流スレッド「ＴＨ１」が合流スレッド欄４１に登録される。またスレッドＴＨ３がスレッド欄４３に、またその子スレッドの数「０」が子欄４２に、さらにその合流スレッド「なし」が合流スレッド欄４１に登録される。
【００１８】
図２に示したステップＳ４で合流待ち処理を行うと判定されると、バリア同期管理部３２には合流待ち処理が発生した時に、スレッドの管理を動作中のスレッドを管理する動作部３５から合流待ちのスレッドを管理する合流待ち部３４に移動させて管理する合流待ち移行手段が構成されているため、ステップＳ５で合流待ち移行手段は、図４に示したように合流待ちとなるスレッドＴＨ１を動作部３５から合流待ち部３４に移動する。このとき、合流待ちとなるスレッドＴＨ１は、その子スレッドの数「２」を子欄４２に、さらにその合流スレッド「なし」を合流スレッド欄４１に登録される。
【００１９】
またバリア同期管理部３２にはバリア同期実行手段が構成されており、このバリア同期実行手段は、スレッドの管理を動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動させ、全てのスレッドが、動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動したときにバリア同期実行を行う。しかし、この時点では全てのスレッドが動作部３５から停止部３６に移動した状態ではないので、バリア同期実行手段はバリア同期を実行しない。
【００２０】
従って、図１５に示すように時刻ｔ１にスレッドＴＨ１が子スレッドＴＨ１＄１、ＴＨ１＄２を発生させ、同一時刻にスレッドＴＨ３が終了したとき、従来のバリア同期実行方法ではカウンタ値が０となるために、バリア同期ポイントに到着していないにも拘わらずバリア同期ポイントとして誤判定してしまうことがあるが、合流待ち移行手段と動作部削除手段とによってスレッドを処理するので、バリア同期ポイントに到着していないにも拘わらずバリア同期ポイントとして誤判定してしまう状況は無くなり、ＣＰＵの処理順番による誤動作を防止することができる。
【００２１】
次に、図２に示したステップＳ６の判定で実際にバリア同期ボイントに到着したときの動作について説明する。
図５では、現在の時刻がスレッドＴＨ１が合流待ちの停止状態にあり、図４に示したように既にスレッドＴＨ１が合流待ち部３４に移動され、子スレッドＴＨ１＄１、子スレッドＴＨ１＄２およびスレッドＴＨ３がバリア同期ポイントに達した状態を示している。上述したようにバリア同期管理部３２は、バリア同期ポイントに達した時に、スレッドの管理を動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動させ、全てのスレッドが、動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動したときにバリア同期実行を行うバリア同期実行手段を有しているため、図２に示したステップＳ７でバリア同期ポイントに達したスレッドを動作部３５から停止部３６に移動する処理を行う。先ず、図６に示すように既にバリア同期ポイントに到達した子スレッドＴＨ１＄１およびスレッドＴＨ３は動作部３５から停止部３６に移行して停止部３６で管理する。続いて、バリア同期ポイントに到達したスレッドＴＨ１＄２が動作部３５から停止部３６に移動される。すると、図６に示すように停止部３６では、子スレッドＴＨ１＄１、子スレッドＴＨ１＄２およびスレッドＴＨ３が各欄に図示のように登録されて管理される。
【００２２】
この時点で、図２に示したステップＳ１０で上述したバリア同期管理部３２のバリア同期実行手段は、バリア同期ポイントに達した時に、スレッドの管理を動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動させ、全てのスレッドが、動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動したことを検出することになる。バリア同期管理部３２は、さらにこのバリア同期実行手段によるバリア同期実行が行われる前に動作中のスレッドを管理する動作部３５と停止中のスレッドを管理する停止部３６を切替える切替手段を有しているため、図２に示したステップＳ１０を実施する。
【００２３】
これは、図７に示したように動作切替え制御部３３を用いて、動作部３５を停止部に、また停止部３６を動作部に切替え、動作部３５と停止部３６を入れ替える。これによって少なくても停止部３６は新たな動作部として切替えられたことになる。その後、バリア同期ポイントで停止している各スレッドを再実行しバリア同期を実行する。従って、上述したバリア同期実行方法によれば、バリア同期ポイントに到着していないにも拘わらずバリア同期ポイントとして誤判定してしまうことを完全に防止すると同時に、バリア同期ポイントに到着したとき、確実にバリア同期を実行することができる。
【００２４】
次に、図２に示したステップＳ１１の判定によってスレッド実行を終了する場合について説明する。
上述したようにバリア同期管理部３２は、スレッドの終了の際に、同期待ちしているスレッドがある場合に、合流待ちするスレッドを合流待ちのスレッドを管理する合流待ち部３４から動作中のスレッドを管理する動作部３５に移動させた後、スレッドを動作中のスレッドを管理する動作部３５から削除してスレッドを終了する動作部削除手段を有しており、このスレッド実行終了は、ステップＳ１２において合流待ちがある場合と、合流待ちがない場合とに分類され、ステップＳ１２の判定で合流待ちがあると判定した場合、動作部削除手段によって先ずステップＳ１３で合流待ちのスレッドを合流待ち部３４から動作部３５に移動する。
【００２５】
現在の時刻は、図８に示すように子スレッドＴＨ１＄１および子スレッドＴＨ１＄２が終了し、スレッドＴＨ３が終了してから、合流待ちのスレッドＴＨ１が再実行する状況を示している。このときのバリア同期管理部３２は、図９に示すように子スレッドＴＨ１＄２が終了となり、子スレッドＴＨ１＄１およびスレッドＴＨ３が動作部３５で管理され、一方、スレッドＴＨ１が合流待ち部３４で管理されて子スレッドＴＨ１＄２の終了によって子欄４２の子の数「１」を減らし「０」にする。減らした結果、子欄４２の数が「０」でない場合には、合流待ちスレッドがない場合と同様の処理を行なう。
【００２６】
ここでは子欄４２の子の数が「０」であるから、バリア同期管理部３２の動作部削除手段は、続いて、図２に示したステップＳ１３に従って図１０に示すように合流待ち部３４のスレッドＴＨ１を動作部３５に移動する。その後、ステップＳ１４に従って図１１に示すように終了する子スレッドＴＨ１＄１を動作部３５から削除し、続いて図１２に示すようにスレッドＴＨ３を削除して終了する。
【００２７】
その後、スレッドＴＨ１も終了して、ステップＳ１２の判定で合流待ちがないと判定した場合、ステップＳ１４で終了したスレッドＴＨ１を動作部３５から削除する。すると、動作部３５および停止部３６で管理しているスレッドが共にない状態となるので、スレッド実行は終了となる。
【００２８】
上述の説明から分かるように本バリア同期実行方法は、各々のスレッドが子スレッドを発生する毎に、動作中のスレッドを管理する動作部３５に子スレッドを登録して管理する登録手段と、合流待ち処理が発生した時に、スレッドの管理を動作中のスレッドを管理する動作部３５から合流待ちのスレッドを管理する合流待ち部３４に移動させて管理する合流待ち移行手段と、スレッドの終了の際に、同期待ちしているスレッドがある場合に、合流待ちするスレッドを合流待ち部３４から動作部３５に移動させた後、スレッドを動作部３５から削除してスレッドを終了する動作部削除手段とを設けたため、従来のバリア同期実行方法では、同一時刻に複数のスレッドが発生と合流もしくは終了が同時に行われると、ＣＰＵが任意に決定するスレッドの順番により誤動作を起こし、バリア同期ポイントに到着していないにも関わらずバリア同期ポイントとしてしまうことがあったが、合流待ち移行手段と動作部削除手段とによってスレッドを処理するので、バリア同期ポイントに到着していないにも拘わらずバリア同期ポイントとして誤判定してしまう状況は無くなり、ＣＰＵの処理順番による誤動作を防止することができる。
【００２９】
また、上述した構成に基づいて、バリア同期ポイントに達した時に、スレッドの管理を動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動させ、全てのスレッドが、動作中のスレッドを管理する動作部３５から停止中のスレッドを管理する停止部３６に移動したときにバリア同期実行を行うバリア同期実行手段を付加することによって、バリア同期を実行するバリア同期ポイントを確実に判別してこれも確実に実行することができる。
【００３０】
さらにバリア同期実行手段によるバリア同期実行が行われる前に少なくとも停止部３６を新たな動作部として切替える切替手段とを付加することによって、停止部３６の情報を今度は動作部３５の情報として簡単に活用することができる。
【００３１】
図１３は、本発明の他の実施の形態によるバリア同期実行方法を採用した
上述した図１に示した実施の形態では、バリア同期管理部３２は、このバリア同期実行手段によるバリア同期実行が行われる前に動作中のスレッドを管理する動作部３５と停止中のスレッドを管理する停止部３６を切替える切替手段を有し、図７に示すように動作部３５を停止部に、停止部３６を動作部にそれぞれ切り替えるようにした。これに対して、図１３に示すように動作部３５と、複数の停止部３６ａ〜３６ｎを設け、最初、動作部３５と停止部３６ａの対で使用し、上述の場合と同一の条件に達したとき動作切替制御部３３は接続を実線位置から点線位置に切り替えて停止部３６ａと停止部３６ｂの対を使用するようにし、少なくとも停止部３６ａを新たな動作部として使用するようにしている。このような切替制御によっても先の実施の形態の場合と同様の効果を得ることができる。
【産業上の利用可能性】
【００３２】
本発明は、マルチタスキングオペレーティングシステムにおけるアプリケーションプログラムのプログラム空間３１として説明したが、複数のＣＰＵを用いたプロセス間のバリア同期処理等、バリア同期処理を取り扱う全ての分野にも適用できる。
【図面の簡単な説明】
【００３３】
【図１】本発明の一実施の形態によるバリア同期実行方法を採用したマルチタスキングオペレーティングシステムを示すブロック構成図である。
【図２】図１に示したバリア同期実行方法の動作手順を示すフローチャートである。
【図３】合流待ちが発生した状態を示すタイムチャートである。
【図４】合流待ちが発生した状態での要部を示す説明図である。
【図５】バリア同期ポイントに到達した状態を示すタイムチャートである。
【図６】バリア同期ポイントに到達した状態での要部を示す説明図である。
【図７】バリア同期ポイントに到達した状態での他の要部を示すブロック説明図である。
【図８】スレッドが終了する状態を示すタイムチャートである。
【図９】スレッドが終了する状態での要部の初期状態を示す説明図である。
【図１０】スレッドが終了する状態での要部の中期状態を示す説明図である。
【図１１】スレッドが終了する状態での要部の他の中期状態を示す説明図である。
【図１２】スレッドが終了する状態での要部の終期状態を示す説明図である。
【図１３】本発明の他の実施の形態によるバリア同期実行方法を採用した要部のブロック構成図である。
【図１４】バリア同期処理の一例を示すタイムチャートである。
【図１５】従来のバリア同期処理を示すタイムチャートである。
【符号の説明】
【００３４】
２３  ＣＰＵ
３１  プログラム空間
３２  バリア同期管理部
３３  動作切替制御部
３４  合流待ち管理制御部
３５  動作部
３６  停止部
ＴＦＨ１，ＴＨ２，ＴＨ３  スレッド
ＴＨ＄１，ＴＨ＄２  子スレッド
【図１】
2005135082.tif 000003
【図２】
2005135082.tif 000004
【図３】
2005135082.tif 000005
【図４】
2005135082.tif 000006
【図５】
2005135082.tif 000007
【図６】
2005135082.tif 000008
【図７】
2005135082.tif 000009
【図８】
2005135082.tif 000010
【図９】
2005135082.tif 000011
【図１０】
2005135082.tif 000012
【図１１】
2005135082.tif 000013
【図１２】
2005135082.tif 000014
【図１３】
2005135082.tif 000015
【図１４】
2005135082.tif 000016
【図１５】
2005135082.tif 000017