임베디드 Linux 응용 프로그램의 메모리 사용을 이해하려고합니다./proc/pid/maps 유틸리티/파일은 세부 사항을보기에 좋은 리소스 인 것 같습니다. 불행히도 나는 모든 컬럼과 엔트리를 이해하지 못한다.Linux/proc/id/maps 이해
proc/pid/maps 유틸리티/파일에 대한 유용한 리소스/설명서가 있습니까?
익명 아이 노드 0 항목의 의미는 무엇입니까? 이것들은 더 큰 메모리 세그먼트의 일부인 것으로 보인다.
임베디드 Linux 응용 프로그램의 메모리 사용을 이해하려고합니다./proc/pid/maps 유틸리티/파일은 세부 사항을보기에 좋은 리소스 인 것 같습니다. 불행히도 나는 모든 컬럼과 엔트리를 이해하지 못한다.Linux/proc/id/maps 이해
proc/pid/maps 유틸리티/파일에 대한 유용한 리소스/설명서가 있습니까?
익명 아이 노드 0 항목의 의미는 무엇입니까? 이것들은 더 큰 메모리 세그먼트의 일부인 것으로 보인다.
"리눅스 가상 메모리 관리자 이해"를 참조하십시오. 각 행은 다음과 같은 필드가 있습니다
address perms offset dev inode pathname
08048000-08056000 r-xp 00000000 03:0c 64593 /usr/sbin/gpm
mprotect
을 사용하여 권한을 변경할 수 있습니다.mmap
사용)에서 매핑 된 경우 매핑이 시작되는 파일의 오프셋입니다. 메모리가 파일에서 매핑되지 않은 경우에만 0입니다.[heap]
, [stack]
또는 [vdso]
인 특수 지역도 있습니다. [vdso]
은 가상 동적 공유 객체의 약자입니다. 커널 모드로 전환하기 위해 시스템 호출에 사용됩니다. Here's a good article about it.많은 익명 영역이있을 수 있습니다. 이들은 보통 mmap
에 의해 생성되지만 어떤 파일에도 첨부되지 않습니다. 공유 메모리 나 힙에 할당되지 않은 버퍼와 같은 많은 기타 용도로 사용됩니다. 예를 들어, pthread 라이브러리는 익명 매핑 된 영역을 새 스레드의 스택으로 사용한다고 생각합니다.
메모리 매핑은 파일을 메모리에 매핑하는 데 사용되는 것이 아니라 커널에서 RAM을 요청하는 도구이기도합니다. 당신의 스택, 힙, BSS 세그먼트보다 9.3 "리눅스 커널의 이해"
proc(5)
mmap(2)
-이 그 아이 노드 0 항목이다. 메모리 영역; 16.2. 메모리 매핑
/proc/$PID/maps
의 각 행은 프로세스 또는 스레드에서 연속 가상 메모리 영역을 설명 4.4 메모리 영역
확인하시기 바랍니다 : 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
주소 필드는 매핑을 차지하는 과정에서 주소 공간입니다.
파마 필드는 권한의 집합입니다 :
r = read
w = write
x = execute
s = shared
p = private (copy on write)
오프셋 필드는 파일/뭐든에의 오프셋 (offset)입니다;
dev는 장치입니다 (major : minor);
inode는 해당 장치의 inode이며, 0은 BSS (초기화되지 않은 데이터)의 경우처럼 inode가 메모리 영역과 연관되어 있지 않음을 나타냅니다.
경로 이름 필드는 대개 매핑 을 뒷받침하는 파일입니다. ELF 파일의 경우, ELF 프로그램 헤더 (readelf -l)의 오프셋 (Offset) 필드를보고 오프셋 필드를 으로 쉽게 조정할 수 있습니다.
Linux 2.0에서는 경로 이름을 제공하는 입력란이 없습니다.
그렇습니다. pthread는 스택 오버플로 감지를위한 더 작은 섹션을 가진 스택에 대해 8MB 블록을 할당합니다 (생각합니다). 그래서 기본적으로 생성 된 각 pthread는 8Mb의 inode 0 메모리 영역과 4Kb의 inode 0 영역을 할당합니다. – simon
예에서'gpm'은 ELF 헤더 등으로 처음부터 가상 주소에서 바이너리 파일을 매핑하고 있습니까? 로더가 ELF 헤더를 구문 분석하고 전체 파일이 아닌 개별 섹션을 매핑해야합니까? –