ハードウェア技術の進展、ネットワーク環境の整備、インターネットへの容易な接続などの環境の変化に伴い、分散環境において質の高いアプリケーションを効率的に開発することが求められている。分散環境下でのプログラミング作業は、並行性、同期、通信などに配慮せねばならず、従来の逐次的プログラミングに比べて著しく困難である。したがって、効率的に分散プログラミングを行うためには、これらの事象を考慮して設計されたプログラミング言語、すなわち、分散プログラミング言語の利用が必須である。 分散プログラミング言語に関する研究の成果にはめざましいものがある。しかし、依然として分散プログラミングは非常に困難であり、さらなる研究が必要な段階にある。分散プログラミングを困難にする主因に分散アプリケーションが要求するセマンティクスと分散プログラミング言語が提供する機能のセマンティクスの間の大きなギャップがある。本研究ではこのギャップを小さくすることを目標として、並行オブジェクトモデルに基づく核言語に、拡張可能な言語機構を与えること及び大域的な言語機構を与えることの二点よりアプローチした。 核言語に拡張性を与えるための枠組みとしては一級継続(first class continuation)の概念を導入することを提案する。継続(continuation)は、逐次言語の制御構造のセマンティクスを与えるために表示的意味論の研究において編み出された概念である。Schemeに代表されるプログラミング言語では、継続を関数として扱える機能、すなわち一級継続を取り入れた。このことにより、プログラマは任意の制御構造をプログラミング言語に付加できるようになった。本研究では、並行オブジェクトモデルに一級継続の概念を取り入れることによって、プログラマが並行プログラミング言語に任意の制御構造及び任意の通信機構を追加できる枠組みを構築した。このために、並行オブジェクト指向モデルに内在する二種の計算、すなわちメソッド実行とメッセージ通信に対応した二種の一級継続機構、すなわちメソッド継続(method continuation)とメッセージ継続(message continuation)を提案する。 メソッド継続は、従来の一級メッセージ機構に同期のセマンティクスを付加したものである。メソッド継続を利用することによって、任意の制御構造を核言語に付加できるようになる。メソッド継続の関数的な振舞いは従来の継続と同様であるために、従来の継続プログラミングをそのまま応用することができる。これに加えて、並行動作するオブジェクト間で一級継続を受け渡すことにより、明示的なコンテキスト切り替え、柔軟な割り込み機構などのような、より複雑な分散制御構造を実現することが可能となる。 メッセージ継続の枠組みは、送信中のメッセージがメッセージ送信の継続を表現していることに着目して考案した。この枠組みでは、通信形態を抽象化するCommunicatorという概念を導入した。Communicatorは核言語にあらたにプログラマ定義のメッセージ送信の文法を追加するとともに、そのメッセージ送信が実行された際のメッセージの振舞いを定義する。Communicatorでは、送信中のメッセージが一級メッセージ(first class message)として表現されている。この一級メッセージを操作するためにはいくつかの基本プリミティブが提供されている。これらのプリミティブを組み合わせることによってプログラマはさまざまな通信機構の振る舞いを定義し、それらを核言語にユーザー定義の通信機構として追加することができる。例としては、マルチキャスト、未来型通信、Concurrent Aggregates、暗号化メッセージとその複合、通信のモニタリングなどが挙げられる。 一級継続機構の設計を通して重要な点に枠組みの安全性がある。一般に、プログラミング言語の拡張機能はともするとその強力な記述力が禍して核言語の基本的な性質を破壊しかねない。本提案の一級継続機構では、一級継続の基本操作に同期のセマンティクスを与えることによって、この問題に対して根本的な解を与えている。たとえば、メソッド継続機構はメソッド実行の原子性を保持し、メッセージ継続ではメッセージの同一性を保持する。 分散アプリケーションの大域的な振舞いの制御は分散プログラミングにおいて重要であるにも関わらず、これまでの研究ではほとんど触れられていない。分散プログラミング言語に大域的な制御機構がないために、現状ではデッドロック処理、分散停止問題、大域的並行性制御などの典型的な分散アルゴリズムをプログラムのモジュール性を維持しつつ記述することはほとんど不可能である。本研究では、データベースのトランザクション機構を並行計算モデルに導入することによって大域的な制御を可能とする枠組みを与える。 トランザクション機構は分散データベースの研究で提唱された並行性制御機構である。データベース内の各処理はそれぞれ独立したトランザクションとよばれる逐次実行列として扱われる。トランザクションの論理的な振舞いは原子的に実行される相互に干渉しあわない並行実行単位として特徴づけられる。この並行性制御の仕組みは大域的な同期を実現しているので、上述の問題に対してエレガントな解を与えると期待される。しかし、データベースのトランザクション機構はトランザクション内部の並行性については扱っておらず、これをそのまま並行計算に応用することはできない。本論分で提案する並行トランザクションモデルはトランザクション機能を並行プログラミング言語で利用できるように設計された新たなトランザクションモデルである。 並行トランザクション機構を用いるとプログラマは任意のプログラム断片を並行トランザクションとして宣言できる。並行トランザクション機構はこのプログラム断片の実行に対して他の並行実行プロセスに対して、原子性と孤立性を保証する。従来のトランザクションシステムとの大きな違いはトランザクション内部に並行性を許す点、およびトランザクションの入れ子を許す点である。前者は核言語が並行言語であること、後者は再帰的なメソッド呼び出しの中でトランザクションが再帰的に呼び出され得ることに起因しており、いずれも並行言語にトランザクション機構を融合する上で必要不可欠な性質である。 並行トランザクションの原子性と孤立性は、プログラマにトランザクションの内部の実行が仮想的に他の並行プロセスから完全に隔離された環境で実行されているかのような幻想を与える。したがって、プログラマはトランザクション外部で実行しているプロセスとの並行性制御については考慮する必要がなくなり、同期制御の問題をトランザクション内部に局所化できるために、問題の分析が大幅に容易になるとともに、同期の記述が簡潔になる。具体的な応用例としては、デッドロックの回避、並列探索問題、分散スナップショットの作成、大域的並行性制御などがあげられる。 並行トランザクションを実装する上では、並行性、ネストの導入に伴い、従来のトランザクションシステムの並行性制御の仕組みに加えて分散終了判定、脱出操作の遅延、ネストしたトランザクション間の並行性制御、非トランザクションとトランザクション間の並行性制御などが必要となる。これに対して、マルチバージョンを用いた、二層施鍵方式を拡張したアルゴリズムを用いて並行トランザクションが実現できることを示した。 一級継続と並行トランザクションは互いに直行した概念である。したがって、両者を一つのシステムに統合することが可能である。このことによって、トランザクションの内部でユーザー定義の制御構造や通信機構を利用できるばかりでなく、ユーザー定義の制御構造や通信機構の定義の中でトランザクションを用いることで、原子的な制御構造や原子的な通信機構の構築が可能となる。 このように統合されたシステムの実装機構はかなり複雑である。実際、通常はトランザクション機構の実装については、並行性制御、コミット処理、ログの管理などが別個に語られており、システム全体の振る舞いを把握することが困難である。これに対して、核言語の操作的意味を拡張する形で一級継続機構と並行トランザクション機構の操作的意味を与えた。これによって、並行計算、一級継続、トランザクションの意味を統合的に扱い、簡潔な記述を与えた点は本研究の重要な成果の一つである。 |