最近我在学习由 Silberschatz 写的操作系统概念书籍。
在第五章,书中描述了“争用范围”的概念,并提到有两种类型的争用范围。一种是PTHREAD_SCOPE_PROCESS,另一种是PTHREAD_SCOPE_SYSTEM。
对于 PTHREAD_SCOPE_SYSTEM,用户级线程将绑定到一个 LWP(虚拟处理器),而此 LWP 将附加到一个内核线程上。
实际上,我并不太理解 LWP 的概念。在命令行终端上,我可以输入以下命令:
ps -eLf
我可以看到一个进程[PID]可能有几个LWP[thread IDs]。通过一些调查,我发现LWP似乎只是指Linux中的线程或任务。
如下面的链接所示:
因此,我有以下两个问题:
Q1: 在Linux中,是否将LWP定义为虚拟处理器?内核中的哪个源代码定义了它?
Q2: 在下面的图片中,syslog具有PID [852]并且具有四个线程。 这四个LWP是否每个都绑定一个内核线程?或者内核将直接调度它们?
上面的图片来源于:
提前致谢
PTHREAD_SCOPE_PROCESS
模型中,只有一个可调度实体,多个用户线程竞争在其中运行。因此,在任何给定的时刻只有一个用户线程可以执行。(称之为M:1;然后M:N是该模型的一般化,其中您拥有多个可调度实体,但少于用户线程的总数。) - Gil Hamilton