源码基于:Linux5.4
约定:
经过前面博文的剖析,完成了 bootmem 初始化的重要步骤。本文将继续 start_kernel(),剖析另外一个重要的机制:percpu 机制。
随着 SMP(对称多处理器架构)的发展,在享受处理器更快的执行效率的同时,也为数据同步带来了更大的挑战,因为在 SMP 架构中,程序确实是在并发执行,从单 CPU 只需要考虑调度风险,到SMP 中还需要考虑多 CPU 中同时执行的风险,而且在单 CPU 下乱序执行也会在 SMP 架构中带来,从而也衍生了一些新的同步机制,例如:内存屏障、percpu 机制等等。
在 UMA 架构中,每个 CPU 拥有自己的高速缓存,L1 cache 是CPU 独占的,每个CPU 都有一份,它的速度自然是最快的,而 L2 cache 是多个 CPU 共享的高速缓存。当 CPU 载入一