Mogulにおける ホスト透過性とプログラミング透過性について 慶應義塾大学 政策・メディア研究科 中澤 仁 研究の概要 • ホスト間を移送可能なJavaアプリケー ションを構築可能なライブラリの開発 – 既存のアプリケーションに対する変更が不要 – アプリケーションのホスト透過的な動作 • 以上を実現するためのホスト透過型オブジェ クト移送モデルを提案 • 同モデルを動的メソッドリダイレクション機 構により実装した。 発表の概要 • アプリケーション移送時の諸問題 – ホスト透過性について • 既存の解決手法 – プロセスマイグレーション、Java RMI、Voyager • ホスト透過型オブジェクト移送モデル(設計) • 動的メソッドリダイレクション(実装) • 基本性能評価と今後の課題 – プログラミング透過性とセマンティクスの維持、 性能の両立について アプリケーション移送時の諸問題 • ホスト依存性 – 移送元ホスト上のファイル、ソケット等にアクセ スするアプリケーション – アプリケーションが連続移送される場合 – アプリケーションが受動的に移送される場合 – アプリケーションが能動的に移動していく場合 (モバイルエージェント) プロセスマイグレーションでは • ホスト依存性に関して – システムコールをホームノードへリダイレクト (ホスト透過性の確保) – 移送先ノード上のファイル参照、ソケット作成を 回避 障害発生点をホームノードと動作ノードに限定 • アプリケーションコードの変更が不要 • 特定のOS、ハードウエアに依存 Java Serialization、RMI、Voyager では • 複雑な片付けによるプログラミング Java RMI – java.io.Serializableインタフェース – java.rmi.Remoteインタフェース Voyager – igenコマンドで生成したインタフェース – virtual referenceクラスの定義 • ユーザは既存のアプリケーションをそのまま 移送できない 本研究では • アプリケーションを構築するオブジェクトを 以下の2つに分類 – ホスト依存オブジェクト(移送不可能) – 移送対象オブジェクト • 複雑な型付けが不要 – ホスト依存オブジェクトに関しては、スタブオブ ジェクトを動的に生成し、移送する • プログラマは簡単に移送可能アプリケーショ ンを構築できる • ユーザは既存のアプリケーションを移送可能 アプリケーション移送時の動作 ユーザインタフェースオブジェクトに対する 移送/複製操作 ホスト依存オブジェクトと移送対象オブジェ クトを分離 ホスト依存オブジェクトのスタブオブジェク トの生成(動的コード生成/コンパイルによる) 移送対象オブジェクトおよびスタブオブジェ クトを移送 スタブオブジェクトから移送元ノードへ Socketによる接続を確立 動的メソッドリダイレクション • 移動および複製の操作 – java.awt.Componentクラスにmove, copyメソッ ドを追加 – 全サブクラスで上記メソッドを利用可能 Component オブジェクトの移送と ホスト依存オブジェクトの分離 • Java Serialization機能を用いたオブ ジェクトの移送 – java.io.Serializableインタフェースを実装 したクラスは「移送対象オブジェクト」 – それ以外は「ホスト依存オブジェクト」 • java.io.ObjectOutputStreamを拡張し て上記2オブジェクトを機械的に分離 writeObject(obj) [no] スタブクラスが キャッシュに存在する “Obj”は Serializableの サブクラス [yes] [no] スタブクラスが ファイルシステ ム上にある [yes] Load Wrapper Class [no] スタブクラスの コード生成 スタブクラスを コンパイル スタブクラスから インスタンス作成 obj = スタブ [no] オブジェクトを 移送 オブジェクトが まだ残っている [yes] スタブオブジェクトの生成 • Java Reflection機能と独自コンパイラ • スタブクラスは対象となるクラスの – サブクラスとして構築される – 全てのメソッドをオーバーライドする – java.io.Serializableを実装する • 制約 – 引数なしコンストラクタを持たない – staticイニシャライザを持つ 上記の特性を持つホスト依存オブジェクトからは スタブクラスを生成できない スタブオブジェクトの例 public class Hello{ public void hello(){ System.out.println(“Hello”); } } public class Hello_Wrapper extends Hello implements DMR_Wrapper{ public void hello(){ if(!DMR_CONNECTED) return; Class types[] = new Class[0]; Object args[] = new Object[0]; Object DMR_reply; DMR_reply=DMR_callRemoteMethod ("hello", args, types); } 対象となるクラス } スタブクラス(抜粋) actionPerformed() :HelloWindow :Hello_Wrapper hello() :WrapperOutputStream :WrapperInputStream :Hello callRemoteMethod() writeObject (MethodRequest) MethodRequest :MethodWrapper invoke() hello() MethodReply 動的メソッドリダイレクションの特徴 • アプリケーション移送時に – アプリケーション中のホスト依存オブジェクトを 機械的に検知する – ホスト依存オブジェクトからスタブオブジェクト を機械的に生成する – メソッド呼出しのリダイレクションが機械的に行 なわれる プログラマは上記を考慮せずにすむ ユーザは既存のアプリケーションを移送可能 (ただし制約の範囲内で) 基本性能評価① 700 600 (msec) 500 400 RMI DMR 300 200 100 0 0 1 2 3 Number of Parameters 4 5 基本性能評価② 700 600 メソッド呼出しコスト (ms) 500 400 ネットワークコスト 300 リダイレクションコス ト 200 100 0 1 2 3 4 引数の数 5 6 今後の課題と方向性 • 課題① – 移送時にスタブオブジェクトが動的に生成 されるため、プログラマの意図と無関係に メソッド呼出しのセマンティクスが変わる – 対策 • 動的生成機能は残しておく(本システムの特性と して「コードの変更を伴わずに」があるため) • プログラマに対して正確な型付けによるプログ ラミングインタフェースを提供する 今後の課題と方向性 • 課題② – 性能の向上と多機能化 • コードの最適化によって性能を向上 • 同期/非同期メソッド呼出し • 方向性 – 応用アプリケーションの構築 • 情報家電機器制御 • 協調作業支援システム まとめ • アプリケーション移送時の諸問題 – ホスト透過性について • 既存の解決手法 – プロセスマイグレーション、Java RMI、Voyager • ホスト透過型オブジェクト移送モデル(設計) • 動的メソッドリダイレクション(実装) • 基本性能評価と今後の課題 – プログラミング透過性とセマンティクスの維持、 性能の両立について
© Copyright 2025 ExpyDoc