2009-10-25 68 views
10

在x86上的实模式下,需要使用哪些指令来在多处理器系统中的不同处理器上运行代码?在不同的处理器上运行代码(x86汇编)

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

+1

你甚至可以在实模式下进行MP吗? – Draemon 2009-10-26 12:07:49

+0

无理由不。 MP没有任何特定模式。 – 2009-10-26 19:20:29

+1

看起来像一个愚蠢的http://stackoverflow.com/questions/980999/what-does-multicore-assembly-language-look-like – 2009-10-26 19:59:29

回答

9

所以,你有一个独立(你说的“预启动”)程序,像一个启动加载程序,在真实模式下运行?这是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

+0

谢谢,那只是我需要的信息!这应该是一个挑战... – 2009-10-26 00:43:29