モバイルエージェントの基礎技術③プログラム移動技術
Download
Report
Transcript モバイルエージェントの基礎技術③プログラム移動技術
モバイルエージェントの基礎技術③プログラム移動技術
モバイルエージェントの基礎技術
③プログラム移動技術
技術的基礎
エージェント移動
遠隔手続き呼び出し
手続き呼び出し
遠隔手続き呼び出しの仕組み
プロキシー
プロキシー IDL
Java RMI
異機種間RPC
引数の渡し方
遠隔手続き呼び出し(参照渡し)
遠隔手続き呼び出し(コピー渡し)
Marshalling
Canonical Form (正準表現)
シリアライゼーション
シリアライゼーション(メモリーイメージとの対比)
シリアライゼーション(直列化対象による種別)
モバイルエージェントの基礎技術③プログラム移動技術
技術的基礎
エージェントをコンピュータ間で移動させる
には
技術的基礎:
コンピュータ間通信(遠隔手続き呼び出し)
エージェント状態の直列化
モバイルエージェントの基礎技術③プログラム移動技術
エージェント移動
エージェントの実行状態を直列化し、転送する
エージェント
エージェント
送信側
受信側
実行の中断
実行の再開
直列化
非直列化
エンコード
デコード
送信
コンピュータA
コードと
直列化状態
移動
受信
コンピュータB
ネットワーク
エージェントは実行状態・プログラムコード共に移動
モバイルエージェントの基礎技術③プログラム移動技術
遠隔手続き呼び出し
遠隔手続き呼び出し(Remote Procedure Call、1980年代~)
分散プログラミング/分散オブジェクトの中心的なコンピュー
タ間通信技法
呼び出し側(クライアント側)
プロセス/オブジェクト
呼び出され側(サーバ側)
プロセス/オブジェクト
手続き名と引数
Call
Receive
待ち状態
手続きの実行
返り値
Resume
コンピュータA
Return
コンピュータB
モバイルエージェントの基礎技術③プログラム移動技術
手続き呼び出し
プログラム
手続き呼び出し
(procedure call)
コンピュータ
プログラム
(サブルーチン/関数)
手続きの実行
モバイルエージェントの基礎技術③プログラム移動技術
遠隔手続き呼び出しの仕組み
異なるコンピュータ上の手続きを呼び出し
プログラム
プログラム
メッセージ
関数
foo(a1, a2,
..., an)
call foo(a1, a2,
..., an)
メッセージ
コンピュータA
コンピュータB
メッセージの転送はデータ通信
プロトコルにより実現
e.g. TCP、UDP
ネットワーク
モバイルエージェントの基礎技術③プログラム移動技術
プロキシー
プロキシー(Proxy)は呼び出し側および呼び出される側の代理:
呼び出し側はプロキシー(スタブ)の手続きを呼び出す
呼び出される側手続きはプロキシー(スケルトン)によって呼び出される
プログラム
プログラム
スタブ
手続き
呼び出し
スケルトン
手続き
呼び出し
メッセージ
メッセージの組立
call foo(a1,...)
foo(a1,...)
返り値
コンピュータA
call foo(a1,...)
メッセージ
foo(a1,...)
返り値
コンピュータB
ネットワーク
モバイルエージェントの基礎技術③プログラム移動技術
プロキシー IDL
IDL (Interface Definition Language)による宣言的な記述により、
遠隔手続きのインターフェースを記述
→ スタブ/スケルトンプログラムの生成
呼び出し側(クライアント側)
呼び出され側(サーバ側)
Caller Program
呼び出し
引数のパック
Callee Program
復帰
Stub
復帰
Skelton
結果のアンパック
Caller Runtime
呼び出し
結果のパック
応答メッセージ
要求メッセージ
引数のアンパック
Callee Runtime
モバイルエージェントの基礎技術③プログラム移動技術
Java RMI
Java言語に特化した遠隔メソッド呼び出し(Remote Method Invocation)
Call-by-copyに基づく遠隔手続き呼び出し
Javaオブジェクトの“interface”からのスタブ/スケルトンの静的生成
スタブ生成器:rmic
動的クラスローディング
ユーザ定義クラスのオブジェクトも転送可能
クライアント
オブジェクト
サーバ
オブジェクト
スタブ
スケルトン
リモートリファレンス層(Remote Reference)
トランスポート層(Transport)
モバイルエージェントの基礎技術③プログラム移動技術
異機種間RPC
異機種プラットフォーム間で手続き呼び出しを実現
引数の受け渡し(参照渡しの制限)
データ表現(標準形式に変換)
バインディング(呼び出し先のサーバを発見)
データ転送プロトコル(TCP、UDPなどを利用)
例外処理
性能
セキュリティ
モバイルエージェントの基礎技術③プログラム移動技術
引数の渡し方
関数/手続き呼び出し/遠隔手続き呼び出しの
引数の渡し方
call-by-value:
値だけ渡す
call-by-name:
変数名だけ渡す、実行時にバインド
call-by-reference:
参照(ポインタ)だけ渡す
call-by-copy:
値のコピーを生成し、そのコピーを渡す
モバイルエージェントの基礎技術③プログラム移動技術
遠隔手続き呼び出し(参照渡し)
多くの分散システムでは基本データ型のみ値を受け渡し
ユーザ定義型データは制限、またはオブジェクトIDのみ受け渡し
プログラム
プログラム
(関数)
メッセージ
func
Reference
a1
call func(a1,...)
func(a1,...)
Reference
a1
Object
a1
...
x:=a1
...
結果メッセージ
コンピュータA
コンピュータB
ネットワーク
モバイルエージェントの基礎技術③プログラム移動技術
遠隔手続き呼び出し(コピー渡し)
引数のオブジェクトのコピーを作り、呼び出し先に転送
プログラム
プログラム
(関数)
メッセージ
func
Object
a1 (copy)
call func(a1,...)
func(a1,...)
コピー
Object
a1 (copy)
Object
a1
...
x:=a1
...
結果メッセージ
コンピュータA
コンピュータB
ネットワーク
モバイルエージェントの基礎技術③プログラム移動技術
Marshalling
整列化/配置 (Marshalling)
引数をコンピュータ間で転送しやすく、
受け手にとって扱いやすい形式に変換
一次元配列に変換
foo (char x, float y, int z[2]) {
marshalling
foo
...
}
x
unmarshalling
y
5
z[0]
各データは標準形式に変換
例:XDR
z[1]
z[2]
モバイルエージェントの基礎技術③プログラム移動技術
Canonical Form (正準表現)
機種A
機種B
表現1
表現2
エンコー
ド関数
デコード
関数
正準表現
表現1
機種A
表現2
機種B
表現3
機種C
機種非依存の
表現形式
機種C
表現3
各機種(マシン)毎に正準表現とのエンコード,デコード
関数を用意すればよい.
モバイルエージェントの基礎技術③プログラム移動技術
シリアライゼーション
直列化(Serialization):
プログラムの実行状態をデータ化
対象: データ領域(ヒープ)、スタック領域、プログラムカウンター他
メモリーイメージ
直列化した結果
コード
ヒープ
直列化
ヒープ
スタック
スタック
プログラム
カウンター他
Object
非直列化
プログラム
カウンター他
モバイルエージェントの基礎技術③プログラム移動技術
シリアライゼーション(メモリーイメージとの対比)
メモリーイメージ
=ポインター構造
a
b
c
Object α
Object β
next
next
next
シリアライズ
バイト配列
α 1
0
a= 1
b= 2
c= 3
β
next = 2
β
2
next = 3
β
3
next = /
モバイルエージェントの基礎技術③プログラム移動技術
シリアライゼーション(直列化対象による種別)
メモリーイメージ
コード
ヒープ
直列化した結果
ヒープ
直列化
スタック
スタック
プログラム
カウンター他
プログラム
カウンター他
直列化対象:
メソッド変数、インスタンス変数
スレッド(プログラムカウンター)
メモリーイメージ
コード
ヒープ
直列化した結果
直列化
スタック
プログラム
カウンター他
直列化対象:
インスタンス変数
ヒープ