dklic: KL1による分散KL1言語処理系の実装 早稲田大学 高木祐介, 上田和紀 -------------------------------- -------------------------------- なぜKL1か? KL1 dklicの目標 dklicの構成 遠隔述語呼出し ・分散論理変数 ・分散単一化 ・分散変数管理 ・最適化 遠隔サーバへのアクセス ・サービス検索 まとめ -------------------------------- -------------------------------- -------------------------------- -------------------------------- -------------------------------- -------------------------------- なぜ KL1 か? ・単純な言語 - 安全性や正当性の検証を伴う分散プログラミングを 最終目標としているから ・単一代入で未定義状態ありの論理変数 ポインタ安全性 統一的な意味論 - 局所的な実体と分散された実体の意味が同一 実装の自由度 - データの複製(replication) -------------------------------- -------------------------------- KL1の計算モデル ・KL1プログラムは節(書き換え規則)の集合から成る。 Head :- Guard | Body. ・述語呼出しによる動的プロセス生成 ・ストリームによる統一的なプロセス間通信(オープンコンピューティング) ・返信箱によるフューチャー通信 ・ストリーム渡しによる動的ネットワーク構成 main(R) :- R=normal(SSock) | generic:new(merge, Lss, Ls), chat(Chat, Lss, Ls), accept(SSock, Chat). -------------------------------- -------------------------------- dklicの目標 ・分散実行系 によってネットワーク透過(分散構造)な分散計算環境を実現するため、 遠隔ノードへ計算を依頼する ・遠隔述語呼出し(Java RMI) ・述語移送(Javaクラスローダ) ・サービス検索(ORB, Jini) の機能を提供する。 Not Goals ・セキュリティ(TCP/IP, SSL) ・フォールトトレランス(荘園) -------------------------------- -------------------------------- dklic処理系の構成 ・100% KL1による単純な実装 ノード実行系はKLIC任せ 実行系remote+vario+vart 約400行 ・遠隔述語呼出しを実現 ・述語移送とサービス検索は試作あり -------------------------------- -------------------------------- dklicを利用した遠隔述語呼出し ゴール遠隔実行 Goal@Node の解釈 - 実行系へのメッセージ送信(遠隔ゴール実行依頼)と解釈する - メッセージはリモートノード(Node)に転送される - メッセージを受け取った Node は,OKならばそのプロセスを生成す る ping+pingd 42行(サーバ分散化6行) -------------------------------- -------------------------------- 分散論理変数の実装 ・分散単一化 ・分散変数管理 ・分散変数に関する最適化 -------------------------------- -------------------------------- 遠隔サーバへのアクセス chat+chatd+lio 123行(KLIC) チャットサーバの仕事は ・サービス getl, putl 発言をサーバへ通知、広報をクライアントへ通知 ・サーバ accept, chat, merge クライアント受付け、履歴管理、全発言の併合 遠隔述語呼出しでは ・サービス:サーバとの通信はなし ・サーバ:クライアント受付けのみ -------------------------------- -------------------------------- サービス検索 - サービス名を与えるとサービスへのアクセスストリームが獲得できる ことが基本 - service_name(S) という形式のメッセージで表現できる - このメッセージを適切なノードの実行系に送信すればよい - そう考えると,ゴール遠隔実行との差はそれほど大きくない サービス検索: 既存のサーバに接続する 遠隔実行: 指定された名前の述語のコードを(実行系というサ ーバが)新たに起動する - 両者を切り分け,ユーザ定義可能なサーバにメッセージを流す機能が 必要 -------------------------------- -------------------------------- まとめ ・ネットワーク透過な遠隔述語呼出しを実現した。 今後はKLICのgeneric objectによって分散変数管理を最適化する。 ・ネットワーク透過な遠隔サーバへのアクセスは今後の目標。 ・静的解析による最適化は今後の重要な課題。 -------------------------------- -------------------------------- -------------------------------- -------------------------------- -------------------------------- -------------------------------- -------------------------------- --------------------------------