2011-11-23 7 views
2

리눅스에서 쓰레드 컨텍스트 전환 동안 PC, SP, 레지스터와 같은 쓰레드 상태를 저장하는데 사용되는 구조체는 무엇입니까? freebsd에서의 TCB와 동등합니다. 가능한 경우 소스 파일 here을 가리 키십시오.리눅스의 쓰레드 제어 블록

우리는 프로세스 당 스레드가 아닌 PC 당 SP 등을 가지고 있으므로 PCB 자체만으로는 충분하지 않습니다.

답변

6

실제로는 task_struct입니다. 리눅스에서는 태스크가 쓰레드, 프로세스 또는 그 사이의 어떤 것일 수 있습니다. 스레드는 다른 작업과 대부분의 것을 공유하는 작업 (VMA, 파일 설명자 등)에 부여하는 이름입니다.

이것은 스레드가 단지 특정 종류의 프로세스이며 동일한 기능 등을 통해 처리 될 수 있다는 생각과 일치합니다. 계획 9의 rfork() 및 Linux의 clone()은 사용자 정의 가능한 프로세스 공유 수준이므로 동일한 기계를 사용하여 프로세스와 스레드를 만들게됩니다.

1

아마도 setcontext과 친구들이 필요 하겠지만 (코드는 이식성이 떨어지며 올바르게 진행하기가 어렵습니다)?

아니면 커널 내부에서 이야기하고 있습니까? 그럼 아마도 task_struct 당신이 무엇을 찾을 수 있을까 ??

+0

예 - 나중을 찾고 있습니다.하지만 task_struct의 thread_info가 올바른지 확신 할 수 없습니다. 문맥 전환 중에 레지스터를 저장할 구조가없는 것 같습니다. 실제로 task_struct는 정확하게 PCB입니다. – Fakrudeen

+0

나는 그 답을 모른다. 그러나'task_struct'에서 아마도 주소 공간과 주소 공간에서 그것을 가지고있는 쓰래드 작업 목록을 얻을 수 있을까? –