MobileSpaces
 
佐藤一郎 (国立情報学研究所)

はじめに

モバイルエージェントは、コンピュータ間を移動しながら計算処理を継続して いく自律的なプログラムであり、次世代の分散システムとして注目されている。 モバイルエージェントは、非同期的な処理の実現や、通信コストの削減、通信 切断において計算を継続できるなどの特徴がある。このため、モバイルエージェ ントの計算環境はPCやWSだけでなく情報家電やPDAも含まれる。エージェント のコンピュータ間移動に利用するデータ通信形式も有線だけでなく無線通信と なることがある。また、移動端末に代表されるように、こうした計算機環境や 通信環境はエージェントと、エージェントの含有する端末の移動に応じて大き く変化する。このため、環境変化への動的な適応性が重要となる。しかし、既 存のモバイルエージェントシステムは、特定のオペレーティングシステムやハー ドウェアを仮定していることが多く、さらにエージェント移動に利用するデー タ通信プロトコルはTCPやSMTPなどが前提となっていることが多い。このため、 多様な動作環境への稼働性及び動作環境の変化への適応性を考慮した新しいモ バイルエージェントシステムが必要となる。

モバイルエージェントモデル

ここで提案するモデルは以下の機能をモバイルエージェントに拡張したもの となる。

エージェントの階層的構成
モバイルエージェントはその内部に0個以上の別のモバイルエージェント を入れ子状に内包できるとする。また、内包されたエージェントもそれぞれ能 動的に動作する。
エージェント間移動
モバイルエージェントはコンピュータだけでなく、他のモバイルエージェ ントに移動できるとし、そのとき、それに内包されたモバイルエージェント もその階層構造を保ったまま移動するとする。

ここでエージェント階層間の関係を述べる。エージェント階層において、各エー ジェントは一つ外側に位置するエージェントが提供する各種リソース及びサー ビスを利用できる。一方、外側エージェントはそれが内包するエージェント階 層上の任意のエージェントに対して生成、停止、直列化などの実行制御を行う ことができ、また、内包されたエージェントに用意されたコールバックメソッ ドを適宜呼び出すことができる。なお、内包エージェントが利用する各種サー ビスや呼び出されるコールバックメソッドは、外側エージェントにより規定さ れる。このため、別のエージェントに移動することにより、利用可能なサービ ス内容や、コールバックメソッドの呼び出しタイミングや名前を動的に変更で きるようになる。 なお、エージェント階層を導入することにより次のような利点をもつ。

ランタイムシステム

このランタイムシステムの特徴は、上述の階層モバイルエージェントの概念を 実現するだけでなく、そのシステムアーキテクチャ自体がその概念に基づいて いることにある。具体的には、マイクロカーネルアーキテクチャに類似した構 成をとり、カーネル部分(コアシステム)と機能拡張モジュールから構成され る。前者は、計算環境に非依存なランタイムシステムであり、エージェントの 実行制御とエージェント階層を維持管理する部分となる。後者は、エージェン トのコンピュータ間移動や永続化などの計算環境に依存する多様な機能を提供 する部分であり、モバイルエージェントして実現される。そして、これらの機 能を提供するモバイルエージェントを移動することにより新しい機能の追加・ 削除や、計算環境の変化に応じて、システム機能を動的に変更できるようにな る。

コアシステム

コアシステムは計算環境への依存性を最小限にするため、以下に示される必要 最小限の機能だけを提供する。一方、計算環境に依存した機能を含めた他の機 能は提供しない。このため、エージェントのコンピュータ間移動などの機能は、 通信環境に依存することからシステム補助モバイルエージェントにより提供さ れる。

エージェント階層の管理

エージェント階層はエージェントの入れ子関係を基礎とすると木構造であり、 各ノードが一つのモバイルエージェントなる。コアシステムはそれぞれ一つ のエージェント階層を維持管理し、そのコアシステム上のはエージェントの移 動要求に対して、階層内の移動を実現する。なお、エージェント計算の整合性を 保つため、エージェント階層は制限をもつ。

