Próbuję zrozumieć użycie pamięci przez moją wbudowaną aplikację Linux. /proc/pid/maps
Użyteczność / plik wydaje się być dobrym źródłem informacji dla widząc szczegóły. Niestety nie rozumiem wszystkich kolumn i wpisów.
Co oznaczają anonimowe wpisy i-węzła 0? Wydaje się, że są to jedne z większych segmentów pamięci.
proc(5)
mmap(2)
„Zrozumienie jądra Linuksa” 9.3. Regiony pamięci; 16.2. Mapowanie pamięci „Zrozumienie menedżera pamięci wirtualnej systemu Linux” 4.4 Regiony pamięciOdpowiedzi:
Każdy wiersz
/proc/$PID/maps
opisuje region ciągłej pamięci wirtualnej w procesie lub wątku. Każdy wiersz zawiera następujące pola:-
zamiastr
/w
/x
. Jeśli region nie jest udostępniany , jest prywatny , więcp
zamiasts
. 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ąmprotect
wywołania systemowego.mmap
), jest to przesunięcie w pliku, w którym zaczyna się mapowanie. Jeśli pamięć nie została zmapowana z pliku, to tylko 0.[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: „Co to jest linux-gate.so.1?”Możesz zauważyć wiele anonimowych regionów. Są one zwykle tworzone przez,
mmap
ale nie są dołączane do żadnego pliku. Są używane do wielu różnych rzeczy, takich jak pamięć współdzielona lub bufory nieprzydzielone na stercie. Na przykład, myślę, że biblioteka pthread używa anonimowych mapowanych regionów jako stosów dla nowych wątków.źródło
gpm
jest mapowanie pliku binarnego pod jakimś wirtualnym adresem od samego początku, z nagłówkiem ELF itp.? Czy program ładujący nie powinien analizować nagłówka ELF i mapować poszczególne sekcje, a nie cały plik?mapowanie pamięci służy nie tylko do mapowania plików do pamięci, ale jest również narzędziem do żądania pamięci RAM od jądra. To są te wpisy i-węzłów 0 - Twój stos, sterta, segmenty BSS i inne
źródło
Sprawdź: http://man7.org/linux/man-pages/man5/proc.5.html
Pole adresu to przestrzeń adresowa w procesie zajmowanym przez mapowanie.
Pole uprawnień to zestaw uprawnień:
Pole offset to przesunięcie w pliku / cokolwiek;
dev to urządzenie (główne: podrzędne);
i-węzeł jest i-węzłem na tym urządzeniu. 0 wskazuje, że żaden i-węzeł nie jest powiązany z obszarem pamięci, jak miałoby to miejsce w przypadku BSS (dane niezainicjowane).
Pole nazwy ścieżki będzie zwykle plikiem, który stanowi kopię zapasową mapowania. W przypadku plików ELF można łatwo skoordynować z polem przesunięcia, patrząc na pole Offset w nagłówkach programu ELF (readelf -l).
W Linuksie 2.0 nie ma pola z nazwą ścieżki.
źródło