Assembly 在多核x86处理器中设置关联

Assembly 在多核x86处理器中设置关联,assembly,multicore,smp,affinity,Assembly,Multicore,Smp,Affinity,(我问这个问题是因为我在认真研究SMP和多核操作系统之前。我想了解一下代码是如何执行的。) 如果我有一个多核x86 CPU直接引导到我的程序中。有人能推荐一个网站来描述我必须使用哪些汇编程序命令来控制关联性吗?关联性不是由CPU状态决定的,因此不能由程序集(单独)修改。您需要操作系统的参与。每个操作系统都有一个特定的调用来实现这一点 操作系统将做什么:操作系统将有一个调度器,它实际上是一个程序,用于确定在哪个处理器上运行哪个进程。通过将关联设置为用户,可以配置此计划程序 如果你没有操作系统(我想

(我问这个问题是因为我在认真研究SMP和多核操作系统之前。我想了解一下代码是如何执行的。)


如果我有一个多核x86 CPU直接引导到我的程序中。有人能推荐一个网站来描述我必须使用哪些汇编程序命令来控制关联性吗?

关联性不是由CPU状态决定的,因此不能由程序集(单独)修改。您需要操作系统的参与。每个操作系统都有一个特定的调用来实现这一点

操作系统将做什么:操作系统将有一个调度器,它实际上是一个程序,用于确定在哪个处理器上运行哪个进程。通过将关联设置为用户,可以配置此计划程序

如果你没有操作系统(我想这个问题似乎暗示了这一点),那么你自己编写调度器,你将拥有自己的配置控制权,你可能会从一个全局运行队列开始,对于每个处理器(核心),观察这个运行队列,并从中检索要运行的进程

那么这是如何工作的呢?在引导期间,只有一个CPU在运行。如果你的操作系统已经准备好了,你就“引导”另一个CPU开始执行你的代码,它可能会运行一种调度器


有关示例实现,请参见Linux 2.6.29 arch/x86/kernel/smpboot.c function do_boot_cpu(),它使用APIC以多种方式使cpu联机。

下面是一个关于QNX如何做到这一点的非常好的解释。它没有提供所需的ASM(无论如何都取决于平台),但它可能有助于实现以下概念:

以及来自同一网站的一系列文章


链接已断开