理解 Linux 内核中 LWP 的概念

3

最近我在学习由 Silberschatz 写的操作系统概念书籍。

在第五章,书中描述了“争用范围”的概念,并提到有两种类型的争用范围。一种是PTHREAD_SCOPE_PROCESS,另一种是PTHREAD_SCOPE_SYSTEM。

对于 PTHREAD_SCOPE_SYSTEM,用户级线程将绑定到一个 LWP(虚拟处理器),而此 LWP 将附加到一个内核线程上。

实际上,我并不太理解 LWP 的概念。在命令行终端上,我可以输入以下命令:

ps -eLf

我可以看到一个进程[PID]可能有几个LWP[thread IDs]。通过一些调查,我发现LWP似乎只是指Linux中的线程或任务。

如下面的链接所示:

Linux如何处理线程和进程调度

因此,我有以下两个问题:

Q1: 在Linux中,是否将LWP定义为虚拟处理器?内核中的哪个源代码定义了它?

Q2: 在下面的图片中,syslog具有PID [852]并且具有四个线程。 这四个LWP是否每个都绑定一个内核线程?或者内核将直接调度它们?

enter image description here

上面的图片来源于:

Linux ps命令使用示例

提前致谢

1个回答

5
Linux不支持PTHREAD_SCOPE_PROCESS。例如,可以参考http://man7.org/linux/man-pages/man3/pthread_attr_setscope.3.html
POSIX.1要求实现至少支持其中一个竞争范围。Linux支持PTHREAD_SCOPE_SYSTEM,但不支持PTHREAD_SCOPE_PROCESS。
在Linux中,进程的多个线程就像是共享同一地址空间的独立进程。是的,这是完全过于简单化的说法,它们还共享其他资源,特别是信号处理程序、文件描述符和各种ID,还有其他更微妙的区别,但它们都是完整的、独立可调度的实体。内核中使用的术语是“任务”。每个进程至少有一个任务。多线程进程有多个任务。
Q1:LWP不同于虚拟处理器(无论您在此上下文中指的是什么——这不是一个熟悉的概念)。在Linux中,LWP对应于任务。尽管在内核开发之外,“进程”和“线程”仍然是更常见的术语。
Q2:每个LWP对应一个单独的任务(或用户线程),并且每个任务都可以由内核单独进行调度。(在Linux中,“内核线程”一词具有特定的含义,与此完全不同:内核线程是在内核中度过其整个生命周期的线程[真正的任务]。它们通常用于各种内部管理功能。)
关于Posix线程模型的更多信息,请参见这个非常好的解释:http://www.icir.org/gregor/tools/pthread-scheduling.html,其中讨论了Linux和FreeBSD的实现。
此外,还有一个更一般的线程概念,请参见:http://timetobleed.com/threading-models-so-many-different-ways-to-get-stuff-done/

谢谢您的回复。我已经看到了第二篇文章。第二篇文章提到了三种将用户线程映射到内核线程的方法,并且它说Linux实现了1:1模型。那么在Linux中,每个用户线程是否映射到一个内核线程(即我的问题帖子中的四个syslog lwp是否分别映射到一个内核线程)?我能从ps命令中看到这种关系吗?从您的回复中,似乎内核会直接查看用户线程和内核线程都是“任务”,并对它们进行调度,是吗? - Anakin Tung
是的。每个syslog lwp(用户线程)实际上都是一个任务。而Linux中的“任务”一词对应于该文章所称的“内核线程”。但请注意,“内核线程”这个术语在Linux中具有特定的含义,与您使用的含义不同。在Linux中,用户线程和内核线程都是任务,并且两者都可以独立调度。 - Gil Hamilton
好的。在Linux中,用户线程和内核线程都是可调度的任务。就像文章所说的那样,在Linux中并没有像1:1绑定这样的概念。 - Anakin Tung
是的,没错。根据那篇文章的术语,“用户线程”就是您的代码所表达的(将其视为独立的执行路径),而“内核线程”则是可调度的实体。在Linux中,这些是1对1的,并且如果您有足够的处理器,每个线程都可以(或可能)同时运行。 - Gil Hamilton
相比之下,在PTHREAD_SCOPE_PROCESS模型中,只有一个可调度实体,多个用户线程竞争在其中运行。因此,在任何给定的时刻只有一个用户线程可以执行。(称之为M:1;然后M:N是该模型的一般化,其中您拥有多个可调度实体,但少于用户线程的总数。) - Gil Hamilton
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接