Operating system 内核线程到底是什么?它如何与进程一起工作?

Operating system 内核线程到底是什么?它如何与进程一起工作?,operating-system,Operating System,据我所知,用户线程是由用户从库中创建并在用户空间中管理的。一个进程可以包含一个或多个用户线程,而内核不知道它们 那么什么是内核线程呢?它们是类似于进程还是包含在类似于用户线程的进程中 此外,我还看到了用户线程映射到内核线程的图表。在执行方面,这到底是如何运作的?内核是否调度内核线程并执行映射到该线程的用户线程?从此处开始执行: 当他们说map时,他们的意思是每个内核线程都被分配给一个 一定数量的用户模式线程 内核线程用于向应用程序提供特权服务 (例如系统调用)。内核还使用 在系统上运行的所有内容

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

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


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

从此处开始执行:

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

内核线程用于向应用程序提供特权服务 (例如系统调用)。内核还使用 在系统上运行的所有内容中,有多少资源是 分配给什么进程,并做调度

如果应用程序大量使用系统调用,则用户 每个内核线程的线程数,应用程序运行的速度越慢, 因为内核线程会成为瓶颈,因为所有的系统 电话会通过它

但另一方面,如果你是程序员,程序很少使用系统调用 (或其他内核服务),您可以分配大量用户 线程到内核线程,没有太多性能损失,其他 而不是头顶

您可以增加内核线程的数量,但这会增加开销 对于内核来说,一般来说,单个线程会更 响应系统调用,整个系统将 变慢

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

另请参见此处:

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

内核线程具有特权,可以访问用户模式线程不受限制的内容。看看维基百科上的“”。在Windows上,用户模式对应于环3,而内核模式对应于环0

用于创建内核线程的技术有哪些

这非常依赖于操作系统

对于用户级线程,这个TCB是在用户的地址空间中创建的吗

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

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


这一点似乎非常清楚。

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


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

感谢您的响应。对于内核线程是如何执行的,我仍然有点困惑。当用户线程进行系统调用时,映射到它的内核线程是否执行并通过该内核线程返回系统调用的结果?还有,内核线程不在进程内吗?那么它们与进程类似吗?我们谈论的是什么类型的系统体系结构?“一个进程可以包含一个或多个用户线程,而内核并不知道它们。”不是真的——内核知道用户线程,这就是为什么它可以给它们不同的ID。(例如,请参阅Windows。)我认为这可能更像是一个术语,特别是对于*nix系统。先生,与您类似的问题是,当用户线程进行系统调用时,映射到它的内核线程是否会被执行并通过该内核线程返回系统调用的结果?@user1773070:我想这取决于操作系统。这听起来似乎是一个可行的实施策略,但我不确定Linux或其他操作系统是如何做到这一点的。@Yep!这就是为什么在大多数现代操作系统中,用户线程和内核线程之间存在一对一的映射。“绿色线程”/“光纤”是仅限用户空间的线程(打破了一对一属性),它们通常将其系统调用分配到仅用于I/O的线程池。I/O线程都有一个要匹配的OS线程,以便它们可以运行系统调用。