首页 > 解决方案 > 调度用户级线程在可用的 LWP 上运行究竟意味着什么?

问题描述

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

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

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

标签: multithreadingoperating-systemscheduling

解决方案


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

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

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


推荐阅读