在x86实模式下,如果需要在多处理器系统中的不同处理器上运行代码,需要使用哪些指令?
(我正在以汇编语言编写一些预启动代码,需要设置某些CPU寄存器,并在实际操作系统引导之前在系统中的每个CPU上执行此操作。)
在x86实模式下,如果需要在多处理器系统中的不同处理器上运行代码,需要使用哪些指令?
(我正在以汇编语言编写一些预启动代码,需要设置某些CPU寄存器,并在实际操作系统引导之前在系统中的每个CPU上执行此操作。)
你有一个独立的(你说是“pre-boot”)程序,比如引导加载程序,在实模式下运行吗?这是在普通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
有关更多信息,请参见Intel多处理器规范。