2012-03-15 4 views
2

스레드가 여러 개인 프로세스가 있습니다. 내 스레드 중 하나가 gettimeofday()과 같은 시스템 호출을 호출하면 커널은 시스템 호출을 처리하기 위해 컨텍스트 밖으로 해당 스레드를 전환합니까? 아니면 컨텍스트에서 전체 프로세스 (및 다른 모든 스레드)를 전환합니까?스레드가 시스템 호출을 호출 할 때 컨텍스트 전환

+0

Linux는 1 : 1 스레드입니다. 시스템 호출이 모든 스레드를 전환하는 N : 1 또는 M : N과 같이 다른 항목에 대해서는 [Wikipedia의 스레딩 모델] (http://en.wikipedia.org/wiki/Thread_%28computing%29#Models)을 참조하십시오. 1≤some≤all이 영향을받을 수 있습니다. – ephemient

답변

2

대부분 system calls은 컨텍스트 전환 (다른 작업이 실행 가능한 경우)을 포함하고 프로세서 상태를 커널 모드로 전환 할 수 있습니다.

그러나 gettimeofday (예 : getpid())은 예외적입니다. 최근 커널의 경우 커널을 사용하지 않으려면 VDSO을 사용해야합니다 (커널 모드로 전환하라는 지침 인 syscall 또는 sysenter도 피하기 위해).

1

리눅스 커널에서 스레드는 프로세스입니다. 그래서 커널 중 하나가 시스템 호출을 할 때 프로세스의 다른 스레드에 관심이 없습니다.