【问题标题】:What exactly does it mean to schedule user-level thread to run on an available LWP?调度用户级线程在可用的 LWP 上运行究竟意味着什么?
【发布时间】:2021-03-15 20:34:24
【问题描述】:

我想知道将线程安排在 LWP 上运行究竟意味着什么。我无法正确可视化进程计划在 CPU 上运行时发生的步骤顺序,因为在高级视图中解释了很多概念。以下是导致很多头疼的段落;它来自操作系统概念,第 10 版,作者是 Abraham Silberschatz。

用户级线程和内核级线程之间的一个区别在于它们如何 被预定。关于实现多对一的系统(第 4.3.1 节) 和多对多(第 4.3.3 节)模型,线程库调度用户 在可用 LWP 上运行的级别线程。该方案被称为过程- 争用范围 ( PCS ),因为 CPU 的竞争发生在 属于同一进程的线程。 (当我们说线程库将用户线程调度到可用的 LWP 上时,我们并不是说线程是 实际在 CPU 上运行,因为这进一步要求操作系统 将 LWP 的内核线程调度到物理 CPU 内核上。)

我无法完全理解 LWP 的必要性和重要性。

【问题讨论】:

    标签: multithreading operating-system scheduling


    【解决方案1】:

    就像进程是内存的容器一样,LWP(= 内核级线程)是纤程(= 用户级线程,本质上)的容器。

    内核的线程调度程序只查看内核级线程 (LWP),它会在 CPU 上和 CPU 上调度 LWP——也就是说,LWP 有一个时间片,它可以在 CPU 上运行。用户级线程库(= Fiber 调度程序)拥有该进程的 LWP,并决定哪些 Fiber 可以使用内核调度程序分配给这些 LWP 的时间片。

    当一个纤程决定让出 CPU,但 LWP 的时间片尚未结束时,纤程调度程序会调度另一个纤程在该 CPU 上的 LWP 内运行。但是当其他光纤正在运行时,LWP 的时间片可能会用完,内核的调度程序会将该 LWP 调度到 CPU 之外。纤程调度器对此事没有发言权——纤程调度器甚至无法运行,因为它在用户空间中,内核不知道它。

    【讨论】:

    • 嗯,这是有道理的。 LWP 是什么样的呢?它构成什么逻辑,即LWP的典型实现是什么?
    • 你问的是内核线程是如何实现的?如果尚未询问,您应该将其作为单独的问题发布。或者您是在问如何在 LWP 之上实现(用户级)线程库?
    • 是的,也许我会对此进行更多研究。我正确理解调度顺序的主要障碍是不了解 LWP 的内部工作原理。无论如何感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2021-08-01
    • 2012-10-23
    相关资源
    最近更新 更多