不了解liunx内核中LWP的概念

时间:2016-01-20 05:43:38

标签: linux multithreading linux-kernel

我最近研究了Silberschatz撰写的OS书籍[操作系统概念]。

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

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

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

ps -eLf

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

How Linux handles threads and process scheduling

所以我有以下两个问题:

Q1: LWP是否定义为linux中的虚拟处理器?内核中的源代码定义了什么?

Q2: 在下图中,syslog具有PID [852]并具有四个线程。这四个LWP会绑定一个内核线程吗?或者内核会直接安排它们吗?

enter image description here

以上图片摘自:

http://www.softprayog.in/tutorials/ps-command-usage-examples-in-linux

提前致谢

1 个答案:

答案 0 :(得分:5)

Linux不支持$date = new DateTime('2016-12-12'); $origDate = clone $date; //I believe this will get you an independent object $date->modify('+1 daybla'); if ($origDate == $date) { echo "Bad value passed to modify, probably a warning in the logs :("; } 。请参阅示例http://man7.org/linux/man-pages/man3/pthread_attr_setscope.3.html

  

POSIX.1要求实现至少支持其中一个   争用范围。 Linux支持PTHREAD_SCOPE_SYSTEM,但不支持   PTHREAD_SCOPE_PROCESS。

在Linux中,一个过程'多个线程就像碰巧共享相同地址空间的独立进程一样。是的,这完全过于简单化,它们共享其他资源 - 特别是信号处理程序,文件描述符和各种ID - 还有其他更微妙的差异,但它们都是完全成熟的独立可调度实体。内核中使用的术语是" task"。每个进程至少有一个任务。多线程进程有多个。

Q1:LWP与虚拟处理器不同(无论你的意思是什么 - 在这种情况下它并不熟悉)。 LWP对应于linux中的任务。虽然在内核开发之外,"进程"和"线程"仍然是更常见的术语。

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/