用户级线程如何映射到内核级线程?
答案 0 :(得分:1)
因实施而异。三种最常见的线程模型是:
1对1:每个用户级线程都有一个由内核调度的对应实体。
n-to-1:每个进程都由内核调度。线程调度完全在用户空间中进行。
n-to-m:每个进程都有一个由内核调度的实体池。这些被分配为由作为流程一部分的用户空间调度程序运行特定用户级线程。
现代实施几乎都是1对1。
答案 1 :(得分:0)
对于用于引用ULT和KLT的术语存在一些混淆。 以下是两种不同的解释。如果我弄错了,请纠正我:
需要KLT来实现内核的并发性(注意将内核解释为进程或实时实体)。对于像Symbian这样的微内核来说,情况确实如此,其中内核线程负责系统的每个硬件资源(例如文件服务器,位置服务器,Calendar Server等)。但是,在像Linux这样的内核中,它主要是一个库(而不是一个进程或一个独立的实体),对于内核线程来说真的没有意义。在Linux中,您创建的每个线程都被内核视为进程,内核始终在Process上下文或Interrupt上下文中运行。
第二种解释是基于是否对内核可见线程(或并发)。例如,使用setjmp,longjmp可以在用户空间实现并发。就像已经讨论过的那样,内核完全没有意识到这一点。这种并发性可以称为ULT。并且创建内核知道的线程(使用Clone()系统调用的线程)可以称为KLT。