C/C++ プロジェクトなど、複数のコンピューターで特定のメモリ領域を共有したいと考えています。コンピューター B の何かが、現在コンピューター A にあるメモリ領域にアクセスすると、それは A でロックされ、B に送信される必要があります。
前もって感謝します:D
C/C++ プロジェクトなど、複数のコンピューターで特定のメモリ領域を共有したいと考えています。コンピューター B の何かが、現在コンピューター A にあるメモリ領域にアクセスすると、それは A でロックされ、B に送信される必要があります。
前もって感謝します:D
これは、単純な C/C++ プロジェクトでは実行できません。
一般的なコンピュータ ハードウェアには、これを直接サポートする物理的特性はありません。あるシステムのメモリを別のシステムで読み取ることはできません。
異なるマシン上の C/C++ プログラムがメモリを共有しているように見せるには、この機能を提供するソフトウェアを作成する必要があります。通常、次のようなことを行う必要があります。
さらに、メモリの一貫性をどうするかを決定する必要があります。2 つのプロセスがほぼ同時にメモリ内の同じアドレスに書き込むとどうなるでしょうか? プロセス A が場所 X に書き込み、次に場所 Y を読み取り、ほぼ同時にプロセス B が場所 Y に書き込み、X を読み取る場合、何が表示されるでしょうか? 2 つのプロセスが、メモリへの 1 回の書き込みシーケンスの結果であるとは考えられないデータを認識しても大丈夫ですか?
それに加えて、これは時間的に非常にコストがかかります。例外処理とネットワーク操作を必要とするメモリへのストアは、通常のメモリへのストアよりも数千倍、場合によっては数十万倍の時間がかかります。この共有メモリに書き込むたびに、プロセスの実行速度が非常に遅くなります。
コメントに記載されているように、ソフトウェアソリューションがあります。これらは、ノード上のプロセッサのページングハードウェアを使用してアクセスを検出し、ローカルネットワークファブリックを使用して変更をメモリに配布します。ハードウェアの代替案の1つはリフレクティブメモリです。詳細については、こちらをご覧ください。
https://en.wikipedia.org/wiki/Reflective_memory http://www.ecrin.com/embedded/downloads/reflectiveMemory.pdf
http://www.dolphinics.com/solutions/embedded-system-reflective-memory.html
リフレクティブメモリは、リング構成またはツリー構成のいずれかで低遅延(ホップあたり約1マイクロ秒)を提供します。