(57)【特許請求の範囲】
【請求項１】
複数のマイクロプロセッサを備えるユニットを含むマルチプロセッサ装置であって、
第１のプログラムが第２のプログラムに優先して前記複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、前記第２のプログラムが前記複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを前記ユニットに対して設定する設定部と、
前記設定部により設定された動作モードに基づいて、前記第１のプログラムおよび前記第２のプログラムの少なくとも一方に前記マイクロプロセッサを割り当てる割当部と、
前記第２のプログラムの未実行状態を検出する検出部と、を備え、
前記設定部は、前記検出部により前記第２のプログラムの未実行状態が検出されたときに、前記第１の動作モードを設定する
ことを特徴とするマルチプロセッサ装置。
【請求項２】
前記設定部は、前記第１の動作モードを設定してから所定時間を経過したときに、前記第２の動作モードを設定する
ことを特徴とする請求項１に記載のマルチプロセッサ装置。
【請求項３】
前記割当部は、前記第２の動作モードのときに、前記第１のプログラムの一部を、前記第２のプログラムが割り当てられた前記マイクロプロセッサに割り当てる
ことを特徴とする請求項１または２に記載のマルチプロセッサ装置。
【請求項４】
前記第１のプログラムは、入出力装置の要求に応じて実行されるファームウェアプログラムである
ことを特徴とする請求項１ないし３のいずれか一項に記載のマルチプロセッサ装置。
【請求項５】
前記検出部は、実行すべき前記第２のプログラムがない状態での前記マイクロプロセッサの待ち時間に基づいて、前記第２のプログラムの未実行状態を検出する
ことを特徴とする請求項１ないし４のいずれか一項に記載のマルチプロセッサ装置。
【請求項６】
複数のマイクロプロセッサを備えるユニットを含むマルチプロセッサ装置のスケジューリング方法であって、
第１のプログラムが第２のプログラムに優先して前記複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、前記第２のプログラムが前記複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを前記ユニットに対して設定する設定ステップと、
前記設定された動作モードに基づいて、前記第１のプログラムおよび前記第２のプログラムの少なくとも一方に前記マイクロプロセッサを割り当てる割当ステップと、
前記第２のプログラムの未実行状態を検出する検出ステップと、を備え、
前記設定ステップは、前記第２のプログラムの未実行状態が検出されたときに、前記第１の動作モードを設定する
ことを特徴とするスケジューリング方法。
【請求項７】
複数のマイクロプロセッサを備えるユニットを含むマルチプロセッサ装置のスケジューリングプログラムであって、
第１のプログラムが第２のプログラムに優先して前記複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、前記第２のプログラムが前記複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを前記ユニットに対して設定する設定ステップと、
前記設定された動作モードに基づいて、前記第１のプログラムおよび前記第２のプログラムの少なくとも一方に前記マイクロプロセッサを割り当てる割当ステップと、
前記第２のプログラムの未実行状態を検出する検出ステップと、を備え、
前記設定ステップは、前記第２のプログラムの未実行状態が検出されたときに、前記第１の動作モードを設定する
ことを特徴とするスケジューリングプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明に係るいくつかの態様は、複数のマイクロプロセッサを備えるマルチプロセッサ装置のスケジューリング技術に関する。
【背景技術】
【０００２】
従来、入出力装置からの要求により処理を実行するファームウェアは、カーネルモードと呼ばれる優先度（プライオリティ）の高い動作モードで実行されていた。しかし、入出力装置からの要求に制限を課すことはできないため、入出力装置からの要求が増加して負荷が高くなったときに、通常の優先度（プライオリティ）で動作する他のプログラムを実行できない、という問題があった。一方、ファームウェアを通常の優先度（プライオリティ）で実行すると、他のプログラムも実行可能となるが、ファームウェアの応答時間（レスポンスタイム）が長くなって（低下して）しまう、という問題があった。
【０００３】
この問題を解決するために、同一のファームウェアを搭載してそれぞれ個別に処理を行う複数のプロセッサと、これらの複数のプロセッサの管理を行う共通部のプロセッサとを備えたマルチプロセッサシステムが知られている（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平６−４４０７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１のマルチプロセッサシステムのように、ファームウェアを実行するマイクロプロセッサと、その他の処理を実行するプロセッサと、を分ける（分割する）方法では、いわゆる分割損が生じてしまい、マイクロプロセッサのリソースの全てをファームウェアで使用（利用）することができない、という問題があった。
【０００６】
本発明のいくつかの態様は前述の問題に鑑みてなされたものであり、分割損を生じることなく、要求される時間内に入出力要求に対する応答を返すことができるととともに、他のプログラムの実行を保証することができるマルチプロセッサ装置、スケジューリング方法、および、スケジューリングプログラムを提供することを目的の１つとする。
【課題を解決するための手段】
【０００７】
本発明に係るマルチプロセッサ装置は、複数のマイクロプロセッサを備えるマルチプロセッサ装置であって、第１のプログラムが第２のプログラムに優先して複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、第２のプログラムが複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを設定する設定部と、設定部により設定された動作モードに基づいて、第１のプログラムおよび第２のプログラムの少なくとも一方に前述のマイクロプロセッサを割り当てる割当部と、第２のプログラムの未実行状態を検出する検出部と、を備え、設定部は、検出部により第２のプログラムの未実行状態が検出されたときに、第１の動作モードを設定する。
【０００８】
本発明に係るスケジューリング方法は、複数のマイクロプロセッサを備えるマルチプロセッサ装置のスケジューリング方法であって、第１のプログラムが第２のプログラムに優先して複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、第２のプログラムが複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを設定する設定ステップと、設定された動作モードに基づいて、第１のプログラムおよび第２のプログラムの少なくとも一方に前述のマイクロプロセッサを割り当てる割当ステップと、第２のプログラムの未実行状態を検出する検出ステップと、を備え、設定ステップは、第２のプログラムの未実行状態が検出されたときに、第１の動作モードを設定する。
【０００９】
本発明に係るスケジューリングプログラムは、複数のマイクロプロセッサを備えるマルチプロセッサ装置のスケジューリングプログラムであって、第１のプログラムが第２のプログラムに優先して複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、第２のプログラムが複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを設定する設定ステップと、設定された動作モードに基づいて、第１のプログラムおよび第２のプログラムの少なくとも一方に前述のマイクロプロセッサを割り当てる割当ステップと、第２のプログラムの未実行状態を検出する検出ステップと、を備え、設定ステップは、第２のプログラムの未実行状態が検出されたときに、第１の動作モードを設定する。
【発明の効果】
【００１０】
本発明によれば、分割損を生じることなく、要求される時間内に入出力要求に対する応答を返すことができるととともに、第２のプログラムの実行を保証することができ、複数のＣＰＵのリソースを効率的に使用して費用対効果（コストパフォーマンス）を向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本発明の一実施形態におけるマルチプロセッサ装置を説明するブロック図である。
【図２】図１に示した第１動作モードを説明する図である。
【図３】図１に示した第２動作モードを説明する図である。
【図４】図１に示した第２動作モードの変形例を説明する図である。
【図５】図１に示した未実行状態検出部の動作を説明するフローチャートである。
【図６】図１に示した動作モード設定部の動作を説明するフローチャートである。
【発明を実施するための形態】
【００１２】
以下に本発明の実施の形態を説明する。以下の図面の記載において、同一または類似の部分には同一または類似の符号で表している。但し、図面は模式的なものである。したがって、具体的な寸法などは以下の説明を照らし合わせて判断するべきものである。また、図面相互間においても互いの寸法の関係や比率が異なる部分が含まれていることは勿論である。なお、以下の説明において、図面の上側を「上」、下側を「下」、左側を「左」、右側を「右」という。
【００１３】
図１ないし図６は、本発明の一実施形態を示すためのものである。図１は、本発明の一実施形態におけるマルチプロセッサ装置を説明するブロック図である。図１に示すように、マルチプロセッサ装置１００は、ＣＰＵ（Central Processing Unit）ユニット１１０と、Ｉ／Ｏ（Input-Output）制御装置１２０と、ファームウェアプログラム１３１と、管理プログラム１３２と、未実行状態検出部１４１と、動作モード設定部１４２と、ＣＰＵ割当部１４３と、を含んで構成される。
【００１４】
ＣＰＵユニット１１０は、複数のＣＰＵを備える。本実施形態では、ＣＰＵユニット１１０は、２つのＣＰＵ１１１，１１２を含んでいる。なお、説明の簡略化のためにＣＰＵの数が２つの例を示したが、これに限定されず、３つ以上であってもよい。
【００１５】
Ｉ／Ｏ制御装置１２０は、入出力要求を制御するためのものである。Ｉ／Ｏ制御装置１２０には、マルチプロセッサ装置１００の外部の入出力装置（図示両略）から入出力要求が入力され、ファームウェアプログラム１３１の処理結果に基づいて、入出力要求に対する応答を出力する。
【００１６】
ファームウェアプログラム１３１は、Ｉ／Ｏ制御装置１２０を介して入力された入出力要求を処理するためのファームウェアである。そのため、ファームウェアプログラム１３１は、外部の入出両装置の要求に応じて、ＣＰＵ１１１，１１２で実行される。また、ファームウェアプログラム１３１には、相対的に高い優先度（プライオリティ）が設定されている。
【００１７】
管理プログラム１３２は、マルチプロセッサ装置１００の設定などを行うためのプログラムである。管理プログラム１３２には、相対的に低い、通常の優先度（プライオリティ）が設定されている。なお、管理プログラム１３２は、本発明における「第２プログラム」の一例に相当する。
【００１８】
未実行状態検出部１４１は、プログラムが未実行状態であることを検出するためのものである。ここで、「未実行状態」とは、実際にプログラムが実行されていない場合に限定されず、実際にはプログラムが実行さていても、実行さていないと見なすことができる場合を含む意味である。本実施形態では、未実行状態検出部１４１は、管理プログラム１３２が未実行状態であることを検出する。
【００１９】
なお、未実行状態検出部１４１は、例えば、汎用の（専用ではない）オペレーティングシステム（ＯＳ）が有する（提供する）スケジューリングの機能の一部として実装することが可能である。
【００２０】
動作モード設定部１４２は、ＣＰＵユニット１１０の動作モードを設定するためのものである。本実施形態において設定される動作モードは、ファームウェアプログラム１３１が管理プログラム１３２に優先してＣＰＵ１１１，１１２の全てを使用可能な第１モードＡと、管理プログラム１３２がＣＰＵ１１１，１１２の少なくとも１つを使用する第２動作モードＢとが存在する。動作モード設定部１４２は、第１動作モードＡおよび第２動作モードＢのうちのいずれかの動作モードを設定する。
【００２１】
ＣＰＵ割当部１４３は、ＣＰＵユニット１１０の動作モードに基づいて、プログラムが使用するＣＰＵを割り当てる（設定する）ためのものである。本実施形態では、ＣＰＵ割当部１４３は、動作モード設定部１４２により設定された動作モードに基づいて、ファームウェアプログラム１３１および管理プログラム１３２の少なくとも一方に、ＣＰＵ１１１，１１２を割り当てる。
【００２２】
なお、ＣＰＵ割当部１４３は、例えば、汎用の（専用ではない）オペレーティングシステム（ＯＳ）が有する（提供する）リソース割り当ての機能の一部として実装することが可能である。
【００２３】
図２は、図１に示した第１動作モードＡを説明する図である。図２に示すように、第１動作モードＡは、ＣＰＵ１１１，１１２単位の区別がなく、ＣＰＵ割当部１４３は、ファームウェアプログラム１３１に、使用するＣＰＵ１１１，１１２を制限することなく（無制限に）、割り当てることができる。これにより、ファームウェアプログラム１３１は、入出力装置からの要求（入出力要求）が増加して負荷が高くなった場合に、ＣＰＵ１１１，１１２の全てを使用することができるので、要求される時間内に入出力要求に対する応答を返す（要求される応答時間を満たす）ことが可能となる。
【００２４】
また、ＣＰＵ割当部１４３は、ファームウェアプログラム１３１の実行の合間（切れ目）に、ファームウェアプログラム１３１が使用するＣＰＵ１１１，１１２を切り替えることができるので、比較的短時間でＣＰＵ１１１，１１２を空けることができる。そのため、ＣＰＵ１１１，１１２が切り替わったことを確認する必要がなく、ＣＰＵ割当部１４３はオーバヘッドの小さい（少ない）方式を採用することができる。
【００２５】
なお、ＣＰＵ割当部１４３は、入出力要求の要求元である外部の入出力装置に対し、割り込みを発生させるＣＰＵ１１１，１１２を設定するようにしてもよい。この場合、ＣＰＵ割当部１４３は、割り込みを発生させるＣＰＵ１１１，１１２として、ファームウェアプログラム１３１に割り当てられたＣＰＵ１１１，１１２を設定することが好ましい。
【００２６】
一方、第１動作モードＡでは、入出力要求による負荷が高すぎると（過負荷であると）、ＣＰＵ割当部１４３が、ＣＰＵ１１１，１１２のいずれも管理プログラム１３２に割り当てることができなくなり、管理プログラム１３２が実行されない可能性がある。
【００２７】
図３は、図１に示した第２動作モードＢを説明する図である。図３に示すように、第２動作モードＢは、ＣＰＵ１１１，１１２単位に区別があり、ＣＰＵ割当部１４３は、例えば、ＣＰＵ１１１には管理プログラム１３２のみ、ＣＰＵ１１２にはファームウェアプログラム１３１のみ、を割り当てる。これにより、管理プログラム１３２の実行が保証される。
【００２８】
一方、入出力要求による負荷が高い（過負荷である）場合に、ファームウェアプログラム１３１は、要求される時間内に入出力要求に対する応答を返す（要求される応答時間を満たす）ことができない可能性がある。
【００２９】
図４は、図１に示した第２動作モードＢの変形例を説明する図である。なお、第２動作モードＢは、図３に示す例に限定されない。第２動作モードＢでは、管理プログラム１３２が少なくとも１つのＣＰＵを使用していればよい。例えば、図４に示すように、第２動作モードＢ’では、ファームウェアプログラム１３１を、ファームウェアプログラム１３１ａおよびファームウェアプログラム１３１ｂに分割し、ＣＰＵ割当部１４３は、管理プログラム１３２の実行を妨げない範囲で、管理プログラム１３２が使用するＣＰＵ１１１に、ファームウェアプログラム１３１の一部であるファームウェアプログラム１３１ｂを割り当てるようにしてもよい。
【００３０】
図５は、図１に示した未実行状態検出部１４１の動作を説明するフローチャートである。図５に示すように、未実行状態検出部１４１は、管理プログラム１３２のプロセス群のそれぞれに対して、実行すべき当該プロセスがない状態でのＣＰＵの待ち時間（実行待ち時間）を取得する（Ｓ２０１）。そして、未実行状態検出部１４１は、取得した実行待ち時間に基づいて、管理プログラム１３２のプロセス群の統計情報、例えば、平均時間を算出する（Ｓ２０２）。
【００３１】
次に、未実行状態検出部１４１は、Ｓ２０２において算出した平均時間が所定のしきい値以上であるか否かを判定する（Ｓ２０３）。なお、所定のしきい値は、あらかじめ設定されているものとする。
【００３２】
Ｓ２０３の判定の結果、Ｓ２０２において算出した平均時間が所定のしきい値以上である場合、管理プログラム１３２は未実行状態であると見なすことができる。なお、管理プログラム１３２は、要求される応答時間がファームウェアプログラム１３１ほど短く（厳しく）ないので、このような条件で未実行状態であると見なしても十分である。よって、未実行状態検出部１４１は、管理プログラム１３２の未実行状態を検出し（Ｓ２０４）、処理Ｓ２００を終了する。
【００３３】
一方、Ｓ２０３の判定の結果、Ｓ２０２において算出した平均時間が所定のしきい値以上でない、すなわち、所定のしきい値未満である場合、管理プログラム１３２は実行状態であると考えられる。よって、未実行状態検出部１４１は、平均時間が所定のしきい値以上になるまで、再度、Ｓ２０１以下の各ステップを繰り返す。
【００３４】
図６は、図１に示した動作モード設定部１４２の動作を説明するフローチャートである。未実行状態検出部１４１が管理プログラム１３２の未実行状態を検出すると、動作モード設定部１４２は、処理Ｓ３００を実行する。すなわち、図６に示すように、動作モード設定部１４２は、現在の動作モードが第２動作モードＢであるか否かを判定する（Ｓ３０１）。なお、初期状態のときに、動作モードは、動作モード設定部１４２によって、第１動作モードＡまたは第２動作モードＢのいずれかに設定されている。
【００３５】
Ｓ３０１の判定の結果、現在の動作モードが第２動作モードＢである場合、動作モード設定部１４２は、動作モードを、第２動作モードＢから第１動作モードＡに変更する（Ｓ３０２）。これにより、管理プログラム１３２の未実行状態が検出されたときに、第１動作モードＡが設定される。
【００３６】
Ｓ３０２のステップの後、動作モード設定部１４２は、Ｓ３０２において第１動作モードＡに変更してから所定時間を経過した否かを判定する（Ｓ３０３）。
【００３７】
Ｓ３０３の判定の結果、第１動作モードＡに変更してから所定時間を経過した場合、動作モード設定部１４２は、動作モードを、第１動作モードＡから第２動作モードＢに変更し（Ｓ３０４）、処理Ｓ３００を終了する。
【００３８】
なお、ファームウェアプログラム１３１の実行が完了したことを検出する必要はなく、動作モード設定部１４２は、所定時間を経過後に、第１動作モードＡから第２動作モードＢに変更する。
【００３９】
一方、Ｓ３０３の判定の結果、第１動作モードＡに変更してから所定時間を経過していない場合、動作モード設定部１４２は、所定時間を経過するまで、Ｓ３０３のステップを繰り返す（所定時間を経過するまで待つ）。
【００４０】
Ｓ３０１の判定の結果、現在の動作モードが第２動作モードＢでない、すなわち、現在の動作モードが第１動作モードＡである場合、動作モード設定部１４２は、動作モードを変更する必要がないため、何もせずに、処理Ｓ３００を終了する。
【００４１】
このように、本実施形態のマルチプロセッサ装置１００、スケジューリング方法、および、スケジューリングプログラムによれば、管理プログラム１３２の未実行状態が検出されたときに、ファームウェアプログラム１３１が管理プログラム１３２に優先してＣＰＵ１１１，１１２の全てを使用可能な第１動作モードＡが設定される。これにより、ファームウェアプログラム１３１は、入出力装置からの要求（入出力要求）が増加して負荷が高くなった場合に、ＣＰＵ１１１，１１２の全てを使用することができるので、要求される時間内に入出力要求に対する応答を返す（要求される応答時間を満たす）ことが可能となる。一方、例えば、管理プログラム１３２の未実行状態を検出しなかったとき（管理プログラム１３２の実行状態のとき）や、第１動作モードＡに変更してから所定時間を経過したときに、管理プログラム１３２がＣＰＵ１１１，１１２の少なくとも１つを使用する第２動作モードＢが設定される。これにより、管理プログラム１３２の実行が保証される。したがって、分割損を生じることなく、要求される時間内に入出力要求に対する応答を返すことができるととともに、管理プログラム１３２の実行を保証することができ、ＣＰＵ１１１，１１２のリソースを効率的に使用して費用対効果（コストパフォーマンス）を向上させることができる。
【００４２】
なお、前述の各実施形態の構成は、組み合わせたり或いは一部の構成部分を入れ替えたりしたりしてもよい。また、本発明の構成は前述の実施形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々変更を加えてもよい。
【００４３】
前述の各実施形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００４４】
（付記１）複数のマイクロプロセッサを備えるマルチプロセッサ装置であって、第１のプログラムが第２のプログラムに優先して前記複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、前記第２のプログラムが前記複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを設定する設定部と、前記設定部により設定された動作モードに基づいて、前記第１のプログラムおよび前記第２のプログラムの少なくとも一方に前記マイクロプロセッサを割り当てる割当部と、前記第２のプログラムの未実行状態を検出する検出部と、を備え、前記設定部は、前記検出部により前記第２のプログラムの未実行状態が検出されたときに、前記第１の動作モードを設定することを特徴とするマルチプロセッサ装置。
【００４５】
（付記２）前記設定部は、前記第１の動作モードを設定してから所定時間を経過したときに、前記第２の動作モードを設定することを特徴とする付記１に記載のマルチプロセッサ装置。
【００４６】
（付記３）前記割当部は、前記第２の動作モードのときに、前記第１のプログラムの一部を、前記前記第２のプログラムが割り当てられた前記マイクロプロセッサに割り当てることを特徴とする付記１または２に記載のマルチプロセッサ装置。
【００４７】
（付記４）前記第１のプログラムは、入出力装置の要求に応じて実行されるファームウェアプログラムであることを特徴とする付記１ないし３のいずれか一つに記載のマルチプロセッサ装置。
【００４８】
（付記５）前記検出部は、前記第２のプログラムが実行可能になってから実行されるまでの時間に基づいて、前記第２のプログラムの未実行状態を検出することを特徴とする付記１ないし４のいずれか一つに記載のマルチプロセッサ装置。
【００４９】
（付記６）複数のマイクロプロセッサを備えるマルチプロセッサ装置のスケジューリング方法であって、第１のプログラムが第２のプログラムに優先して前記複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、前記第２のプログラムが前記複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを設定する設定ステップと、前記設定された動作モードに基づいて、前記第１のプログラムおよび前記第２のプログラムの少なくとも一方に前記マイクロプロセッサを割り当てる割当ステップと、前記第２のプログラムの未実行状態を検出する検出ステップと、を備え、前記設定ステップは、前記第２のプログラムの未実行状態が検出されたときに、前記第１の動作モードを設定することを特徴とするスケジューリング方法。
【００５０】
（付記７）複数のマイクロプロセッサを備えるマルチプロセッサ装置のスケジューリングプログラムであって、第１のプログラムが第２のプログラムに優先して前記複数のマイクロプロセッサの全てを使用可能な第１の動作モードと、前記第２のプログラムが前記複数のマイクロプロセッサのうちの少なくとも１つを使用する第２の動作モードと、のうちのいずれかの動作モードを設定する設定ステップと、前記設定された動作モードに基づいて、前記第１のプログラムおよび前記第２のプログラムの少なくとも一方に前記マイクロプロセッサを割り当てる割当ステップと、前記第２のプログラムの未実行状態を検出する検出ステップと、を備え、前記設定ステップは、前記第２のプログラムの未実行状態が検出されたときに、前記第１の動作モードを設定することを特徴とするスケジューリングプログラム。
【符号の説明】
【００５１】
１００…マルチプロセッサ装置、１１１，１１２…ＣＰＵ、１３１…ファームウェアプログラム、１３２…管理プログラム、１４１…未実行状態検出部、１４２…動作モード設定部、１４３…ＣＰＵ割当部、Ａ…第１動作モード、Ｂ…第２動作モード
【図１】
0005936041.tif 000002
【図２】
0005936041.tif 000003
【図３】
0005936041.tif 000004
【図４】
0005936041.tif 000005
【図５】
0005936041.tif 000006
【図６】
0005936041.tif 000007