background image

8-18 Vol. 3A

MULTIPLE-PROCESSOR MANAGEMENT

The Pentium processor and more recent processor families use branch-prediction techniques to improve 
performance by prefetching the destination of a branch instruction before the branch instruction is executed. 
Consequently, instruction execution is not deterministically serialized when a branch instruction is executed.

8.4 

MULTIPLE-PROCESSOR (MP) INITIALIZATION

The IA-32 architecture (beginning with the P6 family processors) defines a multiple-processor (MP) initialization 
protocol called the Multiprocessor Specification Version 1.4. This specification defines the boot protocol to be used 
by IA-32 processors in multiple-processor systems. (Here, multiple processors is defined as two or more proces-
sors.) The MP initialization protocol has the following important features:

It supports controlled booting of multiple processors without requiring dedicated system hardware.

It allows hardware to initiate the booting of a system without the need for a dedicated signal or a predefined 
boot processor.

It allows all IA-32 processors to be booted in the same manner, including those supporting Intel Hyper-
Threading Technology.

The MP initialization protocol also applies to MP systems using Intel 64 processors.

The mechanism for carrying out the MP initialization protocol differs depending on the Intel processor generations. 
The following bullets summarizes the evolution of the changes:

For P6 family or older processors supporting MP operations— The selection of the BSP and APs (see 
Section 8.4.1, “BSP and AP Processors”) is handled through arbitration on the APIC bus, using BIPI and FIPI 
messages. These processor generations have CPUID signatures of (family=06H, extended_model=0, 
model<=0DH), or family <06H. See Section 8.11.1, “Overview of the MP Initialization Process For P6 Family 
Processors” for a 
complete discussion of MP initialization for P6 family processors.

Early generations of IA processors with family 0FH — The selection of the BSP and APs (see Section 
8.4.1, “BSP and AP Processors”) is
 handled through arbitration on the system bus, using BIPI and FIPI 
messages (see Section 8.4.3, “MP Initialization Protocol Algorithm for MP Systems”). These processor 
generations have CPUID signatures of family=0FH, model=0H, stepping<=09H.

Later generations of IA processors with family 0FH, and IA processors with system bus — The 
selection of the BSP and APs is handled through a special system bus cycle, without using BIPI and FIPI 
message arbitration (see Section 8.4.3, “MP Initialization Protocol Algorithm for MP Systems”). These 
processor generations have CPUID signatures of family=0FH with (model=0H, stepping>=0AH) or (model >0, 
all steppings); or family=06H, extended_model=0, model>=0EH.

All other modern IA processor generations supporting MP operations— The selection of the BSP and 
APs in the system is handled by platform-specific arrangement of the combination of hardware, BIOS, and/or 
configuration input options. The basis of the selection mechanism is similar to those of the Later generations of 
family 0FH and other Intel processor using system bus (see Section 8.4.3, “MP Initialization Protocol Algorithm 
for MP Systems”). Thes
e processor generations have CPUID signatures of family=06H, extended_model>0.

The family, model, and stepping ID for a processor is given in the EAX register when the CPUID instruction is 
executed with a value of 1 in the EAX register.

8.4.1 

BSP and AP Processors

The MP initialization protocol defines two classes of processors: the bootstrap processor (BSP) and the application 
processors (APs). Following a power-up or RESET of an MP system, system hardware dynamically selects one of the 
processors on the system bus as the BSP. The remaining processors are designated as APs.
As part of the BSP selection mechanism, the BSP flag is set in the IA32_APIC_BASE MSR (see Figure 10-5) of the 
BSP, indicating that it is the BSP. This flag is cleared for all other processors. 
The BSP executes the BIOS’s boot-strap code to configure the APIC environment, sets up system-wide data struc-
tures, and starts and initializes the APs. When the BSP and APs are initialized, the BSP then begins executing the 
operating-system initialization code.