第二章 ARM架构基础:从一家小公司到芯片帝国
说实话,我刚入行那会儿,ARM还只是英国剑桥一家不起眼的小公司。谁能想到,今天全球95%以上的智能手机、几乎所有的物联网设备,甚至苹果的M系列芯片,都离不开ARM架构。今天我就带大家好好捋一捋ARM的来龙去脉。
2.1 ARM公司简介:不造芯片的芯片巨头
ARM的全称是Advanced RISC Machines,成立于1990年。它有个很有意思的特点——自己不生产芯片。ARM只做一件事:设计IP核,然后授权给其他公司。
我当年第一次接触ARM时,也觉得奇怪。一家不造芯片的公司,凭什么能统治半导体行业?后来我明白了,这恰恰是ARM最高明的地方。
ARM的商业模式核心:
- IP授权:把处理器设计蓝图卖给其他公司
- 架构授权:允许客户基于ARM指令集自研内核
- 版税收入:每卖出一颗芯片,ARM抽成1-2%
举个例子,苹果的A系列芯片、高通的骁龙系列、华为的麒麟系列,底层都是ARM架构。但每家都做了自己的优化。这就是ARM生态的魅力——你可以在ARM的框架下,做出自己的特色。
2.2 ARM处理器架构演进:从ARMv1到ARMv9
ARM架构的演进,说白了就是一部「性能与功耗的博弈史」。我把它分成几个关键阶段:
| 架构版本 | 发布时间 | 位宽 | 核心特点 |
|---|---|---|---|
| ARMv1 | 1985 | 32位 | 最早的ARM处理器,26位地址总线 |
| ARMv4 | 1996 | 32位 | 引入Thumb指令集,ARM7TDMI大获成功 |
| ARMv7 | 2005 | 32位 | 引入NEON、TrustZone,Cortex-A/R/M三线并行 |
| ARMv8 | 2011 | 64/32位 | 引入AArch64,支持64位计算 |
| ARMv9 | 2021 | 64位 | 强化安全、AI、可伸缩矢量扩展 |
这里有个小故事。我记得2011年ARMv8刚发布时,很多工程师都在抱怨:「32位够用了,搞什么64位?」结果后来移动设备内存突破4GB,大家才意识到ARM的远见。嗯,做架构设计,有时候就是要看得远一点。
2.3 ARMv7 vs ARMv8 vs ARMv9:核心差异对比
这三个版本,我挑几个关键点给大家讲透:
2.3.1 指令集的变化
ARMv7:纯32位,A32指令集。每条指令32位,简单粗暴。
ARMv8:引入AArch64,同时兼容AArch32。这意味着你可以跑32位的老程序,也能享受64位的大地址空间。
ARMv9:全面转向64位,32位兼容模式被弱化。我建议新项目直接上64位,别走回头路。
避坑指南:我曾经在一个项目中,为了兼容老代码保留了32位模式。结果发现,AArch32和AArch64的上下文切换开销很大,性能损失了约15%。后来我学乖了——新设计直接上64位,别犹豫。
2.3.2 安全机制的升级
ARMv7引入了TrustZone,把系统分成「安全世界」和「非安全世界」。你想想看,指纹支付、人脸识别这些敏感操作,就是在安全世界里跑的。
ARMv8在TrustZone基础上,增加了更多的安全扩展。比如指针认证,能有效防止ROP攻击。
ARMv9则把安全提到了新高度——机密计算架构。说白了,就是你的数据在内存里是加密的,连操作系统都看不到。这对云计算、金融场景特别重要。
2.3.3 矢量计算能力
ARMv7的NEON是128位SIMD,做图像处理够用。
ARMv8的NEON升级到128位,但增加了双精度浮点支持。
ARMv9引入了可伸缩矢量扩展,长度可以从128位扩展到2048位。这对AI推理、科学计算是质的飞跃。
2.4 ARM Cortex系列处理器分类
ARM Cortex系列,我习惯把它分成三条线:
Cortex-A系列:Application,应用处理器
- 面向高性能场景:手机、平板、服务器
- 代表型号:Cortex-A76、Cortex-X2
- 特点:乱序执行、多级缓存、支持MMU
Cortex-R系列:Real-time,实时处理器
- 面向实时控制场景:汽车、工业、通信
- 代表型号:Cortex-R52、Cortex-R82
- 特点:低延迟中断、硬件虚拟化、支持TCM
Cortex-M系列:Microcontroller,微控制器
- 面向嵌入式场景:IoT、传感器、电机控制
- 代表型号:Cortex-M4、Cortex-M7、Cortex-M33
- 特点:极低功耗、单周期乘法、嵌套中断
我举个例子帮你理解。你手里的手机,主芯片是Cortex-A系列。车里的ABS刹车系统,用的是Cortex-R系列。你家的智能灯泡,里面是Cortex-M系列。三条线各司其职,互不干扰。
注意:选型时千万别搞混。我曾经见过一个团队,把Cortex-M7用在需要跑Linux的项目上。结果发现M7没有MMU,跑不了Linux。最后只能推倒重来,白白浪费了三个月。记住:跑操作系统,必须用A系列。
2.5 ARM架构核心逻辑图
下面这张图,是我自己总结的ARM架构演进与分类的核心逻辑。你仔细看看,就能明白ARM为什么能通吃从传感器到服务器的所有场景。
这张图其实揭示了一个道理:ARM的成功,不是靠某一款处理器,而是靠一套完整的生态体系。从低功耗的M系列,到高性能的A系列,再到实时可靠的R系列,ARM用统一的指令集架构,覆盖了几乎所有的计算场景。
我个人觉得,ARM最厉害的地方在于——它让「一次编写,到处运行」在嵌入式领域变成了现实。你写的C代码,可以在M0上跑,也可以在A76上跑,只是性能不同而已。这种兼容性,是x86做不到的。
学习建议:如果你是初学者,我建议先从Cortex-M系列入手。买个STM32开发板,跑几个裸机程序,把ARM汇编、中断、外设这些基础打牢。然后再去啃Cortex-A,学习MMU、缓存一致性、多核调度这些高级内容。别一上来就搞A系列,容易劝退。
好了,ARM架构的基础就讲到这里。记住:ARM不是一家芯片公司,而是一个计算生态的构建者。理解了这一点,你才能真正用好ARM。
公众号:蓝海资料掘金营,微信deep3321