3

(我之所以这么问,是因为我是在严肃的 SMP 和多核之前学习操作系统的。我喜欢对代码的执行方式有一些了解。)

如果我有一个多核 x86 CPU 直接启动到我的程序中。有人可以推荐一个描述我必须控制亲和力的汇编器命令的网站吗?

4

2 回答 2

5

亲和力不是由 CPU 状态决定的,因此不能通过程序集(单独)修改。您需要操作系统的参与。每个操作系统都会有一个特定的调用来执行此操作。

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

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

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

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

于 2009-06-15T06:59:39.710 回答
0

这是 QNX 如何做到这一点的一个很好的解释。它没有提供所需的 ASM(无论如何这将取决于平台),但它可能有助于概念:

http://www.embedded.com/columns/technicalinsights/183702309?_requestid=408789

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

http://www.embedded.com/products/integratedcircuits/173400008?_requestid=409058

于 2009-06-15T07:23:55.660 回答