我想在多台计算机周围共享某些内存区域,即用于 C/C++ 项目。当计算机 B 上的某些东西访问当前位于计算机 A 上的某个内存区域时,必须将其锁定在 A 上并发送到 B。当它唯一兼容 linux 时我很好。
先谢谢了
我想在多台计算机周围共享某些内存区域,即用于 C/C++ 项目。当计算机 B 上的某些东西访问当前位于计算机 A 上的某个内存区域时,必须将其锁定在 A 上并发送到 B。当它唯一兼容 linux 时我很好。
先谢谢了
您不能对简单的 C/C++ 项目执行此操作。
普通计算机硬件不具有直接支持这一点的物理属性:一个系统上的内存不能被另一个系统读取。
为了使不同机器上的 C/C++ 程序看起来它们正在共享内存,您必须编写提供此功能的软件。通常,您需要执行以下操作:
此外,您需要确定如何处理内存一致性:如果两个进程几乎同时写入内存中的同一地址,会发生什么情况?如果进程 A 写入位置 X,然后读取位置 Y,而进程 B 几乎同时写入位置 Y 并读取位置 X,他们会看到什么?如果两个进程看到的数据不可能是单个时间序列写入内存的结果,是否可以?
最重要的是,这在时间上非常昂贵:需要异常处理和网络操作的内存存储时间是正常存储到内存的数千倍,可能是数十万倍。每当您的进程写入此共享内存时,它们的执行速度都会非常缓慢。
如评论中所述,有软件解决方案。它们使用节点上处理器中的分页硬件来检测访问,并使用本地网络结构将更改传播到内存。一种硬件替代方案是反射内存 - 您可以在此处阅读有关它的更多信息:
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 微秒)。