エージェント階層内のエージェント移動は、エージェント階層構造の変形とし て実現される。例えば、エージェントの移動は、そのエージェントの根とする 部分木を、移動先のエージェントを根とする部分木の枝とすることである。な お、エージェント階層内の移動では、エージェントは能動的に動作したまま移 動し、エージェントは明示的にイベントリスナーを登録することにより、移動 発生時にはイベントとして通知される。

エージェント実行の管理

各エージェントは初期化、実行、永続化、停止の4つの実行状態をもち、その 状態が実行中であるときは、複数の能動的スレッドをもつことができる。ただ し、これらの実効状態や能動実行はコアシステムにより管理・制御される。例 えば、エージェントが移動、永続化、停止される場合にはコアシステムにより 能動実行が停止させられる。また、親エージェントのメソッドを呼び出しや、 子孫エージェントへのコールバックメソッドでは、タイムアウトを課すことが できるが、タイムアウトの管理はコアシステムにより実現する。

エージェント実行の永続化

エージェントはコンピュータ間移動する際には、ビットストリームに直列化さ れる。この直列化とその逆変換はコアシステムにより提供される。コアシステ ムにより(非)直列化を行うのは、不正なエージェントを検出を行うためである。

システム補助用モバイルエージェント

エージェントに対する操作の一部は、各操作に対応したシステム補助用モーバ イルエージェントを通じて実現される。これらはランタイムシステム上に用意 されたエージェントであり、到着したエージェントに対して直ちに所定の操作 を行う。つまり、操作の対象となるエージェントを、その操作を実現するシス テム補助用エージェントに移動させると、その補助用エージェントが到着たエー ジェントに対してその操作を自動的に行うものである。以下に補助用エージェ ントの例をあげる。

コンピュータ間移送エージェント:

これはエージェントのコンピュータ間移送を実現するモバイルエージェントで あり、送信側(移送元)と受信側(移送先)の組として用意される。送信側エージェ ントはそれに到着したエージェントではエージェントA)を直ちに直列化し、エー ジェントの実行状態とプログラムコードを受信側エージェントに送信する。受 信側エージェントではその受信したデータを再びエージェントに戻す。なお、 両エージェント間のエージェント移送において、TCPやUDPなどのデータ転送プ ロトコルの選択や、移送における通信手順は両エージェントにより定義される。 そして、別のコンピュータ間移送エージェントに移動することにより、移送方 式を動的に変更できるようになる。

永続化エージェント:

これは内包したエージェントを2次記憶上に永続化するエージェントである。 内包されるエージェントをこのエージェントに移動すると自動的に永続化され る。なお、エージェントの永続化方法は、そのデータ形式などが多様化する可 能性があり、永続化エージェントを適宜選択することにより永続化手法を選択 する。なお、実行状態の直列化などはランタイムシステムのサービスにより実 現する。

この他、エージェントの永続化や複製などの操作は、上記の移送エージェント と同様にその操作を実現するエージェントに移動することによって実現される。 また、エージェント間通信は、通信先のエージェントに直接移動する方法と、 内包エージェント間の通信サービスを提供するエージェントに移動させる方法 がある。

適応可能性

本ランタイムシステムは、コンピュータ間移動や永続化などの計算環境に依存 したサービスは、各サービスごとにエージェントにより提供される。そこで次 の二つの方法により動的適応可能性を実現する。

動的機能拡張

各種機能がモバイルエージェントとして提供されるため、新たな機能を提供す るシステム補助用モバイルエージェントを移動させることにより、システムの 動的拡張を行うことができる。現在のシステムではシステム補助 用モバイルエージェントはコンピュータ及びオペレーティングシステムのリソー スを直接アクセスすることが許されている。このため、セキュリティ上の理由 から幾つかの制約機構が用意されている。

動的適応性

