Виртуальная память в Linux?

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

  • Отображение доступно на чтение, но недоступно на запись.
  • Отображение имеет тип 'Private copy on write'.
  • Отображение начинается с одного и того же смещения в файле и имеет один и тот же размер.
  • Отображение относится к файлу, то есть номер устройства и номер индексного дескриптора не равны 0.
  • Отображение относится к одному и тому же файлу, то есть номер устройства и номер индексного дескриптора равны.


Правильно ли я понимаю, что для разделения отображения внутри одного процесса требования точно такие же?
  • Вопрос задан
  • 5582 просмотра
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
При каких условиях два региона в одном процессе отображаются на одну физическую память?

Отображение доступно на чтение, но недоступно на запись.

— да.
Отображение имеет тип 'Private copy on write'.

— да, если в этот регион не было записей.
Если отображение имеет тип shared, физческие страницы находятся в page cache и разделяются всеми процессами, отображающими этот файл в память как shared, а так же файловыми системами, читающими и пишущими в него.
Ответ написан
@gribozavr
Внутри одного процесса вся память всегда общая.
Ответ написан
Я думаю, что должна быть общая. Но можно, на всякий случай, проверить: сделать два mmap'а в одном процессе и посмотреть объем использованной памяти.
Но, возможно, стоит подумать над тем, чтобы приложение делало mmap один раз а далее в те места, где файл используется, передавать указатели на память.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы