2012-01-16 6 views
2

리눅스 커널은 struct pid를 사용하여 커널 공간에서 PID를 나타냅니다. C 코드는 다음과 같습니다. 멤버 작업을 나타냅니다 "작업 목록"왜커널의 커널 내부 표현을 이해할 수 없다

struct pid 
{ 
atomic_t count; 
/* lists of tasks that use this pid */ 
struct hlist_head tasks[PIDTYPE_MAX]; 
int level; 
struct upid numbers[1]; 
}; 

난 정말 이해할 수없는 .Since의 task_struct에이 작업의 커널 내부 표현이며, 하나의 작업은 하나의 task_struct.Why 할 수있는 하나 이상의 작업 공유를 사용 "struct pid"?

답변

5

두 개 이상의 작업이 동일한 프로세스의 일부가 될 수 있기 때문에. 예를 들어, NPTL과 같은 일대일 스레딩 라이브러리를 사용하는 멀티 스레드 프로세스를 고려하십시오. 단일 프로세스 ID를 가지지 만 커널에 의해 스케줄 된 여러 엔티티로 구성됩니다.

+0

넵. 그리고 단지 하나의 "PID"를 가지고있을지라도,'-L' 옵션을 사용하면'ps'에 여러개의 "경량 프로세스 ID"를 볼 수 있습니다 (리눅스에서 올바른 옵션이라고 생각합니다). –

+0

@JohnZwinck "TID"또는 "작업 ID"라고 부를 수 있습니다. –

+0

감사합니다. 좋은 답변입니다. –

관련 문제