【发布时间】:2010-11-02 22:43:06
【问题描述】:
(我之所以问,是因为我在学习操作系统之前是在严肃的 SMP 和多核之前。我喜欢对代码的执行方式有一些了解。)
如果我有一个多核 x86 CPU 直接启动到我的程序中。有人可以推荐一个网站来描述我必须使用哪些汇编命令来控制亲和力吗?
【问题讨论】:
标签: assembly multicore smp affinity
(我之所以问,是因为我在学习操作系统之前是在严肃的 SMP 和多核之前。我喜欢对代码的执行方式有一些了解。)
如果我有一个多核 x86 CPU 直接启动到我的程序中。有人可以推荐一个网站来描述我必须使用哪些汇编命令来控制亲和力吗?
【问题讨论】:
标签: assembly multicore smp affinity
亲和力不是由 CPU 状态决定的,因此不能通过程序集(单独)修改。您需要操作系统的参与。每个操作系统都会有一个特定的调用来执行此操作。
操作系统将做什么:操作系统将有一个调度程序,它实际上是一个程序,它决定哪个进程在什么处理器上运行。通过将关联设置为用户,您可以配置此调度程序。
如果您没有操作系统(我认为这个问题似乎暗示了这一点),那么您将自己编写调度程序,并且您将拥有自己的配置控制权,并且您可能会从全局运行队列开始,并且对于每个处理器(核心),观察这个运行队列,并从中检索要运行的进程。
那么这是如何工作的呢?在引导期间,只有一个 CPU 在运行。如果你作为操作系统准备好了,你“启动”其他 CPU 开始执行你的代码,这可能会运行一种调度程序。
有关示例实现,请参阅 Linux 2.6.29 arch/x86/kernel/smpboot.c 函数 do_boot_cpu(),它使用 APIC 以多种方式使 CPU 联机。
【讨论】:
这里很好地解释了 QNX 是如何做到的。它并没有提供所需的 ASM(无论如何这将取决于平台),但它可能有助于概念:
http://www.embedded.com/columns/technicalinsights/183702309?_requestid=408789
以及来自同一站点的一系列文章
http://www.embedded.com/products/integratedcircuits/173400008?_requestid=409058
【讨论】: