【发布时间】:2023-04-11 03:42:01
【问题描述】:
我在 Wikipedia 上的“系统调用”部分读到,当“用户级”线程进行系统调用时,最终“内核”线程实际上会执行该请求。那么这是否意味着用户线程被取消调度并使用内核线程切换上下文?如果是,结果如何返回给用户线程?
我对@987654321@ 上的这一行感到困惑:“多对一模型:来自进程中任何用户线程的所有系统调用都由单个内核级线程处理。”
【问题讨论】:
标签: linux
我在 Wikipedia 上的“系统调用”部分读到,当“用户级”线程进行系统调用时,最终“内核”线程实际上会执行该请求。那么这是否意味着用户线程被取消调度并使用内核线程切换上下文?如果是,结果如何返回给用户线程?
我对@987654321@ 上的这一行感到困惑:“多对一模型:来自进程中任何用户线程的所有系统调用都由单个内核级线程处理。”
【问题讨论】:
标签: linux
有关系统调用上下文切换的详细说明,请参阅system call and context switch。
我还是不明白,系统调用是在同一个线程中但在内核模式下执行的,还是系统调用有单独的内核线程
同一个线程,同一个进程。没有“用户线程”和“内核线程”,只有线程。每次进行系统调用时,线程都会在用户模式和内核模式之间来回切换。
链接问题中描述的上下文切换不是调度上下文切换。用户/内核模式切换和线程调度切换是独立的、正交的概念。从用户模式切换到内核模式或返回根本不涉及调度。同样,线程调度切换可以随时发生,无论进程处于用户模式还是内核模式。
我对维基百科上的这句话感到困惑:“多对一模型:来自进程中任何用户线程的所有系统调用都由单个内核级线程处理。” p>
这是操作系统处理系统调用的一种方式,但它不是 Linux 的方式。 Linux 使用第二个项目符号中的模型:“一对一模型: 在系统调用期间,每个用户线程都连接到不同的内核级线程。该模型解决了上述系统阻塞问题调用。它存在于所有主要的 Linux 发行版、macOS、iOS、最近的 Windows 和 Solaris 版本中。"
但不要让这个措辞让您感到困惑。 Linux 不区分 user 线程和 kernel 线程。只有线程,不合格。本文描述的“一对一”映射是概念性的。 Linux 的源代码中没有实际的分离或映射。
【讨论】: