GNU/Linux >> Znalost Linux >  >> Linux

Porozumění Linuxu /proc/id/maps

Každý řádek v /proc/$PID/maps popisuje oblast souvislé virtuální paměti v procesu nebo vláknu. Každý řádek má následující pole:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • adresa - Toto je počáteční a koncová adresa regionu v adresním prostoru procesu
  • oprávnění - Popisuje, jak lze přistupovat ke stránkám v regionu. Existují čtyři různá oprávnění:čtení, zápis, spouštění a sdílení. Pokud je čtení/zápis/spouštění zakázáno, zobrazí se - se objeví místo r /w /x . Pokud oblast není sdílená , je soukromý , takže p se zobrazí místo s . Pokud se proces pokusí o přístup k paměti způsobem, který není povolen, dojde k chybě segmentace. Oprávnění lze změnit pomocí mprotect systémové volání.
  • posun - Pokud byl region mapován ze souboru (pomocí mmap ), toto je posun v souboru, kde začíná mapování. Pokud paměť nebyla namapována ze souboru, je to jen 0.
  • zařízení – Pokud byla oblast namapována ze souboru, jedná se o hlavní a vedlejší číslo zařízení (v hex), kde soubor žije.
  • inode - Pokud byl region mapován ze souboru, jedná se o číslo souboru.
  • název cesty - Pokud byl region mapován ze souboru, jedná se o název souboru. U anonymních mapovaných oblastí je toto pole prázdné. Existují také speciální oblasti s názvy jako [heap] , [stack] nebo [vdso] . [vdso] znamená virtuální dynamický sdílený objekt. Používají ho systémová volání k přepnutí do režimu jádra. Tady je o tom dobrý článek:"Co je to linux-gate.so.1?"

Můžete si všimnout mnoha anonymních oblastí. Ty jsou obvykle vytvořeny mmap ale nejsou připojeny k žádnému souboru. Používají se pro mnoho různých věcí, jako je sdílená paměť nebo vyrovnávací paměti, které nejsou přiděleny na hromadě. Například si myslím, že knihovna pthread používá anonymní mapované oblasti jako zásobníky pro nová vlákna.


mapování paměti se nepoužívá pouze k mapování souborů do paměti, ale je také nástrojem pro vyžádání RAM od jádra. Toto jsou položky inode 0 – váš stack, halda, segmenty bss a další


Zkontrolujte prosím: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

Pole adresy je adresový prostor v procesu, který mapování zabírá.

Pole Perms je sada oprávnění:

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

Pole offset je offset do souboru/cokoli;

dev je zařízení (hlavní:vedlejší);

inode je inode na tomto zařízení.0 znamená, že žádný inode není spojen s oblastí paměti, jak by tomu bylo v případě BSS (neinicializovaná data).

Pole názvu cesty bude obvykle soubor, který mapování zálohuje. U souborů ELF se můžete snadno koordinovat s polem offset pohledem na pole Offset v záhlaví programu ELF (readelf -l).

Pod Linuxem 2.0 neexistuje žádné pole uvádějící cestu.


Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Linux – propojení /proc/mnt s /proc/mounts?

  3. Pochopení souboru /etc/xinetd.conf v Linuxu

  1. Linux – účel adresáře /net?

  2. Pochopení souboru /etc/hosts v Linuxu

  3. linux /proc/loadavg

  1. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  2. Pochopení souboru /proc/meminfo (Analýza využití paměti v Linuxu)

  3. Pochopení konfiguračního souboru /etc/profile v Linuxu