线程调用系统调用时的上下文切换
问题描述:
我有一个包含多个线程的进程。如果我的一个线程调用类似gettimeofday()
这样的系统调用,内核是否仅将该线程切换到上下文以服务系统调用,还是将整个进程(以及所有其他线程)切换到上下文之外?线程调用系统调用时的上下文切换
答
大多数system calls可能涉及上下文切换(如果其他任务可运行)并将处理器的状态切换到内核模式。
但是gettimeofday
(和例如getpid()
)是不寻常的。使用最近的内核,他们使用VDSO来避免它(甚至避免syscall
或sysenter
指令切换到内核模式)。
答
对于linux内核来说,线程就是一个进程。因此,当其中一个进行系统调用时,内核对您的进程的其他线程没有兴趣。
Linux是1:1线程;请参见[在*上对线程模型进行线程化](http://en.wikipedia.org/wiki/Thread_%28computing%29#Models),例如N:1,其中系统调用将所有线程切换出来,或M:N,其中1≤some≤all可能会受到影响。 – ephemient 2012-03-15 22:27:25