2013-05-01 87 views
2

从我的理解,用户线程是由用户从库中创建的,并在用户空间进行管理。一个进程可以包含一个或多个用户线程,内核不知道它们。内核线程究竟是什么以及它如何与进程协同工作?

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

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

+0

“一个进程可以包含一个或多个用户线程和内核没有意识到他们。“不是真的 - 内核知道用户线程线程,这就是它可以给他们不同的ID。 (请参阅Windows。)我认为这可能更像是一个术语,特别是对于* nix系统。 – Mehrdad 2013-05-01 16:51:53

回答

2

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

(FreeBSD有一个类似的系统调用名为rfork,从而推广fork我认为统一的线程和进程的想法起源Plan 9中)。

+0

与你同样的问题先生, 当用户线程进行系统调用时,映射到它的内核线程是否得到执行并通过该内核线程返回系统调用的结果? – Instinct 2013-05-01 16:52:34

+0

@ user1773070:取决于操作系统,我猜。这听起来像是一个似是而非的实现策略,但我不确定Linux或其他操作系统如何实现这一目标。 – 2013-05-01 16:57:52

+0

@Instinct Yep!这就是为什么在大多数现代操作系统中,用户线程和内核线程之间存在一对一的映射。 “绿色线程”/“光纤”是仅限用户空间的线程(它打破了一对一属性),并且通常他们将系统调用排除到仅用于I/O的线程池。每个I/O线程都有一个OS线程匹配,以便它们可以运行系统调用。 – Dan 2014-04-11 06:54:03

1

从这里Relationship between a kernel and a user thread

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

内核线程用于为应用程序 (如系统调用)提供特权服务。内核也用它来跟踪所有在系统上运行的内容,分配给哪个进程的资源有多少,以及要执行调度。

如果你的应用程序使大量使用系统调用,更多的用户每内核线程 线程,速度较慢的应用程序将运行, 因为内核线程会成为瓶颈,因为所有的系统 电话将通过它。

在另一面,虽然,如果你的程序很少使用系统调用 (或其它内核服务),可以比开销了大量的用户分配 线程没有太多的性能损失内核线程,其他 。

可以增加内核线程的数量,但是这会增加开销 内核一般,所以当单个线程会更加 响应相对于系统调用,该系统作为一个整体将 变慢。

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

同样在这里看到:What is the difference between kernel threads and user threads?

是什么内核线程和用户线程之间的区别?

内核线程是特权,并且可以访问的东西偏离限制用户模式线程。看看维基百科上的“Ring (Computer Security)”。在Windows中,用户模式对应于环3,而内核模式对应地响0

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

这非常依赖操作系统。

现在遇到用户级别的线程这个TCB是在用户地址空间创建的吗?

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

这些模型是什么?这些模型如何被实际使用?

Wikipedia看起来很清楚。

+0

感谢您的回复。我对内核线程如何执行仍然有点困惑。当用户线程进行系统调用时,映射到它的内核线程是否会被执行并通过该内核线程返回系统调用的结果?而且,内核线程不在进程内?它们与流程相似吗? – Instinct 2013-05-01 16:50:43

+0

我们在谈论什么类型的系统架构? – Jordan 2013-05-01 16:56:00

相关问题