-1

我了解用户级线程或绿色线程由某些用户级线程库管理,并且必须“链接”到某些操作系统线程才能执行其任务。我知道线程只是一系列独立代码的抽象。线程用存储在内存中的一些数据结构来表示。在用户级或绿色线程的情况下,用户空间中存在并由用户级线程库管理。在操作系统级别或内核级别线程的情况下,它们由内核或操作系统存储和管理。我不明白将绿色线程链接到操作系统线程实际上是什么意思?我知道 1:1、n:1、n:m 方案,这不是我的问题所在。我的问题是在绿色线程和它绑定到的内核线程之间复制或共享(或其他)哪些数据结构?当绿色线程必须进行上下文切换时,用户级线程库对这些结构做了什么?

4

1 回答 1

3

有线程,也有模拟线程。您所说的“绿色线程”是模拟线程。

内核对模拟线程的存在一无所知。

我的问题是在绿色线程和它绑定的内核线程之间复制或共享(或其他)哪些数据结构?

那么答案是否定的;至少在操作系统级别。该进程必须跟踪用户空间中的线程。

我知道 1:1、n:1、n:m 方案,这不是我的问题所在。

1:1、n:1 和 n:M 计划是完整的、旨在迷惑学生的完整学术 BullS*&T。线程中没有 n:M 这样的东西。这是不切实际的理论废话。1:1 只意味着真正的线程。n:1 表示模拟线程。

现实生活中只有两种模型:

在经典模型中,一个进程由一个执行流和一个地址空间组成。

在当前模型中,一个进程由多个执行流和一个地址空间组成。

在经典模型中没有线程。如果你想要线程,你必须使用带有计时器的库来模拟它们;不适合操作系统课程的主题,历史背景除外。

在当前模型中,多个执行流称为线程。在当前模型中没有任何理由使用模拟/绿色/用户线程。说模拟/绿色/用户线程有任何优势的教科书只适合用于猫箱衬垫。

于 2019-04-19T14:50:41.223 回答