在不同的处理器中运行的代码(x86汇编)(Running code on different pro

2019-09-01 03:54发布

在x86上实模式,将需要什么指令被用来运行在不同的处理器的代码,在多处理器系统?

(我正在写汇编一些预引导代码,需要设置一定的CPU寄存器,并为此在系统中每个CPU上,实际的操作系统启动前)。

Answer 1:

所以,你有一个独立的(你说的“预引导”)节目,就像一个引导程序,运行在实模式? 这是与上常见的BIOS一PeeCee?

在这种情况下,你只有一个CPU运行。 为了加速旋转的其他CPU单元的操作系统通常会执行所谓这是这样的通用启动算法

BSP sends AP an INIT IPI
BSP DELAYs (10mSec)
If (APIC_VERSION is not an 82489DX) {
  BSP sends AP a STARTUP IPI
  BSP DELAYs (200μSEC)
  BSP sends AP a STARTUP IPI
  BSP DELAYs (200μSEC)
}
BSP verifies synchronization with executing AP

BSP是启动处理器。 的AP是应用处理器。 的IPI是一个处理器间中断。 为了做一个IPI,您需要启用APIC,中断控制器扩展到PC架构,它是不是在启动时启用。 这就是为什么代码是担心它正在运行什么样的ICU版本。 所有这一切是相当深的核心法宝。 你可以尝试寻找的Linux,NetBSD的,或为其他例如* BSD的源代码,但它不会是容易阅读。 如果你真的赢了,你可能会发现一个小的内核或独立的SMP测试程序在某处。

欲了解更多信息,请参见英特尔多处理器规范 。



文章来源: Running code on different processor (x86 assembly)