Linux中的系统调用是否涉及线程切换

Sau*_*ash 4 linux

我在维基百科关于“系统调用”的部分阅读,当“用户级”线程进行系统调用时,最终“内核”线程实际执行请求。那么这是否意味着用户线程被取消调度并使用内核线程进行上下文切换?如果是,结果如何返回给用户线程?

我对维基百科上的这一行感到困惑:“多对一模型:来自进程中任何用户线程的所有系统调用都由单个内核级线程处理。”

Joh*_*ica 6

有关系统调用上下文切换的详细说明,请参阅系统调用和上下文切换

我仍然不明白系统调用是在同一个线程中执行的,而是在内核模式下执行的,还是有一个单独的内核线程用于系统调用

相同的线程,相同的过程。没有“用户线程”和“内核线程”,只有线程。每次进行系统调用时,线程都会在用户模式和内核模式之间来回切换。

链接问题中描述的上下文切换不是调度上下文切换。用户/内核模式切换和线程调度切换是独立的、正交的概念。从用户模式切换到内核模式或返回根本不涉及调度。同样,线程调度切换可以随时发生,无论进程处于用户模式还是内核模式。

我对维基百科上的这一行感到困惑:“多对一模型:来自进程中任何用户线程的所有系统调用都由单个内核级线程处理。”

这是操作系统处理系统调用的一种方式,但不是 Linux 的方式。Linux 使用第二个项目符号中的模型:“一对一模型:在系统调用期间,每个用户线程都附加到一个不同的内核级线程。该模型解决了上述阻塞系统调用的问题。它在所有主要的 Linux 发行版、macOS、iOS、最近的 Windows 和 Solaris 版本。”

但是不要让这些措辞让您感到困惑。Linux 不区分用户线程和内核线程。只有线程,不合格。文章描述的“一对一”映射是概念性的。Linux 的源代码中没有实际的分离或映射。