저는 현재 리눅스를 배우고 있습니다. 나는 스레드가 Linux에서 가벼운 프로세스라는 것을 알고 있습니다. 하지만 스레드 스택 공간이 어디서 나오는지 알고 싶습니다.
스레드의 스택은 비공개입니다. 이는 프로세스 스택과 독립적입니다. 내 검색에 따르면 어떤 사람들은 스레드 스택 이 mmap()
. 스택과 힙 사이에 위치합니다. 따라서 스레드 스택은 프로세스의 메모리 매핑된 세그먼트에서 나옵니다. 그렇죠?mmap()
heap
답변1
Linux 커널에 관한 한 스레드는예평소보다 공유 프로세스가 많아졌습니다(예를 들어주소 공간, 신호 처리 및 프로세스 ID(실제로는 스레드 그룹 ID)입니다.
프로세스가 시작되면 스레드, 스택 등이 있습니다. 해당 스레드가 다른 스레드를 시작할 때 새 스레드에 스택을 제공하는 것은 생성 스레드에 달려 있습니다. 할당된 메모리가 스택으로 사용하기에 적합한지 확인하는 데 도움이 되는 다양한 플래그가 지원되기 mmap
때문입니다 . mmap
바라보다샘플 프로그램man 2 clone
. 그러나 이를 사용해야 한다는 요구 사항은 없으며 mmap
스택 요구 사항을 충족하는 할당된 메모리 블록을 사용할 수 있습니다.
스레드에 설정된 스택은 비공개가 아닙니다. 동일한 주소 공간을 공유하는 다른 스레드에 표시됩니다. 그러나 단일 스레드가 스택으로 사용하도록 예약해야 합니다. 단일 스택을 공유하는 여러 스레드는 잘 작동하지 않습니다.
바라보다Linux의 스레드는 프로세스로 구현됩니까?배경과 역사에 대해 자세히 알아보세요.