Понимание Linux / proc / id / maps



Я пытаюсь понять использование памяти моего встроенного приложения Linux. Элемент /proc/pid/maps утилита / файл, кажется, хороший ресурс для просмотра деталей. К сожалению, я не понимаю все столбцы и записи.



есть ли хороший ресурс / документация для proc/pid/maps файловые утилиты/?



что означает анонимный индекс 0 записей? Это, кажется, некоторые из больших сегментов памяти.

695   4  

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

    Ничего не найдено.