X86架构下的产品包括Notebook, Desktop,Server,Workstation等。Notebook和Desktop里一般都只有一颗CPU,Server和Workstation则会有多颗。而随着生活水平的提高,对于CPU速度的要求越来越高,但由于工艺的原因,速度提升到一定阶段之后就无法再提升,此时,工业界想出了另外一个办法:集成多个核。这就是多核CPU的来历。这里的核称作core。 除了多核CPU,Intel还提出了一种技术叫Hyper-threading,也就是超线程技术。当超线程技术使能之后,一个core会虚拟出两个logical-processor。 总结一下,平台可能有1-N个CPU,每个CPU可能有1-N个核,每个核可能有1-2个logical-processor。 我们可以把操作系统中的线程(thread)对应到这里的logical-processor,实际上操作系统中的thread的概念要更会复杂,但这里只考虑thread由一个logical-processor来执行这种一一对应的关系而已。 在OS中是多线程的执行环境,但在BIOS POST阶段是单线程执行,那么如何处理这多个logical-processor的关系呢? BSP - boot strap processor; AP - application processor; nBSP - native BSP,适用于多个CPU的环境下,指最终选作执行BIOS代码的logical-processor。 AP在POST阶段处于何种状态:在被选作AP之后(竞争BSP失败),AP的状态是变化的,wait-for-SIPI -> 被BSP唤醒,执行AP init code -> halt。当AP处于halt状态时,只能接受INIT, SMI, NMI, snoop, 以及STPCLK#。 在BIOS POST阶段,AP绝大部分时间都处于halt状态,这也是为什么用手摸散热片的时候,只有CPU0的散热片很烫,而其余的CPU上面的散热片只是一点点热的原因。如果让AP一直处于一个loop中,其余CPU的散热片是否也会发烫还有待验证!(TODOTODOTODO) AP的伪代码:
|
|