Почему в Linux область отображения памяти увеличивается

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

если он растет вниз, то как создается новая область отображения памяти. предположим, что мы хотим отобразить код для abc.so в виртуальном адресном пространстве, тогда нам нужно будет создать пространство sizeof(abc.so) в нисходящем направлении и файл сопоставления, начинающийся в нижней части этой области. это как это работает?


person Rohit Banga    schedule 30.11.2009    source источник


Ответы (1)


Вы уверены, что не путаете «вверх» на диаграмме с «вверх» в смысле увеличения адресов? Обратите внимание, что на диаграмме младший адрес находится вверху [Редактировать: на самом деле нет, младший адрес находится внизу, моя ошибка].

Отображаемая область увеличивается в сторону более низких адресов. Почему вы считаете, что он должен расти в другом направлении? Если сопоставленные файлы и куча начинаются в противоположных направлениях адресного пространства и растут по направлению друг к другу, вы максимизируете использование адресного пространства до того, как области столкнутся.

Когда вы сопоставляете файл, вы просто сопоставляете непрерывный диапазон адресов, которые будут поддерживаться файлом (от младших до старших адресов, чего и следовало ожидать). Когда вы обращаетесь к странице, происходит ошибка страницы, и содержимое файла копируется в фрейм страницы памяти.

person Per Knytt    schedule 30.11.2009
comment
вправо, а также стек растет в нисходящем направлении, т.е. в сторону младших адресов. - person Rohit Banga; 30.11.2009
comment
Их глаза - это первое, на что ты ослепнешь... Извини. Во всяком случае, довольно произвольно, как растут куча и отображаемые файловые области, поскольку они распределены по блокам. - person Per Knytt; 30.11.2009
comment
Это звучит правильно. ожидается, что стек будет расти меньше всего, особенно. если процесс не увеличивает свой RLIMIT_STACK. Таким образом, в стеке остается мало места, а куча и область mmap растут навстречу друг другу как можно дальше. Спасибо за AMD64. - person Peter Cordes; 08.12.2009