活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
モバイルエージェントシステムの実装 エージェント移動(状態とコードの一括移送) エージェント移動の特徴 システム構成 エージェントプログラム
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
アルゴリズムとデータ構造 2012年6月27日
アルゴリズムとプログラミング (Algorithms and Programming)
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
Bridge Pattern
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングと Dependency Injection の融合
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
J2EEアプリケーションにおける アプリケーションレベルスケジューリング
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
アルゴリズムとプログラミング (Algorithms and Programming)
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
数理・計算科学専攻 千葉研究室 08M37315 森田 悟史 指導教員 千葉 滋 教授
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
アルゴリズムとプログラミング (Algorithms and Programming)
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2011年6月23日
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
「マイグレーションを支援する分散集合オブジェクト」
マイグレーションを支援する分散集合オブジェクト
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
「マイグレーションを支援する分散集合オブジェクト」
ソフトウェア制作論 平成30年11月28日.
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
アルゴリズムとデータ構造 2012年6月25日
開発者との対話を活かした 横断的構造の表現
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

活性化のタイミング制御の実装を分離記述可能な分散動的アスペクト指向言語 森田 悟史 堀江 倫大 千葉 滋 東京工業大学 千葉研究室

分散動的アスペクト指向 実行途中でアスペクトを織り込む 例: N 体問題の視覚化 離れたノードで動いているプログ ラムに機能を追加 各ワーカノードが分散並列で計算 各ループでバリア同期をしている 途中経過を随時マスタノードに集 めて視覚化 マスタ ワーカ 各ノード: for ( t = 0; t < MAX; t++) { /* 他ノードとデータを交換 */ exchangeData(data); calc (data); // N 体問題計算 sync(); // 他のノードと同期 } アスペクト

分散動的アスペクトの織り込み 離れたノードに織り込む 織り込みがずれる マスタノードが、各ワーカノードにア スペクトを配る 計算データを送信するコード 織り込みがずれる ノードにより、ネットワーク速度・CPU 使用率が違う データの送信開始がずれる ずれる マスタ ワーカ

織り込みと活性化 織り込み 活性化 アスペクトを遠隔ノードに準備する アスペクトを実行可能な状態にする 活性化のタイミングを制御する ずれる 活性化されると視覚化が始まる 活性化のタイミングを制御する アスペクトを有効にするタイミングを 調整 ずれる マスタ ワーカ 活性化されるまで実行しない

活性化の条件:アスペクトの織り込み状況 ノードによってアスペクトが織り 込まれていない場合がある 織り込みがずれる アスペクトが織り込まれていな いノードがあるなら活性化しては いけない ずれる ない マスタ ワーカ

活性化の条件:アプリケーションの進捗 計算の同じループで活性化す る必要がある 全てのノードで織り込みが完了 しても、単純に活性化してはい けない バリア同期を利用したい ループごとに全ノードで同期を とっている csg000 織り込み t = 101 同期 ジョイン ポイント t = 102 データ 送信 同期 N体問題 計算 t = 103

活性化の条件:アプリケーションの進捗 計算の同じループで活性化す る必要がある 全てのノードで織り込みが完了 しても、単純に活性化してはい けない バリア同期を利用したい ループごとに全ノードで同期を とっている csg000 csg001 csg002 t = 101 同期 活性化 t = 102 同期 t = 103 活性化しては いけない

活性化するタイミングの制御 分散動的アスペクトが必要 活性化すべきタイミングはアプリ ケーションによって異なる 情報を集めるコードを織り込む バリア同期 を報告する アスペクト 分散動的アスペクトが必要 活性化すべきタイミングはアプリ ケーションによって異なる バリア同期のタイミング 情報を集めるコードを織り込む バリア同期のタイミングをマスタノ ードに報告させる バリア同期 マスタ ワーカ 視覚化 アスペクト 活性化するタイミングを判断

素朴な活性化のタイミング制御 織り込みたいアスペク トと活性化制御の実装 が混ざる 必要ないコードが残る 制御の実装 活性化のタイミング制御  を考慮したアスペクト : aspect DrawAspect { boolean flag = false; // 共有フラグ before(Satellite s): // 星のデータ execution(void Nbody.calc(Satellite)) && args(s) { if (flag) { // 視覚化処理 } /* バリア同期のタイミングで実行 */ after(): execution(void Nbody.sync()) { // マスタノードへ同期のタイミング // を通知し、活性化の判断をさせる }}

提案:活性化のタイミング制御をアスペクトとして分離記述できる言語 単一ノード上のアスペクトからの織り込みの集中制御 Remote pointcut [‘04 Nishizawa ら] 活性化すべきタイミングを把握するプログラムを書きやすくする 各遠隔ノードのバリア同期のタイミングなどを取得 dynamic アスペクト 動的に分散織り込み可能なアスペクト プログラムから織り込み・活性化処理が可能 織り込み状況の確認 タイミング制御の実装のライブラリ化 活性化のタイミング制御と織り込みたいアスペクトを切り分ける

Remote pointcut 活性化すべきタイミングを把握するプログラム が書きやすくなる 視覚化ノード上のアドバイスの実行 計算ノードがジョインポイントに到達したら csg000: ... sync(); … pointcut remote(String h): execution(void Nbody.sync()) && hosts(“csg000”, “csg001”, “csg002”) && hostName(h); csg000 Aspect 指定子 ジョインポイント hosts(hostNames or hostName1, hostName2 ..) String 配列、もしくは直接名前で指定したホスト上のジョインポイントを選択 hostName(hostName) ホスト名がhostNameに一致するジョインポイント

dynamic アスペクト 動的に分散織り込み可能なアスペクト 特別なオペレータを持つ プログラムから活性化を制御可能 dynamic aspect DrawAspect { …. } DrawAspect draw = new DrawAspect(); draw.weave(); while (!draw.isWoven()) Thread.sleep(10); draw.deploy(); ... draw.unweave(); 動的に分散織り込み可能なアスペクト プログラムから活性化を制御可能 dynamic 修飾子 を付ける 特別なオペレータを持つ インスタンス化して呼ぶ アスペクトの織り込み状況の確認 オペレータ 説明 void weave() 非活性状態でアドバイスを呼び出す準備をする void unweave() アスペクトを取り除く void deploy() アスペクトを活性化する void undeploy() アスペクトを非活性化する boolean isWoven() アスペクトが準備ができているかどうか調べる boolean isDeployed() アスペクトが活性化されているかどうかを調べる

タイミング制御の実装のライブラリ化 dynamic アスペクト 活性化のタイミング制御ア スペクト First-class entity パラメタとして渡せる DAspect型のオブジェクト 活性化のタイミング制御ア スペクト 視覚化アスペクトから分離 再利用可能なライブラリに 抽象アスペクトとして実装 abstract aspect BarrierSync { private DAspect dAspect; public BarrierSync(DAspect dAspect) { this.dAspect = dAspect; dAspect.weave(); } abstract pointcut remote(String s); after(String h): remote(h) { ... dAspect.deploy(); }}

例:N 体問題の活性化制御アスペクト バリア同期の タイミングを利用 public abstract aspect BarrierSync { /* 織り込みたいアスペクト */ private DAspect dAspect; public BarrierSync (DAspect dAspect, String[] nodes) { this.nodes = nodes; this.dAspect = dAspect; dAspect.weave(); } abstract pointcut sync(); // バリア同期のメソッドの実行 before(String host): sync() && hostName(host) { // host 上で同期メソッドへ突入 } after(String host): sync() && hostName(host) { // host 上で同期メソッドが終了 if ( 全てのノードで同期メソッド突入後 ) if (dAspect.isWoven()) { dAspect.deploy(); this.unweave(); } … }} バリア同期の タイミングを利用 アスペクト準備完了 csg000 csg001 csg002 before 同期 after 同期 +活性化 同期

例:視覚化アスペクトの織り込み・活性化 活性化制御アスペクト に織り込みたいアスペ クトを渡す 織り込みを行うクラス : public class Weaver { public static void main(String[] args) { DrawPolicy dp = new DrawPolicy( new DrawAspect() ); dp.weave(); while( !dp.isWoven() ){ Thread.sleep(10); } dp.deploy(); }} N 体問題の活性化制御アスペクト: 織り込むアスペクト : public dynamic aspect DrawPolicy extends BarrierSync { private DAspect dAspect; public DrawPolicy(DAspect dAspect) { … } pointcut sync(): execution(void Nbody.sync()) && hosts(“csg000”, …); } public dynamic aspect DrawAspect { … before(Satellite s): execution(void Nbody.calc(Satellite)) && hosts(nodes) && args(s) { // 描画処理 } …}

例:サーバ・クライアント間のメッセージ暗号化アスペクト Client Server メッセージ 二つのアスペクトで機能を実現 クライアント側:暗号化 サーバ側:複合 片方だけが活性化されると通 信失敗 メッセージのやりとりの状況を 把握する必要がある 通信中に活性化してはいけな い 暗号化 復号 Client Server 暗号文 暗号化 解読不可 Client Server 暗号文

例:暗号化アスペクトのタイミング制御用アスペクト Client Server メッセージ 1回の通信をもとに、双方の活性化を行う public abstract aspect ServerClient { /* 織り込みたいアスペクト */ private DAspect server, client; public ServerClient (DAspect server, DAspect client) { server.weave(); client.weave(); // 両方のアスペクトが準備できるまで待つ } abstract pointcut server(); // サーバのジョインポイント abstract pointcut client(); // クライアントのジョインポイント before (): client() { client.deploy(); // 1回だけ通信を許可する // 以降は wait() で待たせる // 先に送信中のメッセージが届くのを待つ } before(): server() { server.deploy(); this.unweave(); // 待たせていた通信を再開させる }} Client Server 暗号化 Client Server Client Server 復号 Client Server 暗号文

関連研究 CaesarJ [‘03 Mezini ら] DJAsCo [‘06 Navarro ら] 非活性状態のアスペクトを deploy 命令で活性化 遠隔ノードの処理の進行状況を集中管理できない DJAsCo [‘06 Navarro ら] Remote pointcut を使用できる フックを活性化する処理をアドバイスとして記述できない DyReS [‘08 Truyen ら] XML スクリプトで活性化までの流れを記述 遠隔ノードの処理の状況を把握することはできない スクリプトが複雑になりやすい

まとめと今後の課題 アスペクトの活性化のタイミング制御を別のアスペ クトとして分離して実装できる言語を提案した 分散ノードの処理の進行状況を把握しつつ、活性化 制御ができる N 体問題などの例を示した 実装の残りを完成させるのが今後の課題