Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 用户级和内核级线程的映射_Multithreading_Linux Kernel_Operating System - Fatal编程技术网

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

Multithreading 用户级和内核级线程的映射,multithreading,linux-kernel,operating-system,Multithreading,Linux Kernel,Operating System,在学习操作系统原理时,第7版 (作者:亚伯拉罕·西尔伯沙茨、彼得·贝尔·加尔文、格雷格·加涅),我遇到了一个 线程调度部分中的语句。它的形式为-: 要在CPU上运行,最终必须映射用户级线程 到关联的内核级线程,尽管此映射可能 可以是间接的,也可以使用轻量级流程(LWP) 声明的前半部分,即 要在CPU上运行,用户级线程最终必须映射到相关的内核级 它试图说,当执行用户级线程时,它将需要来自内核线程(如系统调用)的支持 但我完全陷入了另一半,即 尽管此映射可能 可以是间接的,也可以使用轻量级流程(

在学习操作系统原理时,第7版

(作者:亚伯拉罕·西尔伯沙茨、彼得·贝尔·加尔文、格雷格·加涅),我遇到了一个

线程调度部分中的语句。它的形式为-:

要在CPU上运行,最终必须映射用户级线程 到关联的内核级线程,尽管此映射可能 可以是间接的,也可以使用轻量级流程(LWP)

声明的前半部分,即

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

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

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

尽管此映射可能 可以是间接的,也可以使用轻量级流程(LWP)

这到底是什么意思


请帮帮我

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

在过去(在某些操作系统上仍然存在),只有进程。由执行流和地址空间组成的进程

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

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

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

这是非常误导的。在这个模型中[通常]没有内核线程;只是过程。多个线程在进程中交错运行。将其称为“到相关内核级线程”的映射是误导性的,而且过于理论化

这简直是胡言乱语

尽管此映射可能是间接的,并且可能使用轻量级流程(LWP)

操作系统演进的下一个阶段是操作系统直接支持线程。进程不是执行流+地址空间,而是一个或多个线程+地址空间。操作系统不安排进程执行,而是安排线程执行

这些是内核线程


你的书使简单变得复杂。

如今,术语轻量级进程和线程可以互换使用

尽管此映射可能是间接的,并且可能使用轻量级 工艺(LWP)

我知道上面的说法令人困惑(注意2个五月)。我能想到的只有一件事,上面的陈述意味着:

早些时候,linux只支持
用户级线程
,内核不知道有多个
用户级线程
,它处理这些线程的方式是将所有线程关联到一个轻量级进程(内核将其视为单个调度和执行单元)在
内核级别


因此,将
内核级线程
与每个
用户级线程
相关联是一种直接映射,将单个轻量级进程与每个
用户级线程
相关联是一种间接映射,任何查询都可以自由使用。我们还可以在用户空间(我们想要执行的特定程序),不需要内核干预。。!我们不能吗?这是我描述的第一个案例。计时器设置在与代码链接的库中。它们需要内核干预以支持函数(如计时器),但不安排线程执行。您在20世纪80年代的典型ADA库中包含了这样的线程支持。我们还可以在用户空间(我们想要执行的特定程序)中实现线程库,这将不需要内核干预。。!我们不能吗?@laura 0内核干预是不可能的。这就是为什么我们有用户模式和内核模式。