重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

・FIFOをタプルスペースを用いて実現する。
・複数プロセス間での排他制御をタプルスペースを用いて実現する。
以上の2つを実現するプログラムを書きたいです。

ご教示お願い致します。

またプロセスの通信間の方式としてタプルスペース以外になにがありますか?
・クライアントサーバ
・3層アーキテクチャ
・N層アーキテクチャ
・密結合(クラスター)
・Peer-to-peer
これらはその方式だと言えますでしょうか?

A 回答 (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% …
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/08/10 19:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!