(57)【特許請求の範囲】
【請求項１】
複数の計算機がネットワークを介して相互に接続されてなるシステムにおいて、
前記各計算機が具備するエージェントプラットフォームが、
分散アプリケーションを制御するためのスクリプト言語の入力を受け、前記スクリプト言語を解釈して実行するシェルエージェントと、
前記計算機にローカルなファイルシステムの情報を提供するローカルサービスエージェントと、
アプリケーションを制御するアプリケーションエージェントと、
を有し、前記シェルエージェント、ローカルサービスエージェント、及び、前記アプリケーションエージェントにそれぞれ実行の場を提供するエージェントベースと、
エージェントを他の計算機上のエージェントベースに移動する機能を提供するエージェント移動手段と、
エージェントが自計算機又は他の計算機の他のエージェントと通信を行うための機能を提供するリモートコール手段と、
アプリケーションエージェントを生成するエージェント生成手段と、
を備え、
前記スクリプト言語の入力に対して、前記各計算機に分散したアプリケーションの実行を制御し、
前記シェルエージェントが、スクリプト言語を実行する上での現在のディレクトリを管理する現在ディレクトリと、
前記スクリプト言語を構文解析する構文解析手段と、コマンドを解析して実行するコマンド解析・実行手段とを備えたシェルインタプリタと、
を含み、
前記現在ディレクトリが、リモート計算機上のエージェントベースを指し示す時に、前記シェルエージェント自身を、前記エージェント移動手段によって、前記リモート計算機に移動して、アプリケーションエージェントを実行する、
ことを特徴とする分散アプリケーション制御システム。
【請求項２】
前記シェルエージェントが、エージェントのリポジトリパステーブルをさらに備え、
アプリケーションエージェントを、リポジトリパス上から検索して実行する、
ことを特徴とする請求項１記載の分散アプリケーション制御システム。
【請求項３】
前記シェルエージェントが、エージェントの状態を管理する状態テーブルをさらに備え、
前記状態テーブルが、エージェントの並列実行カウントと、端末実行フラグと、を備え、
前記現在ディレクトリに格納されている現在ベースが、リモート計算機である時に、エージェントの状態が並列実行状態ではなく、且つ、端末実行モードでもない場合に、シェルエージェントを、前記リモート計算機に移動させる、
ことを特徴とする請求項１又は２記載の分散アプリケーション制御システム。
【請求項４】
前記シェルエージェントによるアプリケーションエージェント生成のために、前記各計算機にローカルな資源へのアクセスを補助するローカルサービスエージェントを呼び出す手段を備え、
アプリケーションエージェントを生成する時に、前記シェルエージェントが直接、前記エージェント生成手段を呼び出すのではなく、前記ローカルサービスエージェントを介してアプリケーションエージェントを生成する、
ことを特徴とする請求項１乃至３のいずれか一に記載の分散アプリケーション制御システム。
【請求項５】
前記シェルエージェントが、エージェント参照テーブルをさらに備え、
前記エージェント参照テーブル中に格納された外部に起動中のアプリケーションエージェントに対して、移動や命令実行の依頼を行う、
ことを特徴とする請求項１乃至４のいずれか一に記載の分散アプリケーション制御システム。
【請求項６】
前記アプリケーションエージェントが、前記計算機に依存したアプリケーションの起動手段を備え、
前記シェルエージェントの指示で、前記アプリケーションを生成して管理する、ことを特徴とする請求項１、２、５のいずれか一に記載の分散アプリケーション制御システム。
【請求項７】
前記アプリケーションエージェントが、前記計算機に備えられた拡張子アプリケーション対応テーブルを参照して、ファイルの拡張子の種類によって起動するアプリケーションを選択する手段を備え、
前記シェルエージェントの指示で、前記選択されたアプリケーションを生成して管理する、ことを特徴とする請求項１、２、４、５、６のいずれか一に記載の分散アプリケーション制御システム。
【請求項８】
前記エージェントプラットフォームが、スレッド生成手段をさらに備え、
入力されたスクリプト言語に、並列実行が指定されている場合、前記スクリプト言語を実行するのに必要な分のスレッドを生成して、アプリケーションの並列実行を制御する、ことを特徴とする請求項１記載の分散アプリケーション制御システム。
【請求項９】
前記エージェントプラットフォームが、生成されたスレッドによるリモート計算機中のアプリケーションエージェントを生成する時に、前記リモート計算機中のエージェントベース中にサブシェルエージェントを有し、
前記サブシェルエージェントが、アプリケーションエージェント生成を代行する、ことを特徴とする請求項８記載の分散アプリケーション制御システム。
【請求項１０】
複数の計算機がネットワークを介して相互に接続されるシステムにおける分散アプリケーション制御方法であって、
前記各計算機が、それぞれのエージェントプラットフォームにおいて、シェルエージェントが、分散アプリケーションを制御するために入力されたスクリプト言語を解釈して実行し、
ローカルサービスエージェントが、計算機にローカルなファイルシステムに関する情報を提供し、
アプリケーションエージェントがアプリケーションを制御し、
前記シェルエージェントと、前記ローカルサービスエージェントと、前記アプリケーションエージェントとに対して、エージェントベースがそれぞれの実行の場を提供し、
エージェントが他の計算機の他のエージェントベースに、エージェント移動機能を介して移動自在とされ、
エージェントが自計算機又は他の計算機中の他のエージェントとリモートコール機能を介して通信を行い、
前記シェルエージェントは、入力されたスクリプト言語を解釈して、エージェント生成機能を介してアプリケーションエージェントの生成を制御し、
スクリプト言語の入力に対して、前記各計算機に分散したアプリケーションの実行を制御し、
前記シェルエージェントが、スクリプト言語を実行する上での現在のディレクトリを管理するとともに、入力されたスクリプト言語の構文解析と、コマンドの解析と実行を行い、
現在のディレクトリがリモート計算機上のエージェントベースを指し示す時にシェルエージェント自身を、前記リモート計算機に移動してアプリケーションエージェントを実行する、ことを特徴とする分散アプリケーションの制御方法。
【請求項１１】
前記シェルエージェントが、さらに、エージェントのリポジトリパステーブルを参照して、アプリケーションエージェントを、リポジトリパス上から検索して実行する、ことを特徴とする請求項１０記載の分散アプリケーションの制御方法。
【請求項１２】
前記シェルエージェントが、エージェントの状態を管理する状態テーブルのエージェントの並列実行カウントと端末実行フラグの情報を用い、現在ディレクトリに格納されている現在ベースが、リモート計算機である時に、エージェントの状態が並列実行状態でなく、端末実行モードでもないときに、シェルエージェントをリモート計算機に移動させる、ことを特徴とする請求項１０又は１１に記載の分散アプリケーションの制御方法。
【請求項１３】
前記シェルエージェントが、アプリケーションエージェントの生成にあたり、前記シェルエージェントが直接に前記エージェント生成機能を呼び出すのではなく、各計算機上のローカルな資源に対してアクセスを補助するローカルサービスエージェントを介して、前記アプリケーションエージェントを生成する、ことを特徴とする請求項１０記載の分散アプリケーションの制御方法。
【請求項１４】
前記シェルエージェントが、エージェント参照テーブルを有し、前記エージェント参照テーブル中に格納されている、外部に起動中のアプリケーションエージェントに対して、移動や命令実行の依頼を行う、ことを特徴とする請求項１０乃至１３のいずれか一に記載の分散アプリケーションの制御方法。
【請求項１５】
前記アプリケーションエージェントが、計算機に依存したアプリケーションの起動を行う機能を備え、前記シェルエージェントの指示で前記アプリケーションを生成して管理する、ことを特徴とする請求項１０、１１、１４のいずれか一に記載の分散アプリケーションの制御方法。
【請求項１６】
前記アプリケーションエージェントが、前記各計算機に備えられた拡張子アプリケーション対応テーブルを用いて、ファイルの拡張子の種類によって起動するアプリケーションを選択し、前記シェルエージェントの指示で前記で選択されたアプリケーションを生成して管理する、ことを特徴とする請求項１０、１１、１３、１４、１５のいずれか一に記載の分散アプリケーションの制御方法。
【請求項１７】
前記エージェントプラットフォームが、スレッド生成機能を有し、入力されたスクリプト言語に並列実行の記述がある時に、並列実行に必要な分のスレッドを生成して、アプリケーションの並列実行を制御する、ことを特徴とする請求項１０記載の分散アプリケーションの制御方法。
【請求項１８】
前記エージェントプラットフォームが、生成されたスレッドによるリモート計算機中のアプリケーションエージェントを生成する時に、リモート計算機中のエージェントベース中にサブシェルエージェントを生成し、前記サブシェルエージェントがアプリケーションエージェント生成を代行する、ことを特徴とする請求項１０記載の分散アプリケーションの制御方法。
【請求項１９】
複数の計算機がネットワークを介して相互に接続され、
前記各計算機のエージェントプラットフォームが、分散アプリケーションを制御するためのスクリプト言語の入力を受けて、それを解釈し、実行するシェルエージェントと、
前記計算機にローカルなファイルシステム等の情報を提供するローカルサービスエージェントと、
アプリケーションを制御するためのアプリケーションエージェントと、
前記シェルエージェントと前記ローカルサービスエージェントと前記アプリケーションエージェントに実行の場を提供するエージェントベースと、
エージェントが他の計算機の他のエージェントベースに移動する機能を提供するエージェント移動手段と、
エージェントが、自計算機又は他の計算機の他のエージェントと通信を行うための機能を提供するリモートコール手段と、
アプリケーションエージェントを生成するための機能を提供するエージェント生成手段と、を備え、スクリプト言語の入力に対して前記各計算機に分散したアプリケーションの実行を制御し、
前記シェルエージェントが、スクリプト言語を実行する上での現在のディレクトリを管理する現在ディレクトリと、
前記スクリプト言語を構文解析する構文解析手段と、コマンドを解析して実行するコマンド解析・実行手段とを備えたシェルインタプリタと、
を含み、
前記現在ディレクトリが、リモート計算機上のエージェントベースを指し示す時に、前記シェルエージェント自身を、前記エージェント移動手段によって、前記リモート計算機に移動して、アプリケーションエージェントを実行する分散アプリケーション制御システムにおいて、
前記シェルエージェント、前記ローカルサービスエージェント、前記アプリケーションエージェント、前記エージェントベース、前記エージェント移動手段、前記リモートコール手段、及び前記エージェント生成手段を、前記計算機で実行させるためのプログラムを記録した記録媒体。
【請求項２０】
複数の計算機がネットワークを介して相互に接続され、
前記各計算機のエージェントプラットフォームが、分散アプリケーションを制御するためのスクリプト言語の入力を受けて、それを解釈し、実行するシェルエージェントと、
前記計算機にローカルなファイルシステム等の情報を提供するローカルサービスエージェントと、
アプリケーションを制御するためのアプリケーションエージェントと、
前記シェルエージェントと前記ローカルサービスエージェントと前記アプリケーションエージェントに実行の場を提供するエージェントベースと、
エージェントが他の計算機の他のエージェントベースに移動する機能を提供するエージェント移動手段と、
エージェントが、自計算機又は他の計算機の他のエージェントと通信を行うための機能を提供するリモートコール手段と、
アプリケーションエージェントを生成するための機能を提供するエージェント生成手段と、を備え、スクリプト言語の入力に対して、前記計算機に分散したアプリケーションの実行を制御し、
前記シェルエージェントが、スクリプト言語を実行する上での現在のディレクトリを管理する現在ディレクトリと、
前記スクリプト言語を構文解析する構文解析手段と、コマンドを解析して実行するコマンド解析・実行手段とを備えたシェルインタプリタと、
を含み、
前記現在ディレクトリが、リモート計算機上のエージェントベースを指し示す時に、前記シェルエージェント自身を、前記エージェント移動手段によって、前記リモート計算機に移動して、アプリケーションエージェントを実行する分散アプリケーション制御システムにおいて、
前記シェルエージェント、前記ローカルサービスエージェント、前記アプリケーションエージェント、前記エージェントベース、前記エージェント移動手段、前記リモートコール手段、及び、前記エージェント生成手段を、前記計算機で実行させるためのプログラムを担持する媒体。
【請求項２１】
１又は複数の他の計算機とネットワークを介して接続される計算機が、
エージェントプラットフォームと、前記計算機にローカルなファイルシステムと、アプリケーションと、エージェントリポジトリとを備え、
前記エージェントプラットフォームは、
前記計算機への入力を受け取る入力部と、
前記計算機からの出力を行う出力部と、
入力されたスクリプト言語を解釈して実行し、アプリケーションエージェントの生成と通信を行うシェルエージェントと、
前記計算機に固有の情報や機能を提供するエージェントであり前記ローカルファイルシステムを管理してシェルエージェントに対して情報の提供を行うローカルサービスエージェントと、
前記シェルエージェントからの要求で所定のタスクを実行するアプリケーションエージェントと、
前記各エージェントに対して実行中のエージェントプログラムを格納する領域を提供するエージェントベースと、
前記エージェントベース中のエージェントが、他のエージェントプラットフォームに移動する機能を提供するエージェント移動部と、
エージェントベース中のエージェントが、マルチスレッドで動作する時に、新しいスレッドを生成するための機能を提供するスレッド生成部と、
前記エージェントベース中のエージェントが、同じエージェントプラットフォーム中の別のエージェント、あるいは、他のエージェントプラットフォームのエージェントに対して、メソッド呼び出しを行う機能を提供するリモートコール部と、
新しくエージェントを前記エージェントベースの中に生成して実行する時に呼び出され、前記エージェントリポジトリを参照して、エージェントプログラムを検索し、検索結果に基づいて、前記エージェントベースの中に新しくエージェントを生成するエージェント生成部と、
を備え、
前記入力部を通して入力されたスクリプト言語を、前記シェルエージェントが解釈して、前記アプリケーションエージェントを起動し、前記アプリケーションエージェントが実際のアプリケーションを管理し、
前記シェルエージェント、及び、前記アプリケーションエージェントは、前記エージェント移動部を用いて、前記ネットワークを介して、他の計算機に移動自在とされるとともに、前記リモートコール部を介して、前記ネットワークを介して他の計算機中のエージェントと、通信可能とされており、
前記シェルエージェントが、
前記入力部からスクリプト言語の入力を受け、入力されたスクリプト言語を解釈する構文解析部と、コマンドを実行するコマンド解析・実行部と、を具備するシェルインタプリタと、
前記シェルエージェントの実行状態を管理するための状態テーブルと、
前記シェルエージェントの現在ディレクトリを記憶する現在ディレクトリ記憶部と、
を備え、
前記構文解析部は、キーワードを登録したキーワードテーブルを参照し、並列実行文のキーワードで始まる構文を持つ入力を受理した場合には、前記スレッド生成部に対して新しいスレッドの生成を依頼して、並列実行を行い、
前記コマンド解析・実行部は、入力されたコマンドが、前記シェルエージェント内部で処理可能な内部コマンドであるか否かを判定し、判定の結果、内部コマンドの場合、内部コマンド定義を記憶した内部コマンド定義記憶部からコマンドの定義をロードして実行し、その際、前記内部コマンド定義記憶部からロードされた内部コマンドのうち、ディレクトリ移動のコマンドを実行するにあたり、前記シェルエージェント自身の移動を必要とする場合、前記エージェント移動部を呼び出し、
他のエージェントのメソッドを実行する場合には、前記リモートコール部を利用し、
前記コマンド解析・実行部によるコマンド実行の結果は、前記出力部に渡されて、前記計算機から出力され、
一方、外部コマンドの実行の場合、前記シェルエージェントに設けられた外部コマンド実行部にて、エージェントリポジトリより、外部コマンドを実行するエージェントプログラムを検索し、その際、前記エージェントリポジトリ内のどのパスを検索するか否かを決定するために、リポジトリパステーブルを参照し、前記リポジトリパステーブルに格納されたパスについて、順次、前記エージェントリポジトリを検索し、
前記外部コマンド実行部は、前記エージェントリポジトリを検索した結果、必要なエージェントが検索された場合、前記エージェント生成部に対して、エージェントの生成を依頼し、この依頼を受けた前記エージェント生成部が、アプリケーションエージェントを生成し、
さらに、前記外部コマンド実行部は、前記シェルエージェント以外のエージェントにメソッドコールを行う場合、前記リモートコール部を呼び出す、ことを特徴とする計算機。
【請求項２２】
前記ローカルサービスエージェントが、前記外部コマンド実行部から、外部コマンド名と、前記リポジトリパステーブルに格納されたパス情報とを受け取り、前記エージェントリポジトリの検索と、実際のエージェント生成部の呼び出しを行うことで、前記アプリケーションエージェントを生成する、ことを特徴とする請求項２１記載の計算機。
【請求項２３】
前記内部コマンドがディレクトリ移動を表すコマンドである場合、移動先ディレクトリを前記内部コマンドから抽出してディレクトリ構成要素に展開し、ベース名をディレクトリ格納テーブルの現在ベースに、ベース内のディレクトリを、ベース内ディレクトリにそれぞれ格納し、
前記状態テーブルに設けられている、並列実行の深さ情報を格納する並列実行カウンタの値が０であるか否かを検査し、前記並列実行カウンタが０以外の時は、シェルエージェントが並列実行していることを表しており、前記現在ディレクトリ記憶部の値を、前記ディレクトリ移動を表すコマンドで指定された移動先ディレクトリの値に更新し、シェルエージェントは計算機間で移動させず、
前記並列実行カウンタが０である場合には、シェルエージェントは単一スレッドで実行していることから、前記状態テーブルに設けられ、シェルエージェントが端末から入力を待つシェルとして実行されている時は第１の値、バッチコマンドとして特定の端末に接続されないで実行されている時は第２の値に設定される端末モードフラグを参照し、前記端末モードフラグが第１の値のとき、前記ディレクトリ移動を表すコマンドによるシェルエージェントの計算機間移動は行わず、前記現在ディレクトリ記憶部の値の更新だけを行い、
前記端末モードフラグが第２の値の時は、バッチモードの実行であるため、前記現在ディレクトリ記憶部の値と、移動先ディレクトリとを比較し、前記現在ディレクトリ記憶部と移動先ディレクトリとが同一の計算機上にある場合には、前記現在ディレクトリ記憶部の値の更新だけを行い、前記現在ディレクトリ記憶部と移動先ディレクトリとが互いに同一の計算機にない場合には、前記シェルエージェントを、前記移動先ディレクトリの現在ベースが存在する計算機のエージェントベースに移動するように、制御する、ことを特徴とする請求項２１記載の計算機。
【請求項２４】
前記シェルインタプリタの構文解析部において、並列実行文が検出され、並列実行処理を実行するにあたり、
前記状態テーブルの並列実行カウンタに１を加えてシェルエージェントが現在並列実行中であることを記録し、
前記並列実行文中のコマンド数分だけのスレッドを前記スレッド生成部によって生成し、
スレッド変数に生成したスレッド数を記録設定し、
前記並列実行文の中のコマンドを各スレッドで並列に実行し、各スレッドの実行が終了すると、記録されたスレッド変数の値を１だけ減少させ、全てのスレッドが終了した時点で前記スレッド数が０となることで並列実行を終了し、
前記並列実行カウンタの値を１デクリメントして、並列実行処理全体の実行を終了する、ことを特徴とする請求項２１記載の計算機。
【請求項２５】
前記外部コマンド実行部が、前記現在ディレクトリ記憶部に格納されている現在ベースが、実際に、シェルエージェントを実行している実行中ベースと一致しているかを判断し、一致している場合には、実行中ベースに外部のアプリケーションエージェントを生成するため、まず、実行中ベースのエージェントリポジトリのエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するか否かを判断し、アプリケーションエージェントのプログラムが存在すれば、エージェントリポジトリからアプリケーションエージェントのプログラムをロードしてアプリケーションエージェントを実行するように、前記エージェント生成部に対して依頼し、
前記現在ディレクトリ記憶部に格納されている現在ベースとシェルエージェントを実行している実行中ベースとが一致していない場合には、前記リモートコール部を用いて、現在ベース中にサブシェルエージェントを作成し、
前記サブシェルエージェント中で現在ベースのエージェントリポジトリのエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するかを判断し、前記アプリケーションエージェントのプログラムがあれば、前記エージェントリポジトリからアプリケーションエージェントのプログラムをロードしてアプリケーションエージェントを実行するようにエージェント生成部に依頼する、ことを特徴とする請求項２１記載の計算機。
【請求項２６】
前記現在ディレクトリ記憶部に格納されている現在ベースが、実際にシェルエージェントを実行している実行中ベースと一致しているか否かを判断し、一致している場合には、実行中ベースに外部のアプリケーションエージェントを生成するため、まず、実行中ベースの前記ローカルサービスエージェントに外部エージェントの実行依頼を行い、
前記ローカルサービスエージェントは、実行中ベースのエージェントリポジトリのエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するか否かを判断し、前記アプリケーションエージェントのプログラムが存在すれば、エージェントリポジトリからアプリケーションエージェントのプログラムをロードしてアプリケーションエージェントを実行するように、前記エージェント生成部に対して依頼し、
前記現在ディレクトリ記憶部に格納されている現在ベースと、実際にシェルエージェントを実行している実行中ベースとが一致していない場合には、前記リモートコール部を用いて現在ベース中の前記ローカルサービスエージェントに外部エージェントの実行依頼を行い、
前記ローカルサービスエージェントは、現在ベースのエージェントリポジトリのエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するか否かを判断し、アプリケーションエージェントのプログラムが存在すれば、エージェントリポジトリからアプリケーションエージェントのプログラムをロードしてアプリケーションエージェントを実行するように、エージェント生成部に依頼する、ことを特徴とする請求項２１記載の計算機。
【請求項２７】
前記アプリケーションエージェントとして、汎用アプリケーションエージェントを備え、指定されたファイルの拡張子から、拡張子と該拡張子に対応するアプリケーションとの関係を記憶保持する拡張子アプリケーション対応テーブルを参照して検索し、前記ファイルの拡張子と一致した拡張子を持つアプリケーションを起動する、ことを特徴とする請求項２１記載の計算機。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、情報処理システムに関し、特に、エージェントを用いた分散アプリケーション制御システム、制御方法、及びプログラムを記録した記録媒体に関する。
【０００２】
本発明は、後の説明でも明らかとされるように、複数の計算機に分散して存在するファイルを統一的なディレクトリに管理し、各ファイルの提供するサービスを実施するアプリケーションを管理するアプリケーションエージェントを、移動可能な制御用エージェントシステムが、そのファイルの存在する計算機に移動あるいは通信してスクリプトを実行することで、アプリケーション制御を行う分散アプリケーション制御システムに適用して好適とされる技術に関する。
【０００３】
【従来の技術】
例えば、サンマイクロシステムズ社(Sun MicroSystems)のＮＦＳ（Network  File  System）は、よく知られているように、ネットワーク接続された複数の計算機において、リモート計算機のファイルシステムを、計算機のローカルなファイルシステムであるかのように見せてディレクトリ管理し、当該計算機ではローカルなファイルシステムと同じように、リモート計算機のファイルにアクセスすることを可能としている。しかしながら、ファイルに対する処理は、ローカルな計算機によって行われ、リモート計算機上でファイルに対する処理を実行することはできない。
【０００４】
また、例えば文献１（「UNIXネットワークプログラミング、W.リチャード・スティーヴンス著、プレンティスホール、1990」）等に記載されているように、UNIXシステムに実装されているリモートシェルは、リモート計算機上でコマンドを実行するためのスクリプト言語である。このスクリプト言語では、実行する計算機を指定し、該指定された計算機上で、スクリプトで指定されたコマンドを実行する。ただし、一つのスクリプトは、一つの計算機上でだけで解釈される。
【０００５】
複数の計算機上でコマンドを実行するには、それぞれが実行対象計算機を指定した複数のスクリプトを用意し、複数のスクリプトを逐次的に、複数の計算機のそれぞれに対して、リモートシェルとして呼び出すことで実現するしか、手だてがない。
【０００６】
ところで、複数の計算機にまたがって、実行を継続する技術として、移動エージェントシステムが知られている。
【０００７】
例えば文献２（特開平７−１８２１７４号公報）に記載されているように、米国ジェネラルマジック社のテレスクリプトの技術では、エージェントが「go」命令によって、他の計算機を移動する。エージェントが、他のエージェントと通信を行うためには、事前に相手のエージェントが存在する「プレース」という特殊な場所に移動する必要があり、逆に言えば、同じプレースに存在するエージェント間だけで通信を行うことができる。複数の計算機上を巡回してサービスを受けることができることが特徴的であるが、プレース管理と、サービス管理が別々であったこと、複数の計算機に対して、一つのエージェントが並列にアクセスすることができないことなどの制限があった。
【０００８】
また文献３（「William Cockayne， Michael Zyda 著，Mobile Agent，Manning Publications Co.， 1997」）に記載されている「Agent Tcl」、あるいは、別名「D'Agent」は、米国ダートマス大学で開発された移動エージェントである。この移動エージェントは、「Tcl」と呼ばれるシェルスクリプト言語を基にしており、これに、「agent_jump」（エージェントジャンプ）命令による移動機能等が付加されている。「Tcl」は簡易シェルとして利用できるものであり、テレスクリプトのようなプログラム言語と比べて、利用者に簡単に利用できるシェルスクリプト言語である。
【０００９】
しかしながら、「Agent Tcl」においても、エージェントの計算機の移動は、移動命令により行われており、計算機内の資源とは、別途ディレクトリで管理されており、計算機と、計算機内の資源とは、それぞれ、別のディレクトリで管理されており、移動命令と計算機資源の管理は独立に行われている。
【００１０】
また、一つのエージェントは、同時に一つの計算機にしか存在することができないため、複数の計算機の資源を並列的に扱うことはできない。
【００１１】
さらに、例えば文献４（特開平１０−１４９２８７号公報）には、「goto」命令によりエージェントを移動できるスクリプト言語のアクションを述語として記述できる述語論理型の移動エージェントシステムが開示されている。
【００１２】
上記文献４に記載されるシステムにおいて、スクリプト言語は、エージェントの移動を行う記述を書くことができるが、計算機が提供する資源と合わせてディレクトリ管理することはできない。また、複数の計算機の資源に並列にアクセスできない点も、他の移動エージェント言語と同様である。
【００１３】
そして、例えば文献５（特願平１１−０４７０１５号：本願出願時未公開）には、エージェントの移動命令を持ち、実行中のプログラムを他の計算機上に移動させることができるだけでなく、一つのエージェントが複数の計算機上に分散して、並列的に実行を行う機能を備え、一つのプログラムが、複数の計算機に分散して存在するサービスを統合して分散かつ同期的に管理し、ネットワークにまたがる一つのサービスとして提供することを可能とするシステムが記載されている。しかしながら、移動命令と計算機資源の管理が互いに独立に行われており、ネットワークに分散した計算機資源を、利用者に簡単に見せることはできない。
【００１４】
【発明が解決しようとする課題】
上記したように、上記文献等に記載されている技術は、下記記載の問題点を有している。
【００１５】
第１の問題点は、複数のリモート計算機とその計算機の提供する資源を、簡易なディレクトリ構造で管理して、ディレクトリを移動することで、資源のある場所にその資源を管理するエージェントを生成し、資源の制御を対話的に行うことができる制御環境を提供していない、ということである。
【００１６】
その理由は、移動エージェントを用いていないシステムでは、計算機間を簡易に移動する機能を持ち合わせず、リモート計算機上に資源管理用のエージェントを作成することができないためである。
【００１７】
また移動エージェントを用いるシステムであっても、リモート計算機との通信は制限されていたり、あるいは、計算機間の移動と、計算機内資源のディレクトリ管理は、別個に管理されている、ためである。
【００１８】
第２の問題点は、従来の移動エージェントシステムにおいて、複数のリモート計算機の提供するサービスを、一つの制御用エージェントから、逐次的に制御する手段と、分散かつ同期して制御する手段の両者を具備することができない、ということである。
【００１９】
その理由は、上記文献等に記載されている移動エージェントシステムは、移動手段によって、逐次的に複数の計算機を巡回する機能を具備しているものの、一つのエージェントが複数の計算機に分散して存在し、複数のサービスを制御するという機能は具備していないためである。
【００２０】
また、移動機能と分散機能を持つエージェントシステムにおいても、その目的は、エージェントシステムの開発用プログラム言語の構築であって、逐次制御と分散制御を利用者が容易に組み合わせることを主眼においたスクリプト言語の開発という観点を持った開発が存在していないためである。
【００２１】
したがって、本発明は、上記問題点に鑑みてなされたものであって、その目的は、利用者との対話的な環境によって、複数の計算機上の資源を管理するエージェントの生成、移動、終了を、スクリプト言語を用いて、簡単に制御できるシステム及び方法並びに記録媒体を提供することにある。
【００２２】
本発明の他の目的は、リモート計算機上のエージェントの制御を行うシステムに、移動機能と分散機能を持たせ、利用者には、計算機移動と資源管理を一つのディレクトリ構造に見せることで、計算機ネットワークに関して知識を持たない利用者でも、移動機能と分散機能の必要な統合サービスを実現するエージェントを、スクリプト言語によって簡易に記述できるシステム及び方法並びに記録媒体を提供することにある。これ以外の本発明の目的、特徴、利点等は以下の説明から、当業者には、直ちに明らかとされるであろう。
【００２３】
【課題を解決するための手段】
前記目的を達成する本発明に係るシステムは、分散アプリケーションを制御するためのスクリプト言語の入力を受けて前記スクリプト言語を解釈して実行するシェルエージェントと、計算機にローカルなファイルシステムの情報を提供するローカルサービスエージェントと、アプリケーションを直接制御するためのアプリケーションエージェントと、前記シェルエージェントと前記ローカルサービスエージェントと前記アプリケーションエージェントに実行の場を提供するエージェントベースと、エージェントを他の計算機上のエージェントベースに移動させるエージェント移動手段と、エージェントが自計算機又は他の計算機中の他のエージェントと通信を行うリモートコール手段と、アプリケーションエージェントを生成するエージェント生成手段と、前記エージェントベース、前記エージェント移動手段、前記リモートコール手段、前記エージェント生成手段を備えるエージェントプラットフォームと、を備えて構成され、前記スクリプト言語の入力に対して各計算機に分散したアプリケーションの実行を制御する。
【００２４】
本発明に係る分散アプリケーション制御方法は、シェルエージェントが、分散アプリケーションを制御するために入力されたスクリプト言語を解釈して実行し、ローカルサービスエージェントが、計算機にローカルなファイルシステムに関する情報を提供し、アプリケーションエージェントがアプリケーションを直接制御し、前記シェルエージェントと、前記ローカルサービスエージェントと、前記アプリケーションエージェントとに対してそれぞれエージェントベースが実行の場を提供し、エージェントが別の計算機の別のエージェントベースに移動自在とされ、エージェントが自計算機又は他の計算機中の他のエージェントと通信を行い、前記シェルエージェントは入力されたスクリプト言語を解釈してアプリケーションエージェントの生成を制御し、エージェントプラットフォームが前記エージェント生成手段を管理し、スクリプト言語の入力に対して、前記各計算機に分散したアプリケーションの実行を制御する。
【００２５】
【発明の実施の形態】
本発明の実施の形態について以下に説明する。本発明の分散アプリケーション制御システムは、一実施の形態において、スクリプト言語を解釈するシェルエージェントが自らを移動させるか、あるいは、リモート計算機のエージェントプラットフォームと通信することによって複数の計算機に分散したアプリケーションを、一つのスクリプトによって制御可能としたものである。
【００２６】
より詳細には、各計算機（１）は、図２を参照すると、そのエージェントプラットフォーム（２）が、分散アプリケーションを制御するためのスクリプト言語の入力を受けて前記スクリプト言語を解釈して実行するシェルエージェント（１０）と、計算機にローカルなファイルシステムの情報を提供するローカルサービスエージェント（１１）と、アプリケーションを直接制御するためのアプリケーションエージェント（１２）を持つことのできるエージェントベース（９）と、エージェントを他の計算機上のエージェントベースに移動させるエージェント移動手段（１３）と、スレッド生成手段（１４）と、エージェントが自計算機又は他の計算機中の他のエージェントと通信を行うリモートコール手段（１５）と、アプリケーションエージェントを生成するエージェント生成手段（１６）とを備え、入力手段（７）を通して入力されたスクリプト言語を、シェルエージェント（１０）が解釈してアプリケーションエージェント（１２）を起動し、アプリケーションエージェント（１２）が実際のアプリケーション（１８）を管理し、シェルエージェント、アプリケーションエージェントは、エージェント移動手段（１３）を用いて別の計算機に移動自在とされ、リモートコール手段（１５）を用いて別の計算機中のエージェントと通信できる。
【００２７】
シェルエージェントは、シェルインタプリタ（図３の２０）と、現在ディレクトリ（図３の２４）を備えている。
【００２８】
シェルエージェントは、エージェントのリポジトリパステーブル（図３の３１）を備え、アプリケーションエージェントを、リポジトリパス上から検索して実行する。
【００２９】
シェルエージェントのアプリケーションエージェント生成のために、各計算機にローカルな資源へのアクセスを補助するローカルサービスエージェント（図４の１１）を呼び出す手段（図４の３０）を備え、アプリケーションエージェントを生成する時に、シェルエージェントが、直接、エージェント生成手段（１６）を呼び出すのではなく、ローカルサービスエージェント（１１）を介して、アプリケーションエージェントを生成する。
【００３０】
シェルエージェントは、エージェントの状態を管理する状態テーブル（図３の２３）を備え、状態テーブルは、エージェントの並列実行カウントと、端末実行フラグと、を備え、前記現在ディレクトリの現在ベースが、リモート計算機である時に、エージェントの状態が並列実行状態でなく、端末実行モードでもないときに、シェルエージェントを、前記リモート計算機に移動させる。
【００３１】
本発明は、別の実施の形態において、シェルインタプリタが、「ｐａｒａｌｌｅｌ」（パラレル）というキーワードを解釈し、複数のコマンドを並列に実行するために、スレッドの生成、リモート計算機中へのサブシェルエージェント生成を行う。
【００３２】
より詳細には、シェルインタプリタ（図３の２０）が、構文解析手段（図３の２１）を備え、スレッド生成手段（図３の１４）と、リモートコール手段（図３の１３）とを用いて、リモート計算機に、サブシェルエージェント（図１８の５１）を生成する。
【００３３】
入力されたスクリプト言語中に、並列実行を指定する構文（「parallel文」）が存在する場合、前記スクリプト言語を実行するのに必要な分のスレッドを生成して、アプリケーションの並列実行を制御する。
【００３４】
エージェントプラットフォームが、生成されたスレッドによるリモート計算機中のアプリケーションエージェントを生成する時に、前記リモート計算機中のエージェントベース中に、サブシェルエージェントを有し、前記サブシェルエージェントが、アプリケーションエージェント生成を代行する。
【００３５】
本発明は、さらに別の実施の形態において、起動されるアプリケーションエージェントが、計算機に依存した特定アプリケーションプログラムを実行すしたり、あるいは汎用のアプリケーションエージェントを用いることで、ファイルに依存してアプリケーションを選択的に実行する。
【００３６】
より詳細には、アプリケーションエージェント（図２４の１２）は、特定のアプリケーション（図２４の１８）に関係付けられるか、あるいは、汎用アプリケーションエージェント（図２５の９７）として、拡張子アプリケーション対応テーブル（図２５の９８）を用いて、アプリケーション（図２５の１８）を決定する。
【００３７】
シェルエージェントのシェルインタプリタ（図３の２０）は、現在ディレクトリ（図３の２４）の情報を参照しながら、スクリプト言語の解釈と実行を行い、必要に応じて、エージェント移動手段（図３の１３）によるシェルエージェント自身の移動、リモート計算機との通信を行うためにリモートコール手段（図３の１５）、アプリケーションを直接制御するアプリケーションエージェントを生成するためのエージェント生成手段（図３の１６）を呼び出す。
【００３８】
シェルインタプリタの構文解析手段（２１）は、入力されたスクリプト言語のparallel文を実行するためにスレッド生成を、スレッド生成手段（１４）に依頼し、さらにリモートコール手段（１５）を用いて、リモート計算機にサブシェルエージェントを生成し、そのサブシェルエージェントが実際のアプリケーションエージェントをリモート計算機で実行する。
【００３９】
アプリケーションエージェントは、ファイルを、特定のアプリケーションを用いて実行するか、あるいは、汎用のアプリケーションエージェントが、計算機ごとに管理された拡張子アプリケーション対応テーブルを用いて、ファイルの名前に依存して、アプリケーションを決定して、実行する。
【００４０】
なお、シェルエージェント、ローカルサービス、エージェント、アプリケーションエージェント、エージェント移動手段、スレッド生成手段、リモートコール生成手段、エージェント生成手段、シェルエージェントの構文解析手段、コマンド解析・実行手段等は、計算機上で該当プログラムを実行することによってその機能が実現される。これらのプログラムは、公知の静的又は動的な媒体、例えば記録媒体もしくは通信媒体等から所定のインタフェース手段を介して計算機にロードされ、インストトールして実行イメージを実行することで、本発明を実施することができる。
【００４１】
【実施例】
上記した本発明の実施の形態についてさらに詳細に説明すべく、本発明の実施例について図面を参照して詳細に説明する。
【００４２】
図１は、本発明の一実施例のシステム構成を示す図であり、ネットワークスクリプト言語を実行する、ネットワーク接続された複数の計算機よりなる分散処理システムの構成を示す図である。なお、図１には、３台の計算機よりなるシステムが例示されているが、図１をはじめ各図は、本発明を説明するためのものであり、本発明を限定するためのものではなく、例えば本発明において、計算機が３台の構成に限定されるものでないことは勿論である。
【００４３】
図１を参照すると、計算機１Ａ、１Ｂ、１Ｃは、それぞれエージェントプラットフォーム２Ａ、２Ｂ、２Ｃを備え、エージェントプラットフォームは、それぞれエージェントベース９Ａ、９Ｂ、９Ｃを備え、エージェントベース９Ａ、９Ｂ、９Ｃに、それぞれ、エージェント３Ａ、３Ｂ、３Ｃが構築される。
【００４４】
計算機１Ａ、１Ｂ、１Ｃは、ネットワーク４で相互に接続されており、ネットワーク４を用いて、エージェントプラットフォーム間、あるいは、エージェント間の通信、エージェントの移動等が行われる。
【００４５】
図２は、本発明の一実施例における、ネットワークスクリプト言語を実行する計算機の構成の一例を示す図である。
【００４６】
図２を参照すると、計算機１は、入力５を受け、出力６を行い、エージェントプラットフォーム２と、ローカルファイルシステム１７と、アプリケーション１８と、エージェントリポジトリ１９とを備えている。
【００４７】
エージェントプラットフォーム２は、計算機１への入力５を受ける入力手段７と、出力６を行う出力手段８とを備え、シェルエージェント１０と、ローカルサービスエージェント１１と、アプリケーションエージェント１２等の各種実行中エージェントプログラムを格納する領域として、エージェントベース９を備える。
【００４８】
さらに、エージェント移動手段１３と、スレッド生成手段１４と、リモートコール手段１５と、エージェント生成手段１６とを備え、これら各手段はエージェントの実行を補助する機能を具備する。
【００４９】
エージェント移動手段１３は、エージェントベース９中のエージェントが、他のエージェントプラットフォームに移動する機能を提供する。
【００５０】
スレッド生成手段１４は、エージェントベース９中のエージェントが、マルチスレッドで動作する時に、新しいスレッドを生成するための機能を提供する。
【００５１】
リモートコール手段１５は、エージェントベース９中のエージェントが、同じエージェントプラットフォーム中の別のエージェント、あるいは、他のエージェントプラットフォームのエージェントにメソッド呼び出しをする機能を提供する。
【００５２】
エージェント生成手段１６は、新しいエージェントをエージェントベース９の中に生成し、実行する時に呼び出される手段であり、エージェントリポジトリ１９中に、エージェントプログラムを検索し、検索結果に基づいて、エージェントベース９の中に、エージェントを生成する。
【００５３】
シェルエージェント１０は、ネットワークスクリプト言語を解釈し、実行するエージェントであり、ローカルサービスエージェント１１との通信、及び、アプリケーションエージェント１２の生成と通信を行う。
【００５４】
ローカルサービスエージェント１１は、計算機１に固有の情報や機能を提供するエージェントであり、ローカルファイルシステム１７を管理してシェルエージェント１０に対して情報の提供を行う。
【００５５】
アプリケーションエージェント１２には２つの互いに異なる型が存在する。
【００５６】
このうち第１の型のアプリケーションエージェントは、外部のアプリケーション１８をラップする形で存在し、外部のアプリケーション１８がエージェントベース９内のエージェントと通信や交渉する時の仲介を行う。
【００５７】
第２の型のアプリケーションエージェントは、エージェントベース９内のエージェントとして、外部のアプリケーションプログラム１８を持たずに、独立に存在して、特定アプリケーションを実行する。
【００５８】
いずれの場合も、アプリケーションエージェント１２は、シェルエージェント１０からの要求で、ある特定のタスクを実行する。
【００５９】
シェルエージェント１０、ローカルサービスエージェント１１、アプリケーションエージェント１２、及びエージェントベース９、エージェント移動手段１３と、スレッド生成手段１４と、リモートコール手段１５と、エージェント生成手段１６は、計算機１上で実行されるプログラムによりその処理・機能が実現される。本発明の一実施例において、これらのプログラムを記録した記録媒体（ＣＤ−ＲＯＭ、ＦＤ、ＤＶＤ、磁気テープ、リムーバブルＨＤＤ等）から、該記録媒体の読み出し装置、読み出し装置のインタフェースを介して、あるいは、サーバ等から有線もしくは無線の通信伝送媒体を介して伝送されたプログラムを通信装置およびそのインタフェースを介して、計算機に読み出し、該プログラムの実行イメージを主記憶にロードしＣＰＵで実行することで、本発明を実施することができる。
【００６０】
図３は、本発明の一実施例における、シェルエージェント１０の構成の一例を示す図である。図３を参照すると、シェルエージェント１０は、その中心となる構成要素として、シェルインタプリタ２０を備えており、シェルインタプリタ２０は、入力手段７からスクリプト言語の入力を受け、入力されたスクリプト言語を構文解析する構文解析手段２１と、コマンドの解析及び実行を行うコマンド解析・実行手段２２と、を備えている。
【００６１】
構文解析手段２１は、スクリプト言語の構文解析にあたり、構文要素のキーワード文字列である「parallel」等のキーワードを管理登録しているキーワードテーブル２７を参照する。
【００６２】
構文解析手段２１は、「parallel」で始まる構文を持つ入力を受理した場合には、スレッド生成手段１４に対して、新しいスレッドの生成を依頼する。
【００６３】
コマンド解析・実行手段２２は、内部コマンドテーブル２８を参照して、入力されたコマンドが、シェルエージェント１０内部で処理可能であるか否かを判定する。
【００６４】
判定の結果、内部コマンドの場合、内部コマンド定義２９からコマンドの定義をロードして実行する。
【００６５】
コマンド解析・実行手段２２は、内部コマンド定義２９からロードされた内部コマンドのうち、ディレクトリ移動のコマンドを実行するにあたり、シェルエージェント１０自身の移動を必要とする場合、エージェント移動手段１３を呼び出す。
【００６６】
また、コマンド解析・実行手段２２は、他のエージェントのメソッドを実行する場合には、リモートコール手段１５を利用する。
【００６７】
コマンド解析・実行手段２２によるコマンド実行の結果は、出力手段８に渡されて、計算機１から出力される。
【００６８】
一方、外部コマンドの実行は、外部コマンド実行手段３０によって行われる。外部コマンド実行手段３０は、エージェントリポジトリ１９より、外部コマンドを実行するエージェントプログラムを検索する。その際、エージェントリポジトリ１９内のどのパスを検索するか否かを決定するために、リポジトリパステーブル３１を参照し、リポジトリパステーブル３１に格納されたパスについて、順次エージェントリポジトリ１９を検索する。
【００６９】
外部コマンド実行手段３０は、エージェントリポジトリ１９を検索した結果、必要なエージェントが検索された場合、エージェント生成手段１６に対して、エージェントの生成を依頼し、この依頼を受けたエージェント生成手段１６が、アプリケーションエージェント１２を生成する。
【００７０】
また、外部コマンド実行手段３０は、シェルエージェント１０以外のエージェントにメソッドコールを行う場合、リモートコール手段１５を呼び出す。
【００７１】
シェルエージェント１０は、シェルエージェント１０の実行状態を管理する状態テーブル２３と、シェルエージェント１０の現在ディレクトリ２４と、シェル変数を管理するシェル変数管理テーブル２５と、外部のエージェントを指し示す変数を管理するエージェント参照テーブル２６と、を備え、これらのテーブルはシェルインタプリタ２０の実行を補助する。
【００７２】
シェル変数管理テーブル２５は、シェル変数によってスクリプト言語を記述し易くするための管理テーブルである。なお、シェル変数管理テーブル２５を具備しない構成で、図３のシェルエージェント１０を構成するようにしてもよい。
【００７３】
図４は、本発明の一実施例の変形として、シェルエージェント１０を構成する要素について、図３に示したものとは別の構成を示す図である。図３に示した構成では、外部コマンド実行手段３０は、直接エージェント生成手段１６を呼び出しているが、この機能を、ローカルサービスエージェント１１に依頼するようにしてもよい。
【００７４】
この場合、このローカルサービスエージェント１１が、外部コマンド実行手段３０から、外部コマンド名と、リポジトリパステーブル３１に格納されたパス情報とを受け取り、エージェントリポジトリ１９の検索と、実際のエージェント生成手段１６の呼び出しを行うことで、アプリケーションエージェント１２を生成する。
【００７５】
シェルエージェント０のシェルインタプリタ２１の構文解析手段２１、コマンド解析・実行手段２２、外部コマンド実行手段３０は、計算機１上で実行されるプログラムによりその処理・機能が実現される。
【００７６】
図５は、本発明の一実施例において、現在ディレクトリ２４を含めたディレクトリ管理を行う情報の格納テーブルの構成の一例を示す図である。
【００７７】
図５を参照すると、ディレクトリは、属性名３２と値３３との対で管理されており、属性として、シェルエージェント１０が起動されたエージェントベース９を表すルートベース３４と、このディレクトリが存在する現在ベース３５と、ベース内のローカルなディレクトリを示すベース内ディレクトリ３６と、からなる。
【００７８】
例えば、ベースＡで立ち上がったシェルが、ベースＢの「/home」というディレクトリを指し示す場合には、ルートベースは、ベースＡのベース、現在ベースは、ベースＢのベース、ベース内ディレクトリには、「/home」が格納される。
【００７９】
利用者によるディレクトリの指定方法は、絶対パスの指定の仕方として、
（１）「//ベース名A/ベース内ディレクトリA」、あるいは、
（２）「///ベース内ディレクトリB」
となる。
【００８０】
（１）の場合、現在ベースは「ベース名A」、ベース内ディレクトリは、「ベース内ディレクトリA」である。（２）の場合、現在ベースは「ルートベース」、ベース内ディレクトリは、「ベース内ディレクトリB」となる。
【００８１】
この他に、相対的なディレクトリを表現するものとして、現在ディレクトリから相対的に一つ上のディレクトリを指し示す「../」、現在ディレクトリの下の 「dirA 」というディレクトリの下の「dirB」というディレクトリを示す「dirA/dirB」などの表現方法を用いてもよい。
【００８２】
図６は、本発明の一実施例における状態テーブル２３の構成の一例を示す図である。図６を参照すると、状態は、属性名３７と値３８との対で管理されており、属性として、シェルエージェント１０が並列実行中であるかどうかを示す並列実行カウンタ３９と、シェルエージェント１０が端末入力モードで実行されているのか、バッチモードで実行されているかを示す端末モードフラグ４０と、からなる。
【００８３】
図７は、本発明の一実施例におけるシェル変数管理テーブル２５の構成の一例を示す図である。図７を参照すると、シェル変数管理テーブル２５は、シェル変数名４１と値４２の対でシェル変数を管理しており、シェル変数の数だけ変数管理単位４３を持つ。
【００８４】
図８は、本発明の一実施例において、シェルエージェント１０の中で、エージェントを指し示す変数であるエージェント変数の管理を行うエージェント参照テーブル２６の構成の一例を示す図である。図８を参照すると、エージェント参照テーブル２６は、エージェント変数名４４と外部エージェント４５の対でエージェント変数を管理しており、エージェント変数の数だけ変数管理単位４６を持つ。
【００８５】
図９は、本発明の一実施例において、シェルエージェント１０のシェルインタプリタ２０の動作を説明するための流れ図である。
【００８６】
まず、シェルインタプリタ２０は、入力手段７からコマンド入力を受け取る（ステップ５２）。
【００８７】
次に、このコマンドが終了コマンドかどうかを判断し（ステップ５３）、終了コマンドであれば、終了処理を実行し（ステップ５７）、シェルエージェント１０を終了する。
【００８８】
終了コマンドでなければ、キーワードテーブル２７を用いて構文解析手段２１で構文解析し、parallel文であるか否か判断する（ステップ５４）。
【００８９】
parallel文である場合には、シェルエージェント１０は並列でコマンド実行を行うことになるので、ステップ５８の並列実行処理へ進む。
【００９０】
parallel文でない場合には、コマンド解析・実行手段２２により、内部コマンドテーブル２８を用いて内部コマンドとして処理できるか否かを判断する（ステップ５５）。
【００９１】
内部コマンドの場合には、ステップ５９の内部コマンド処理に進み、内部コマンド定義２９を用いて、内部コマンドの実行を行う。
【００９２】
内部コマンドでない場合には、外部コマンド処理を行う（ステップ５６）。
【００９３】
並列実行処理（ステップ５８）、内部コマンド処理（ステップ５９）、外部コマンド処理（ステップ５６）をそれぞれ終了した場合、ステップ５２のコマンド入力処理に戻り、処理が継続される。
【００９４】
図９の終了コマンドであるか否かの判断（ステップ５３）と、構文解析してparallel文かどうかを判断する処理（ステップ５４）の順序は、逆であっても良い。
【００９５】
図１０は、本発明の一実施例において、シェルエージェント１０のシェルインタプリタ２０のコマンド解析・実行手段２２における内部コマンド処理（図９のステップ５９）の処理手順を示す流れ図である。
【００９６】
まず、内部コマンドがディレクトリ移動を表すコマンド「cd」（cdコマンド）であるかどうかを判断する（ステップ６７）。
【００９７】
「cd」でないコマンドは、内部コマンド定義２９に格納された内部コマンド定義に従って実行する（ステップ７３）。
【００９８】
内部コマンドが「cd」である場合、図１１に示すように、まず、移動先ディレクトリ４７を、cdコマンドから抽出する。ｃｄコマンドは、移動先ディレクトリが指定される。
【００９９】
この実施例では、利用者は、ディレクトリを「//ベース名/ベース内のディレクトリ」の形で指定するため、これを、図５に示したディレクトリ構成要素に展開し、ベース名を現在ベース３５に、ベース内のディレクトリをベース内ディレクトリ３６にそれぞれ格納する。
【０１００】
次に、状態テーブル２３に設けられた並列実行カウンタ３９の値が「０」であるか否かを検査する（ステップ６８）。
【０１０１】
この並列実行カウンタには、現在シェルエージェントがマルチスレッドで動作しているかどうかを表す情報として、並列実行の深さ情報が格納されている。
【０１０２】
並列実行されていなければ、並列実行カウンタの値は、「０」であり、一重のparallel構文の中であれば「１」であり、parallel構文の中のparallel構文の中であれば「２」となる。
【０１０３】
並列実行カウンタの値が「０」以外の時は、シェルエージェントが並列実行していることを表しており、シェルエージェント全体が別の計算機に移動する価値が低いので、現在ディレクトリ２４の値を、cdコマンドで示された移動先ディレクトリの値に更新する処理（ステップ７２）だけを行い、シェルエージェント自身を計算機間で移動させない。
【０１０４】
並列実行カウンタの値が「０」である場合には、シェルエージェントは単一スレッドで実行しているので、次の端末モードの検査を行う（ステップ６９）。
【０１０５】
状態テーブル２３に設けられた端末モードフラグ４０は、シェルエージェントが端末から入力を待つシェルとして実行されている時は「１」、バッチコマンドとして特定の端末に接続されないで実行されている時は「０」に、その値が設定される。
【０１０６】
端末モードフラグ４０の値が「１」であるということは、端末入力を待っているシェルエージェントであることから、シェルエージェントが別の計算機に移動してしまうと入力応答速度が遅くなるため、cdコマンドによるシェルエージェントの計算機間移動は行わず、ステップ７２に分岐して、現在ディレクトリの値の更新だけを行う。
【０１０７】
端末モードフラグ４０の値が「０」の時は、バッチモードの実行のため、シェルエージェントは、作業ディレクトリのある計算機に移動して実行する方が有利である。そこで、現在ディレクトリ２４と、移動先ディレクトリ４７の値の比較を行う（ステップ７０）。
【０１０８】
現在ディレクトリ２４と移動先ディレクトリ４７が同じ計算機上にある場合（現在ベース３５の値が同じ場合）には、シェルエージェントの計算機間移動は不要のため、ステップ７２へ分岐して、そのまま現在ディレクトリの値の更新だけを行う。
【０１０９】
現在ディレクトリ２４と移動先ディレクトリ４７が同じ計算機にない場合（現在ベース３５の値が異なる場合）には、シェルエージェントを移動先ディレクトリの現在ベースが存在する計算機のエージェントベースに移動する（ステップ７１）。
【０１１０】
このように、利用者の発行する「cd」という内部コマンドは、計算機内のディレクトリ移動についての処理を行うと同時に、シェルエージェント内部では、シェルエージェントを実行する計算機の選択にも利用される。
【０１１１】
かかる構成によって、リモート計算機上のアプリケーションの実行であっても、利用者には、ディレクトリの移動とエージェントの実行として見せることができることで、ネットワークに分散したサービスを実行するために複数のリモートアプリケーションを連携させる場合に、簡単なスクリプト言語で、記述することができる。
【０１１２】
図１２及び図１３は、本発明の一実施例において、シェルエージェントを移動する時の構成の変化を説明するための図である。
【０１１３】
まず、図１２を参照すると、エージェントプラットフォームＡ  ２Ａ上にいるシェルエージェント１０は、エージェント移動手段１３Ａに対して、自身の移動を依頼する。
【０１１４】
エージェント移動手段１３Ａは、エージェントプラットフォームＢ  ２Ｂのエージェント移動手段１３Ｂに、シェルエージェント１０の状態を転送する。
【０１１５】
そして、図１３を参照すると、エージェント移動手段１３Ｂは、エージェントプラットフォームＢ  ２Ｂ上にシェルエージェント１０を再構築して実行を再開する。
【０１１６】
図１４は、本発明の一実施例において、コマンド解析・実行手段２２において内部コマンドを実行するにあたり、内部コマンドが、外部のアプリケーションエージェント１２へのメソッド実行や、移動要求を出す場合を説明するための図である。
【０１１７】
まず、コマンド解析・実行手段２２は、エージェント変数の指し示す外部のアプリケーションエージェントを同定するために、エージェント参照テーブル２６を用いて、エージェント変数名から外部のアプリケーションエージェントへのポインタを獲得する。
【０１１８】
そして、コマンド解析・実行手段２２は、リモートコール手段１５に対して、外部アプリケーションエージェント１２へのメソッド実行や移動を要求する。
【０１１９】
アプリケーションエージェント１２は、リモートコールの受け入れ手段として、移動受入手段４８と命令受入手段４９とを有する。
【０１２０】
移動受入手段４８は、移動要求の権限について確認をした後に、エージェント移動手段１３に対して、アプリケーションエージェント１２自身の移動を要求する。
【０１２１】
命令受入手段４９は、命令実行の権限について確認した後に、命令実行手段５０を実行する。
【０１２２】
図１５及び図１６は、本発明の一実施例において、シェルエージェント１０からの同じ計算機中のアプリケーションエージェント１２を、別の計算機へ移動する時の構成の変化を説明するための図である。
【０１２３】
まず、図１５を参照すると、シェルエージェント１０は、リモートコール手段１５を用いて、アプリケーションエージェント１２に移動の命令を伝える。
【０１２４】
アプリケーションエージェント１２は、エージェント移動手段１３Ａに対して自身の移動を依頼し、このエージェント移動手段１３Ａは、エージェントプラットフォームＢ  ２Ｂのエージェント移動手段１３Ｂに、アプリケーションエージェントの状態を転送する。
【０１２５】
そして、図１６を参照すると、エージェント移動手段１３Ｂは、エージェントプラットフォームＢ ２Ｂ上にアプリケーションエージェント１２を再構成し、実行を再開する。
【０１２６】
図１５及び図１６では、シェルエージェント１０と同じ第１のエージェントプラットフォームのアプリケーションエージェント１２を移動したが、アプリケーションエージェントは、シェルエージェントとは異なる第２のエージェントプラットフォーム中に存在して、これを第３のエージェントプラットフォーム、あるいはシェルエージェントの存在する第１のエージェントプラットフォームに移動することもできる。
【０１２７】
図１７は、本発明の一実施例において、構文解析手段２１において、parallel文が検出され、図９の並列実行処理（ステップ５８）を実行する処理手順を示す流れ図である。
【０１２８】
まず、状態テーブル２３の並列実行カウンタ３９に１を加える（ステップ６０）。これにより、シェルエージェントが現在並列実行中であることが記録される。
【０１２９】
次に、parallel文中のコマンド数分だけのスレッドを生成する（ステップ６６）。スレッドの生成は、スレッド生成手段１４によって行われる。
【０１３０】
続いて、変数「threads」（スレッド）に、生成したスレッド数を設定する（ステップ６２）。
【０１３１】
そして、実際に、parallel文の中のコマンドを各スレッドで並列に実行する（ステップ６３）。
【０１３２】
各スレッドは、各自の実行が終了すると、threads変数の値を「１」だけ減少させる（ステップ６４）。この処理は、スレッド間で排他制御されていなければならない。
【０１３３】
そして、threads変数が「０」になったか否かを判断し（ステップ６５）、０でない場合には、次のスレッドが終了するのを待つ。
【０１３４】
全てのスレッドが終了すると、threads変数の値は「０」になり、並列実行は終了する。
【０１３５】
そして、並列実行カウンタ３９の値を１デクリメント（減算）する処理を行い（ステップ６６）、並列実行処理全体の実行を終了する。
【０１３６】
図１８は、本発明の一実施例において、parallel文の中で、特に、生成されたスレッドが別のエージェントプラットフォームに対してコマンドを実行する時の構成を示す図である。
【０１３７】
図１８を参照すると、シェルエージェント１０は、スレッド生成手段１４に、新しいスレッド生成を依頼した後、parallel文の内部コマンド実行のために、リモートコール手段１５Ａ、１５Ｂを用いて、サブシェルエージェント５１を、エージェントプラットフォーム２Ｂのエージェントベース９Ｂ上に作成する。
【０１３８】
以後、このサブシェルエージェント５１が、アプリケーションエージェント１２や、ローカルサービスエージェントＢ １１Ｂに対して、メソッド実行や移動命令を実行することができる。
【０１３９】
図１９は、本発明の一実施例において、parallel文の中で複数のエージェントプラットフォームに対して、並列にコマンド実行を行う場合を説明するための図である。
【０１４０】
図１９を参照すると、シェルエージェント１０からのリモートコールによって、サブシェルエージェント５１Ｂ、サブシェルエージェント５１Ｃが生成され、2つのエージェントプラットフォーム２Ｂ、２Ｃの上で並列にサブシェルエージェントが実行を行うことができる。
【０１４１】
図２０は、本発明の一実施例において、図９の外部コマンド処理（ステップ５６）を実行するための処理手順を示す流れ図である。
【０１４２】
図２０を参照すると、外部のアプリケーションエージェントを起動する方法として、図３に示したように、直接、外部コマンド実行手段３０がエージェント生成手段１６を呼び出す方法を用いる。
【０１４３】
まず、現在ディレクトリ２４に格納されている現在ベースが、実際に、シェルエージェントを実行している実行中ベースと一致しているかを判断する（ステップ７４）。
【０１４４】
一致している場合には、実行中ベースに外部のアプリケーションエージェントを生成するため、まず、実行中ベースのエージェントリポジトリ１９のエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するか否かを判断する（ステップ７５）。
【０１４５】
アプリケーションエージェントのプログラムが存在すれば、エージェントリポジトリ１９からアプリケーションエージェントのプログラムをロードしてアプリケーションエージェント１２を実行する（ステップ７６）ように、エージェント生成手段１６に対して依頼する。
【０１４６】
エージェントリポジトリ１９に見つからない場合には、実行に失敗する（ステップ８０）。
【０１４７】
現在ディレクトリ２４に格納されている現在ベースと、実際にシェルエージェントを実行している実行中ベースと一致しているかを判定するステップ７４において、一致していない場合には、リモートコール手段１５を用いて、現在ベース中にサブシェルエージェント５１を作成する（ステップ７７）。
【０１４８】
図２１は、この場合の構成要素の関係を示す図である。
【０１４９】
サブシェルエージェント５１中で現在ベースのエージェントリポジトリ１９のエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するかを判断する（ステップ７８）。
【０１５０】
アプリケーションエージェントのプログラムがあれば、エージェントリポジトリ１９からアプリケーションエージェントのプログラムをロードしてアプリケーションエージェント１２を実行する（ステップ７９）ようにエージェント生成手段１６に依頼する。
【０１５１】
エージェントリポジトリに見つからない場合は、実行に失敗する（ステップ８０）。
【０１５２】
図２２は、本発明の一実施例において、図９の外部コマンド処理（ステップ５６）を実行するための処理手順を示す流れ図である。
【０１５３】
図２２を参照すると、外部のアプリケーションエージェントを起動する方法として、図４に示したようにローカルサービスエージェント１１にエージェント生成に関するタスクを委任してこのローカルサービスエージェント１１がエージェント生成手段１６を呼び出す方法を用いる。
【０１５４】
まず、現在ディレクトリ２４に格納されている現在ベースが、実際にシェルエージェントを実行している実行中ベースと一致しているか否かを判断する（ステップ８１）。
【０１５５】
一致している場合には、実行中ベースに外部のアプリケーションエージェントを生成するため、まず、実行中ベースのローカルサービスエージェント１１に外部エージェントの実行依頼を行う（ステップ８２）。
【０１５６】
次に、このローカルサービスエージェント１１は、実行中ベースのエージェントリポジトリ１９のエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するか否かを判断する（ステップ８３）。
【０１５７】
アプリケーションエージェントのプログラムが存在すれば、エージェントリポジトリ１９からアプリケーションエージェントのプログラムをロードしてアプリケーションエージェント１２を実行するように（ステップ８４）、エージェント生成手段１６に対して依頼する。
【０１５８】
エージェントリポジトリに見つからない場合は、実行に失敗する（ステップ８９）。
【０１５９】
現在ディレクトリ２４に格納されている現在ベースと、実際にシェルエージェントを実行している実行中ベースと一致しているか否かを判断するステップ８１で、一致していない場合には、リモートコール手段１５を用いて、現在ベース中のローカルサービスエージェント１１に外部エージェントの実行依頼を行う（ステップ８６）。
【０１６０】
図２３は、この場合の各構成要素の関係を示す図である。
【０１６１】
図２３を参照すると、このローカルサービスエージェント１１Ｂは、現在ベースのエージェントリポジトリ１９のエージェントリポジトリパス中に対象のアプリケーションエージェントのプログラムが存在するか否かを判断する（図２２のステップ８７）。
【０１６２】
アプリケーションエージェントのプログラムが存在すれば、エージェントリポジトリ１９からアプリケーションエージェントのプログラムをロードしてアプリケーションエージェント１２を実行するように（図２２のステップ８８）、エージェント生成手段１６に依頼する。
【０１６３】
エージェントリポジトリに見つからない場合は、実行に失敗する（図２２のステップ８９）。
【０１６４】
図２４は、本発明の一実施例において、アプリケーションエージェント１２と指定されたファイル９６、アプリケーションエージェントが起動する外部アプリケーション１８の関係を示す図である。
【０１６５】
アプリケーションエージェント１２は、特定の外部アプリケーション１８と密接に関連づけられてファイル９６を解釈実行することができる。
【０１６６】
図２５は、本発明の一実施例において、汎用アプリケーションエージェント９７を利用して、計算機に依存したアプリケーション１２を起動するための構成を示す図である。
【０１６７】
図２５を参照すると、汎用アプリケーションエージェント９７は、指定されたファイル９６の拡張子を見て、拡張子アプリケーション対応テーブル９８を参照することで、実行すべきアプリケーションを決定する。この拡張子アプリケーション対応テーブル９８は、拡張子９９とアプリケーション１００とを対として格納したテーブルであり、拡張子単位の情報１０１が格納されている。
【０１６８】
汎用アプリケーションエージェント９７は、ファイル９６の拡張子と一致した拡張子９９を持つ項目を、拡張子アプリケーション対応テーブル９８から検索し、該項目のアプリケーション欄１００のアプリケーションを起動する。
【０１６９】
拡張子アプリケーション対応テーブル９８は、各計算機ごとに具備することができる。このため、例えば、同じ拡張子を持つ画像ファイルであっても、別の計算機では別のアプリケーションを用いて表示させることができる。
【０１７０】
次に、上記した実施例をさらに具体的に説明するため、本発明を適用した具体例についていくつか説明する。
【０１７１】
図２６は、本発明を適用したシステム構成の一例を示す図であり、２つの計算機上で、２つのプレゼンテーションツールを順次制御するシステムの構成を示す図である。
【０１７２】
まず、計算機Ａ １Ａのエージェントプラットフォーム２Ａのエージェントベース９Ａにシェルエージェント１０Ａがあり、そこに実行スクリプトファイル９２を入力する。
【０１７３】
この場合、実行は、バッチモードで行われるため、状態テーブル２３の端末モードフラグ４０は０になる。並列実行を示すparallel文も用いられていないので、スクリプト中のcdコマンドによって、シェルエージェントは、計算機中を移動することになる。
【０１７４】
スクリプトファイル９２の1行目の「cd」によって、シェルエージェント１０Ａは、計算機Ｂ １Ｂのエージェントプラットフォーム２Ｂのエージェントベース９Ｂのローカルディレクトリ「/home」に移動する。
【０１７５】
そこで、スクリプトファイル９２の2行目の「ppt」コマンドが実行されるが、ここで、pptコマンドは、外部のプレゼンテーションツール９０を起動するアプリケーションエージェントＢ １２Ｂの名前であるとする。
【０１７６】
従って、シェルエージェント１０Ｂは、アプリケーションエージェントＢ １２Ｂを起動し、これがプレゼンテーションツールＢ ９０を起動してプレゼンテーションを開始する。
【０１７７】
続いて、スクリプトファイル３行目のcdコマンドで、シェルエージェント１０Ｂは、計算機Ｃ １Ｃのエージェントプラットフォーム２Ｃのエージェントベース９Ｃのローカルディレクトリ「/home」に移動する。
【０１７８】
そして、４行目で、アプリケーションエージェントＣ １２Ｃを起動し、プレゼンテーションツールＣ９１の実行を開始する。
【０１７９】
再びスクリプトファイル９２の5行目の「cd」で、シェルエージェントは、計算機Ｂに移動し、プレゼンテーションツールＢに、「次頁」を表示するためのコマンド「next」を送信する。
【０１８０】
７行目と８行目では、さらに、計算機Ｃに移動して、プレゼンテーションツールＣも次頁を表示する。
【０１８１】
このように、複数計算機のプレゼンテーションツールを、順次ページめくりする動作をひとつのシェルスクリプト中に記述できる。
【０１８２】
図２７は、本発明を適用したシステムの別の例を示す図であり、２つの計算機上で、２つのプレゼンテーションツールを並列制御するシステムの構成を示す図である。
【０１８３】
図２７に示したシステムが、図２６に示したシステムと相違する点は、スクリプトファイル９３中に、parallelの構文が利用されていることである。
【０１８４】
parallel文の中では、サブシェルエージェントが計算機Ｂ、計算機Ｃに作成され、それぞれで並列にアプリケーションエージェントＢ １２ＢとプレゼンテーションツールＢ ９０、あるいはアプリケーションエージェントＣ １２Ｃとプレゼンテーションツール９１を制御する。
【０１８５】
図２６に示したシステムとは相違して、アプリケーションの操作が並列に行われ、またparallel文の文末の「end」の行では、「parallel」とされたサブエージェントの同期が行われる。
【０１８６】
図２８は、本発明を適用したシステムのさらに別の例を示す図であり、２つの計算機上で、プレゼンテーションツール９０と、WWW（World  Wide  Web）ブラウザ９５を並列制御するシステムの構成を示す図である。図２７との違いは、制御対象が、異なるアプリケーションとされていることである。
【０１８７】
この例を用いれば、プレゼンテーションツールと、関連したWWWページの情報を並列に、同期機能を持って複数の計算機に表示するシステムを容易に構成することができる。
【０１８８】
【発明の効果】
以上説明したように、本発明によれば下記記載の効果を奏する。
【０１８９】
本発明の第１の効果は、一つのスクリプトプログラムを用いて、複数の計算機に分散されたアプリケーションの実行を制御することができる、ということである。この結果、複数のアプリケーションを連携させることによる上位の分散アプリケーションを容易に構築できる。
【０１９０】
その理由は、本発明においては、スクリプト言語の解釈を、移動可能で、かつリモート計算機と通信を行えるシェルエージェントで構築し、アプリケーションの実行を制御するアプリケーションエージェントを、どの計算機上にも自在に生成して実行可能としたためである。
【０１９１】
本発明の第２の効果は、逐次的なスクリプトの実行だけでなく、並列的な実行が可能であり、さらに、複数の計算機に分散したアプリケーションの並列実行や、同期的な実行を、スクリプト言語を用いて記述することを容易化している、ということである。
【０１９２】
その理由は、本発明においては、スクリプト言語の構文要素にparallelというブロックを設け、このブロックの中のコマンドを並列に実行するために、複数のスレッド生成と、生成されたスレッドをリモート計算機中のサブシェルエージェントの中で実行させる機能を具備している、ためである。
【０１９３】
本発明の第３の効果は、計算機間の移動も、計算機内のディレクトリ移動も一つのディレクトリ移動コマンドで行うことができ、特別なエージェント移動というコマンドを用いることなしに、シェルエージェント移動を可能としている、ということである。
【０１９４】
その理由は、本発明においては、シェルエージェントの中で、現在のディレクトリや、実際にいる計算機、シェルエージェントの状態などを管理し、必要な場合を判断して、シェルエージェントの計算機間の移動を行う機能を装備したためである。
【０１９５】
本発明の第４の効果は、計算機ごとに用意されたアプリケーションが異なる場合であっても、ファイルの内容に応じて、アプリケーションを実行することができる、ということである。
【０１９６】
その理由は、本発明においては、アプリケーションエージェントが計算機に応じたアプリケーションを特定して実行できる機能を具備し、汎用のアプリケーションエージェントを作成して、実行するファイルの拡張子に合わせて計算機に依存したアプリケーションを選択的に実行可能としたためである。
【図面の簡単な説明】
【図１】本発明の一実施例のシステム構成を示す図である。
【図２】本発明の一実施例においてエージェントプラットフォームの構成を示す図である。
【図３】本発明の一実施例におけるシェルエージェントの構成の一例を示す図である。
【図４】本発明の一実施例におけるシェルエージェントの構成の別の例を示す図である。
【図５】本発明の一実施例におけるディレクトリ管理テーブルの構成の一例を示す図である。
【図６】本発明の一実施例における状態テーブルの構成の一例を示す図である。
【図７】本発明の一実施例におけるシェル変数管理テーブルの構成の一例を示す図である。
【図８】本発明の一実施例におけるエージェント参照テーブルの構成の一例を示す図である。
【図９】本発明の一実施例においてスクリプト言語を解釈する処理手順を示す流れ図である。
【図１０】本発明の一実施例において内部コマンドを解釈する処理手順を示す流れ図である。
【図１１】本発明の一実施例におけるディレクトリ移動を説明するための図である。
【図１２】本発明の一実施例におけるディレクトリ移動の一例を説明するための図（その１）である。
【図１３】本発明の一実施例におけるディレクトリ移動の一例を説明するための図（その２）である。
【図１４】本発明の一実施例におけるリモート命令実行を説明するための図である。
【図１５】本発明の一実施例におけるリモート命令実行の一例を説明するための図（その１）である。
【図１６】本発明の一実施例におけるリモート命令実行の一例を説明するための図（その２）である。
【図１７】本発明の一実施例における並列実行を解釈する処理手順を示す流れ図である。
【図１８】本発明の一実施例における並列実行の一例を説明するための図（その１）である。
【図１９】本発明の一実施例における並列実行の一例を説明するための図（その２）である。
【図２０】本発明の一実施例においてアプリケーションエージェントの実行を解釈する処理手順を示す流れ図である。
【図２１】本発明の一実施例においてアプリケーションエージェントの実行の一例を説明するための図（その１）である。
【図２２】本発明の一実施例においてアプリケーションエージェントの実行を解釈する処理手順を示す流れ図である。
【図２３】本発明の一実施例においてアプリケーションエージェントの実行の一例を説明するための図（その２）である。
【図２４】本発明の一実施例におけるアプリケーションエージェントとアプリケーションの関係の一例を示す図である。
【図２５】本発明の一実施例における汎用アプリケーションエージェントとアプリケーションの関係の一例を示す図である。
【図２６】本発明を適用したシステムの第１の実施例を説明する図である。
【図２７】本発明を適用したシステムの第２の実施例を説明する図である。
【図２８】本発明を適用したシステムの第３の実施例を説明する図である。
【符号の説明】
１  計算機
２  エージェントプラットフォーム
３  エージェント
４  ネットワーク
５  入力
６  出力
７  入力手段
８  出力手段
９  エージェントベース
１０  シェルエージェント
１１  ローカルサービスエージェント
１２  アプリケーションエージェント
１３  エージェント移動手段
１４  スレッド生成手段
１５  リモートコール手段
１６  エージェント生成手段
１７  ローカルファイルシステム
１８  アプリケーション
１９  エージェントリポジトリ
２０  シェルインタプリタ
２１  構文解析手段
２２  コマンド解析・実行手段
２３  状態テーブル
２４  現在ディレクトリ
２５  シェル変数管理テーブル
２６  エージェント参照テーブル
２７  キーワードテーブル
２８  内部コマンドテーブル
２９  内部コマンド定義
３０  外部コマンド実行手段
３１  リポジトリパステーブル
３２  属性名欄
３３  値欄
３４  ルートベース
３５  現在ベース
３６  ベース内ディレクトリ
３７  属性名欄
３８  値欄
３９  並列実行カウンタ
４０  端末モードフラグ
４１  シェル変数名欄
４２  値欄
４３  シェル変数管理単位
４４  エージェント変数名
４５  外部エージェント
４６  エージェント変数管理単位
４７  移動先ディレクトリ
４８  移動受入手段
４９  命令受入手段
５０  命令実行手段
５１  サブシェルエージェント
５２  コマンド入力
５３  終了判断
５４  ｐａｒａｌｌｅｌ  文判断
５５  内部コマンド判断
５６  外部コマンド処理
５７  終了処理
５８  並列実行処理
５９  内部コマンド処理
６０  並列カウンタのカウントアップ
６１  スレッド生成
６２  スレッド数の設定
６３  並列実行
６４  スレッド終了処理
６５  全スレッドの終了判断
６６  並列カウンタのカウントダウン
６７  ｃｄ  であるか判断
６８  並列実行中かを判断
６９  端末モードか判断
７０  現在ディレクトリと移動先ディレクトリの比較
７１  シェルエージェント移動
７２  現在ディレクトリの更新
７３  ｃｄ  以外の内部コマンドの実行
７４  ベースの一致判断
７５  エージェントプログラムの検索
７６  エージェント実行
７７  サブシェルエージェント作成
７８  エージェントプログラムの検索
７９  エージェント実行
８０  サブシェルエージェント作成
８１  ベースの一致判断
８２  ローカルエージェントへのコマンド依頼
８３  エージェントプログラムの検索
８４  エージェント実行
８６  ローカルエージェントへのコマンド依頼
８７  エージェントプログラムの検索
８８  エージェント実行
８９  サブシェルエージェント作成
９０  プレゼンテーションツール
９１  プレゼンテーションツール
９２  スクリプトプログラム
９３  スクリプトプログラム
９４  スクリプトプログラム
９５  ＷＷＷブラウザ
９６  ファイル
９７  汎用アプリケーションエージェント
９８  拡張子アプリケーション対応テーブル
９９  拡張子欄
１００  アプリケーション欄
１０１  対応テーブルの要素
【図１】
0003738624.tif 000002
【図２】
0003738624.tif 000003
【図３】
0003738624.tif 000004
【図４】
0003738624.tif 000005
【図５】
0003738624.tif 000006
【図６】
0003738624.tif 000007
【図７】
0003738624.tif 000008
【図８】
0003738624.tif 000009
【図９】
0003738624.tif 000010
【図１０】
0003738624.tif 000011
【図１１】
0003738624.tif 000012
【図１２】
0003738624.tif 000013
【図１３】
0003738624.tif 000014
【図１４】
0003738624.tif 000015
【図１５】
0003738624.tif 000016
【図１６】
0003738624.tif 000017
【図１７】
0003738624.tif 000018
【図１８】
0003738624.tif 000019
【図１９】
0003738624.tif 000020
【図２０】
0003738624.tif 000021
【図２１】
0003738624.tif 000022
【図２２】
0003738624.tif 000023
【図２３】
0003738624.tif 000024
【図２４】
0003738624.tif 000025
【図２５】
0003738624.tif 000026
【図２６】
0003738624.tif 000027
【図２７】
0003738624.tif 000028
【図２８】
0003738624.tif 000029