用户级别和内核级别线程的映射

时间:2017-03-29 16:43:25

标签: multithreading linux-kernel operating-system

通过操作系统原则,第7版

<(> Abraham Silberschatz,Peter Baer Galvin,Greg Gagne),我遇到了

线程调度部分中的

语句。它以 - :

的形式给出
  

要在CPU上运行,最终必须映射用户级线程   到相关的内核级线程,虽然这种映射可能   是间接的,可以使用轻量级过程(LWP)。

see here 声明的前半部分,即

  

要在CPU上运行,用户级线程最终必须映射到关联的内核级

试图说当执行用户级线程时,它需要内核线程的支持,如系统调用。

但我完全陷入了另一半,即

  

虽然这种映射可能   是间接的,可以使用轻量级流程(LWP)

这究竟是什么意思???

请帮帮我!

2 个答案:

答案 0 :(得分:5)

你正在读一本臭名昭着的书。线程以两种方式实现。

在古老的日子里(并且仍然存在于某些操作系统上)只有进程。一个过程由执行流和地址空间组成。

当需要线程支持的语言(例如,Ada-“任务”)时,需要创建库来实现线程。这些库使用定时器在进程中的各个线程之间切换。这是穷人的线程。这里的主要缺点是,即使您有多个处理器,进程的所有线程都在同一处理器上运行。线程只是在一个处理器上执行的单个进程中的交叉执行。

这些有时被称为“用户级线程”。有些书称之为“多对一模式”。

  

要在CPU上运行,用户级线程最终必须映射到关联的内核级线程

极具误导性。 [通常]这个模型中没有内核线程;只是过程。多个线程在进程中交错运行。要称之为“映射到关联的内核级线程”,这是一种误导和过度理论化的。

这是个笨蛋。

  

虽然这种映射可能是间接的,但可能使用轻量级进程(LWP)

操作系统发展的下一个阶段是操作系统直接支持线程。而不是进程是执行流+地址空间,而是进程成为一个或多个线程+地址空间。操作系统不是调度执行过程,而是调度线程以便执行。

那些是内核线程。

你的书正在变得简单。

答案 1 :(得分:2)

这些天,术语轻量级进程线程可互换使用。

  

虽然这种映射可能是间接的,但可能使用轻量级   过程(LWP)

我知道上述陈述令人困惑(请注意 2 mays )。我只能想到上述陈述所表示的一件事是:

早些时候,当linux仅支持user-level threads时,内核不知道有多个user-level threads,并且它处理这些多线程的方式是将所有这些线程关联到轻量级进程(哪个内核看作单个调度和执行单元)在kernel level

因此,将kernel-level thread与每个user-level thread相关联是一种直接映射,并将单个轻量级进程与每个{{1}相关联} 间接映射