超线程,SIPI和寄存器

时间:2016-08-22 09:32:25

标签: x86 multicore hyperthreading

我有兴趣了解有关x86架构的更多信息,以及它如何实现多处理。

假设使用cpuid指令可以识别处理器有多少逻辑内核,并使用一些SIPI(启动处理器间中断),告诉内核A开始从某个地址获取和执行代码,这基本上就是你如何开始多处理(当然,只要代码执行是为这样的架构设计的!)

我的问题如下:

  1. SIPI是否会触发逻辑核心?如果不是如何触发逻辑核心来执行代码
  2. 逻辑核心是否有自己的寄存器集,或者它只是双指令指针,处理器有一些聪明的物理方法来切换核心之间的上下文并从两个IP执行(假设每个物理的逻辑核心数量是两个) )
  3. 假设每个核心都需要它自己的内存屏蔽,因此得到自己的MMU,逻辑核心应该有自己的MMU吗?如果不是,操作系统在考虑物理上的逻辑核心数量的同时管理每个核心的内存?
  4. 我之前尝试过找到这方面的文档,但发现自己陷入了数千页的英特尔文档中,我只是想知道是否有人掌握了这些知识并且可以解释我的问题并解释实际发生了什么。我

1 个答案:

答案 0 :(得分:1)

从程序员的角度来看(包括固件和操作系统),一个逻辑的超线程核心核心与真正的物理核心核心一样好 1

x86比在这里给出合理长度的答案要复杂得多。但实质上,超线程核心复制了使其看起来好像存在另一个完整核心(基本上是寄存器)所需的最小状态量。它是实际执行单元(指令解码器,ALU等)。在本地核心之间共享。核心跟踪每个单元有效工作的逻辑核心。

逻辑CPU也将拥有自己的CR3寄存器,即页表层次结构的基础。但是,AFAIK TLB,L1缓存和MMU的所有其他组件(显然不是x86上的独特实体)在逻辑核心之间共享。页面错误仍将传递到相应的逻辑CPU。

有关您可能想要的更多信息,您应该查看Hennessy和Patterson的书,"计算机架构 - 定量方法"。

1 - 这不完全正确。考虑一个操作系统试图在4核超线程CPU上运行两个任务。将这两个任务安排在同一物理核心的逻辑核心上,让其他三个物理核心进入睡眠状态是愚蠢的,因为他们知道他们不会实际同时执行。