Linux의 스레드 스택은 프로세스의 메모리 매핑된 세그먼트에서 나오나요?

Linux의 스레드 스택은 프로세스의 메모리 매핑된 세그먼트에서 나오나요?

저는 현재 리눅스를 배우고 있습니다. 나는 스레드가 Linux에서 가벼운 프로세스라는 것을 알고 있습니다. 하지만 스레드 스택 공간이 어디서 나오는지 알고 싶습니다.

스레드의 스택은 비공개입니다. 이는 프로세스 스택과 독립적입니다. 내 검색에 따르면 어떤 사람들은 스레드 스택 이 mmap(). 스택과 힙 사이에 위치합니다. 따라서 스레드 스택은 프로세스의 메모리 매핑된 세그먼트에서 나옵니다. 그렇죠?mmap()heap

답변1

Linux 커널에 관한 한 스레드는평소보다 공유 프로세스가 많아졌습니다(예를 들어주소 공간, 신호 처리 및 프로세스 ID(실제로는 스레드 그룹 ID)입니다.

프로세스가 시작되면 스레드, 스택 등이 있습니다. 해당 스레드가 다른 스레드를 시작할 때 새 스레드에 스택을 제공하는 것은 생성 스레드에 달려 있습니다. 할당된 메모리가 스택으로 사용하기에 적합한지 확인하는 데 도움이 되는 다양한 플래그가 지원되기 mmap때문입니다 . mmap바라보다샘플 프로그램man 2 clone. 그러나 이를 사용해야 한다는 요구 사항은 없으며 mmap스택 요구 사항을 충족하는 할당된 메모리 블록을 사용할 수 있습니다.

스레드에 설정된 스택은 비공개가 아닙니다. 동일한 주소 공간을 공유하는 다른 스레드에 표시됩니다. 그러나 단일 스레드가 스택으로 사용하도록 예약해야 합니다. 단일 스택을 공유하는 여러 스레드는 잘 작동하지 않습니다.

바라보다Linux의 스레드는 프로세스로 구현됩니까?배경과 역사에 대해 자세히 알아보세요.

관련 정보