成蹊大学理工学研究報告
J. Fac. Sci. Tech., Seikei Univ.
Vol.43 No.1 (2006) pp.23-31

強マイグレーション化モバイルエージェントシステムの実装とそれによる自律分散処理システムの設計
桜井 康樹*1，佐々木 竜介*2，甲斐宗徳*3

Re-design and Implementation of Strong Migration Mobile Agent System, AgentSpherefor Autonomous Distributed Processing Systems
Yasuki SAKURAI*1, Ryusuke SASAKI*2, Munenori KAI*3
ABSTRACT：In this paper, we describe the re-design and implementation of AgentSphere, a mobile agent
system based on the strong migration mobility. In order to implement the strong migration, all ofexecution code, program counter, contents of heap area and stack area have to be moved. To move
execution code and contents of heap area, the serializing function of Java is used. We propose a moving
method for contents of stack area by using Java Platform Debugger Architecture(JPDA). The contents ofstack area are collected into serializable variables and then those variables are serialized together withcontents of heap area. In Java, the program counter can not be used to resume any program code, so we
propose a resumption method by using code conversion. In this conversion, three kinds of information,statement code, runtime code and statement information, are automatically generated from strong
migration program code. Because the generated codes are weak migration codes, they can be executed onconventional Java virtual machines｡
Keywords：Mobile agent, Agent systems, Strong Migration, Distributed processing system(Received March 24, 2006)

１．はじめにプログラム記述者が意識せずに使えるような分散処理用プラットフォームを開発することにした。開発言語とし情報技術の進歩に伴い，ハードウェアによる処理能力ては一般に広く普及し，OS や機種によらず使用するこが向上する一方で，解くべき問題の多様化や複雑化の進とができる Java 言語を用いた。提案するシステムでは，み方がより速いことがある。この問題を解決するためのシステムの耐故障性の向上，システムの自律的行動によ手法として分散処理が挙げられる。分散処理を行うことるシステム管理者とプログラム記述者側の管理負担の軽により，ネットワーク上に接続された複数のマシンに処減，という目標を満足するため，モバイルエージェント

理を分散させ，単一のプロセッサにかかる負荷を分散さ技術を用いた。

せることが可能となり，処理の高速化が期待できる。

しかし，多くのモバイルエージェントシステムでは，一般に分散処理システムでは，システム全体の状況把移動の際に移動前の実行状態は保存されないため，実行握や管理が必要となり，プログラム記述者がそれらの制状態に応じた移動先の処理をプログラム上で記述する必御をすべて含めてアプリケーションプログラムを記述す要性がある。そこで本研究では，このモバイルエージェるのは非常に困難である。そこで，そのような困難さをントシステムに実行状態を保持して移動するための手法＊1：経営情報工学科学生と，その手法を用いたモバイルエージェントシステムを＊2：情報処理専攻大学院生＊3：情報処理専攻教授(kai@st.seikei.ac.jp)
Professor, Dept. of Information Sciences

提案することにした。

－23－

２．従来の自律分散処理システムの概要

Program Multiple Data) 形 式 の プ ロ グ ラ ム と ，MPMD(Multiple Program Multiple Data)形式のプログラム

2．1

自律分散処理システムのどちらでも自由に記述することができるようにした。

自律分散処理システムとは，システムの状況の変化にMediator

システム自身が自律的に対応しながら分散処理を行うシTask Agent
AgentSpace

ステムである。一般的に分散システムにおいて，タスクHUBの負荷分散や停止したタスクの再生処理等の作業にはシステム全体の状況把握や管理が必要であり，それらのコントロールをすべて考慮してプログラム記述者がアプリケーションプログラムを記述するのは非常に困難であると考えられる。この問題の解決策の一つとして，分散シ

図1

ステムに自律性を持たせ，システム全体の状況把握や管自律分散処理システム構成例

理を全てシステム側に任せるという方法がある。分散シ

これら 2 つの形式は，それぞれ対象とするアプリケーシ

ステムの自律性を実現させるためには，システム内で動ョンによって使い分ける。SPMD 型の方は，ユーザにとく各ソフトウェアが，他からのメッセージに応じた行動って比較的書き易く，分散処理することにより処理時間と，自ら取得した外部の情報に応じて判断を行い，そのの短縮が可能である。一方，MPMD 型の方は，モバイル結果によって行動を計画し，その計画に基づき行動できエージェントとしての機能をプログラム記述者が自由にる必要がある。そこで本研究では，自律分散処理システ利用して，高度なタスクプログラムの記述が可能となる。[2]ムを実現するにあたって，モバイルエージェントを利用

