(57)【要約】【課題】並列／分散型アプリケーションの開発を支援する方法を提供すること。【解決手段】本発明は、並列／分散型アプリケーションを開発する方法を提供する。開発のプロセスは設計段階、実装段階および試験段階を含む。この方法は、設計段階において、接続グラフの要素および要素間の接続を表すためのスクリプト言語を提供するステップと、実装段階において、アプリケーションの機能を実装するための事前に定義されたモジュールを提供するステップと、実装段階において、モジュールの実行の型を定義するための事前に定義されたエグゼキュータを提供するステップと、実装段階において、複数の演算装置上にアプリケーションを分散するための事前に定義されたプロセス・インスタンスを提供するステップと、試験段階において、試験段階中のアプリケーションを監視および試験するための事前に定義された抽象化レベルを提供するステップと、を含む。【選択図】図８
2006338660.tif 000002
【特許請求の範囲】
【請求項１】
並列／分散型アプリケーションを開発する方法であって、
前記開発のプロセスは設計段階、実装段階および試験段階を含んでおり、
前記方法は、
前記設計段階において、接続グラフの要素および前記要素間の接続を表すためのスクリプト言語を提供するステップと、
前記実装段階において、前記アプリケーションの機能を実装するための事前に定義されたモジュールを提供するステップと、
前記実装段階において、前記モジュールの実行の型を定義するための事前に定義されたエグゼキュータを提供するステップと、
前記実装段階において、複数の演算装置上に前記アプリケーションを分散するための事前に定義されたプロセス・インスタンスを提供するステップと、
前記試験段階において、前記試験段階中の前記アプリケーションを監視および試験するための事前に定義された抽象化レベルを提供するステップと、
を含む方法。
【請求項２】
前記実装段階において、前記スクリプト言語に基づいて表される前記接続グラフを処理して、前記事前に定義されたモジュールに基づく特定のモジュールを定義および構成し、前記特定のモジュールの前記接続性を定義するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記事前に定義されたモジュールは、前記並列／分散型アプリケーションのコンピュータ処理の一部として機能ブロックを実装するための演算モジュールを含む、請求項１または２に記載の方法。
【請求項４】
前記演算モジュールは、入力データ、出力データ、入力イベント、出力イベントおよび初期化パラメータを含むインタフェースを各々が有する、請求項３に記載の方法。
【請求項５】
新しい入力データが利用可能な場合にのみコンピュータ処理を行う受動演算モジュールが提供される、請求項３または４に記載の方法。
【請求項６】
前記事前に定義されたモジュールは、前記演算モジュールによって使用される、または前記演算モジュール間で交換されるデータを表すデータ・モジュールを含む、請求項３乃至請求項５のいずれかに記載の方法。
【請求項７】
前記データ・モジュールは共用データを表す、請求項６に記載の方法。
【請求項８】
各データ・モジュールは特定のデータ型のデータを含む、請求項６または７に記載の方法。
【請求項９】
前記データ・モジュールは、入力ゲート、出力フィールドおよび初期化パラメータを含むインタフェースを各々が有する、請求項６乃至請求項８のいずれかに記載の方法。
【請求項１０】
同期化を必要とするデータが識別され、適切な同期化機構が各データ・モジュールに適用される、請求項６乃至請求項９のいずれかに記載の方法。
【請求項１１】
前記データ・モジュールのそれぞれは、前記接続された演算モジュールのための書き込みまたは読み取りメモリを提供するバッファのリストをインスタンス化する、請求項１０に記載の方法。
【請求項１２】
前記事前に定義されたモジュールは、演算モジュールまたはデータ・モジュールを接続する接続パターンを表すリンク・モジュールを含む、請求項１乃至請求項１１のいずれかに記載の方法。
【請求項１３】
前記リンク・モジュールのそれぞれは特定の通信プロトコルを実装する、請求項１２に記載の方法。
【請求項１４】
前記リンク・モジュールのそれぞれは、共通のプロセスに属するモジュールをリンク化する局所メモリ・ポインタ・リンク、およびネットワークを経由してモジュールをリンク化するネットワーク・リンクを含むリンク型の群から１つのリンク型と関連する、請求項１２または１３に記載の方法。
【請求項１５】
前記演算モジュールのそれぞれは１つのエグゼキュータに割り当てられる、請求項３乃至請求項１４のいずれかに記載の方法。
【請求項１６】
前記エグゼキュータのそれぞれは、１組の演算モジュールを１つまたは複数のスレッドでグループ化する、請求項１乃至請求項１５のいずれかに記載の方法。
【請求項１７】
前記エグゼキュータのそれぞれは、前記割り当てられたモジュールのための実行パターンを表す、請求項１乃至請求項１６のいずれかに記載の方法。
【請求項１８】
前記エグゼキュータのそれぞれは、各モジュールが自身のスレッドを有する並列実行、同じスレッド中で全てのモジュールが順番に実行される順次実行、および全てのモジュールの実行のうち１つのステップのみが行われる１ステップ実行を含むパターンの群のうちから実行パターンの１つの型と関連する、請求項１７に記載の方法。
【請求項１９】
前記実行パターンの群が、スレッドの全ての演算モジュールが連鎖の中で第１のモジュールについてのデータの利用可能性に応じて順番に実行される連鎖実行と、一度につき１つの演算モジュールが実行される段階的実行とをさらに含む、請求項１８に記載の方法。
【請求項２０】
前記プロセス・インスタンスのそれぞれは、モジュールのプロセスへの割当を含む、請求項１乃至請求項１９のいずれかに記載の方法。
【請求項２１】
前記演算モジュールのそれぞれは、１つのプロセス・インスタンスに割り当てられる、請求項１乃至請求項２０のいずれかに記載の方法。
【請求項２２】
前記実装段階において、１組のエグゼキュータを１つのプロセス・インスタンスとして単一のプロセスにグループ化するステップを含む、請求項１乃至請求項２１のいずれかに記載の方法。
【請求項２３】
前記事前に定義されたモジュールのそれぞれは、前記モジュールによって実装される前記機能を監視するためのモニタリング符号を含む、請求項１乃至請求項２２のいずれかに記載の方法。
【請求項２４】
前記事前に定義された抽象化レベルは機能レベルを含み、前記機能レベルにおいて、少なくとも１つのモジュールが前記モジュールの機能に関連したモニタリング・データを生成する、請求項１乃至請求項２３のいずれかに記載の方法。
【請求項２５】
前記事前に定義された抽象化レベルはモジュール・レベルを含み、前記モジュール・レベルにおいて、少なくとも１つのモジュールの前記入力および出力が監視され、該モジュールに関連したデータ・フローが分析される、請求項１乃至請求項２４のいずれかに記載の方法。
【請求項２６】
前記事前に定義された抽象化レベルは、前記アプリケーションの全体を監視するためのシステム・レベルを含む、請求項１乃至請求項２５のいずれかに記載の方法。
【請求項２７】
前記スクリプト言語は、実行中に使用されて、前記アプリケーションを実行する、請求項１乃至請求項２６のいずれかに記載の方法。
【請求項２８】
並列／分散型アプリケーションの開発を支援する方法であって、
前記開発のプロセスは設計段階、実装段階および試験段階を含み、
前記方法は、
前記設計段階において、接続グラフの要素および前記要素間の接続を表すためのスクリプト言語を提供するステップと、
前記実装段階において、前記アプリケーションの機能を実装するために演算モジュール、データ・モジュールおよびリンク・モジュールを提供するステップであって、前記モジュールおよび該モジュールの接続性は、前記スクリプト言語に基づいて表されるように、前記接続グラフから自動的に生成される、ステップと、
前記試験段階において、前記試験段階中の前記アプリケーションを監視および試験するための事前に定義された抽象化レベルを提供するステップと、
を含む方法。
【請求項２９】
演算装置上で作動する場合、請求項１乃至請求項２８のいずれかに記載の方法を実装するコンピュータ・ソフトウェア・プログラム。
【請求項３０】
請求項２９に記載のコンピュータ・ソフトウェア・プログラムを含む記憶装置。
【請求項３１】
請求項１乃至請求項２８のいずれかに記載の方法を使用して開発された制御システムを有するロボット。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列／分散型アプリケーションの開発の分野に関する。ここで、開発プロセスは、設計段階、実装段階および試験段階を含むことができる。本発明によって、例えば、人間型ロボットまたはその他のアクター（actor、行為物）（例えば自動誘導式自動車）の制御システムの設定のためなどのアプリケーションが見出される。このような人間型ロボットまたはその他のアクターにおいて、アクターの動作を制御するために、異なる性質の入力信号が並列形式で処理される。
【背景技術】
【０００２】
一般に、並列／分散型アプリケーションは、定められたタスクを実行するために互いに並列し、影響し合って動作する複数の機能から構成される。このような複雑なシステムの設計には、特にシステム動作の整合処理、および並列するタスク間の相互作用のためのプロトコルの定義に関して努力が必要である。タスク間の相互作用は、データの整合処理のために同期化させなければならない。さらに、マシン間の通信はネットワーク・プロトコルを使用して、ネットワーク中で同期化させる方法で実行されなければならない。
【０００３】
並列／分散型アプリケーションの開発は、複数の方法で設定されてよく、１つまたは複数の既知のツールによって支援されてもよい。このようなアプリケーションまたはシステム開発の以下の既知のプロセスは図９に示される。
【０００４】
このプロセスは、システムの開発の間に周期的であるか、または反復してもよい。開発はシステムが存続する間、継続されてもよい。複数の段階の主な必要条件は以下の通りである。
【０００５】
◎設計段階：
システムの全体的な機能の定義、並列の下位タスクでのシステムの下位区分、下位プロセスの相互作用で起こる可能性のある危険状態の定義、危険状態（例えばデッドロック）の分析。
【０００６】
◎開発段階：
並列プロセスの処理、並列スレッドの処理、共用データの処理、セマフォ（semaphore）、ロック機構および条件変数の処理。
【０００７】
◎試験／モニタリング段階：
システム中で問題の解決、またはバグの発見および除去が可能となるように、ユーザがシステム動作を理解できるようにする機構の定義。
【０００８】
以下の先行技術の参照は後に示す文献で簡潔に説明される。
【０００９】
開発／デバッギング時間の一部は使用されるライブラリの型によって保存されてもよい。PTHREAD（非特許文献１）のようなライブラリは、同期化のために、スレッドおよび最も一般的なロック機構の処理に使用されてもよい。このようなライブラリの使用には並列プログラミングについて深い知識が必要である。しかし、それにも関わらず、このライブラリを用いて開発されるアプリケーションはエラーとなる傾向がある。ＡＣＥ（非特許文献２）、ＰＶＭ（非特許文献３）およびＭＰＩ（非特許文献４）のようなその他のライブラリは、より根本的な方法で並列／分散型コンピュータ処理の中で並列実行およびデータ交換に関する問題を解決することを目的とする。これらのライブラリは、依然として一定量のタスクをユーザに残すとしても、並列プログラミングの問題のほとんどに対応する。さらに、こうしたライブラリの使用はモジュール方式または明確な設計のいかなる種類のものも、これらの態様をユーザの善意に任せ、強制することはしない。
【００１０】
並列／分散型アプリケーションの開発を支援するその他の方法は、Rhapsody（非特許文献５）またはRational Rose（非特許文献６）のようなツールによって達成される。これらのツールはモジュール方式およびＵＭＬ（Unified Modeling Language、統一モデリング言語）の使用によるより包括的な設計を用いる。しかしながら、これらのツールでは、例えば通信、並列処理および同期化などの多くの重要な態様の定義および実装がユーザに任される。それらの目標は設計、コーディングおよび試験段階に対応できる整合された開発環境の中にプログラミング言語を含めることであるが、それでもなおユーザにかなりの程度の裁量の余地を残す。
【００１１】
モジュール方式（データおよびコンピュータ処理を分割すること）で設計段階および開発段階に対応するさらなるツールはControlShell（非特許文献７）である。このツールを用いて、複数の型のモジュールの構成によってアプリケーションの設計と開発を同時に行うことができる。このツールは並列／分散型アプリケーションを処理することができるが、制御システムのために特別に設計されてきたため、モジュールの処理は常にモジュールの実行を直接的に（同期方式）、またはステート・マシンを通して間接的に（非同期方式）制御するサンプル・レート装置の制御下にある。さらに、スレッド間のデータ同期化の処理はユーザに任されている。
【非特許文献１】David R. Butenhof, “Programming with POSIX Threads”, Addison Wesley Publishing, 2000.
【非特許文献２】Douglas C. Schmid and Stephen D. Houston, “C++ Network Programming, volume Vol.1: Master Complexity with ACE and Patterns”, Addison Wesley Publishing, 2002.
【非特許文献３】Al Geist, Adam Beguelin, Jack Dongarra, Weicheng Jiang, Robert Mancheck, Vaidy Sunderam, “PVM: Parallel Virtual Machine, A User's Guide and Tutorial for Networked Parallel Computing”, MIT Press, Cambridge, Massachusetts, USA, 1994.
【非特許文献４】Marc Snir, Steve Otto, Steven Huss-Lederman, David Walker and Jack Dongarra, “MPI: The complete reference”, MIT Press, Cambridge, Massachusetts, USA, http://www.netlib.org/utk/papers/mpi-book.html, 1996.
【非特許文献５】http://www.ilogix.com.
【非特許文献６】Wendy Boggs, Michael Boggs, “Mastering UML with Rational Rose 2.0”, Sybex Books, 2002.
【非特許文献７】Real-Time Innovation, “ControlShell User's Manual”, Version 7.0, Real-Time Innovation Inc., California, 2001.
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上記の先行技術の考察から、本発明の目的は並列／分散型アプリケーションの設計、作成および試験のための改善された支援策を提供することである。
【００１３】
本発明の別の目的は、データ方式の並列／分散型アプリケーションの設計、作成および試験を支援することである。
【００１４】
本発明のさらなる目的は、並列／分散型アプリケーションのための開発プロセスを単純化することである。
【００１５】
本発明のさらに別の目的は、強固で確実な並列／分散型アプリケーションの開発を効率的な方法で可能にすることである。
【課題を解決するための手段】
【００１６】
上記の目的は、添付の独立の特許請求項の特徴の手段によって達成される。有益な特徴は従属の特許請求項の中で定義される。
【００１７】
本発明の第１の態様によって、並列／分散型アプリケーションの開発を支援する方法が提唱される。本方法は開発プロセスが設計段階、実装段階および試験段階を含み、以下のステップ、すなわち、前記設計段階において、接続グラフ（connectivity graph）の要素およびそれらの間の接続を表すためのスクリプト言語を提供するステップと、前記実装段階において、前記アプリケーションの機能を実装するための事前に定義されたモジュールを提供するステップと、前記実装段階において、前記モジュールの実行の型を定義するための事前に定義されたエグゼキュータ（Executor）を提供するステップと、前記実装段階において、複数の演算装置上に前記アプリケーションを分散するための事前に定義されたプロセス・インスタンス（Process Instance）を提供するステップと、前記試験段階において、前記試験段階中の前記アプリケーションを監視および試験するための事前に定義された抽象化レベルを提供するステップと、を含む。
【００１８】
この方法は実装段階において、事前に定義されたモジュールに基づく特定のモジュールを定義および構成し、特定のモジュールの接続を定義するためにスクリプト言語に基づいて表される接続グラフを処理するステップをさらに含んでもよい。
【００１９】
事前に定義されたモジュールは、並列／分散型アプリケーションのコンピュータ処理の一部として機能ブロックを実装するための演算モジュールを含んでもよい。演算モジュールは、入力データ、出力データ、入力イベント、出力イベントおよび初期化パラメータを含むインタフェースを各々が有していてもよい。新しい入力データが利用可能な場合にだけコンピュータ処理を行う受動的な演算モジュールが提供されてもよい。
【００２０】
事前に定義されたモジュールは演算モジュールによって使用される、および／または演算モジュール間で交換されるデータを表すデータ・モジュールをさらに含んでもよい。データ・モジュールは共用データを表してもよく、各データ・モジュールは特定のデータ型のデータを含んでもよい。データ・モジュールは入力ゲート、出力フィールドおよび初期化パラメータを含むインタフェースを各々が有してもよい。本発明の方法の特定の実施形態により、同期化を必要とするデータは識別され、適切な同期化機構が各データ・モジュールに適用される。リソースの同期化は、並列システムに共通のリソースを共用させることが必要な操作である。各データ・モジュールは、接続された演算モジュールのための書き込みまたは読み取りメモリを提供するバッファのリストをインスタンス化してもよい。
【００２１】
事前に定義されたモジュールはまた、演算モジュールまたはデータ・モジュールを接続する接続パターンを表すリンク・モジュールを含んでもよい。各リンク・モジュールは、特定の通信プロトコルを実装してもよい。各リンク・モジュールは、共通のプロセスに属するモジュールをリンク化するための局所メモリ・ポインタ・リンク（local memory pointer link）、およびネットワーク経由でモジュールをリンク化するためのネットワーク・リンクを含むリンク型の群の中から１つのリンク型と関連してもよい。
【００２２】
本発明の方法の一部の実施形態で、各演算モジュールは１つのエグゼキュータに割り当てられてもよい。一般に、各エグゼキュータは１組の演算モジュールを１つまた複数のスレッドにグループ化してもよい。代替または追加で、各エグゼキュータは割り当てられたモジュールのための実行パターンを表してもよい。次いで各エグゼキュータは、各モジュールが自身のスレッドを有する並列実行（parallel execution）と、全てのモジュールが同じスレッド中で順番に実行される順次実行（sequential execution）と、全てのモジュールの実行のうちの１つのステップだけが行われる１ステップ実行（one step execution）とを含むパターン群の中から実行パターンの１つの型と関連してもよい。実行パターンの群は、スレッドの全ての演算モジュールが連鎖の中で第１モジュールのためのデータの利用可能性によって順番に実行される連鎖実行（chain execution）と、一度につき１つの演算モジュールが実行される段階的実行（step-by-step execution）とをさらに含んでもよい。
【００２３】
本発明の方法の一部の実施形態で、各プロセス・インスタンスはプロセスへのモジュールの割当を含んでもよい。一般に、各演算モジュールは１つのプロセス・インスタンスに割り当てられてもよい。本発明の一部の実施形態で、さらなるステップは実装段階において、１組のエグゼキュータを１つのプロセス・インスタンスとして単一のプロセスにグループ化することを含んでもよい。
【００２４】
事前に定義されたモジュールの各々は、例えば試験段階において、モジュールによって実装される機能を監視するためのモニタリング符号を含んでもよい。事前に定義された抽象化レベルは、少なくとも１つのモジュールがモジュールの機能に関するモニタリング・データを生成する機能レベルを含んでもよい。事前に定義された抽象化レベルは、少なくとも１つのモジュールの入力および出力がそのモジュールに関するデータ・フローを分析するために監視されるモジュール・レベルを追加的または代替的に含んでもよい。事前に定義された抽象化レベルは、アプリケーション全体を監視するためのシステム・レベルを追加的または代替的に含んでもよい。
【００２５】
本発明の方法の特定の実施形態で、アプリケーションを実行するための実行の間にスクリプト言語が使用される。
【００２６】
本発明の別の態様によって、並列／分散型アプリケーションの開発を支援する方法が提唱される。この方法は開発プロセスが設計段階、実装段階および試験段階を含み、以下のステップ、すなわち、前記設計段階において、接続グラフの要素およびそれらの間の接続を表すためのスクリプト言語を提供するステップと、前記実装段階において、前記アプリケーションの機能を実装するために演算モジュール、データ・モジュールおよびリンク・モジュールを提供するステップであって、前記モジュールおよびそれらの接続は前記スクリプト言語に基づいて表される接続グラフから自動的に生成されるステップと、前記試験段階において、前記試験段階中の前記アプリケーションを監視および試験するための事前に定義された抽象化レベルを提供するステップと、を含む。
【００２７】
本発明による方法はオペレーティング・システムとユーザ・アプリケーションとの間の新しい階層を導入する。
【００２８】
この新しい階層は、並列／分散型システムの開発に向けた本発明の方法から生じる。既知の標準的な方法を用いると、並列／分散型システムの開発には多くの複雑な機能を手動で処理することが設計者／開発者に求められるが、一方提唱する方法では、それらの多くが新しい階層によって自動的に処理される。
【００２９】
既知の方法では、ユーザが並列／分散型システムを処理しなければならない細分性（granularity）はアプリケーション・レベルにあるが、一方、提唱する方法では、細分性はモジュール・レベル（すなわち機能、データ構造またはデータ通信方法のレベル）にある。このことによって、一層多くの注意をシステムの要素（モジュール）に費やすことが可能となり、整合性の問題に注意を費やす必要が少なくなるので、並列／分散型システムの開発の各段階は単純化される。なぜなら、提唱する方法によってこれらが自動的に処理されるからである。標準的な方法では、ユーザは開発段階と同期化させておく必要のある設計プロセスを定義または使用しなければならないが、一方提唱する方法では、設計はシステムの実装の一部である。したがって、本発明による方法は、大規模な並列システムの設計および開発に関する新たな方法に基づく。
【００３０】
本発明は、事前に定義されたモジュール、すなわち明確に定義された特性を備えた演算モジュール、データ・モジュールおよびリンク・モジュールの規定によって特に達成される並列／分散型のデータ方式アプリケーションの設計、作成および試験を支援および単純化することを目的とする。
【００３１】
演算モジュールは一般または特定の機能を行ってよいオブジェクトである。各演算モジュールは実行の型（並列、順次、一回など）を定義するエグゼキュータと関連付けられる。データ・モジュールは、送信側演算モジュールから行き先の演算モジュールへ情報を伝えるために使用されるメモリ空間を表す。リンク・モジュールは演算モジュールとデータ・モジュールとの間の接続を定義するオブジェクトである。各リンク・モジュールは、通信で使用されることを必要とするチャネルを決める特定の通信プロトコルに関連付けられる。本発明により、モジュールおよびマシン対マシンの通信との間の同期化は、本発明の方法で開発された分散型アプリケーションのために自動で処理される。したがって、本発明は並列システム、ロボット・アプリケーションおよびリアルタイム・システムの開発の分野に対応する。リアルタイム・システムは、重度の故障状態を回避するために明確な（拘束された）応答時間の制約を満たさなければならないシステムである。リアルタイム・システムの例は時計、洗濯機またはロボットである。
【００３２】
本発明の方法は、並列／分散型システムの実装との設計の密接な結合を達成することを特に提唱する。本発明によれば、システムの設計は全ての部分でシステムを説明する接続グラフによって定義される。次いで、接続グラフの要素の１対１写像を可能にするスクリプト言語が使用される。したがってスクリプト言語を用いることでアプリケーションが説明される。スクリプト言語はモジュールとそれらの間の接続を説明する一種の高レベル言語である。並列／分散型システムの設計を作成し、視覚化するグラフィック・ツールは、設計の内部表現のためにこの言語を使用してもよい。同時に、この言語はそれを実行するために現行のシステムによって使用されてもよい。両方の目的が達成されるために、この言語は単純で弾力的でなければならない。
【００３３】
システムは、矢印によって複雑な仕方で相互接続された多く（できる限り多く）の機能ブロックで表すことにより設計されてもよい。この型の表現は非常にモジュール化されており、これによってアプリケーションの構造および特性をすばやく見通すことができる。この抽象化レベルを用いることで、効率的な方法でのモジュール・システムの作成が可能となる。本発明の方法で、機能ブロックは演算モジュールに写像されてもよい。それらの間の接続はリンク・モジュールによって表される。接続を流れるデータ（すなわち機能間の通信）は、図の矢印を通るデータの型を識別するデータ・モジュールによって表される。
【００３４】
並列／分散型システムは典型的に、ＣＰＵの能力、メモリ空間およびネットワークの通信能力の点でリソースを大量に使用する方法に依存している。ＣＰＵ能力の最善の使用法は一般に、オペレーティング・システム・プロセスおよびスレッドを用いることによって達成される。このようなプロセスおよびスレッドの使用法は、各並列アプリケーションで原則として同じである。
【００３５】
本発明による方法はこの態様をさらに発展させ、スレッドおよびプロセスへの機能の割当を処理するエグゼキュータおよびプロセス・インスタンスの概念を導入することによって並列化を処理することを提唱する。
【００３６】
この点に関する１つの着想は、各演算モジュールは１つのエグゼキュータおよび１つのプロセス・インスタンスに属してもよいということである。エグゼキュータはスレッドの処理を隠し、その一方で、プロセス・インスタンスはオペレーティング・システム・プロセスの処理を隠す。
【００３７】
エグゼキュータには複数の種類があってよい。例として、各モジュールが自身のスレッドを有する並列エグゼキュータ、全てのモジュールが同じスレッド中で順番に実行される順次エグゼキュータ、または全てのモジュールの実行のうちの１つのステップだけが行われる一回エグゼキュータが挙げられる。
【００３８】
本発明のこの態様によって、各演算モジュールはエグゼキュータにスレッドを制御することを可能にさせる内部的に定義されたコンピュータ処理の１つのサイクルを有する。
【００３９】
プロセス・インスタンスは群を定義し、したがってどのモジュールがどのプロセスに属するかを決定する。したがって、モジュール間の通信が同じプロセスに限定されるか、または２つ以上の異なるプロセスに属する場合、この分割化を通して暗黙のうちに１つの単一のグラフのうちから複数のプロセスを作成することができる。これにより、システムはプロセス間通信か、またはプロセス内通信かによって適切な通信プロトコルを選択することができる。
【００４０】
並列／分散型システムがＣＰＵの時間を集中的に使用するように、タスクがデータを待っているということはこのようなシステムの実行中には典型的な状況である。換言すれば、並列のタスクは一部のデータが利用可能な場合にのみコンピュータ処理が行えるということは頻繁に生じる状況である。本発明の方法は、この種の動作を全般に処理するための「データ方式」パラダイムを使用することを提案する。データ方式システムは通常、モジュールが必要とするデータの利用可能性によってモジュールの実行を調節する。本明細書で述べる方法により、演算モジュールに標準のパターンを挿入することによってデータ方式パラダイムを簡単に実装することができる。このパターンは、モジュールの入力データの利用可能性によってコンピュータ処理への防壁を作成する。このことは同時に利用可能なＣＰＵリソースの最適な利用法を保証する。
【００４１】
並列／分散型アプリケーションは、共用データの整合性を保つための機構を必要とする。本発明の方法によれば、データ・モジュールの概念によって都合よく達成できる。データ・モジュールは２つ以上の接続されたモジュール間で交換される共用データを保持する。データ・モジュールの概念を用いて、同期化を必要とするデータを簡単に識別し、次いで適切な同期化機構を適用することが可能である。同期化それ自体はよく知られた問題であり、使用してもよい利用可能な一般的なパターンは数多くあるので、それらを本明細書で説明することはしない。本発明の方法は、接続された演算モジュールおよびエグゼキュータとプロセス・インスタンスを通じてユーザによって定義される並列レベルによって、データ・モジュール中でふさわしい同期化機構を適用することを提唱する。
【００４２】
モジュール方式の実施に加えて、演算モジュール、データ・モジュールおよびリンク・モジュールの概念によって、並列／分散型システムの中で監視能力を簡単に実装することが可能となる。このことはモジュールへのモニタリング符号の挿入を規定する標準のモジュール形式の定義によって達成される。このような符号はモジュール自身の動作に関連した情報を生成することができる。分析ツールは、ユーザが効率的な方法で現行システムを試験、デバッグおよび監視することができるようにする現行システムの概観を得るために、この情報を処理してもよい。
【００４３】
本発明に従った方法により、上述の態様のうちの１つまたは複数を単一のツールの中で組み合わせることができる。この点に関して、本方法は並列／分散型システムの設計、符号開発および実行様式のための包括的かつ一般的な原理を規定する。
【発明を実施するための最良の形態】
【００４４】
本発明のさらなる態様および利点は、添付の図面について、次に続く本発明の実施形態の説明から明らかとなろう。
【００４５】
図中、同じ参照符号は同じか、または同種の要素に用いられる。
【００４６】
完全なアプリケーションの開発を説明する前に、本発明の実施形態による開発支援ツールの特定の態様を論ずる。
【００４７】
スクリプト言語
既知の通り、並列／分散型システムは、非開発者のためにシステムの全体構造を隠した形式（ソース・コード）の低レベル言語の補助を受けて開発されてもよい。全体の構造は、開発プロセスの間に保持され更新される必要がある多くの設計文書、図表およびグラフの中に通常は保存される。システムのその都度その都度の開発段階において設計文書を正しく整列させることは、概して難しいタスクである。
【００４８】
本発明は、モジュールを構成し、アプリケーションの接続を確立して最終的にそれを実行するために、文書形式で設計を定義するのに使用されることができ、同時に構成の目的でシステムによって使用されることができるスクリプト形式でアプリケーションを直接設計することを提唱する。
【００４９】
演算モジュール
並列／分散型システムは複数の機能から構成される。これらの機能は通常、モジュールの設計に必ずしも従う必要のない方法で組み立てられる。本発明による演算モジュールの定義によって、モジュールの設計は並列／分散型システム中でコンピュータ処理を行う構造ブロック間の明確な区別を実施する。
【００５０】
図１は、並列／分散型システムの特定の１つまたは複数の機能を実装する演算モジュール１０の原理図である。モジュール１０はまた、明確に定義されたインタフェースを提供する。このインタフェースは入力１２、出力１４、入力イベント１６、出力イベント１８および初期化パラメータ２０を含む。
【００５１】
入力１２は特定の型（読み取り専用）によって定義されたモジュール１０のための入力データを識別する。出力１４は、モジュール１０が定義された型（書き込み専用）で書き込んだ出力データを識別する。入力イベント１６は、モジュール１０の外部で一定のイベントが生じた場合にモジュールが受信する信号を識別する。出力イベント１８は、モジュール１０の内部で一定のイベントが生じた場合にモジュールが送信する信号を識別する。初期化パラメータ２０はモジュール１０のインスタンス化のための初期値を識別する。
【００５２】
演算モジュール１０の入力１２および出力１４は、以下でさらに説明するように、リンク・モジュールを通してデータ・モジュールの適切な型に接続されなければならない。モジュール１０の入力イベント１６は、リンク・モジュールを通して演算モジュールの出力イベントに接続されなければならない。初期化パラメータ２０は特定のモジュール・インスタンス、ここではモジュール１０の初期属性を表す。これらのパラメータを通して、異なる開始条件の演算モジュール１０をインスタンス化することができる。
【００５３】
演算モジュールは一般に、能動または受動であってよい。すなわち、能動モジュールは無条件でコンピュータ処理を行い、受動モジュールはいくつかの新しい（前回のコンピュータ処理時間の点でより新しい）入力データが利用可能な場合にのみコンピュータ処理を行うことができる。この特性により、（クロック方式システムとは逆に）データ方式システムの定義が可能となり、加えてこの特性は利用可能なＣＰＵリソースをより効率的に使用する。
【００５４】
データ・モジュール
並列／分散型システムでは、１つの機能からその他へ通信によって生じる結果を通信するのに使用されるデータを識別することができる。このデータは通常、システム中で全体的に定義され、機能の中で局所的に定義される。本発明によるデータ・モジュールの定義によって、モジュールの設計は、機能がシステム中で必要とする通信インタフェースの明確な定義を実施する。
【００５５】
図２に、明確に定義されたインタフェース中でデータ型を特定する、発明によるデータ・モジュール２２の実施形態を示す。このインタフェースは入力ゲート２４、出力フィールド２６および初期化パラメータ２８を含む。
【００５６】
入力ゲート２４は、演算モジュール（不図示）が新しい値を書き込む（書き込み）ために使用するデータの入口点を識別する。出力フィールド２６は、そこで演算モジュールがデータの全体または一部を読む（読み取り）接続点を識別する。初期化パラメータ２８はデータ・モジュール２２のインスタンス化のための初期値を識別する。
【００５７】
データ・モジュール２２の入力ゲート２４は、（以下でさらに説明するように、リンク・モジュールを通して）同じデータ型の演算モジュールの出力に接続されなければならない。出力フィールド２６は、（リンク・モジュールを通して）同じデータ型の演算モジュールの入力に接続されなければならない。初期化パラメータ２８は特定のデータ・モジュール・インスタンス、ここではデータ・モジュール２２の初期属性を表す。これらのパラメータを通して、異なる開始条件のデータ・モジュール２２をインスタンス化することができる。
【００５８】
リンク・モジュール
設計段階において、システムは矢印によって相互接続された多数のブロックとして表されてもよい。この型の表現は非常にモジュール化されており、これにより一見してシステムの中を理解することができる。本発明によるリンク・モジュールの定義は、矢印の概念を要約する。これにより、システムは設計の必要条件によって異なる型の通信チャネルを定義することができる。
【００５９】
図３に、本発明の実施形態による演算モジュールＣＭ１、ＣＭ２、データ・モジュールＤＭ１およびリンク・モジュールＬＭ１、ＬＭ２の協調の例を示す。２つの演算モジュールＣＭ１、ＣＭ２はリンク・モジュールＬＭ１およびＬＭ２を経由してデータ・モジュールＤＭ１に接続される。
【００６０】
以下の２つの事例は区別が可能である。
【００６１】
１）全てのモジュールが同じプロセスに属する。ＣＭ１からＤＭ１への通信、およびＤＭ１からＣＭ２への通信は、出力データをＣＭ１からＤＭ１へコピーし、このデータのポインタをＣＭ２に与えることによって行われる。すなわち、ＣＭ１、ＣＭ２およびＤＭ１は同じメモリ空間を共用する。リンク・モジュールＬＭ１およびＬＭ２は「局所メモリ・ポインタ・リンク型」である。
【００６２】
２）ＣＭ１はマシンＭ１（図３には図示せず）に属し、ＣＭ２はマシンＭ２に属する。この場合、ＤＭ１経由のＣＭ１からＣＭ２への通信は、例えばネットワークを使用して行われる。リンク・モジュールＬＭ１およびＬＭ２は「ネットワーク・リンク型」である。
【００６３】
一般に、システム中にリンク・モジュールの複数の型が表れてもよく、それらの各々はデータ輸送のために異なるチャネルを使用する。
【００６４】
エグゼキュータ／プロセス・インスタンス
並列／分散型システムは、並列コンピュータ処理設備を効率的に使用するために設計および／または実装されなければならない。マシン内で、並列プロセスまたは並列スレッドは利用可能なハードウェアを完全に使用するために用いられる。本発明によるエグゼキュータ経由のプロセスおよびスレッド、ならびにプロセス・インスタンスの使用法を次に説明する。
【００６５】
エグゼキュータ（Executor）は、１組の演算モジュールを１つまたは複数のスレッド（thread）にグループ化する。スレッドは、エグゼキュータによって定義される特定の方針でこれらのモジュールを実行する、エグゼキュータの例は、以下の通りである。
【００６６】
◎並列（Parallel）：１つのスレッドを各演算モジュールに割り当てる。
【００６７】
◎順次（Sequential）：全ての演算モジュールを同じスレッド中で順番に実行する。
【００６８】
◎連鎖（Chain）：全ての演算モジュールを同じスレッド中で順番に実行するが、実行は第１のモジュールの利用可能性に条件付けられる。
【００６９】
◎一回（Once）：演算モジュールのコンピュータ処理の１つのステップを実行する。
【００７０】
◎段階的（Step By Step）：双方向の区間を通して、ユーザは一度につき１つの演算モジュールを実行できる。
【００７１】
プロセス・インスタンス（Process-Instance）は、１組のエグゼキュータを単一のプロセスにグループ化する。これにより、アプリケーションを複数のマシン上に簡単に分散することができる。
【００７２】
エグゼキュータおよびプロセス・インスタンスの抽象化の概念によって、開発者にはスレッドおよびプロセスの使用を手動でコーディングする必要性がなくなる。さらに、これによって設計者は実装コードの中で開発する必要はなく、システムの並列レベルをいつでも決定および変更することができる。
【００７３】
データ・バッファリング
データ・バッファリングの態様は、スレッドとマシン間のデータの同期化の処理に関連する。並列／分散型システムの開発およびデバッグの段階で、通常、共用リソースの同期化およびシリアル化の処理に大きな労力が費やされている。これらの態様の処理を支援する標準的な機能が存在している。しかしながら、そのような機能の使用法は難解でわずらわしい。並列／分散型システム中の多くのバグは、これらのツールの不適切な使用法に起因する。本発明による方法は、本発明のデータ・モジュールを処理するための二重バッファリング技術の使用によってこの問題の解決を提案する。各データ・モジュールはバッファのリストをインスタンス化する。このリストは、書き込みと読み取りのために双方に専用の方法で演算モジュールによって使用される。
【００７４】
図４ａと４ｂは、機能構成図の形式での例を示す。図４ａは、出力データの書き込みの目的で２つの演算モジュールＣＭ１、ＣＭ２がデータ・モジュールＤＭ１に接続されるアプリケーションを示す。入力データの読み取りの目的で３つの演算モジュールＣＭ３、ＣＭ４、ＣＭ５がデータ・モジュールＤＭ１に接続される。
【００７５】
図４ａの例示的アプリケーションで使用される二重バッファリング技術を図４ｂに詳細に示す。データ・モジュールＤＭ１はバッファ・リスト３０に関連付けられる。バッファ・リスト３０は実効（effective）データを含む。各書き込みモジュール（ＣＭ１およびＣＭ２）は発行される次の新しい値のためにバッファを所有する。書き込みモジュールは新しい値を発行する度に、バッファを発行し、次の値のために新しいバッファを取得する。各読み取りモジュール（ＣＭ３、ＣＭ４、ＣＭ５）はバッファ・リストから発行された値を読み取ることができる。
【００７６】
この方法によって、同期化が自動的に処理されるようにモジュール間の通信を分離することができる。これによって、無閉塞通信が可能になる。すなわち、演算モジュールは通信問題のためにコンピュータ処理を停止する必要がなくなる。さらにデッドロックの危険も排除される。
【００７７】
モニタリング
システムのモニタリング（monitoring、監視）によって開発者およびユーザはシステムの動作を見通すことができる。モニタリングを通じて、システムの全体的な実行を決定する部分の動きについて追跡し続けることができる。並列／分散型システムは、最もモニタリングが難しいアプリケーションに属している。コンピュータ処理の並列実行のため、全体的な動きを追跡することは本質的に難しい。この問題は、ユーザが参照することができる全体的な組織の概念のない、モジュール・パラダイムに従うように設計されていないシステム中で拡大される。
【００７８】
本発明による方法は、システムモニタリングの複数の抽象化レベルを特定することを提唱する。
【００７９】
◎機能レベル：演算モジュールに埋め込まれた機能は、機能が行っていることを示し、監視データを作り出すことができる。
【００８０】
◎モジュール・レベル：モジュールは、入力と出力を用いて、局所的なデータ・フローを分析するために監視される。
【００８１】
◎システム・レベル：全体のシステムは、全体的な動作の高レベルな説明を引き出すために監視される。
【００８２】
これらのレベルは、本発明により容易に（例えば自動的に）実装可能である。
【００８３】
次に、ロボット工学の分野から本発明が並列／分散型システムの開発を支援する方法の実施例を説明する。
【００８４】
特に、多数のセンサおよびエフェクタによってロボットを制御するアプリケーションが考えられる。ロボットは以下のものを含む。
【００８５】
◎センサ：視覚センサ（例えばステレオ・カメラ・セット）、聴覚センサ（例えばマイクロフォン）および触覚センサ（例えば外力フィードバック皮膚センサ）。
【００８６】
◎エフェクタ：例えば、ロボット全体またはその下位要素の位置を制御するモータ。
【００８７】
ロボット・アプリケーションは、ロボットに明確に定義された動きをさせるようにセンサおよびエフェクタを使用する制御システムとして機能することを想定されている。
【００８８】
図５は例示的制御システムを示す。本発明の方法の実施形態による事前に定義されたモジュールが設計に使用される。演算モジュールは一重線の枠の長方形として、データ・モジュールは二重線の長方形として、リンクはモジュールを相互接続する矢印として示す。
【００８９】
ロボットの動作は次のモジュールで作られる。
【００９０】
◎センサ：これらのモジュールはセンサが存在することを表す。
【００９１】
◎前処理モジュール：これらのモジュールにおいて、センサの入力情報は、信号をフィルタにかけて、この信号を空間マップおよびオブジェクト・マップ（中間表現）へ写像するために前処理される。
【００９２】
◎表現演算（representation computation）モジュール：これらのモジュールにおいて、センサから取り込まれた情報から意味論的（semantic）情報が引き出される。このモジュールの出力は、場面／状況の表現である。
【００９３】
◎タスク／目標モジュール：これらのモジュールにおいて、ロボットが実行することができるタスクが作られる。さらに、これらのタスクが達成する目標が作られる。したがって、環境から自主的に判断を下すことができる自律的ロボットが作成される。先の処理段階から来る表現を形成するために、フィードバックが使用される。
【００９４】
◎動作：これらのモジュールは、ロボットによってタスクがいかに実行されるべきかを定義する。これらのモジュールは動作計画を用意し、タスクを行うために実行されることが必要な下位動作の順序を作成する。したがって、これらのモジュールの出力は、アクチュエータによって実行されるべき命令の順序である。
【００９５】
◎アクチュエータ：これらのモジュールはアクチュエータが存在することを表す。
【００９６】
これまでに説明した態様は、ロボット制御システムの高レベルな設計の一部を構成する。次に、各モジュール（演算、データ）のインタフェース、各リンクの型およびシステムの実行パターンが定義されなければならない。
【００９７】
例として、「視覚処理」モジュールについて考える。図５から、このモジュールが２つの入力と２つの出力を必要とすることは明らかである。このモジュールの結果として生じるインタフェースを図６に示す。図は、本発明を実装する開発ツールによってコンピュータ・システムの表示装置上に生成されるビュー（view）を示す。各モジュールのインタフェースを定義した後、リンクおよび実行パターンが特定されなければならない。リンクの定義はモジュール間の通信の型に関係する。一般的に、標準のメモリの通信リンク型は同一のマシン上で実行されるモジュール間の通信のために設置される。専用のネットワークのリンク型は、マシン間の接続のために設置される。
【００９８】
さらなる設計の決定は、エグゼキュータの型およびモジュールの結合を選択することを通して、設計者によって決められる実行パターンに関係する。したがって、設計者は本明細書で説明する本発明の実施形態による開発ツールの支援を受けて、簡単、迅速かつ効率的な方法で必要なスレッドを作成し、実行の間に同期化を決定する。
【００９９】
図５のロボット制御システムのための例示的な実行パターンを図７に表す。フィードバックの接続は、明らかであるという理由から示すことはしない。この図でモジュールは、並列的および順次的エグゼキュータを使用してグループ化されている。並列エグゼキュータは、エグゼキュータに含まれる各モジュールのための１つのスレッドを作成する。順次エグゼキュータは、全てのモジュールが順番に実行される１つのスレッドを作成する。
【０１００】
さらなる設計の決定は、複数のマシン上での実行のために、システムの下位区分に関係する。本明細書で説明する実施例のシステムでは、１つのマシンを各エグゼキュータに割り当てることを選択するのがふさわしい。このことは図８に示す。フィードバックの接続は明らかであるために再び省略されている。
【０１０１】
図８に示すエグゼキュータおよびマシンへのモジュールの割当は、単に１つの可能な選択に過ぎない（その他の有効な組合せが可能である）。本発明の方法では、任意の必要な同期化パターンを達成するか、または負荷分散の態様を取り入れるために、エグゼキュータおよびマシンの柔軟な再割当が可能となる。
【０１０２】
モジュールの細分性は、当然ながら、ユーザのアプリケーションのための設計上の尺度であることは当業者には理解されよう。しかしながらこの要素もまた、本発明による方法を実装する開発ツールまたは環境の実装の間に考慮されるべきである。これは、ユーザ・アプリケーションは以下の態様の任意の組合せを所有してよいためである。
【０１０３】
◎データ・モジュールのための小型データ
◎データ・モジュールのための大型データ
◎演算モジュールのための少量のコンピュータ処理
◎演算モジュールのための大量コンピュータ処理
【０１０４】
発明の利点
本発明の方法によって、並列／分散型システムの設計段階、開発および試験段階を単純化することができる。本発明による単一の開発ツールを用いて、以下の利益が達成される。
【０１０５】
◎並列／分散型システムの設計は実際的な実装に結び付けられ、それによってモジュール方式が実施される。
【０１０６】
◎並列／分散型システムに必要とされる一般的な機能の実装は自動化される。
【０１０７】
◎システムの試験およびモニタリングが単純化される。
【０１０８】
本発明による方法は並列／分散型アプリケーションの設計および作成を支援する。このようなアプリケーションの作成には設計の一貫性、同期化、データ通信、コンピュータ処理の整合性およびその他多くの問題の処理が必要である。このような問題は通常、並列／分散型システム、ロボット・アプリケーションおよびリアルタイム・システムを含むアプリケーションの中で生じている。
【０１０９】
並列／分散型システムに関して、提唱する方法は次の利点、すなわち、（データ・モジュール、演算モジュールおよびリンク・モジュールの概念による）モジュール設計の柔軟性、１つのマシン内またはマシン間での（エグゼキュータおよびプロセス・インスタンスの概念による）並列化の処理のための、モジュールと多くの機構間でのデータ通信および同期化の自動処理を提供する。
【０１１０】
ロボット・アプリケーションに関して、提唱する方法は次の利点、すなわち、ユーザが定義した細分性を有してもよいモジュールでシステムを構築する可能性、１つの単一の環境で大規模なロボット・システムの集積を単純化するモジュール間のデータ通信の自動処理、ロボット・システムの構造の単純なスクリプト定義ファイルによる構成および変更の可能性、（データ・バッファリングの概念による）高性能データ通信を提供する。
【０１１１】
リアルタイム・システムに関して、提唱する方法は次の利点、すなわち、（データ・モジュール、演算モジュールおよびリンク・モジュールの概念による）モジュール設計の柔軟性、各モジュールでのモジュールとコンピュータ処理との間の通信を処理するための、事前に定義されたパターンによるコンピュータ処理の決定論を保持する可能性を提供する。
【０１１２】
本発明によって、開発対象の並列／分散型システムの構造をモジュール化することが可能となり、ここでは演算モジュール、データ・モジュールおよびリンク・モジュールの定義を通じてデータ、機能およびリンクが明確に分離される。
【０１１３】
本発明は、実行イベントを引き起こすデータ経路を表す接続グラフの定義を通じて開発された並列の環境でのデータ方式システムを提唱する。
【０１１４】
本発明により、同期化および無閉塞通信についてモジュール間のデータ通信を完全に自動的に処理することが可能となる。同期化によって、異なるスレッド／プロセス間でのデータ共用の自動処理が達成される。無閉塞通信を通じて、本発明による方法によってシステムの各演算モジュールは新しい出力を生成し、これらの出力のための読み取りモジュールの状態に関係なく、すぐにコンピュータ処理を続けることができる。これらの２つの特徴の組合せが通信レベルでのシステムのデッドロックの発生を防ぎ、従来技術中で知られているような並列／分散型システムの通信への依存性を除去する。
【０１１５】
本発明により、リンク・モジュールの概念を通して通信チャネルの処理および定義が単純化される。
【０１１６】
本発明によって、ユーザは単純でわかり易い方法でスレッドおよびプロセスを演算モジュールに割り当てることができる。これらの特徴は、システムの設計者／開発者のタスク量が劇的に減少し、コンピュータ処理と並列化との間の強い依存性が取り除かれるということを意味する。
【０１１７】
本発明は、ユーザ・アプリケーションのグラフの接続性の定義のために、簡単なスクリプト言語を使用したスクリプト言語の表現力と再構成能力との有益な組合せを規定する。この簡単なスクリプト言語の使用とモジュール方式の採用によって、本発明による方法はシステムの設計段階を重要視して、設計と開発との間のギャップを除去するか、または最小化する。
【図面の簡単な説明】
【０１１８】
【図１】演算モジュールの実施形態の概略図である。
【図２】データ・モジュールの実施形態の概略図である。
【図３】機能構成図の形式で、演算モジュール、データ・モジュールおよびリンク・モジュールの協同作用を示す図である。
【図４ａ】機能構成図の形式で、データ・アクセスのためのデータ・モジュールおよび演算モジュールの動作の原理を示す図である。
【図４ｂ】機能構成図の形式で、データ・アクセスのためのデータ・モジュールおよび演算モジュールの動作の原理を示す図である。
【図５】機能構成図の形式で、本発明の実施形態によるロボット制御システムを示す図である。
【図６】図５に示す実施形態のモジュールのうちの１つのインタフェースを示す図である。
【図７】図５のシステムの実行パターンを示す概略図である。
【図８】マシン上への図５および図７のシステムの分割を示す概略図である。
【図９】既知の設計プロセス図である。
【符号の説明】
【０１１９】
１０  演算モジュール
１２  演算モジュールのインタフェース：入力
１４  演算モジュールのインタフェース：出力
１６  演算モジュールのインタフェース：入力イベント
１８  演算モジュールのインタフェース：出力イベント
２０  演算モジュールのインタフェース：初期化パラメータ
２２  データ・モジュール
２４  データ・モジュールの入力ゲート
２６  データ・モジュールの出力フィールド
２８  データ・モジュールのための初期化パラメータ
３０  バッファ・リスト
ＣＭ１、ＣＭ２、ＣＭ３、ＣＭ４、ＣＭ５  演算モジュール
ＤＭ１  データ・モジュール
ＬＭ１、ＬＭ２  リンク・モジュール
【図１】
2006338660.tif 000003
【図２】
2006338660.tif 000004
【図３】
2006338660.tif 000005
【図４ａ】
2006338660.tif 000006
【図４ｂ】
2006338660.tif 000007
【図５】
2006338660.tif 000008
【図６】
2006338660.tif 000009
【図７】
2006338660.tif 000010
【図８】
2006338660.tif 000011
【図９】
2006338660.tif 000012