linux - 理解linux内核中LWP的概念

标签 linux multithreading linux-kernel

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

本书在第5章描述了“Contention scope”的概念,并提到有两种类型的contention scope。一个是 PTHREAD_SCOPE_PROCESS,另一个是 PTHREAD_SCOPE_SYSTEM。

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

其实我对LWP的概念不是很了解。 在命令行终端上,我可以键入以下命令:

ps -eLf

而且我可以看到一个进程 [PID] 可能有多个 LWP [线程 ID]。通过做一些调查,我发现 LWP 似乎只是指 linux 中的线程或任务。 喜欢以下链接:

How Linux handles threads and process scheduling

所以我有以下两个问题:

第一季度: LWP在linux中定义为虚拟处理器吗?内核中的哪些源代码定义了它?

Q2: 在下图中,syslog 的 PID 为 [852],并且有四个线程。而这4个LWP会各自绑定(bind)一个内核线程吗?或者内核会直接安排它们?

enter image description here

上图摘自:

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

提前致谢

最佳答案

Linux 不支持 PTHREAD_SCOPE_PROCESS。参见示例 http://man7.org/linux/man-pages/man3/pthread_attr_setscope.3.html

POSIX.1 requires that an implementation support at least one of these contention scopes. Linux supports PTHREAD_SCOPE_SYSTEM, but not PTHREAD_SCOPE_PROCESS.

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

问题 1: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/

关于linux - 理解linux内核中LWP的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892371/

相关文章:

debugging - 在 GDB 中调试内核时如何正确键入内存指令/操作码以写入/修改内存地址

linux - html 格式的面板通知。有可能的?

安卓:java.util.concurrent.ThreadPoolExecutor

c# - 使用线程发送数据

c - 如何在内核代码中获取子进程列表

linux - 在内核 debians 中包含 objTools(linux-headers 和 linux-image)

linux - 如果满足 shell 脚本中给定的条件,则计算平均值

c - 使用fork使进程同时运行

c++ - 防止 CMake 查找已安装的库而不是 "local"库

ios - Async_Dispatch 线程