図 1 は，自律分散処理システムの構成の一例を示したすることにした。

ものである。

2．2

2．4

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

強マイグレーションの必要性

エージェントとは，人間の代理としてシステム上で自従来のシステムでは，モバイルエージェントシステム律的に行動するソフトウェアであり，モバイルエージェの動作原理の解析やシステムの改造が容易で，エージェ

ントとは，ネットワークを通じてマシン間を移動しながント移動時に情報を圧縮して送るため移動が速いというらタスク処理を行うことができるエージェントのことを理由から，弱マイグレーションベースのモバイルエージ言う。そして，モバイルエージェントシステムとは，モェントシステム AgentSpace を用いて自律分散処理用のバイルエージェントが存在可能な空間を提供するプラップラットフォームの開発を行っていた。AgentSpace では，トフォームであり，モバイルエージェントの動作（生成，エージェント移動後の処理や，バックアップファイルを消去，移動，保存，複製）や，モバイルエージェント同復元したときの処理はプログラム中の常に同じ場所から士の通信を提供するシステムのことである。既存のモバ実行される。そのため，移動のきっかけとなる事象に応イルエージェントとしては，佐藤一郎氏（現国立情報学

じた移動後の処理や，エージェントのバックアップポイ研究所助教授）が開発した AgentSpace[4]や日本 IBM 社にントに応じた復元処理など，複雑なコントロールをあらよって開発された Aglets[5]等が挙げられる。

かじめエージェントのプログラムに記述する必要がある。
しかし，強マイグレーションベースのモバイルエージェ

2．3

AgentSpace を使用した自律分散処理システムの概要

ントなら，プログラム記述者はこれらのことを気にする「分散処理の手法について詳しくない人でも，システことなくエージェントを設計することができる。また，ムの自律性に助けられて簡単に分散処理の恩恵を受けら自律分散処理システムにおいて，ダウンしたタスクエーれるシステムを構築すること」と，「様々な種類のプログジェントの復元処理の実現には，強マイグレーションのラムを実行可能な汎用性の高いシステムを構築するこ

モバイルエージェントが適している[3]。そこで，本研究と」を目的に，筆者らは自律分散処理用プラットフォー

では，強マイグレーション方式を採用したモバイルエー

ムを開発している。1 つ目の目的を満たす為に，分散処ジェントシステムを実装することにした。

