Как сопоставить два виртуальных адреса в одной физической памяти Linux? - PullRequest
6 голосов
/ 07 сентября 2011

Я столкнулся с довольно сложной проблемой.Я пытаюсь получить 2 области виртуальной памяти, указывающие на одну и ту же физическую память.Дело в том, что в разных областях памяти должны быть разные параметры защиты страницы.

На этом форуме пользователь, кажется, имеет решение, но кажется хакерским, и совершенно ясно, что что-то лучшее можно сделать с точки зрения производительности.: http://www.linuxforums.org/forum/programming-scripting/19491-map-two-virtual-memory-addres-same-physical-page.html

Поскольку я сталкиваюсь с той же проблемой, я хочу дать здесь шанс узнать, есть ли у кого-нибудь идея получше.Не бойтесь упоминать грязные детали за капотом, вот о чем этот вопрос.

Спасибо заранее.

Ответы [ 3 ]

3 голосов
/ 07 сентября 2011

Полагаю, если вам не нравится общая память Sys V, вы можете использовать объекты общей памяти POSIX .Они не очень популярны, но доступны по крайней мере для Linux и BSD.

Как только вы получите fd с shm_open, вы можете немедленно позвонить shm_unlink.Тогда никакой другой процесс не сможет подключиться к той же общей памяти, и вы сможете mmap сделать это несколько раз.Тем не менее, возможен небольшой гоночный период.

3 голосов
/ 07 сентября 2011

Я пытаюсь получить 2 области виртуальной памяти, указывающие на одну и ту же физическую память.

mmap одна и та же область в одном файле, дважды, или использовать Общая память System V (для которой не требуется отображать файл в памяти).

1 голос
/ 17 ноября 2015

Если вы root, вы можете mmap("/dev/mem", ...), но в более новых ядрах есть предостережения, см. доступ к mmaped / dev / mem?

...