Каждая строка в / proc / $ PID / maps
описывает область непрерывной виртуальной памяти в процессе или потоке. Каждая строка имеет следующие поля:
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
r
/ w
/ x
будет отображаться -
. Если регион не является общим , он является частным , поэтому вместо s
будет отображаться p
. Если процесс пытается получить доступ к памяти недопустимым способом, генерируется ошибка сегментации. Разрешения можно изменить с помощью системного вызова mprotect
. mmap
), это смещение в файле где начинается отображение. Если память не была отображена из файла, это просто 0. [куча]
, [стек]
или [vdso]
. [vdso]
обозначает виртуальный динамический общий объект. Это' s используется системными вызовами для переключения в режим ядра. Вот хорошая статья об этом: «Что такое linux-gate.so.1?» Вы могли заметить много анонимных регионов. Обычно они создаются mmap
, но не прикрепляются ни к какому файлу. Они используются для множества разных вещей, таких как разделяемая память или буферы, не выделенные в куче. Например, я думаю, что библиотека pthread использует анонимные отображаемые области как стеки для новых потоков.
Отображение памяти не только используется для отображения файлов в память, но также является инструментом для запроса оперативной памяти у ядра. Это те записи inode 0 - ваш стек, куча, сегменты bss и многое другое