如何在Linux上的同一物理内存映射两个虚拟地址?

我正面临一个相当棘手的问题。 我试图让2个虚拟内存区域指向相同的物理内存。 重点是在不同的存储区域有不同的页面保护参数。

在这个论坛上,用户似乎有一个解决scheme,但它似乎有点hacky,很明显,更好的东西可以做到性能明智: http : //www.linuxforums.org/forum/programming-scripting/19491-map -两个虚存储器ADDRES-相同物理-page.html中

由于我面临同样的问题,我想在这里拍一下,看看有没有更好的主意。 不要害怕提及引擎盖背后的脏兮兮的细节,这就是这个问题所在。

感谢提前。

我试图让2个虚拟内存区域指向相同的物理内存。

在相同的文件中映射相同的区域两次,或使用System V共享内存 (不需要映射内存中的文件)。

我想如果你不喜欢Sys V共享内存,你可以使用POSIX共享内存对象 。 它们不是很受欢迎,但至少可以在Linux和BSD上使用。

一旦你用shm_open得到一个fd,你可以立即调用shm_unlink 。 那么没有其他进程可以附加到同一个共享内存,并且可以多次进行mmap 。 尽管如此,还是一个小小的比赛期。

如果你是root用户,你可以使用mmap("/dev/mem", ...)但是在更新的内核中有警告,请参阅访问mmaped / dev / mem?