我最近研究了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会绑定一个内核线程吗?或者内核会直接安排它们吗?
以上图片摘自:
http://www.softprayog.in/tutorials/ps-command-usage-examples-in-linux
提前致谢
答案 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/