Linux 中的轻量级进程是否附加到内核线程?

Linux 中的轻量级进程是否附加到内核线程?

根据我对《理解 Linux 内核》的理解,以下说法是否正确:

  • Linux内核中的内核线程和轻量级进程都用task_structC语言中的结构体 来表示。

  • 内核线程总是在内核空间中运行,而轻量级进程可以在用户空间和内核空间中运行

  • 内核线程和轻量级进程是同一级别的两个概念。他们不互相依赖吗?特别是轻量级进程不是基于内核线程创建和运行的吗?

那么为什么下面引用《操作系统概念》的意思是说轻量级进程附加到内核线程呢? (请注意,这本书是针对一般操作系统概念的,引用并没有说它是针对 Linux 的,但是本书的大部分内容都适用于 Linux)

多线程程序要考虑的最后一个问题涉及内核和线程库之间的通信,这可能是第 4.3.3 节中讨论的多对多和两级模型所需要的。这种协调允许动态调整内核线程的数量,以帮助确保最佳性能。

许多系统实现多对多或两级模型用户线程和内核线程之间的中间数据结构这种数据结构通常称为轻量级进程,或 LWP——如图4.13所示。对于用户线程库来说,LWP 似乎是一个虚拟处理器,应用程序可以在其上调度用户线程运行。每个 LWP 都附加到一个内核线程, 和操作系统安排在物理处理器上运行的是内核线程。如果内核线程阻塞(例如在等待 I/O 操作完成时),LWP 也会阻塞。在链上,附加到 LWP 的用户级线程也会阻塞。

在此输入图像描述

书中定义的几个概念如下,特别是内核线程和用户线程的定义可能与我在本文开头的问题中提到的不同:

对线程的支持可以在用户级别提供,例如用户线程,或者通过内核,对于内核线程。用户线程在内核之上得到支持,不需要内核支持就可以进行管理,而内核线程则直接由操作系统支持和管理。

多对一模型(图 4.5)将许多用户级线程映射到一个内核线程。线程管理是由用户空间的线程库完成的,所以效率很高

在此输入图像描述

多对多模型(图 4.7)将许多用户级线程多路复用到更少或相同数量的内核线程。内核线程的数量可能特定于特定的应用程序或特定的机器(在多处理器上为应用程序分配的内核线程可能比在单处理器上分配的内核线程多)。

在此输入图像描述

谢谢。

答案1

内核线程总是运行在内核空间。用户线程在用户空间中运行,即它们具有用户模式地址空间。用户线程可以是预定的无论有或没有内核的支持。这就是问题后半部分“内核线程”的含义。简而言之,同一个名称用于两种事物。

相关内容