5

据我了解,用户线程是由用户从库中创建并在用户空间中管理的。一个进程可以包含一个或多个用户线程,而内核不知道它们。

那么什么是内核线程呢?它们是类似于进程还是包含在类似于用户线程的进程中?

此外,我还看到了用户线程映射到内核线程的图表。这在执行方面究竟是如何工作的?内核是否调度内核线程并执行映射到该线程的用户线程?

4

2 回答 2

3

是的,内核线程与进程非常相似。事实上,现代操作系统模糊了线程和进程之间的区别。在 Linux 中,clone系统调用可用于创建线程(相同的 PID、相同的地址空间、相同的文件描述符表等)或进程(不同的 PID 等)或介于两者之间的任何内容。

(FreeBSD 有一个类似的系统调用称为rfork,它概括fork了 。我认为统一线程和进程的想法起源于计划 9。)

于 2013-05-01T16:49:56.093 回答
1

从这里开始内核和用户线程之间的关系

当他们说映射时,他们的意思是每个内核线程都分配给一定数量的用户模式线程。

内核线程用于为应用程序提供特权服务(例如系统调用)。内核还使用它们来跟踪系统上正在运行的所有内容,将哪些资源分配给哪个进程以及进行调度。

如果您的应用程序大量使用系统调用,每个内核线程的用户线程越多,您的应用程序运行速度就越慢,因为内核线程将成为瓶颈,因为所有系统调用都将通过它。

但另一方面,如果您的程序很少使用系统调用(或其他内核服务),您可以将大量用户线程分配给内核线程而不会造成太多性能损失,除了开销。

您可以增加内核线程的数量,但这通常会增加内核的开销,因此虽然单个线程对系统调用的响应速度更快,但整个系统会变得更慢。

这就是为什么在内核线程数和每个内核线程的用户线程数之间找到良好平衡很重要的原因。

另请参见此处: 内核线程和用户线程有什么区别?

内核线程和用户线程有什么区别?

内核线程具有特权,并且可以访问用户模式线程无法访问的内容。看看维基百科上的“ Ring(计算机安全) ”。在 Windows 上,用户模式对应于 Ring 3,而内核模式对应于 Ring 0。

用于创建内核线程的技术是什么?

这非常依赖于操作系统。

现在在用户级线程的情况下,这个 TCB 是在用户的地址空间中创建的吗?

TCB 记录有关内核在运行该线程时使用的线程的信息,对吗?因此,如果它被分配在用户空间,用户模式线程可能会修改或破坏它,这似乎不是一个好主意。那么,您不认为它是在内核空间中创建的吗?

这些模型是什么?这些模型在实际中是如何使用的?

维基百科似乎对此非常清楚。

于 2013-05-01T16:45:19.920 回答