0.前言
我是菜鸡,很久没有发表文章了。老样子,今天推荐一本书《局外人》。别像主人公似的认为任何事情都没有意义。
目录
1. SMP和 AMP架构
1.1同构和异构
1.1.1 同构
1.1.2异构
1.2 SMP和AMP
1.2.1 对称多处理结构(SMP)
1.2.2 非对称多处理结构(AMP)
1.2.3边界多处理结构(BMP)
2. 总结
1. SMP和 AMP架构
1971 年, Intel 公司设计出一款 4 位的 4004 微处理器,它是第一款商用处理器,很快 Intel又推出了 8 位的 8008 处理器和 16 位的 8086 处理器,那时候的 4004 芯片、8008 芯片和 8086 芯片上都只有一个核(单核 CPU),随着需求的提高和功耗问题,慢慢的发现一个核不够用了, 于是就在一个芯片上建造两个或者多个核,进而转向多核处理器发展了。多核CPU 具有更高的 计算密度和更强的并行处理能力,多核化趋势改变了 IT 计算的面貌。
1.1同构和异构
从硬件的角度来分,多核处理器可以分为同构和异构,如下图所示。
同构(左图)和异构(右图)
1.1.1 同构
如果所有的 CPU 或核心的架构都一样,那么称为同构。例如,三星的 Exynos4210、飞思卡尔的 I.MX6D以及 TI 的OMAP4460,它们有两个架构相同的 Cortex-A9 内核,都属于同构。
1.1.2异构
如果所有CPU 或核心的架构有不一样的,那么就称为异构。例如,ST 推出的 STM32MP157,有两个 Cortex-A7 核和一个 Cortex-M4 核,Xilinx 的 ZYNQ7000 系列,有两个 Cortex-A9 核和 FPGA,TI 的达芬奇系列 TMS320DM8127 有一个 DSP C674x 核和一个Cortex-A8 核,这些处理器有不一样结构的核,所以都属于异构。
1.2 SMP和AMP
从软件的角度来分,多核处理器平台的操作系统体系有:SMP(Symmetric multiprocessing,对称多处理)结构、AMP(Asymmetric Multi-Processing,非对称多处理)结构和 BMP(b ound multi-processing,边界多处理)结构。
1.2.1 对称多处理结构(SMP)
SMP 结构是指只有一个操作系统(OS)实例运行在多个 CPU 上,一个 OS 同等的管理各个内核,为各个内核分配工作负载,系统中所有的内核平等地访问内存资源和外设资源。因为 异构处理器的各个内核结构不同,如果一个 OS 去管理不同的内核,这种情况实现起来比较复杂,所以一般运行在SMP 结构下的通常都是同构处理器。Windows、Linux 和Vxworks 等多种 操作系统都支持SMP 结构。
如下图所示,在 SMP 结构下,一个 OS 负责协调两个处理器,两个处理器共享内存,每个核心运行的应用程序(APP1 和APP2)的地址是相同的,通过MMU(Memory Mana gement Unit,内存管理单元)把它们映射到主存的不同位置上。
SMP 结构
1.2.2 非对称多处理结构(AMP)
AMP 结构是指每个内核运行自己的OS或同一OS的独立实例,或者说不运行OS,如运行裸机,每个内核有自己独立的内存空间,也可以和其它内核共享部分内存空间,每个核心相对 独立地运行不同的任务,但是有一个核心为主要核心,它负责控制其它核心以及整个系统的运 行,而其它核心负责“配合”主核心来完成特定的任务。这里,主核心我们就称为主处理器, 其它核心我们就称为协处理器或者远程处理器。这种结构最大的特点在于各个操作系统都有本 身独占的资源,其它资源由用户来指定多个系统共享或者专门分配给某一个系统来使用,系统 之间可以通过共享的内存来完成通信。
如下图是STM32MP157的资源简图,STM32MP157的Cortex-A7内核可以运行Linux操作系统,Cortex-M4 内核可以运行裸机或者其它 RTOS(实时操作系统),RTOS 如 OneOS、FreeRTOS、RT-Thread 和UCOS 等。Cortex-A7和Cortex-M4都有自己独占的资源,也有共享的 资源,这些资源由用户来分配,双核之间可通过共享内存来进行通信。
在AMP 系统设计中,一般需要解决两个问题:
(1)生命周期管理(内核启动顺序)问题;
(2)内核间通信问题。
配置 AMP 系统最好的方法是使用一个既满足控制又满足通信要求的统一框架,而OpenAMP 就是当前多核架构使用的最多的标准框架,许多芯片供应商都提供了 OpenAMP 的 实现。基于OpenAMP,生命周期管理是通过Remoteproc 来实现的,内核间通信是通过RPMsg 来管理的,关于两者的实现方式是我们后面介绍。
1.2.3边界多处理结构(BMP)
BMP 和SMP 类似,也是由一个操作系统同时管理所有CPU 内核,但是开发者可以指定某个任务在某个核中执行,这里就不再详细介绍BMP 结构了。
前面讲的AMP 和SMP 有着明显的差别,但两者之间也有着联系,例如,在一个芯片上,可能多个架构相同的内核被配置为一个 SMP 子系统,而此时另外的内核跑的是其它的操作系统, 从整体来看就是AMP 结构了,从逻辑上来分,这个SMP 子系统看起来像是一个单核,可以看 做包含在这个大的AMP 系统中。例如 STM32MP157 的两个Cortex-A7内核跑的是同一个 Linux 操作系统,这两个Cortex-A7 内核就可以看做是一个SMP 子系统,而Cortex-M4内核可以跑 裸机或者RTOS,那么 STM32MP157 这款芯片从整体上看就是AMP 结构了。
2. 总结
上面这些来自正点原子,最近在学习异核通信的,讲解的不错,容易理解。
深挖某一点要比广泛涉猎很浅的理解要有效果的多,因为你深挖中学会的还有整个贯通思维,这点对以后的成长作用是很大的。