/proc/pid/smaps에 파일이 여러 번 나열되는 이유는 무엇입니까?

/proc/pid/smaps에 파일이 여러 번 나열되는 이유는 무엇입니까?

/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섹션에 기록됩니다.

관련 정보