在x86上的实模式下,需要使用哪些指令来在多处理器系统中的不同处理器上运行代码?在不同的处理器上运行代码(x86汇编)
(我正在写汇编一些预引导代码,需要设置一定的CPU寄存器,并为此在系统中每个CPU上,实际的操作系统启动前)。
在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测试程序。请参阅Intel Multiprocessor Specification。
谢谢,那只是我需要的信息!这应该是一个挑战... – 2009-10-26 00:43:29
你甚至可以在实模式下进行MP吗? – Draemon 2009-10-26 12:07:49
无理由不。 MP没有任何特定模式。 – 2009-10-26 19:20:29
看起来像一个愚蠢的http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like – 2009-10-26 19:59:29