各種機能を提供するシステム補助用モバイルエージェントを選択することより、 計算環境の変化に柔軟に対応することができる。一方、計算環境の変化は、 MobileSpacesのランタイムシステムではなく、オペレーティングシステムなど の下位レベルのソフトウェアにより監視・通知される。そこで、オペレーティ ングシステムとMobileSpacesのインターフェースを導入する。ただし、 MobileSpacesは多様なオペレーティングシステムやハードウェアで稼働するこ とを目的としているため、オペレーティングシステムへの変更は必要ない方法 とする。

実装

MobileSpacesランタイムシステムはJava言語(JDK1.2以上)の仮想機械上で稼働 し、エージェントプログラムもJava言語のオブジェクトと実装される。同言語 処理系が稼働する環境であればOSやハードウェアに依存せず、エージェントの 実行・移動が可能となり、計算環境に依存した部分は補助的エージェントによ り提供できる。

ランタイムシステム

エージェント階層を維持管理すると同時に、各エージェントに一つ以上の実行 スレッドを割り当てて能動的な実行を実現する。また、コンピュータ間移動や 永続化などで利用するエージェント/オブジェクトの直列化はJava言語の直列 化機構を利用して実現する。

モバイルエージェント

エージェントはエージェント自体の動作を定義するエージェントプログラムと 内部エージェントへの各種サービスを定義するコンテキストプログラムから構 成される。前者はAgent抽象クラスのサブクラスとして定義される。

public class Agent extends MobileObject {
  // (un)registering a context for its children
  void addChildrenContext(Context context){ ... }
  void removeChildrenContext(Context context){ ... }
  // registering listeners to hook certain events
  void addDefaultListener(
    DefaultEventListener listener){ ... }
  void removeDefaultListener(
    DefaultEventListener listener){ ... }
  // registering a name in an environment variable
  void register(String name, String value) 
    throws ... { ... }
  // migrating the agent specified as url1 to 
  // the target agent specified as url2
  void go(AgentURL url) 
    throws NoSuchAgentException ... { ... }
  void go(AgentURL url1, AgentURL url2) 
    throws NoSuchAgentException ... { ... }
  // asking its parent agent a message
  void getService(Message msg) 
    throws NoSuchMethodException ... { ... }
  // issuing an event to an agent specified as url
  void dispatchEvent(AgentURL url, AgentEvent evt) 
    throws ... { ... }
  ....
}

ここでAgentクラスについて説明する。

エージェントはその実行状態(生成、終了、永続化、複製他)の変化の前後に、 addListener()で登録したリスナーオブジェクト中の所定のコールバッ クメソッドを呼び出すことができる。以下にリスナーオブジェクトの一つを示 す。

interface DefaultEventListener 
  extends AgentEventListener {
  // invoked after creation at url
  void create(AgentURL url);    
  // invoked before termination
  void destroy();               
  // invoked after accepting a child 
  void add(AgentURL child);     
  // invoked efore removing a child
  void remove(AgentURL child);  
  // invoked after arriving at the destination
  void arrive(AgentURL dst);   
  // invoked before moving to the destination
  void leave(AgentURL dst);      
  ....
}

Agent Context

内包されるエージェントに対して各種サービス、例えば、生成、停止、エージェ ント間移動などを提供するためのAPI群からなり、エージェント識別子や階層 構造を含むリソース情報も提供する。なお、外側のエージェントが提供するサー ビス用メソッドも、エージェントコンテキストを介して呼び出す。

  public abstract class Context {
    // getting the reference of the body object
    Agent getAgent() { ... }
    // invoking a method of sibling agents
    Object call(Message msg) { ... } 
    ....
  }

おわりに

階層化及びエージェント間移動の二つの概念をもつモバイルエージェントモデ ルに従ってモバイルエージェントシステムを設計・実装した。今後はこのシス テムを第3者へに広く配布を行い、その成果を還元することが重要課題となる。