理の開始や，システムの稼動状態の把握が容易となる様に GUI を用いて操作ができるようにした。また，2 つ目の目的である汎用性を高くするために，SPMD(Single－24－3．エージェントの強マイグレーション化

用していた AgentSpace を参考にして，JVM に手を加えることなくシステム開発を行えるように，スタックの取3．1

Java 言語によるモバイルエージェントの問題点得とソースコード変換を採用する。それにより，強マイJava 言語においても，C や C++と同様にプログラミン

グレーション方式のモバイルエージェントシステムの開グをする際にプログラムが使用するメモリ領域には，以発を行う。

下のものが挙げられる。

3．2．1

スタック領域の取得

スタックの中身を取得するために，JPDA(Java Platform

恒久変数領域

Debugger Architecture) を 使 用 し た 。 こ れ は ， Sunstatic 宣言された変数やグローバル変数を格納する

Microsystems 社が提供する JVM に標準的に実装されてお領域

り，Java アプリケーションのデバッグに使用されるもの

実行コード領域である[8][9]。実行中のスレッドや実行情報へのアクセスプログラムの実行コードを格納する領域が可能となっている。本研究では，この機能を用いるこ

スタック領域とによって，スタック領域のデータを取得することにす一般的な変数を格納する領域る。



エージェントは，スレッド上で実行される。そこで，ヒープ領域
プログラムが使用できるメモリ領域から上記のもの

エージェントの移動の際に JPDA を用いてエージェントを差し引いた領域で，オブジェクトのインスタンス，が実行されているスレッドにアクセスし，スタック内のメソッド・エリアなどのアプリケーション実行時に必情報を取得し，シリアライズ可能な変数に格納する。そ

要なデータを格納する領域

して，実行コードやヒープ領域内のデータと共にシリアライズして，移動できるようにする。

Java 言語を用いてモバイルエージェントを実装する際
3．2．2に，予め Java 言語に備わっているシリアライズ機能を用ソースコード変換[2]いることによって，プログラムコードに加えてヒープ領実行状態を完全な形で保存するためには，スタックの域内の情報を実行状態として保存が可能となっているが，中身だけでなく，プログラムカウンタも必要となってく

スタック領域内の情報やプログラムカウンタを実行状態る。JPDA では，このプログラムカウンタに類似したデとして保存する機能を Java 言語で実装するのは，容易でータを扱っており，これを取得することは可能となっては な い 。 こ れ を 行 な う た め に は ， Java Virtualいる。しかし，この取得したデータを用いてプログラムMachine(JVM)の変更か，逐次の Java のプログラムコーを途中から実行する機能は，JPDA でもサポートされてドを強マイグレーション用のコードに変換するための，いない。そこで，本研究ではソースコードの変換を行うソースコード変換を必要とする。既存のモバイルエージことにより，これをサポートすることにした。

ェントシステムとしては，JVM の変更を行なっているもソースコード変換は，図 2 のようにユーザコードをソのとして，産業技術総合研究所 グリッド研究センター首ースコード変換器にかけることによって，ステートメン

藤一幸氏により開発された MOBA，ソースコード変換をトコード，ランタイムコード，ステートメントコードの行なっているものとして，東京大学米澤研究室によって各ステートメントに関する情報を取得することにより行開発された JavaGO などが挙げられる[6][7] 。JVM を変更われる。

する場合，大元の JVM のバージョンアップの都度 JVMを修正しなければならず，システム開発側の負担が大き

ステートメントコード

ユーザコードいとともに，ユーザもその専用の JVM を使用せざるを得ない。そのため，Java 言語を用いたモバイルエージェン

ソースコード変換器

ランタイムコード

ユーザコードの情報を格納
AgentInfoトシステムの多くが，シリアライズ機能だけを用いて実装された，完全に実行状態の保存されていない弱マイグ

図２

レーション方式のエージェントを採用していた。

状態データ

ソースコード変換（１）ステートメントコード
3．2

強マイグレーション化のための手法

ユーザコードの構造を解析し，ユーザコードから提供

本研究では，従来の自律分散処理システムにおいて使されるモバイルエージェントの挙動を指示するプリミテ－25－ィブによって分割したステートメントを statementN（Nランタイムコードの自動生成の実装にあたって，テ＝整数）というメソッドに，if の条件式のステートメンンプレートを用意し，それを利用して必要な部分を変

トは branchStatementN というメソッドに書き込んだコー

更しながらランタイムコードを作成するという手段でドのことである。また，ソースコードを解析して繰り返実装を行った。以下の図 4 はその変換の一部の例であしの回数がわかる for 文に関しては，現時点においてはる。

その for 文をアンローリングすることによって，ステー

RuntimeTemplate
public void dostatement(i){switch(i){}}

トメントコードを生成する。ソースコードを解析しても繰り返し回数がわからない for 文や，while 文，switch-case
文，再帰関数に関しては，現時点においてソースコード変換器でのステートメントコードへの変換には，対応していない。
図 3 は，ユーザコードのステートメントコードへの変

図４ ランタイムコードの自動生成換の例を示している。
ユーザコードClass Test extends Agent{run(){if (){migrate(IPAddress);}

dostatement 関数は，ステートメントコードに記述さステートメントコード
Class TestStatement{
statements0(){

れているコードを実行させるための関数であり，ソースコード変換を行った際に生成されたステートメント}
branchStatements1(){数に合わせて switch 文の中身を自動的に記述させてい}statements1(){

る。ここで，switch 文内にある変数 ts は，生成されたmigrate(IPAddress);}

ステートメントコードのインスタンスである。

}
statements2(){}}statements3(){（３）ステートメントの情報
エージェントの状態を表すデータで，実行時にロー}

図３

SampleCodeRuntime.java
public void dostatement(i){switch(i){case 0:ステートメント数がts.statement0();
2つの場合
break;-------------->
case 1:ts.statement1();
break;}

ドするクラス名やそのオブジェクトや生成したステー

ユーザコートとステートメントコード

トメントコードを元にした実行開始ステートメント，また，ユーザコードに対して提供されるプリミティ

実行するステートメントや分岐ステートメント，次にブには，次の 5 つがある。
エージェントの生成：create(fileName)

エージェントの消去：destroy()エージェントの複製：duplicate()

エージェントの移動：migrate(IPaddress)

エージェントの保存：backup()

実行するステートメントや分岐先のステートメント等の情報によって構成されている。
3．2．3

強マイグレーション化エージェントの移動

ソースコード変換によって生成されるステートメント
コードとランタイムコードは，既存の JVM のコンパイラ

図 3 のように，ステートメントコードは細かくステにより，クラスファイルを取得することが可能となってートメントごとのメソッドに分割されている。弱マイいる。強マイグレーション化エージェントは，この 2 つグレーション方式のモバイルエージェントシステムでのクラスファイルと状態データ，そしてスタックを直列は，移動後におけるメソッド単位での継続実行が可能化･圧縮することによって移動する。

である。そこで，本システムでは，移動後にこのステ

４．
強マイグレーション方式のモバイルエージェンートメントコードのどのステートメントから処理を行トシステム AgentSphere の提案

うかを指定することにより，プログラムカウンタの機能をサポートすることにしている。

前述の，強マイグレーション化モバイルエージェント
システムとして筆者らは AgentSphere[1]という独自のシ（２）ランタイムコードソースコード変換によって得られたステートメンステムの研究を行っていた。この章では，その旧システ

トコードの各ステートメントの情報に基づいて，エームからの変更点を中心にして AgentSphere システムにつジェントの挙動（生成，消去，複製，移動，保存）をいて述べる。

管理するコードである。

－26－

4．1

Agent 関連のクラス

4．2

旧 AgentSphere システムでは，Agent に関連するクラス

システム関連のクラス

図 6 では，旧 AgentSphere システムのシステム関連のは Agent クラスの 1 つだけだった。このクラスは，ユークラスの構成を表している。

ザが記述する分散処理のプリミティブを提供するもので，スレッド

強マイグレーション方式のモバイルエージェントのみをAgentClassLoaderサポートするクラスとなっている。
新しい AgentSphere システムでは，強マイグレーショ

AgentLoader

起動ン方式のモバイルエージェントと弱マイグレーション方

AgentReceiver
ByZipType

AgentReceiver

プログラム実行

AgentServer

AgentManager

AgentInfo式のモバイルエージェントの両方を扱うことが出来るよStatementInfo

AgentRuntime

うに考慮した。その理由は，分散処理システム内を巡回しながらシステムを管理するようなエージェントを実装

AgentSender

しようとした場合，弱マイグレーション方式のエージェ

図６

ントでもこの機能を実現することができるにも関わらず，AgentReader
ByJarType

AgentReader

AgentWriter

旧 AgentSphere システムのクラス構成

強マイグレーション方式のモバイルエージェントで実装

図 6 を見てわかる通り，13 個のクラスから構成されてしようとすると，ソースコード変換によって移動するコいる。これら各クラスの機能を見直してクラスの統合や，ードのサイズが大きくなってしまい，移動にかかるオー機能追加に伴う新しいクラスの追加を行った。図 7 は，バヘッドが大きくなってしまうからである。そのため，2更新されたシステム関連のクラスの構成を表している。

つのモビリティのエージェントを採用するようにした。
追加

図 5 において，新 AgentSphere システムにおける Agent
MachineInfo

関連のクラスの相関関係を示す。

スレッド

MachineList

PerformanceMeasure

MachineInfoSender

Agent

SphereManager

StatementInfo

AgentRuntime

CreateJar

AgentSender

AgentReader

AgentClassLoader

AgentWriter

StrongMigAgent

図７
図５

AgentInfo：継承関係
NetworkInfo

WeakMigAgent

AgentReceiver

プログラム実行起動
MachineInfoReceiver

AgentLoader

システム関連のクラス構成

Agent 関連のクラスの相関関係
図 7 を見てわかるように，新しい AgentSphere システ

Agent クラスは，エージェントに関しての最も基礎とムは，SphereManager クラスを中心にした，17 個のクラなるクラスで，エージェントの生成，消去，複製を表す

スから構成されている。以下に，この構成からの変更点

プリミティブ，create(filename)，destroy()，duplicate()の 3について述べる。

つを提供する抽象化されたクラスである。
また，StrongMigAgent クラスは，Agent クラスを継承4．2．1したクラスで，強マイグレーション方式のモバイルエー

旧システムから変更されたクラス

SphereManager クラス

ジェントを表すクラスである。このクラスが提供するプ

こ れ は 旧 シ ス テ ム の AgentServer ク ラ ス とリミティブには，エージェントの移動と保存を表す，AgentManager ク ラ ス を 統 合 し た も の で あ る 。

migrate(IPAddress)，backup()の 2 つがある。

SphereManager クラスは，AgentSphere システムの中でそして，WeakMigAgent クラスは，Agent クラスを継承一番中心となるクラスで，全クラスの管理を行っておしたクラスで，弱マイグレーション方式のモバイルエーり，必要に応じて，各クラスを起動し処理を行う。実ジェントを表すクラスである。このクラスが持つプリミ際にエージェントの実行を行うのも，このクラスであティブには，移動を表す go(IPAdress)がある。また，ローる。また，Port 番号の指定や，自ホストの IP アドレスカルでの処理を表すメソッド create()と，移動先での処理と MAC アドレスの取得とそれらのブロードキャストを表すメソッド arrive()を提供する。

を行う。
AgentReader クラス
実行するエージェントファイルの読み込みを行うク－27－ラス。これまでは，読み込むファイルの形式によって

5－2．ネットワーク上にあるマシンの認識，リスト化

クラスが分かれていたが，これを統合して 1 つのクラ他のマシンを認識，区別するために，AgentSpace で実スで複数のファイル形式に対応できるようにした。

装されていたクラスを AgentSphere に追加し，システム

AgentReceiver クラスの見直しに伴った修正を行った。以下が修正を行ったク送信されたエージェントの受信を行うクラス。受信ラスである。

したエージェントが悪意のあるエージェントかの判定を行い，jar 形式のデータの解凍を行う。旧システム

では，AgentReader クラス同様，受信するエージェン

MachineInfo クラス
マシンの情報を保持するクラス。MAC アドレスのトの形式によってクラスが分かれていたが，これを統情報を追加。

合して 1 つのクラスにした。

MachineInfoReceiver クラス
他のマシンから送信されたマシン情報を受信するク

4．2．2

本年度新たに追加されたクラス

ラス。状況に合わせて自身の情報を送り返す機能を追旧 AgentSphere システムでは，分散処理システムに適加。

用するには不十分な点が残っていた。新システムでは，分散処理システムに適用するに当たって必要な機能の追AgentSphere を立ち上げると，自身の MachineInfo をブ加を行った。それらについて，以下に述べる。

ロードキャストし，ネットワーク上に存在するマシンがそれを受け取り，各マシンが保持する MachineList へ登CreateJar クラス

録する。

エージェント送信の際の圧縮を行うクラス。


今までの AgentSpace では，起動時での他マシンの情報

MachineList クラス

取得は，巡回型のエージェントの到着を待たなくてはな

システムに参加している全マシンについての情報をらず，マシン数が多くなると表示に時間がかかってしま保持するクラス。
う。そこで，他マシンが起動したマシンから情報を受けMachineInfo クラス

取った時，自身の情報を返す機能も実装した。

各マシンに関する情報(IP アドレス，MAC アドレス，

しかし，この機能もマシン数が多くなってしまうと，性能値)を保持するクラス。

情報をブロードキャストする時間，返された情報を処理

MachineInfoSender クラスする時間が多くなってしまう。そのため，ネットワーク自分以外のマシンに自分のマシンの情報のブロード上のマシンのグループ化が将来的に必要だと考えられる。

キャストを行う。
5－3．指定したマシンへのマイグレーション

MachineInfoReceiver クラス

AgentSphere では，ソースコード変換によって生成され他のマシンからのマシン情報を受信する

NetworkInfo クラス

たステートメントコード，ランタイムコード，状態デー

自分のマシンの IP アドレスや MAC アドレスの取得

タの 3 つのファイルが揃って初めてコードの実行が可能になるのだが，昨年の AgentSphere ではマイグレーショを行う。
PerformanceMeasure クラス

ンの際，状態データしか移動させていなかったため，他性能値の計算を行うマシンでの実行ができないでいた。
旧システムの動作検証ではソースコード変換の妥当性

５. 他マシンとの通信の検証が中心だったので，マイグレーションを 1 台のマシンでしか行っていなかった。自分自身への状態データ

5－1．概

要の移動であれば，そこにはランタイムコード，ステート

旧 AgentSphere システムには，ネットワーク上に存在メントコードがすでに存在しているので，正しく動作すする他マシンの認識，指定されたマシンへのマイグレーる。しかし，それでは他マシンへのマイグレーションがション機能が実装されていなかった。

出来る，ということには当然ならない。他マシンには状

自律分散処理システムにおいて，他マシンへのマイグ態データだけ移動させても，ランタイムコード，ステーレーション機能は必要不可欠なので，新 AgentSphere シ

トメントコードがそのマシンにはないので実行できない

ステムではその機能の実装を行った。のである。

－28－

そこで，ランタイムコード，ステートメントコードおimport java.io.Serializable;
import agentsphere.*;よびシリアライズ化された状態データの 3 つのファイル

public class SortingAgentStatement extends StrongMigAgent implements Serializable {を，マイグレーションする直前に jar 圧縮して 1 つのフtransient private AgentRuntime theRuntime = null;
private int data[] = ソートを行うデータ;
private int i, j, temp;

ァイルにまとめ，指定されたマシンへと送信し，受信後に解凍することによってマイグレーション後の実行継続

public SortingAgentStatement() {}が可能となった。

public void setRuntime(Object obj){
theRuntime = (AgentRuntime)obj;
}

６．評 価

public void statement0() {for ( j = data.length - 1; j > i; j-- ) {if ( data[j - 1] > data[j] ) {temp = data[j - 1];
data[j - 1] = data[j];data[j] = temp;}}
enumerate( data ); /*配列表示用の関数*/
theRuntime.setTransferAddress(“IPAdress2");}

今回このシステムの動作確認をするに当たって，データ数 10 個のバブルソート(昇順)を 2 台のマシン間で行うことにした。図 8 は，今回の評価に用いたユーザコード

public void statement1() {for ( j = data.length - 1; j > i; j-- ) {if ( data[j - 1] > data[j] ) {temp = data[j - 1];
data[j - 1] = data[j];data[j] = temp;}}
enumerate( data ); /*配列表示用の関数*/
theRuntime.setTransferAddress(“IPAdress1");}を，そして図 9 はユーザコードをソースコード変換した
ステートメントコード，図 10 にはランタイムコードを示す。
import java.io.Serializable;
import agentsphere.*;public void statement2() {/*statement0と同じ処理*/}

public class SortingAgent extends StrongMigAgent implements Serializable {private int data[] = ソートを行うデータ;
private int i, j, temp;

public void statement3() {/*statement1と同じ処理*/}……………

public void run() {for ( i = 0; i < data.length - 1; i++ ) {for ( j = data.length - 1; j > i; j-- ) {if ( data[j - 1] > data[j] ) {temp = data[j - 1];
data[j - 1] = data[j];data[j] = temp;}}
enumerate( data ); /*配列表示用の関数*/
if (i%2==0) migrate(“IPAddress2”);else migrate(“IPAdress1”)}}

public void statement8() {/*statement0と同じ処理*/}public void statement9() {/*statement1と同じ処理*/}
}

図９}

図８

ユーザコード－29－ステートメントコード

次に，２台のマシンで処理を行った時のマシン A でのimport agentsphere.*;import java.io.Serializable;
import java.lang.reflect.Method;

結果を図 12 に，マシン B での結果を図 13 に示す。

public class SortingAgentRuntime implements Serializable{
SortingAgentStatement ts = new SortingAgentStatement();
public void go(Object obj){
AgentRuntime theRuntime = (AgentRuntime)obj;
AgentInfo infoList = theRuntime.getInfoList();SphereManager theManager = theRuntime.getSphere();ts.setRuntime(theRuntime);.....................;}
public void doStatement(int i){switch(i){case 0:ts.statement0();
break;
case 1:ts.statement1();
break;...............;
case 9:ts.statement9();
break;}}

図 12

マシン A での実行結果

図 13

マシン B での実行結果

public boolean doBranchStatement(int i){switch(i){}return false;}}

図 10 ランタイムコード
図を見てわかる通り，ソートを行う配列のデータの中で一番小さい値が確定したら次のマシンに移動し，次に小さい値を確定し，最初のマシンに戻って処理を行うというような処理を行っている。そして，移動前のマシン

図 12 と図 13 が示すように，移動前の配列の状態を保持での配列の状態が保存されているかの確認を行っている。

しながら移動し，移動後ではその続きから処理を行って表 1 は，今回の評価に用いたマシンである。
表1

いることがわかる。

評価に使用したマシン一覧

７．おわりにマシン名 CPU名 クロック数 メモリ
マシンA PentiumⅣ
3.0GHz 1000MB
マシンB PentiumⅣ
2.4GHz 768MB

今回ソースコード変換を行うことによって，簡単なプ
ログラムではあるが，強マイグレーション方式のモバイ

マシン A の 1 台で処理を行った結果を図 11 に示す。

ルエージェントとして処理を行うことが出来た。ただし，現時点では次のような制限がある。
変数は，全て大域変数スタック領域のデータを使用していない

繰り返し回数のわかっている for 文の使用
ソースコード変換を行うのが容易
また，本研究では，次のことが未実装である。

図 11

1 台のマシン(マシン A)での実行結果

－30－



スタック領域のデータの取得と再利用

完全なソースコード変換そこで，強マイグレーション方式のモバイルエージェ[5] 日本 IBM 東京基礎研究所：
http://www.trl.ibm.com/aglets/ , Apr.2006 参照可ントのシステムを完成させるためには，以下の様なこと[6] 米澤 明憲,関口 龍郎,橋本 政朋：「移動コード技術をする必要がある。に基づくモバイルソフトウェア」


スタック領域のデータの再利用

http://homepage.mac.com/t.sekiguchi/javago/index-j.html,

JPDA では，スタック領域のデータを取得するため

Apr.2006 参照可の API は提供されているが，そのデータを再びスタッ[7] 首藤 一幸,村岡 洋一：「Java 言語環境におけるスレク領域にセットするための API は提供されていない。

ッド移送手法と移動エージェントへの応用」,情報処

そこで，この機能をサポートするために，ソースコー

理学会 研究報告 pp.39-46, Apr 13, 1998

ド変換の際に，取得したスタック領域のデータを利用[8] Torsten Illmann, et al.: “Transparent Migration of Mobile

できるようにステートメントコードを生成できるよう

Agents Using the Java Platform Debugger Architecture”にする。

Mobile Agents: Proceedings of the 5th International

完全なソースコード変換

Conference, pp.198 – 212, Dec.2001[9] Sun Microsystems: “Java Platform Debugger

繰り返し回数のわからない for 文や while 文，再帰関数などにも対応できるように，スタック領域内のデーArchitecture”,タを取得し，そのデータを利用してソースコード変換

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/jpda/,を行うようにする。

Apr.2006 参照可

また，本研究で提案するモバイルエージェントシステ
ムは，強マイグレーション方式と弱マイグレーション方式のエージェントが，システム上で共存している。それは，分散処理システムに参加するマシン間を巡回しながら各マシンの状況を管理するようなエージェントを作ろうとする場合，強マイグレーション方式のエージェント
では，通信のオーバヘッドが大きくなるため，弱マイグレーション方式のエージェントの方が適していると考えるからである。今回，2 つのモビリティのエージェントを実行可能なモバイルエージェントシステムを実現することで，より効率的な自律分散処理システムの構築が可＾能になると考える。

参考文献[1] 坂井 功：「自律分散処理用モバイルエージェントシステム AgentSphere の開発」成蹊大学大学院工学研
究科情報処理専攻修士論文, Mar.2005[2] Ryusuke Sasaki, et al.: “Implementation and Evaluationof Autonomic Distributed Processing System Using
Mobile Agent”, Proc.of IEEE Pacific Rim conference,
No.237, Arg.2005[3] 坂井 功

他：「自律分散処理用モバイルエージェン

トシステム AgentSphere の開発」成蹊大学理工学研
究報告, Vol.42, No.1, Jun.2005[4] 佐藤 一郎：「AgentSpace：モバイルエージェントシ
ステム」,日本ソフトウェア科学会, Dec.1998－31－