
/proc/1/smaps 파일을 살펴보니 라이브러리에는 일반적으로 크기가 다르고 Rss/Pss 등이 다른 최대 4개의 맵이 있습니다.
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 1636 kB
Rss: 980 kB
Pss: 9 kB
Shared_Clean: 980 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 980 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd ex mr mw me
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 2044 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: mr mw me
7f1a09a2e000-7f1a09a32000 r--p 00198000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 16 kB
Rss: 16 kB
Pss: 14 kB
Shared_Clean: 0 kB
Shared_Dirty: 4 kB
Private_Clean: 12 kB
Private_Dirty: 0 kB
Referenced: 12 kB
Anonymous: 16 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd mr mw me ac
7f1a09a32000-7f1a09a34000 rw-p 0019c000 fe:04 1313975 /usr/lib/libc-2.21.so
Size: 8 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Anonymous: 8 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
VmFlags: rd wr mr mw me ac
누군가 나에게 이유를 말하거나 기사를 알려줄 수 있습니까?
답변1
일반적으로 라이브러리에는 파일에서 로드되는 세 가지 유형의 메모리가 있습니다. 이것들은 모두:
- code - 라이브러리의 실제 실행 가능한 코드
- rodata – 읽기 전용 데이터(상수 값).
- 데이터 - 쓰기 가능한 데이터.
이러한 매핑에는 서로 다른 권한이 있습니다. 각 매핑의 첫 번째 줄을 보면 다음과 같습니다.
7f1a09696000-7f1a0982f000 r-xp 00000000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a0982f000-7f1a09a2e000 ---p 00199000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a2e000-7f1a09a32000 r--p 00198000 fe:04 1313975 /usr/lib/libc-2.21.so
7f1a09a32000-7f1a09a34000 rw-p 0019c000 fe:04 1313975 /usr/lib/libc-2.21.so
테이블의 두 번째 열에는 매핑된 각 블록에 대한 권한이 포함되어 있습니다. 첫 번째 블록에는 권한이 있습니다 r-xp
. 이는 코드 블록이므로 읽고 실행할 수 있습니다.
두 번째 블록에는 가 있습니다 ---p
. 해당 블록에 접근할 수 없습니다. 여기에는 프로그램을 실행하는 데 실제로 필요하지 않은 디버깅 기호나 기타 데이터가 포함될 수 있습니다.
세 번째 블록에는 r--p
읽기 전용 데이터 세그먼트가 있습니다. 마지막 블록에는 rw-p
쓰기 가능한 데이터 세그먼트가 있습니다.
Rss와 Pss의 값이 다른 이유는 단순히 각 영역에서 액세스하는 메모리 양이 다르기 때문입니다.
/proc/[pid]/smaps
다양한 분야가 무엇을 뜻하는지 궁금하다면, 확인해 보세요절차 매뉴얼 페이지. 각 섹션의 제목 줄이 해당 /proc/[pid]/maps
섹션에 기록됩니다.