2011-07-06 5 views
6

64 비트 및 32 비트 모두에 대한 다중 스레드 Linux 프로세스의 주소 공간 레이아웃에 대한 자세한 내용을 알고 싶습니다. 그것을 묘사하는 어떤 기사에 대한 링크는 높이 평가 될 것입니다. 그리고 내가 그것을 직접적으로 다루기 때문에 전체적인 세부 사항을 알 필요가 있음을 주목하십시오. 그래서 예를 들어 알아야 할 것은 스레드 스택의 위치, 힙, 스레드 개인 데이터 등입니다 ...다중 스레드 Linux 프로세스의 주소 공간 레이아웃

+0

은 특히 나는에 대한 자세한 내용을 알고 싶은 SplitStacks 기능을 무제한으로 스택 수 있습니다

mem = mmap (NULL, size, prot, MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0); 

부분입니다. 예를 들어 코드를 포함하고있는 주소 공간의 부분을 처리 할 필요가 없습니다. 쓰기 가능하지 않기 때문입니다. – MetallicPriest

+0

스레드가없는 리눅스 프로세스의 모든 세부 사항을 알고 있습니까? 비 스레드 및 다중 스레드의 차이점은 스택의 수와 위치입니다. – osgx

답변

6

스레드 스택은 스레드 시작시 (또는 심지어 이전에 스택 공간을 설정할 수 있습니다) - mmap으로 할당됩니다. pthread_attr s). TLS 데이터는 스레드의 스택 시작 부분에 저장됩니다. 스레드의 스택 크기는 고정되어 있으며 일반적으로 2 ~ 8MB입니다. 스레드가 작동 중일 때 각 스레드의 스택 크기는 변경할 수 없습니다. (첫 번째 스레드 - 주 메인을 실행하는 여전히 주 주소 스택 끝에 스택을 사용하고이 스택을 늘리고 줄일 수 있습니다.) 힙 및 코드는 모든 스레드간에 공유됩니다. 뮤텍스는 data 섹션에있을 수 있습니다. 이것은 단지 구조체입니다.

스레드의 스택의 mmap에 어떤 주소에 고정되지 않습니다

Glibc sources PS 현대 GCC는 스레드가

관련 문제