我在网上找到此信息时遇到了一些麻烦,在Uni星期一,我可以使用图书馆,但是很快就会越好。当系统具有多功能处理器时,每个处理器是否从就绪队列中的第一个进程中取出一个线程,还是从第一个过程和第二个过程中取出一个线程?另外,要检查,将通过操作系统同时发送线程并从多方面发送并获取线程吗?如果有人可以将我指向正确的方向资源,那就太好了!

有帮助吗?

解决方案

关键是要欣赏机器的架构实际上是什么。

“核心”是具有与系统内存连接的缓存的CPU。大多数机器体系结构都是对称的多处理,这意味着系统内核同样可以访问系统内存。

大多数操作系统在每个核心上运行一个调度程序线程(Linux确实)。调度程序具有其负责的线程列表,它将以其控制的核心能力运行它们的能力。它用来选择运行哪个线程的规则将是循环的罗宾,或基于优先级等。即所有正常的调度规则。到目前为止,就像调度程序一样,您会在单个核心计算机中找到。在某种程度上,每个调度程序都独立于所有其他调度程序。

但是,这是一个SMP环境,这意味着哪个核心运行哪个线程并不重要。这是因为所有内核都可以看到所有内存,并且整个系统中所有线程的所有代码和数据都存储在该内存中。

因此,调度人员之间的交谈以互相帮助。无法运行的线程太多的调度程序可以将线程传递给使用核心正在使用的调度程序。它们在机器中正在负载平衡。 “传递线程”是指复制描述线程(线程ID,哪个数据,哪个代码)的数据结构。

就是这样。由于内核之间的唯一通信是通过内存,它都依赖于有效的相互排除信号量系统,这是硬件必须允许的。

困难

因此,我绘制了一幅非常简单的图片,但实际上,记忆并不是完全对称的。如今,SMP是在大型传输和QPI之上合成的。

在电子级别确实可以平等地访问系统内存的日子已经一去不复返了。在其架构AMD的最低层上,AMD纯粹是NUMA,而英特尔几乎是Numa。

如今,一个核心必须通过高速串行链接(HyperTransport或QPI)向其他内核发送请求,要求他们发送所附记忆中的数据。英特尔和AMD在一般情况下看起来像SMP一样令人信服地表现出色,但这并不完美。附加到其他核心的内存中的数据需要更长的时间才能持有。这是疯狂的复杂 - 核心现在是网络上的节点 - 但这是他们为了提高性能而要做的。

因此,调度程序在选择哪个核心应运行哪个线程时考虑到这一点。他们将尝试将线程放在最接近的内存的核心上,该内存持有线程可以访问的数据。

未来,再次

如果可以将世界软件生态系统断奶SMP断奶,那么硬件的家伙将能够节省硅上的大量空间,并且我们将拥有更快的效率系统。这是以前完成的;变速器是严格的NUMA架构的良好尝试。

NUMA和交流顺序流程今天将使编写非常容易缩放并比当今SMP共享内存庞然大物更有效地运行的多螺纹软件变得更加容易。

SMP实际上是一种廉价且令人讨厌的方式,可以将多个核心汇总在一起,并且在软件开发困难和效率低下的硬件方面的成本非常高。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top