Понимание Linux / proc / id / maps
Я пытаюсь понять использование памяти моего встроенного приложения Linux. Элемент /proc/pid/maps утилита / файл, кажется, хороший ресурс для просмотра деталей. К сожалению, я не понимаю все столбцы и записи.
есть ли хороший ресурс / документация для proc/pid/maps файловые утилиты/?
что означает анонимный индекс 0 записей? Это, кажется, некоторые из больших сегментов памяти.
4 ответов:
в каждой строке
/proc/$PID/mapsописывает область непрерывной виртуальной памяти в процессе или потоке. Каждая строка имеет следующие поля:address perms offset dev inode pathname 08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
- адрес - это начальный и конечный адрес региона в адресном пространстве процесса
- разрешения - это описывает, как страницы в регионе могут быть доступны. Существует четыре различных разрешения: чтение, запись, выполнение и общий доступ. Если чтение/запись/выполнение инвалид, а
-вместоr/w/x. Если регион не shared, это частная, так чтоpпоявится вместоs. Если процесс пытается получить доступ к памяти способом, который не разрешен, создается ошибка сегментации. Разрешения могут быть изменены с помощьюmprotectсистемный вызов.- смещение - если регион был сопоставлен из файла (с помощью
mmap), это смещение в файл, где начинается сопоставление. Если память не была отображена из файла, это просто 0.- устройства - если область была отображена из файла, это основной и дополнительный номер устройства (в шестнадцатеричном формате), где файл живет.
- дескриптор - если регион был отображен из файла, это номер файла.
- путь - если область была отображена из файла, это имя файла. Это поле является пустым для анонимные отображенные регионы. Есть также специальные регионы с именами, как
[heap],[stack]или[vdso].[vdso]обозначает виртуальный динамический общий объект. Он используется системными вызовами для переключения в режим ядра. вот хорошая статья об этом.вы можете заметить много анонимных регионов. Они, как правило, создается
mmapно не прикреплены ни к одному файлу. Они используются для многих разных вещей, таких как общая память или буферы нет выделено на куче. Например, я думаю, что библиотека pthread использует анонимные сопоставленные области в качестве стеков для новых потоков.
proc(5)
mmap(2)"понимание ядра Linux" 9.3. Регионы Памяти; 16.2. Отображение Памяти
"понимание диспетчера виртуальной памяти Linux" 4.4 области памяти
отображение памяти используется не только для отображения файлов в память, но также является инструментом для запроса ОЗУ из ядра. Это те записи inode 0 - ваш стек, куча, сегменты bss и многое другое
пожалуйста, проверьте: http://man7.org/linux/man-pages/man5/proc.5.html
address perms offset dev inode pathname 00400000-00452000 r-xp 00000000 08:02 173521 /usr/bin/dbus-daemonполе адреса-это адресное пространство в процессе, который картографирование занимает.
поле завивки представляет собой набор разрешений:
r = read w = write x = execute s = shared p = private (copy on write)поле offset-смещение в файле;
dev-это устройство (major:minor);
дескриптор-это дескриптор на данном устройстве.0 означает, что операции, связанные с memoryregion, как и в случае с BSS (неинициализированные данные).
поле пути обычно будет файлом, который поддерживает отображение. Для файлов ELF, вы можете легко координировать с поле смещения, глядя на поле смещения в ELF заголовки программ (readelf-l).
в Linux 2.0 нет поля, дающего путь.
Comments