在多核x86处理器中设置亲和性

Bub*_*baT 3 assembly multicore smp affinity

(我问,因为它是在我学习操作系统的严重SMP和多核之前.我喜欢对代码的执行方式有所了解.)

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

Rut*_*ing 5

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

操作系统将执行的操作:操作系统将具有调度程序,该调度程序实际上是一个程序,用于确定在哪个处理器上运行哪个进程.通过将亲缘关系设置为用户,可以配置此调度程序.

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

那么这是如何工作的呢?在引导期间,只有一个CPU正在运行.如果您已经为操作系统做好准备,那么您将"启动"开始执行代码的其他CPU,并且可能会运行一种调度程序.

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