Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

which core initializes first when a system boots?

Tags:

cpu

bootloader

I want to know which core of a multicore processor initializes first when the cpu boots ? ( i mean at the bootloader level ) is the first core ? or random core ?

like image 842
Knight Rider Avatar asked Jan 10 '13 15:01

Knight Rider


3 Answers

You want to read the local apic, which you can read about in "volume 2a":

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

Each processor has a corresponding local apic, in each local apic there is an apic ID register, which gets assigned a unique value at system init time.

The initial core that comes online is called the bootstrap processor (BSP), and can indeed be any physical core on the die. More info is in "volume 3a", where they talk about the bootstrap processor selection process.

Here is an excerpt from vol3a:

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 structures, and starts and initializes the APs. When the BSP and APs are initialized, the BSP then begins executing the operating-system initialization code.

like image 71
Chris Desjardins Avatar answered Nov 24 '22 09:11

Chris Desjardins


This depends on the architecture of the processor itself. There is not really a standard for something like this. For instance the PS3 core has 9 cores one which schedules tasks to the other 8. In this case it is fair to think about it in terms of that one core processing instructions before the other 8. As far as other processors are concerned this is a more difficult thing to discern. It would be sensible to assume that the bootloader sends its instructions to the set of cores at which point whatever logic gates assign instructions to cores do so in whatever manner they always to. In most cases I know of there is not really a difference between task scheduling at boot and at any other time. The most basic task scheduling hardware will just select the first available core which is usually whichever core is considered the "first" one by the machine. But like I keep saying different machines do it differently so I would suggest finding out what core you are using and checking what that one does. Good Luck.

like image 36
usumoio Avatar answered Nov 24 '22 09:11

usumoio


Each processor has its own local APIC with related local APIC ID, this one may be read from local APIC register (the same one give different ID on each processor)

like image 27
Alessio Avatar answered Nov 24 '22 08:11

Alessio