Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 计划用户级线程在可用LWP上运行到底意味着什么?_Multithreading_Operating System_Scheduling - Fatal编程技术网

Multithreading 计划用户级线程在可用LWP上运行到底意味着什么?

Multithreading 计划用户级线程在可用LWP上运行到底意味着什么?,multithreading,operating-system,scheduling,Multithreading,Operating System,Scheduling,我想知道一个线程计划在LWP上运行到底意味着什么。当一个进程被安排在CPU上运行时,我无法正确地可视化所发生的步骤序列,因为很多概念都是在高级视图中解释的。下面这段话引起了很多人的挠头;它来自亚伯拉罕·西尔伯沙茨的《操作系统概念》第10版 用户级线程和内核级线程之间的一个区别在于它们是如何工作的 都安排好了。关于实现多对一的系统(第4.3.1节) 和多对多(第4.3.3节)模型,线程库调度用户- 在可用LWP上运行的级别线程。这个方案被称为过程- 争用范围(PCS),因为CPU的竞争发生在 属于

我想知道一个线程计划在LWP上运行到底意味着什么。当一个进程被安排在CPU上运行时,我无法正确地可视化所发生的步骤序列,因为很多概念都是在高级视图中解释的。下面这段话引起了很多人的挠头;它来自亚伯拉罕·西尔伯沙茨的《操作系统概念》第10版

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


我无法完全理解LWP的需要和意义。

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

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


当一根光纤决定让CPU运行,但LWP的时间片尚未结束时,光纤调度器会安排另一根光纤在该CPU上的LWP内运行。但是,当另一根光纤正在运行时,LWP的时间片可能会用完,内核的调度程序将在CPU之外调度LWP。光纤调度器在这件事上没有发言权——光纤调度器甚至无法运行,因为它在用户空间中,内核没有意识到它。

Hmm,这是有道理的。LWP看起来像什么?它构成了什么逻辑,即LWP的典型实现是什么?您是否在问内核线程是如何实现的?你应该把它作为一个单独的问题发布,如果它还没有被问到的话。或者你在问(用户级)线程库是如何在LWP之上实现的?是的,也许我会对此进行更多的研究。正确理解调度顺序的主要障碍是不了解LWP的内部工作。无论如何,谢谢你的意见。