- ベストアンサー
タプルスペースを用いた実現
・FIFOをタプルスペースを用いて実現する。 ・複数プロセス間での排他制御をタプルスペースを用いて実現する。 以上の2つを実現するプログラムを書きたいです。 ご教示お願い致します。 またプロセスの通信間の方式としてタプルスペース以外になにがありますか? ・クライアントサーバ ・3層アーキテクチャ ・N層アーキテクチャ ・密結合(クラスター) ・Peer-to-peer これらはその方式だと言えますでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
【頭出し程度にお考えください。間違いがあれば指摘いただきたいです】 タプルスペースを書くための定義がありませんでしたので、以下のようにします。 out(): タプルをタプルスペースに追加する. in(): タプルスペースからマッチするタプルを削除し,それをプロセスに返す. 必要なタプルが見付からない場合は,プロセスはブロックして待つ. read(): in と同様だが,読み出されたタプルはタプルスペースから削除されない. (1)要はキューを作りなさいと言っているので def queue(d:data) in(QUEUELEN,i:integer) 末尾のキュー位置を取得し out(QUEUE,d:i+1) データを追加し out(QUEUELEN i+1) ずらす end def dequeue() in(CURQUEUE,i) 現在のキュー位置を取得し in(QUEUE,d:data,i) データを取得して out(CURQUEUE,i+1) ずらす return d def CURQUEUE QUEUELEN QUEUEは定数、初期設定として、out(QUUEUELEN,0) out(CUEQUEUE,0)が実行されているものとする。 (2) 共有データcomdへのアクセスを考えます。 def lock() in(FLAG, i:integer) read(COMD,j:integer) out(FLAG,1) end FLAGは定数。初期設定としてout(FLAG, 1)が実行されているものとする。 FLAGを使用権と考えて、使用権を持っているプロセスが実行出来る。それ以外はinで待つ。 使用権を持つプロセスは実行が終わったらoutで使用権を返上する。ではダメでしょうか。 (3)またプロセスの通信間の方式としてタプルスペース以外になにがありますか? ・クライアントサーバ ソケット ・3層アーキテクチャ ソケット・ファイル ・N層アーキテクチャ ソケット・ファイル ・密結合(クラスター) ソケット・メッセージパッシング ・Peer-to-peer ちょっとわかりません 何れもプレセスの通信間の方式を用いた実装例に見えます。 http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E9%96%93%E9%80%9A%E4%BF%A1
お礼
ご丁寧にありがとうございます!