我有一个包含多个线程的进程。如果我的一个线程调用像gettimeofday()
这样的系统调用,那么内核是只将该线程切换到上下文之外来为系统调用提供服务,还是将整个进程(以及所有其他线程)切换到上下文以外?
大多数系统调用可能涉及上下文切换(如果其他任务可以运行),并将处理器的状态切换到内核模式。
但是gettimeofday
(以及例如getpid()
)是不寻常的。对于最近的内核,他们使用VDSO来避免它(甚至避免syscall
或sysenter
指令切换到内核模式)。
对于linux内核来说,线程就是一个进程。因此,当其中一个线程进行系统调用时,内核对进程的其他线程没有兴趣。