Linux kernel SMP系统的内核初始化

Linux kernel SMP系统的内核初始化,linux-kernel,boot,smp,Linux Kernel,Boot,Smp,当我们在SMP系统上启动内核时,CPU0启动内核代码,在主内存中,当CPUx处于WFI状态时,特定于CPU0的缓存和MMU被初始化。当cpu_up(x)从CPU0发送时,每个CPUx都会被初始化,并调用辅助_启动,在这里,特定于CPUx的主存、缓存和MMU也会被初始化 现在我知道了一个缓存,对于不同的核心,它可以是不同的,但是对于不同的核心,我们也有主内存和MMU吗?我从来没有听说过。这里到底发生了什么,主内存和MMU是如何在CPU之间划分的?在SMP系统(或像今天的x86 CPU这样的NUMA

当我们在SMP系统上启动内核时,CPU0启动内核代码,在主内存中,当CPUx处于WFI状态时,特定于CPU0的缓存和MMU被初始化。当cpu_up(x)从CPU0发送时,每个CPUx都会被初始化,并调用辅助_启动,在这里,特定于CPUx的主存、缓存和MMU也会被初始化

现在我知道了一个缓存,对于不同的核心,它可以是不同的,但是对于不同的核心,我们也有主内存和MMU吗?我从来没有听说过。这里到底发生了什么,主内存和MMU是如何在CPU之间划分的?

在SMP系统(或像今天的x86 CPU这样的NUMA系统)中,所有CPU都可以访问所有内存。因此,CPU0可以初始化所有内存

仍有空间进行特定于CPU的初始化:

  • 每个CPU可以为自己分配一个小内存池,以实现高效分配
  • 应在每个CPU上设置将硬件定向到分页表的控制寄存器
  • 可能需要设置或刷新TLB(硬件的地址转换缓存)