0

最近我开始(再次)阅读 Tanenbaum 的“Modern Operating Systems 4ed”,我有点卡在第 2 章讨论进程和线程。特别是我对列出所有优点和缺点的用户空间线程子章节感到困惑。

这是支持用户空间线程的直接引用:

用户级线程还有其他优点。它们允许每个进程拥有自己定制的调度算法。对于某些应用程序,例如具有垃圾收集器线程的应用程序,不必担心线程在不方便的时刻被停止是一个优点。它们还可以更好地扩展,因为内核线程总是需要内核中的一些表空间和堆栈空间,如果有大量线程,这可能是一个问题。

我理解它的方式是每个使用线程的进程(因此创建/销毁它们)负责实现这些线程的调度以使它们高效。例如,具有预定义的短时间间隔的简单循环。

然而,稍后在子章节中,我们得到了缺点的引用。它来了:

用户级线程包的另一个问题是,如果一个线程开始运行,除非第一个线程自愿放弃 CPU,否则该进程中的其他线程将永远不会运行。在单个进程中,没有时钟中断,因此无法以循环方式(轮流)调度进程。除非线程自愿进入运行时系统,否则调度程序永远不会有机会。

嗯,WTF?因此,在专业方面,拥有线程的进程 OWN 调度程序是一个优势,在这里似乎无论是否有定制的调度程序 - 它都不会按预期工作,因为线程是贪婪的。

我的问题是:当使用用户空间线程以相同的方式实际调度线程时,进程的调度程序是否不可能?还是我的英语不够好,无法在这里抓住要点。

PS。在查看已发布的问题时,建议我阅读此 - User-level threads for threading。Tanenbaum 的模型适用于旧系统的说法不正确吗?这本书于 2014 年出版,所以这可能是一回事。

4

1 回答 1

2

调度算法是从一组可运行线程中选择接下来应该运行的算法。这是您可以在用户空间线程系统中随意设计的部分。

“缺点”部分中的文本是在讨论调度算法何时运行,并且是说对于用户空间线程,您通常仅限于仅在当前运行的线程自愿进入调度程序时才会发生这种情况。

因此,优点是指调度程序运行时会发生什么,而缺点是指调度程序何时运行

于 2020-09-10T09:14:42.043 回答