【问题标题】:Do system call in Linux involve thread switchingLinux中的系统调用是否涉及线程切换
【发布时间】:2023-04-11 03:42:01
【问题描述】:

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

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

【问题讨论】:

    标签: linux


    【解决方案1】:

    有关系统调用上下文切换的详细说明,请参阅system call and context switch

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2012-08-15
      • 2019-11-17
      • 2011-10-18
      • 2018-12-29
      • 2012-11-02
      • 2012-03-17
      • 1970-01-01
      相关资源
      最近更新 更多