2011-06-14 5 views
0

쓰레드 스위치 중에는 cr3 레지스터를 유지하고 프로세스 스위치에서는 tlb flush를 유지하는 것 외에는 쓰레드와 리눅스 사이에 특별한 차이가 없다는 것을 알고있다.리눅스에서의 쓰레드에 관한 혼란

groud의 스레드는 동일한 주소 공간을 공유하며 pgd (페이지 테이블)는 변경되지 않으므로 전체 메모리 레이아웃이 공유되므로 스택 공간도 공유되지만 일반적인 정의에 따라 스레드는 자체 스택을 소유하므로, 이것이 리눅스에서 어떻게 이루어 졌는지.

같은 threadA에 x-y 범위의 스택이있는 경우 첫 번째 페이지 오류가 발생하고 페이지 테이블이 업데이트되며 u-v 범위를 사용하는 threadB와 마찬가지로 동일한 페이지 표가 업데이트됩니다. 따라서 threadA에서 threadB 스택을 엉망으로 만들 수 있습니다.

나는 이것에 대한 명확한 그림을 얻고 싶습니다. 저를 도와주세요. 안전한 스레드 구현입니까?.

답변

1

맞습니다. 스레드간에 스택 메모리를 OS로 강제 보호하지 않습니다. 하나의 스레드 A는 다른 스레드 B의 스택을 손상시킬 수 있습니다 (스레드 A가 메모리의 어느 위치에 있는지 알고있는 경우).