I'm facing a quite tricky problem. I'm trying to get 2 virtual memory areas pointing to the same physical memory. The point is to have different page protection parameters on different memory areas.
On this forum, the user seems to have a solution, but it seems kinda hacky and it's pretty clear that something better can be done performance-wise : http://www.linuxforums.org/forum/programming-scripting/19491-map-two-virtual-memory-addres-same-physical-page.html
As I'm facing the same problem, I want to give a shot here to know if somebody has a better idea. Don't be afraid to mention the dirty details behind the hood, this is what this question is about.
Thank by advance.
mmap
the same region in the same file, twice, or use System V shared memory (which does not require mapping a file in memory).I suppose if you dislike Sys V shared memrory you could use POSIX shared memory objects. They're not very popular but available on Linux and BSDs at least.
Once you get an fd with
shm_open
you could immediately callshm_unlink
. Then no other process can attach to the same shared memory, and you canmmap
it multiple times. Still a small race period available though.If you are root, you can
mmap("/dev/mem", ...)
but there are caveats in the newer kernels, see accessing mmaped /dev/mem?