2009-04-22 21 views
0

共有メモリまたはTCPソケットプログラミングの概念を使用して2台のコンピュータ間で通信するコンセプトを構築する必要があります。これについてはどうすればよいですか?クライアントサーバーアーキテクチャで共有メモリを実装することは可能ですか?btw 2台のPCが共有メモリを使用して通信しますか?

答えて

7

共有メモリを使用する2台のコンピュータ間では、メモリを共有しないため通信できません。

TCPソケットを使用する必要があります。

+1

あなたはフラッシュスティックでそれをすることができます:) – Prankster

+0

私は、マックは2台のコンピュータがメモリを共有していないことを知っていると感じています - "クライアントサーバアーキテクチャで共有メモリを実装することは可能ですか?それについて?"答えは "はい、可能な、分散共有メモリの検索" –

+1

分散共有メモリはソケットよりもはるかに難しく(遅い)。 – Zifre

1

私は共有メモリではなく、あなたが探しているものを「反射メモリ」のように呼びます。

リフレクティブメモリブロックでは、ネットワーク上の各コンピュータが1ブロックのメモリを所有します。すべてのブロックは高速の速度ですべてのコンピュータ間のバスの周りにパントされます。各コンピュータは、他のすべてのコンピュータから読み取るためにメモリのコピーを取得しますが、通常は自分のメモリに書き込むことしかできません。

したがって、各コンピュータは、他のすべてのコンピュータのメモリの状態を「見る」ことができます。通常、物理的に別々のマシンに制御を分散し、ほぼリアルタイムで全体の状態を確認したいという産業用制御システムでは、この種のアーキテクチャがあります。

システムを構築するには、ローカルコンピュータの状態を爆発させ、他のすべてのコンピュータにそのデータを読み取らせるUDPパケットから始めてください。

0

「コンピュータがメモリを共有しないのでできない」というスニークな答えは間違っています。 1台のコンピュータ内のプロセッサはメモリを共有しません。ハードウェアとソフトウェアは、共有メモリの錯覚を提供するために共有メモリプロトコルを実装しています。

プロセッサ間の共有メモリプロトコルは、コンピュータ間の共有メモリプロトコルと非常によく似ています。同じ問題です。

"分散キャッシュ" "タプルスペース"を検索し、"distributed shared memory"を考えると、思考のために食べ物を提供するかもしれません。 memcachedは非常に一般的なオープンソース製品です。

EDIT: "キャッシュコヒーレントアーキテクチャ"に関するコメントについて。各プロセッサには、独自のローカルキャッシュメモリ(L1キャッシュなど)があります。この "キャッシュ一貫性"を生み出すような "もの"がたくさんあるので、各プロセッサが共有メモリ空間に読み書きしているように見えます。プロセッサは、絶対に、積極的に単一の共有メモリ空間に直接書き込むことはありません。この問題は、概念的にはコンピュータ間の共有メモリでも同じです。

+1

これは間違っています。キャッシュコヒーレントアーキテクチャ(x86など)では、同じコンピュータ上のプロセッサがメモリを共有します。 – Zifre

+0

これでL1キャッシュとは何ですか? –

+0

プロセッサごとのキャッシュ。プロセッサは主メモリを共有し、同じメモリ位置からL1キャッシュを埋めます。 –

0

memcachedのような分散メモリオブジェクトキャッシュシステムを調べるとよいでしょう。

許可されても、これはTCP経由で行われます。

2

CANは、共有メモリを持つリモートシステムと通信します。リモートDMAは、新しい高性能ネットワークインターフェイスコントローラカード(NIC)の機能です。

RDMAの性能を評価した論文は以下の通りです:10 Gb ethernet RDMAの性能。私はinfinabandもRDMA、他の可能性があります知っている。 802.11のXXXが出てきたらうれしいですか?ワイヤレスRDMA? :)

+0

リンクが死んでいますが、ウィキペディアには記事があります:http://en.wikipedia.org/wiki/Remote_direct_memory_access – RandomNickName42

関連する問題