2017-09-02 19 views

回答

2

如果操作系统无法区分ULT和进程,那么它的线程表中是否有ULT条目?

否 - 就操作系统而言,用户级别线程不存在。相反,只有一个线程/进程,通过调用setjmp()和longjmp()来执行“有趣的事情”。

+0

然后TCB的地址被存储在哪里以及它如何管理? –

+1

这将是用户进程内部的数据结构,就像任何其他用户级别的数据结构一样。它将由用户级线程库管理。 –

+0

好的,谢谢。我明白了:) –

2

操作系统(内核)只知道内核级线程,并没有用户级线程的知识。用户级线程由提供线程功能的用户库管理。

例如,Linux不区分线程和进程。可以调度的实体由task_struct数据结构表示。 所以当你的库想创建一些线程时,它会要求内核创建(使用clone())相应的task_structs。您的库可能只需要一个task_struct,在这种情况下,您的所有用户级别线程都复用在同一个task_struct中,或者它可能会为每个用户级别线程请求一个task_struct,在这种情况下,每个用户级别线程都可以被内核用于调度,因为每个线程有一个task_struct。我们可以说 内核只知道内核级线程。用户级别的线程由相应的库创建和管理。

相关问题