Я пытаюсь понять использование памяти встроенным приложением Linux. /proc/pid/maps
Утилита / файл , кажется, хороший ресурс для просмотра деталей. К сожалению, я не понимаю все столбцы и записи.
Что означают анонимные записи inode 0? Похоже, это одни из самых больших сегментов памяти.
proc(5)
mmap(2)
«Понимание ядра Linux» 9.3. Регионы памяти; 16,2. Отображение памяти «Понимание диспетчера виртуальной памяти Linux» 4.4 Области памятиОтветы:
Каждая строка
/proc/$PID/maps
описывает область непрерывной виртуальной памяти в процессе или потоке. Каждая строка имеет следующие поля:-
вместоr
/w
/ появится значокx
. Если регион не является общим , он является частным , поэтомуp
вместо него появится значокs
. Если процесс пытается получить доступ к памяти способом, который не разрешен, генерируется ошибка сегментации. Разрешения могут быть изменены с помощьюmprotect
системного вызова.mmap
), это смещение в файле, с которого начинается отображение. Если память не была отображена из файла, это просто 0.[heap]
,[stack]
или[vdso]
.[vdso]
обозначает виртуальный динамический общий объект. Он используется системными вызовами для переключения в режим ядра. Вот хорошая статья об этом: «Что такое linux-gate.so.1?»Вы можете заметить много анонимных регионов. Они обычно создаются,
mmap
но не прикрепляются к какому-либо файлу. Они используются для множества разных вещей, таких как общая память или буферы, не выделенные в куче. Например, я думаю, что библиотека pthread использует анонимные сопоставленные области в качестве стеков для новых потоков.источник
gpm
сопоставление двоичного файла по какому-либо виртуальному адресу с самого начала, с заголовком ELF и т. Д.? Разве загрузчик не должен анализировать заголовок ELF и отображать отдельные разделы, а не весь файл?Отображение памяти используется не только для отображения файлов в память, но также является инструментом для запроса оперативной памяти у ядра. Это те записи inode 0 - ваш стек, куча, сегменты bss и многое другое
источник
Пожалуйста, проверьте: http://man7.org/linux/man-pages/man5/proc.5.html
Поле адреса - это адресное пространство в процессе, который занимает отображение.
Поле perms представляет собой набор разрешений:
Поле смещения - это смещение в файл / что угодно;
dev - устройство (мажор: минор);
inode - это inode на этом устройстве. 0 указывает, что ни один inode не связан с областью памяти, как в случае с BSS (неинициализированные данные).
Поле pathname обычно будет файлом, который поддерживает отображение. Для файлов ELF вы можете легко координировать свои действия с полем смещения, просматривая поле «Смещение» в заголовках программы ELF (readelf -l).
В Linux 2.0 нет поля с указанием пути.
источник