• ベストアンサー

タプルスペースを用いた実現

・FIFOをタプルスペースを用いて実現する。 ・複数プロセス間での排他制御をタプルスペースを用いて実現する。 以上の2つを実現するプログラムを書きたいです。 ご教示お願い致します。 またプロセスの通信間の方式としてタプルスペース以外になにがありますか? ・クライアントサーバ ・3層アーキテクチャ ・N層アーキテクチャ ・密結合(クラスター) ・Peer-to-peer これらはその方式だと言えますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • hirotn
  • ベストアンサー率59% (147/246)
回答No.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

softwarelist
質問者

お礼

ご丁寧にありがとうございます!

関連するQ&A