Zrozumienie Linuksa / proc/id / maps

Próbuję zrozumieć wykorzystanie pamięci mojej aplikacji osadzonej na Linuksie. /proc/pid/maps narzędzie / plik wydaje się być dobrym źródłem informacji o szczegółach. Niestety nie rozumiem wszystkich felietonów i wpisów.

Czy istnieje dobry zasób / dokumentacja dla proc/pid/maps narzędzie/plik?

Co oznacza anonimowy i-węzeł 0? Są to niektóre z większych segmentów pamięci.

Author: ネロク, 2009-09-09

4 answers

Każdy wiersz /proc/$PID/maps opisuje obszar sąsiadującej pamięci wirtualnej w procesie lub wątku. Każdy wiersz ma następujące pola:

address           perms offset  dev   inode   pathname
08048000-08056000 r-xp 00000000 03:0c 64593   /usr/sbin/gpm
  • address - jest to adres początkowy i końcowy regionu w przestrzeni adresowej procesu
  • permissions - opisuje w jaki sposób można uzyskać dostęp do stron w regionie. Istnieją cztery różne uprawnienia: Odczyt, Zapis, wykonanie i udostępnianie. Jeśli odczyt/zapis/wykonanie są wyłączone, zamiast tego pojawi się - z r/w/x. Jeśli region nie jest dzielony, to jest prywatny, więc zamiast s pojawi się p. Jeśli proces próbuje uzyskać dostęp do pamięci w sposób, który jest niedozwolony, generowany jest błąd segmentacji. Uprawnienia można zmienić za pomocą wywołania systemowego mprotect.
  • offset - jeśli region został zmapowany z pliku (używając mmap), jest to przesunięcie w pliku, w którym zaczyna się mapowanie. Jeśli pamięć nie została zmapowana z pliku, to po prostu 0.
  • device - jeśli region został zmapowany z pliku, jest to główny i poboczny numer urządzenia (w szesnastkach), w którym znajduje się plik.
  • ikod - jeśli region został zmapowany z pliku, jest to numer pliku.
  • pathname - jeśli region został zmapowany z pliku, jest to nazwa pliku. To pole jest puste dla anonimowych mapowanych regionów. Istnieją również specjalne regiony o nazwach takich jak [heap], [stack], lub [vdso]. [vdso] oznacza wirtualny dynamiczny obiekt współdzielony. Jest używany przez wywołania systemowe do przełączania się w tryb jądra. oto dobry artykuł na ten temat.
Możesz zauważyć wiele anonimowych regionów. Są one zwykle tworzone przez mmap, ale nie są dołączane do żadnego pliku. Są one używane do wielu różnych rzeczy, takich jak pamięć dzielona lub bufory nie przydzielone na stercie. Na przykład, myślę, że biblioteka pthread używa anonimowych mapowanych regionów jako stosów dla nowych wątków.
 204
Author: Jay Conrod,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-02 08:10:35

proc(5)

mmap(2)

"zrozumienie jądra Linuksa" 9.3. Regiony Pamięci; 16.2. Mapowanie Pamięci

"Understanding the Linux Virtual Memory Manager" 4.4 Memory Regions

 18
Author: wRAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-09 19:08:37

Mapowanie pamięci jest używane nie tylko do mapowania plików do pamięci, ale jest również narzędziem do żądania pamięci RAM z jądra. To są te wpisy i-węzła 0 - twój stos, sterta, segmenty bss i inne

 8
Author: Xeor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-09 18:56:36

Proszę sprawdzić: 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 adresu jest przestrzenią adresową w procesie, który mapowanie zajmuje.

Pole perms jest zbiorem uprawnień:

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

Pole offset jest offsetem do pliku / whatever;

Dev jest urządzeniem (major: minor);

I-węzeł jest i-węzłem na tym urządzeniu.0 oznacza, że żaden i-węzeł nie jest powiązany z regionem pamięci, tak jak w przypadku BSS (niezainicjalizowane dane).

Pole pathname będzie zwykle plikiem, który jest archiwizowany mapowanie. W przypadku plików ELF można łatwo koordynować z pole offsetowe patrząc na pole offsetowe w ELFIE nagłówki programów (readelf-l).

Pod Linuksem 2.0 nie ma pola podającego nazwę ścieżki.

 1
Author: cahit beyaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 09:44:28