x86架构下Intel CPU里的Multi Processor的学习记录

本文探讨了X86架构下Intel CPU的Multi Processor设计,包括多核CPU、超线程技术(Hyper-threading)的介绍。在多核环境中,每个核心可能拥有1-2个logical-processor。在BIOS POST阶段,存在BSP(Boot Strap Processor)与AP(Application Processor)的角色区分,AP大部分时间处于halt状态,等待被BSP唤醒执行初始化代码。文章还提出了关于AP状态和CPU散热的思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      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的伪代码:                             

GeneralInitCode();
if(ApFunction) ApFunction();
SetState(APIC_ID);
_asm_{
      hlt;
     } 


      在这种代码中,每次AP执行代码之后都会重新进入halt状态,需要BSP重新发送INIT-SIPI-SIPI才能把AP唤醒。

      另外一种则是

GeneralInitCode();
CheckAp:
if(ApFunction) ApFunction();
SetState(APIC_ID);
goto CheckAp
      这种代码中,BSP只需要把function pointer放到ApFunction里去,AP就会执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值