モバイルエージェントの基礎技術③プログラム移動技術 モバイルエージェントの基礎技術 ③プログラム移動技術 技術的基礎 エージェント移動 遠隔手続き呼び出し 手続き呼び出し 遠隔手続き呼び出しの仕組み プロキシー プロキシー 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 = / モバイルエージェントの基礎技術③プログラム移動技術 シリアライゼーション(直列化対象による種別) メモリーイメージ コード ヒープ 直列化した結果 ヒープ 直列化 スタック スタック プログラム カウンター他 プログラム カウンター他 直列化対象: メソッド変数、インスタンス変数 スレッド(プログラムカウンター) メモリーイメージ コード ヒープ 直列化した結果 直列化 スタック プログラム カウンター他 直列化対象: インスタンス変数 ヒープ
© Copyright 2024 ExpyDoc