2010-07-12 4 views
1

사용자 수준 스레드 스택의 메모리가 메모리에서 어떻게 유지되는지 알고 싶습니다. 나는 모든 스택이 페이지 경계에서 시작할 것이라고 생각한다. 내가 맞습니까? 사용자 수준의 스레드 라이브러리는 모든 스레드 페이지가 연속적이기 때문에 특정 스레드에 대한 스택이 커지지 않고 다른 스레드의 인접한 페이지 경계 스택과 겹치지 않도록합니다 ...다중 사용자 수준 스레드 스택을위한 메모리

답변

0

이들은 모두 구현 세부 사항입니다. 시스템마다 다릅니다. 무엇을 성취하려고합니까?

+0

이것은 일반적인 의심이었습니다 ... 특정 목표를 달성하려고 시도하지 않았지만 ... 여전히 리눅스 사용자 수준의 스레드 라이브러리라고 할 수 있습니다 ... 광범위한 관점에서 다중 스레드 스택의 메모리를 메모리에 보관하는 방법은 무엇입니까? ... –

+0

귀하의 질문에 제공된 정보를 가지고 답변 할 수 없습니다. 이것은 매우 구현 의존적 인 질문이며, 특별한 목표 (CPU 아키텍처, OS 버전, 호출 규칙, 스레딩 모델)가 없다면 대답이 없습니다. –

0

연속 스택을 사용하는 경우 별도의 스레드에 할당 된 스택간에 충돌이 발생할 수 있습니다. 이것은 가상 공간이 작은 시스템에서 큰 시스템보다 더 가능성이 높으며, 일부 스택이 임의로 커질 수있는 경우가 많습니다.

가장 일반적인 OS (Windows, Linux)는 스레드 스택이 매우 클 수 없다는 가정을합니다 (예 : 1-10Mb). 단일 스레드에 대해 많은 스레드를 가질 수는 없습니다 방법. 이 경우, 필요한 스레드의 수와 각 스택이 얼마나 큰지를 알면 계산이 시작되기 전에 문제가 발생하지 않습니다. 이 경우 모든 스레드 스택을 스택에 넣을 위치를 사전 계산할 수 있습니다. 스택마다 최악의 경우가 있습니다.

그리고이 작품은 .... 아주 잘. 그러나 스택에 대한 수요가 임의로 커질 수 있거나 사전에 몇 개의 스택이 있는지 모를 경우 사전 할당이 작동하지 않습니다. 그리고 이로 인해 이러한 OS를 사용하는 사람들은 문제를 일으 킵니다.

이 문제에 대한 설명은 Why are stack overflows still a problem?을 참조하십시오. 문제를 피하는 방법에 대해서도 제 대답을 읽을 수 있습니다. (힌트 : 제한된 크기의 스택 없음!).