Software Engineering Lecture 7/6

Software Engineering Lecture 7/6

先週の復習



分散プログラミング

最近のアプリケーションは、ほとんどすべてネットワーク対応だと いっても良い。ネットワーク対応にする一つの方法は、NFS (ネットワーク ファイルシステム)を使うことにより、ファイルシステムだけネットワーク 対応にする方法である。このようにすれば、既存のプログラムを変更することなく、 自動的にネットワーク対応のプログラムに変更される。しかし、例えばメール リーダなどは、NFSに対応したロックプロトコルを要求される。あるいは、 X-Window では、表示方式そのものがネットワーク透過であり、自動的に ネットワークを越えた画像アプリケーションが作成される。しかし、この アプリケーションが自動的にマルチユーザに対応することはない。 これらはネットワーク対応ではあるが、ネットワークアプリケーションという ことはできない。

本当のネットワークアプリケーションは、自分でネットワーク接続を 管理する必要がある。ここで良く使われるのはサーバクライアントと呼ばれる モデルである。サーバクライアントにもいくつか種類がある。


一つ一つの処理をサーバ逐次に行っていく方法では、クライアントを待たせる 必要がある。

サーバがクライアントに対応したslave serverを立ち上げれば、データベース のアクセス競合がないかぎり、サービスは平行に行うことができる。

どちらの方法にせよ、このモデルではサーバが必ずネックになる。これをさける ためには、サーバをなくし、それぞれのネットワーク・エージェントが独立に 通信すれば良い。

しかし、この方法は、全体の整合性を維持する方法が難しい。それぞれのエージェント が自分のサーバとなるような方法、仮想的なリングを構成する方法、投票により 全体の状態を統合する方法、 などが使われている。

分散プログラミングにおける通信

ネットワーク上の通信は、ストリームなどの原始的な通信を使うことも できるが、いくつかのより高度な方法が提供されている。

Remote Procedure Call

RPC は、手続き呼び出しと同じ形式で、他のサイトのプログラムを 呼び出す。RPC には同期と非同期がある。非同期は、call backにより 答を返す。


Tuple通信

Linda とは、並列通信プログラミング手法の1つで、 タプルと呼ばれるデータを交換する事により通信を行う。タ プルは、サーバーに蓄えられ、 id によってアクセスする。 サーバーにタプルを出し入れす ることにより、複数のクライアントから通信する事ができる。

out(id, data);

データをサーバに書き出すのに使う。

in(id)
rd(id)
ck(id);

これらはサーバのデータを受け取るときに使う。まず、in/rd/ ck 
のどれかで、どのidのデータを受け取るかを指示する。データが来
ていればデータを返す。rd は読み込んでもデータをサーバがから
削除しない。ckの場合は、データが来ても、それはタプルがないこ
とを示す空文字列の場合がある。

平行オブジェクト

分散オブジェクトでは、3種類のメッセージ送信がある。

ACTORと呼ばれる平行オブジェクトは、オブジェクトをモニタとして扱う。

Javaなどでは、平行実行とオブジェクトは独立。



Multi-user card gameの記述

この課題は一人でやっても良いが、4-5人のグループで行うこと。

Multi-user card gameの状態遷移

マルチユーザゲームの難しい所は、ユーザの参加や脱退である。この部分を表す 状態遷移図をユーザとゲームのサーバそれぞれについて、 記述してみよ。



Multi-user card gameの協調図

実際にカードゲームが始まる時には、それぞれのユーザや、ゲームのサーバ が相互に通信しあって処理を行う。以下の例を協調図を使って記述してみよ。

  1. 参加するユーザを決定し、ゲームの開始を参加するユーザに通知する
  2. カードをシャッフルし各ユーザに配布する。
  3. 選択したゲームの1ターンを行う
  4. ゲームの終了判定と終了の処理を行う

課題は、作成した図、作成したプログラム、実行方法をまとめて、HTML で記述し、 WWW にあげること。WWWには、参加したものの名前と学籍番号を明記すること。 作成たらメールでURLを以下のサブジェクトで kono@ie.u-ryukyu.ac.jp まで送ること。
Report on Software Engineering Lecture 7/6