『阿男的Linux内核世界』*多核CPU是如何启动的?*
大家有没有想过,多核CPU是如何启动的?BIOS代码由哪个核心执行?此外,Kernel从BIOS接管过来CPU的使用权以后,Kernel运行在哪个核心里面?
这些问题大家都可以想一下,阿男给大家慢慢解答。
首先是阿男一直推荐大家看的Intel的CPU的架构手册Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals^1。
在这篇文档里面,大家可以从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.
简单翻译,就是说Intel的多核CPU通过Multiprocessor Specification这个协议就是boot protocol(启动协议),简称MP,多核CPU遵守这个协议来进行启动。
具体的讲解都在文档里面了,大家可以自己看。阿男在这篇文章里只带大家看这里:
可以看到,Intel架构下,CPU的不同核心被分为两类,一个类做BSP,也就是bootstrap processor,另一类叫做AP,也就是application processors。
其中BSP就是那个执行BIOS代码的核,其它的核就都是AP了。那么BSP怎么选出来呢?文档里也有说明:
During boot-up, one of the logical processors is selected as the BSP and the remainder of the logical processors are designated as APs.
也就是说,在启动的时候,Intel架构遵守MP协议,会选出一个核心成为BSP,其它的核心就是AP了。这个BSP负责执行BIOS,以及后续Kernel的启动部分。
关于MP协议的具体细节,大家看文档就可以了,写的非常清楚。这里阿男在呼吁一下,建议大家要长期读Combined Volume Set of Intel® 64 and IA-32 Architectures Software Developer’s Manuals这个文档,虽然有4684页,但绝对有意思。