对 CPU 架构概念学习
CPU 架构是什么?有哪些?有什么不一样?
CPU架构定义了一种“指令集”(Instruction Set Architecture, 简称 ISA)
不同架构的应用,例如:
- x86 架构 -> PC 和服务器最常见的语言(Intel、AMD)
- ARM 架构 -> 手机、IoT、路由器最常见的语言(高通、苹果M系列)
- MIPS 架构 -> 曾经在路由器、嵌入式设备里风靡一时的老语言
一个CPU架构决定了:它能运行什么系统(比如 Linux 是不是得重编译);它能用什么样的编译器;它的功耗、性能、成本是偏向哪一边的。
用一行 C 语言代码类比:a = b + c;
| 架构 | 示例机器语言指令 |
|---|---|
| x86 | MOV EAX, [b] ADD EAX, [c] MOV [a], EAX |
| ARM | LDR R0, =b LDR R1, =c ADD R2, R0, R1 STR R2, =a |
| MIPS | LW $t0, b LW $t1, c ADD $t2, $t0, $t1 SW $t2, a |
这三种架构,干的是同样的事情:把b和c加起来放进a,但机器指令的形式完全不同!
原理的不同
| 原理维度 | x86 | ARM | MIPS | | —————- | ———————- | ————————– | —————— | | 指令集类型 | CISC(复杂指令集) | RISC(精简指令集) | RISC(精简指令集) | | 寄存器数量 | 少(8~16个) | 多(31个) | 多(32个) | | 指令长度 | 可变长度(1~15字节) | 固定长度(一般4字节) | 固定长度(4字节) | | 是否对称统一 | 不是:有特殊功能寄存器 | 是:大多数寄存器都可以通用 | 是 | | 内存操作 | 可以直接对内存加法 | 必须先加载到寄存器再操作 | 同上 |
什么是 CISC 和 RISC?
这是最根本的区别之一:
CISC(复杂指令集):像 x86 —— 一条指令可以做很多事,比如从内存里取值、计算、再写回去,适合高性能。 RISC(精简指令集):像 ARM 和 MIPS —— 每条指令都很简单、执行时间固定,所有操作都通过寄存器来完成。适合节能、高效率芯片设计。
寄存器(Register)
寄存器是CPU内部的一组极高速、超小容量的存储单元,通常用于:
- 暂存即将参与计算或刚刚计算完成的数据;
- 控制程序执行的关键信息(如程序计数器、栈指针等);
- 协助指令执行(如操作数地址、结果存放)。
不同架构区别:
- x86:寄存器较少,早期有固定用途,如
EAX是累加器。- ARM/MIPS:提供更多通用寄存器,指令能灵活使用任意寄存器作为输入/输出。
指令长度(Instruction Length)
在处理器(CPU)中,指令(Instruction)*是一条*二进制编码的命令,告诉CPU要执行什么操作,例如加法、跳转、内存读取等。从本质上说,一条指令 = 操作码(opcode)+ 操作数(operand)信息。
指令在内存中以字节为单位编码。指令长度决定CPU每次解码多少字节。指令长度 ≈ 指令在内存中存储的机器码的字节数
- 固定长度指令:例如 ARM、MIPS 中每条指令都是 32 位(4 字节),CPU 解码逻辑简单,便于流水线并行。
- 可变长度指令:x86 中每条指令可从 1 到 15 字节不等,支持更复杂的指令格式和寻址方式,但解码器复杂。
内存访问模型(Load/Store Architecture)
这描述了处理器是否允许指令直接操作内存数据。
- Load/Store 架构(ARM, MIPS):
- 所有运算必须基于寄存器。
- 内存访问只能通过
LOAD或STORE指令实现。- 优点:简化指令集和硬件设计,利于流水线和并行执行。
- 非 Load/Store 架构(如 x86):
- 某些指令可以同时涉及内存和寄存器,例如
ADD EAX, [EBX]表示将内存中EBX指向的数据加到EAX。- 缺点:解码复杂,执行时间不一致,不利于指令流水线优化。
架构的历史
| 年代 | 架构 | 故事 |
|---|---|---|
| 1978 | x86 | Intel发明了x86,一开始是给个人电脑用的,后来变得越来越强大,几乎垄断了PC市场。 |
| 1985 | MIPS | MIPS是学术圈搞出来的“精简指令集”,性能高、结构简单,嵌入式领域非常喜欢它。 |
| 1991 | ARM | 英国ARM公司提出ARM架构,专门面向低功耗、低成本设备,现在是手机和IoT的霸主。 |
| 2000s后 | RISC-V | 一个新兴的开源架构,正在挑战ARM的地位,很多国家都很关注它,因为能自由使用。 |
所以,开发不同的架构是因为:
- 不同的需求(性能 vs 功耗 vs 成本)
- 不同的时代背景(商业策略、专利授权、产业链等)
- 技术发展不断进化(更小、更强、更省电)
不同架构的优缺点
| 架构 | 优点 | 缺点 | | ———- | —————————————– | ———————————— | | x86 | 性能强大、生态成熟(Windows、PC应用丰富) | 功耗高、芯片复杂、贵 | | ARM | 省电、省成本、适合移动设备和IoT | 需要授权费、编译要求高(要交叉编译) | | MIPS | 结构简单、适合嵌入式老设备 | 市场逐渐萎缩,工具链没落 | | RISC-V | 开源自由、可以自定义、有潜力 | 工具和生态还在建设中,不成熟 |
不同的架构对开发者和用户的影响
对开发者:
- 你写的软件(比如 C、Python)大部分可以“跨架构”,但编译时需要特别处理(交叉编译)。
- 调试、驱动适配要根据架构来,比如 ARM/MIPS 的寄存器就不一样。
- 你要选对工具链(比如用 arm-linux-gcc 编 ARM 设备)
对用户:
- 几乎没什么感觉,你只关心系统能不能跑,功能有没有用
- 但比如你把电脑程序搬到路由器,架构不对就直接跑不了