Розуміння Linux / proc / id / карт


156

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

Що означають анонімні записи 0 inode? Це, здається, деякі з більших сегментів пам'яті.


1
proc(5) mmap(2)"Розуміння ядра Linux" 9.3. Регіони пам'яті; 16.2. Картографування пам’яті «Розуміння диспетчера віртуальної пам’яті Linux» 4.4 Регіони пам’яті
WRAR

Відповіді:


264

Кожен рядок /proc/$PID/mapsописує область суміжної віртуальної пам'яті в процесі або потоці. Кожен рядок має такі поля:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • адреса - це початкова та кінцева адреса регіону в адресному просторі процесу
  • дозволи - Тут описано, як можна отримати доступ до сторінок у регіоні. Існує чотири різні дозволи: читати, писати, виконувати та ділитися. Якщо читання / запис / виконання вимкнено, -замість r/ w/ з'явиться повідомлення x. Якщо регіон не є спільним , він є приватним , тому pзамість an з’явиться повідомлення s. Якщо процес намагається отримати доступ до пам'яті способом, який не дозволений, генерується помилка сегментації. Дозволи можна змінити за допомогою mprotectсистемного виклику.
  • зміщення - Якщо область була відображена з файла (за допомогою mmap), це зсув у файлі, де починається зіставлення. Якщо пам'ять не була відображена з файлу, це просто 0.
  • пристрій - Якщо область була відображена з файлу, це основний і другорядний номер пристрою (у шістнадцятковій формі), де живе файл.
  • inode - Якщо область була відображена з файлу, це номер файлу.
  • ім'я шляху - якщо область була відображена з файлу, це ім'я файлу. Це поле порожнє для анонімних картографічних регіонів. Є також спеціальні регіони з такими іменами , як [heap], [stack]або [vdso]. [vdso]означає віртуальний динамічний спільний об'єкт. Він використовується системними дзвінками для переходу в режим ядра. Ось хороша стаття про це: "Що таке linux-gate.so.1?"

Можливо, ви помітите багато анонімних регіонів. Зазвичай вони створюються, mmapале не додаються до жодного файлу. Вони використовуються для багатьох інших речей, таких як спільна пам'ять або буфери, не виділені на купі. Наприклад, я думаю, що бібліотека pthread використовує анонімні відображені регіони як стеки для нових потоків.


4
Так, pthreads виділяють 8Mb блоки для стека з меншим розділом для виявлення переповнення стека (я думаю). Отже кожен створений pthread за замовчуванням виділяє область пам'яті inode 0 8Mb та область 0 inode 4Kb.
симон

Отже, у вашому прикладі gpm- це відображення бінарного файлу за якоюсь віртуальною адресою з самого початку, із заголовком ELF тощо? Чи не завантажувач повинен розбирати заголовок ELF і відображати окремі розділи, а не весь файл?
Дмитро Григор’єв

9

Зображення пам'яті використовується не тільки для відображення файлів у пам'ять, але також є інструментом для запиту оперативної пам'яті з ядра. Це ті записи inode 0 - ваш стек, купа, bss сегменти та багато іншого


5

Перевірте: 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

Поле адреси - це адресний простір у процесі, який займає відображення.

Поле perms - це набір дозволів:

 r = read
 w = write
 x = execute
 s = shared
 p = private (copy on write)

Поле зміщення - це зміщення у файл / що завгодно;

dev - пристрій (основний: мінор);

inode - це inode на цьому пристрої.0 вказує на те, що жоден inode не асоціюється з областю пам'яті, як це було б у випадку з BSS (неініціалізовані дані).

Поле імені шляху зазвичай являє собою файл, який підтримує відображення. Для файлів ELF ви можете легко узгодити поле зсуву, переглянувши поле Зміщення у заголовках програми ELF (readelf -l).

У Linux 2.0 немає поля, що дає ім'я шляху.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.