我最近研究了Silberschatz编写的OS操作系统概念。不了解liunx内核中的LWP的概念
在第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将分别绑定一个内核线程?或者内核会直接安排它们?
以上图片摘自:
http://www.softprayog.in/tutorials/ps-command-usage-examples-in-linux
在此先感谢
感谢您的回复。我见过第二篇文章。第二篇文章提到了用户线程到内核线程的三种映射,它说Linux实现了1:1模型。因此,每个用户线程将映射到Linux中的一个内核线程[即这四个syslog lwp每个都会映射到我的问题帖中的一个内核线程]?我能从ps命令中看到这种关系吗?从你的回复看来,内核似乎会查看用户线程和内核线程都是“任务”并直接安排它们,对吗? –
是的。每个syslog lwp(用户线程)实际上是一项任务。而linux中的术语“任务”对应于该文章称为“内核线程”的内容。但是请注意,术语“内核线程”在linux *中具有特定的含义*,与您使用的含义不同。在Linux中,用户线程和内核线程都是任务,都是可独立调度的。 –
好的。由于用户线程和内核线程在linux中都是可调度的任务。有没有这样的1:1绑定像文章在linux中说的对吗? –