1. SMP概述:什么是SMP、SMP与AMP的区别、RT-Thread SMP架构简介、为什么需要SMP
各位同学好,我是老周。今天咱们开始第一讲——SMP概述。说实话,这个主题我讲了不下二十次,但每次都有新感悟。多核处理器已经遍地都是了,你手里随便一个手机都是8核的,对吧?但我们的嵌入式系统,真的用好这些核了吗?
1.1 什么是SMP
SMP,全称Symmetric Multi-Processing,对称多处理。说白了,就是多个CPU核心共享同一套内存系统,跑同一个操作系统内核。每个核心地位平等,没有主从之分。
我打个比方:一个团队里,大家都是普通员工,没有谁是领导。来了任务,谁有空谁干。这就是SMP。
它的核心特征有三个:
- 共享内存:所有核心访问同一块物理内存
- 单一操作系统镜像:整个系统只跑一个OS内核
- 对称性:每个核心功能相同,没有特殊角色
嗯,这里要注意:共享内存不代表没有缓存一致性问题。恰恰相反,这是SMP实现中最头疼的地方。我早期做项目时,就因为这个缓存一致性问题,调试了整整两周才找到bug。
1.2 SMP与AMP的区别
很多初学者容易把SMP和AMP搞混。AMP是Asymmetric Multi-Processing,非对称多处理。它俩的区别,我用一个表格来说明:
| 对比项 | SMP | AMP |
|---|---|---|
| 操作系统 | 单一OS镜像 | 每个核心可运行不同OS |
| 内存管理 | 共享统一内存空间 | 独立内存空间或分区共享 |
| 任务调度 | 全局统一调度 | 各核心独立调度 |
| 核心关系 | 对称平等 | 主从或独立 |
| 通信方式 | 共享内存+原子操作 | 消息传递或共享内存 |
| 典型场景 | 通用计算、高负载 | 实时控制、安全隔离 |
我举个例子你就明白了。AMP就像你家里:爸爸管财务,妈妈管做饭,孩子管学习。各管一摊,互不干扰。SMP呢,就像公司里的开发团队:大家都是程序员,谁有空谁接需求,代码库共享。
我在项目中遇到过这样一个案例:一个工业控制器,要求同时跑Linux做UI和RTOS做实时控制。这种场景用AMP就很合适——一个核跑Linux,另一个核跑RT-Thread,各司其职。但如果你的目标是让四个核一起分担计算任务,那SMP才是正解。
1.3 RT-Thread SMP架构简介
RT-Thread的SMP支持,是从4.0版本开始引入的。我记得当时社区讨论得很激烈——有人觉得嵌入式系统不需要SMP,有人觉得这是趋势。现在看来,后者是对的。
RT-Thread SMP的核心架构,我画个简图给你描述一下:
+------------------+ +------------------+
| Core 0 | | Core 1 |
| +------------+ | | +------------+ |
| | 调度器实例 | | | | 调度器实例 | |
| +------------+ | | +------------+ |
| | 本地就绪队列| | | | 本地就绪队列| |
| +------------+ | | +------------+ |
+--------+---------+ +--------+---------+
| |
+----------+-------------+
|
+-------v-------+
| 共享资源 |
| - 全局就绪队列|
| - 内核对象 |
| - 内存堆 |
+---------------+
每个核心都有自己的调度器实例和本地就绪队列,但全局资源是共享的。这样做的好处是:减少了锁竞争,提高了缓存亲和性。
RT-Thread SMP的几个关键设计点:
- 自旋锁:保护共享资源的访问,防止多个核心同时修改
- 核间中断:一个核心可以给另一个核心发中断,用于任务迁移或同步
- 负载均衡:调度器会尽量让各核心的任务量差不多
- CPU亲和性:可以指定某个任务只在特定核心上运行
1.4 为什么需要SMP
你可能会问:单核跑得好好的,为什么要折腾SMP?
原因其实很简单:单核性能已经到天花板了。芯片厂商不再拼命提高单核频率,而是堆核心数。你买到的MCU,从双核到八核都有。如果操作系统不支持SMP,那多出来的核心就是摆设。
具体来说,SMP能带来这些好处:
- 提升吞吐量:多个核心并行处理,单位时间内完成的任务更多
- 降低延迟:高优先级任务可以抢占一个空闲核心,不用等其他任务让出CPU
- 更好的实时性:中断可以分散到不同核心处理,不会互相阻塞
- 功耗优化:轻负载时可以关闭部分核心,省电
我曾经做过一个网络网关项目,单核跑的时候,数据包处理占用了80%的CPU,剩下的20%要跑协议栈、管理界面,根本不够用。换成双核SMP后,一个核专门处理数据包,另一个核跑其他任务,系统瞬间就流畅了。
总结一下:SMP是嵌入式系统发展的必然趋势。RT-Thread的SMP实现,让我们能在多核处理器上充分发挥性能,同时保持实时操作系统的确定性。接下来的课程,我会带你一步步深入SMP的各个细节。
好,第一讲就到这里。下一讲我们聊聊SMP的启动流程——核心是怎么从复位到跑起来的。到时候见。