如何为快速IPC分配一个连续的物理RAM
How to allocate a consequtive chuck of physical RAM for fast IPC
我正在Windows 7下开发一个基于C++的系统。我处理的是一堆部署在单独CPU上并相互通信的进程。由于通信是时间关键的(实际上我处理的是实时系统,我知道Win7不是最适合我的操作系统。)我需要它尽可能快。我在Win7下读到了IPC(管道、MemMappedFiles、套接字)。最快的方法似乎是内存映射文件(Windows 7上最快的IPC方法)。然而,我不喜欢Win7交换程序在后台运行,从RAM到HD来回复制数据。此外,每当我访问虚拟内存地址时,虚拟内存管理器都需要计算物理内存地址。
我的方法是:我想在RAM中分配几个MB,并使用它们的物理地址直接向它们写入/从中读取。此外,我想从Win7内存管理中删除RAM内存。这可能吗?这应该是在独立CPU上的进程之间共享数据的最快方式,对吧?我知道这样我就不允许Win7使用任何缓存算法,但由于我的所有进程都部署在单独的CPU上,因此无法访问彼此的缓存,这不会困扰我,对吧?
任何评论(也是非常一般的评论)都非常感谢,因为我仍处于设计我的系统和寻找输入的阶段!
在我看来,你一开始就走错了路。实时并不意味着尽可能快。这意味着您需要满足特定的性能标准。
要想做出有意义的选择,你需要知道你真正需要的速度是多少。
您想要做的根本不可能。首先,受保护模式的应用程序不可能访问物理RAM——任何内存访问都会被CPU的虚拟内存访问所取代,除非它在非保护模式下运行。在非保护(真实)模式下运行代码的唯一方法是将其作为操作系统的内核运行,因为其余代码都处于保护模式。
现在,考虑到您成功创建了一个真实模式的应用程序(任务艰巨,顺便说一句!)此时,您不再有内存映射文件了,因为此映射是由操作系统使用虚拟内存执行的。
我也相信你的担心被误解了。实际上,操作系统很善于确定要交换什么和不交换什么,在任何正常情况下,您的活动使用的内存映射区域进行交换的可能性都很小,几乎为零。
最后但同样重要的是,我不确定你是否真的理解你在这里做什么。
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用连续分隔符和空最后一个字符进行拆分
- 是否存在一个范围::视图::group_by对应项,它将所有元素都考虑在内,而不是只考虑连续的元素
- 在 Cython 中创建一个连续数组并将其传递给C++
- C++ 如何在 std::vector 中插入一个连续的间隔范围?
- 给定n个数字,编写一个例程,以在4个连续数字之间找到最大的数字
- 您可以为连续术语编写一个概念吗?
- 从一个字符串中获取 2-5 个连续的单词短语,我得到了 2 个工作,但在做 3 个时遇到麻烦
- 如何在c++中创建一个连续的2d数组
- 查找最大和连续子数组-另一个版本
- 为什么两个连续的转换会改变一个整数
- 将连续字节作为一个整数读取
- 用C++编写一个程序,模拟反复抛硬币,并持续到连续抛出三个头
- 在一个排序的列表中正好找到N个连续项
- 将多维C++数组作为一个连续块(堆上)访问是否有效
- 如何在 C 系统 / popen 命令中通过另一个C++程序连续输入
- 在 OpenGL 中创建一个围绕其 y 轴连续旋转的三角形
- 获取下一个非连续的二进制数
- 是否有一个 c++ 矩阵库,我可以在其中索引具有非连续向量的矩阵,如 R 中的矩阵
- 如何为快速IPC分配一个连续的物理RAM