在不同的处理器上运行代码(x86程序集)
在x86上的实模式下,需要使用哪些指令在多处理器系统中的不同处理器上运行代码?
(我正在编写一些需要设置某些CPU寄存器的汇编程序中的预启动代码,并在实际操作系统启动之前在系统中的每个CPU上执行此操作。)
所以你有一个独立的(你说的“预启动”)程序,就像一个启动加载程序,在真实模式下运行? 这是PeeCee与平时的BIOS?
在这种情况下,你只有一个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测试程序。
有关更多信息,请参阅英特尔多处理器规范。
链接地址: http://www.djcxy.com/p/82359.html