通过操作系统原则,第7版
<(> Abraham Silberschatz,Peter Baer Galvin,Greg Gagne),我遇到了 线程调度部分中的语句。它以 - :
的形式给出要在CPU上运行,最终必须映射用户级线程 到相关的内核级线程,虽然这种映射可能 是间接的,可以使用轻量级过程(LWP)。
要在CPU上运行,用户级线程最终必须映射到关联的内核级
试图说当执行用户级线程时,它需要内核线程的支持,如系统调用。
但我完全陷入了另一半,即
虽然这种映射可能 是间接的,可以使用轻量级流程(LWP)
这究竟是什么意思???
请帮帮我!
答案 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}相关联} 间接映射。