프로세스의 /proc 디렉터리에 있는 매핑 파일 이해

프로세스의 /proc 디렉터리에 있는 매핑 파일 이해

Linux에서는 특정 프로그램에 대해 /proc에 액세스하면 매핑 파일에 해당 프로그램의 메모리 맵이 표시됩니다.

이 같은:

              address           perms offset  dev   inode       pathname
              00400000-00452000 r-xp 00000000 08:02 173521      /usr/bin/dbus-daemon
              00651000-00652000 r--p 00051000 08:02 173521      /usr/bin/dbus-daemon
              00652000-00655000 rw-p 00052000 08:02 173521      /usr/bin/dbus-daemon
              00e03000-00e24000 rw-p 00000000 00:00 0           [heap]
              00e24000-011f7000 rw-p 00000000 00:00 0           [heap]
              ...
              35b1800000-35b1820000 r-xp 00000000 08:02 135522  /usr/lib64/ld-2.15.so
              35b1a1f000-35b1a20000 r--p 0001f000 08:02 135522  /usr/lib64/ld-2.15.so
              35b1a20000-35b1a21000 rw-p 00020000 08:02 135522  /usr/lib64/ld-2.15.so
              35b1a21000-35b1a22000 rw-p 00000000 00:00 0
              35b1c00000-35b1dac000 r-xp 00000000 08:02 135870  /usr/lib64/libc-2.15.so
              35b1dac000-35b1fac000 ---p 001ac000 08:02 135870  /usr/lib64/libc-2.15.so
              35b1fac000-35b1fb0000 r--p 001ac000 08:02 135870  /usr/lib64/libc-2.15.so
              35b1fb0000-35b1fb2000 rw-p 001b0000 08:02 135870  /usr/lib64/libc-2.15.so
              ...
              f2c6ff8c000-7f2c7078c000 rw-p 00000000 00:00 0    [stack:986]
              ...
              7fffb2c0d000-7fffb2c2e000 rw-p 00000000 00:00 0   [stack]
              7fffb2d48000-7fffb2d49000 r-xp 00000000 00:00 0   [vdso]

커널 스택이나 사용자 스택에 매핑된 [스택] 메모리가 무엇인지 알고 싶습니다. 그리고 해당 메모리 영역 내의 내용에 어떻게 액세스합니까?

/proc 디렉토리에 stack이라는 또 다른 파일이 있지만 proc(5) 매뉴얼 페이지에서 확인하듯이 이는 커널 스택입니다.

또한 이 프로세스 맵에 왜 2개의 [힙]이 있는지 알고 싶습니다.

또한 프로세스의 모든 스레드에 대한 [스택] 주소 범위를 확인한 결과 모든 스레드에 대해 동일한 것으로 나타났습니다. 스레드가 스택을 공유하지 않을 때 이것이 어떻게 가능합니까?

답변1

스택 항목은 다음에 설명되어 있습니다.man 5 proc: [stack]메인 스레드의 스택과 [stack:986]스레드 986의 스택입니다. 4.5부터 후자는 더 이상 커널에 표시되지 않습니다. 이것은 또한 마지막 문제를 해결합니다. [stack]메인 스레드에서만 사용되며 다른 모든 스레드는 다른 주소에 다른 스택을 갖습니다. 특정 프로세스에 매핑된 다른 메모리와 마찬가지로 스택에 액세스합니다.

나는 대부분 여기서 추측하고 있지만 두 힙은 다음과 같이 해석될 수 있습니다.실제로 brk새로운 VMA가 결국 할당될 수도 있습니다.;이것은 에서 별도의 항목으로 나타나야 합니다 /proc/…/maps. 하지만 가상 주소는 항상 연속되어 있다는 점에 유의하세요.

관련 정보