欢迎,来自IP地址为:18.97.9.175 的朋友
CPU 架构众多,有 aarch64、x86_64 以及等 amd64 多种。现在,我们来一起了解下他们都是什么意思,以及其中的异同。
当我们在查看软件的支持列表或下载页面时是否对 ARM、AArch64、x86_64、i386 等术语感到困惑?这被称为 CPU 架构。本文将帮助您深入了解这个计算主题。
下表很好地总结了每个架构字符串的含义:
CPU 架构 | 主要描述 |
---|---|
x86_64/x86/amd64 | 指代 64-bit AMD/Intel CPU |
AArch64/arm64/ARMv8/ARMv9 | 指代 64-bit ARM CPU |
i386 | 指代 32-bit AMD/Intel CPU |
AArch32/arm/ARMv1 to ARMv7 | 指代 32-bit ARM CPU |
rv64gc/rv64g | 指代 64-bit RISC-V CPU |
ppc64le | 指代 64-bit PowerPC CPU |
从左到右阅读是优先使用该术语来描述 CPU 架构,而不是使用右侧的其他术语。
CPU 架构
一般来说,上面列出的术语都是 CPU 架构,也就是计算机工程师所说的 CPU ISA(指令集架构)。
CPU ISA 定义了 CPU 如何解释二进制的 1 和 0。
以下则是 CPU ISA 的各种超集:
- x86(AMD/Intel)
- ARM
- RISC-V
- PowerPC(IBM)
还有更多的 CPU ISA,如 MIPS、SPARC、DEC Alpha 等。但上面列出的是使用比较广泛(在某些方面)。
上面列出的 ISA 至少有两个子集,主要是基于内存总线的宽度。内存总线的宽度表示 CPU 和 RAM 之间一次可以传输多少位。内存总线有多种宽度,但最重要的两种宽度是 32 位宽内存总线和 64 位宽内存总线。
需要注意的是:CPU ISA 的 32 位对应产品要么是过去的遗留产品,为了传统支持而保留;要么仅在微控制器中使用。可以合理地假设任何新硬件都是 64 位的(尤其是面向消费者的硬件)。
x86 (AMD/Intel)
x86 CPU ISA 主要来自 Intel,因为 Intel 是第一个使用 8086 微处理器创建它的公司。 8086 微处理器具有 16 位宽的内存总线。 后来AMD也加入进来,追随Intel的脚步,直到AMD创建了自己的超集64位架构,超越了Intel。
x86架构的子集如下:
- i386:2007 年之前的 CPU广泛采用的架构,它是当前已知的 AMD/Intel x86 架构的 32 位”变体”
- x86_64/x86/amd64:根据查看项目的不同,以上三个术语可以互换使用。但它们都指的是 x86 AMD/Intel 架构的 64 位”变体”。通常情况下,”x86_64″比”x86″和”amd64″更为广泛使用(也是首选)。例如,FreeBSD 项目将 64 位 x86 架构称为 amd64,而 Linux 和 macOS 则将其称为 x86_64
需要知道的是:由于 AMD 在创建 64 位 ISA 方面击败了 Intel,因此 FreeBSD 等一些项目将 x86 的 64 位变体称为 amd64。但更广泛接受的术语仍然是x86_64。
CPU ISA 的 x86 字符串是一种特殊的字符串。我们可以看到,在从 32 位 x86 (i386) 到 64 位 x86 (x86_64) 的过渡过程中,CPU 供应商确保 CPU 可以运行 32 位和 64 位指令。因此,有时当我们读到 x86 时,它也可以意味着”它只能在 64 位计算机上运行,但如果该计算机可以运行 32 位指令,那么你可以在其上运行 32 位应用软件”。
x86 的这种模糊性(意味着也可以运行 32 位代码的 64 位处理器)主要是因为在 64 位处理器上运行的操作系统,允许该操作系统的用户运行 32 位 软件。Windows 通过称为”兼容模式”的功能来实现这一点。
我们回顾一下,AMD 和 Intel 设计的 CPU 有两种架构,它们是 32 位的 i386 和 64 位的 x86_84。
ARM
ARM 是一家创建自己的 CPU ISA 规范、设计和许可自己的 CPU 内核的公司,还允许其他公司使用 ARM CPU ISA 设计自己的 CPU 内核。
大家可能因为 SBC(单板计算机)(如 Raspberry Pi 系列 SBC)而听说过 ARM。并且 ARM 的CPU也广泛应用于手机中。最近,Apple 在其笔记本电脑和台式机产品中从 x86_64 处理器转向使用自己设计的 ARM 处理器。
与任何 CPU 架构一样,根据内存总线的宽度也有两个子集。
32 位和 64 位 ARM 架构的官方认可名称分别是 AArch32 和 AArch64。”AArch”字符串代表”Arm Architecture”。这些是 CPU 执行指令时可以处于的模式。
符合 ARM CPU ISA 的指令的实际规范被命名为 ARMvX,其中X指规范的代号。迄今为止,该规范已有 9 个主要版本。从ARMv1 到 ARMv7,它定义了32位 CPU 的 CPU 架构规范。而 ARMv8 和 ARMv9 是64位 ARM CPU 的规范。
特别说明:每个 ARM CPU 规范都有进一步的子规范。以 ARMv8 为例,会有有 ARMv8-R、ARMv8-A、ARMv8.1-A、ARMv8.2-A、ARMv8.3-A、ARMv8.4-A、ARMv8.5-A、ARMv8.6- A、ARMv8.7-A、ARMv8.8-A 和 ARMv8.9-A等多种子规范。其中:-A 代表”应用程序核心”,-R 代表”实时核心”。
这里有个疑问,就是经常会用到 arm64,即使 AArch64 是 64 位 ARM 架构的官方认可名称。 原因有两个:
- 在 ARM 决定 AArch64 之前,arm64 这个名字就流行起来了。(ARM 在一些官方文档中也将 64 位 ARM 架构称为 arm64)
- Linus Torvalds 不喜欢 AArch64 这个名字。因此,Linux 代码库很大程度上将 AArch64 称为 arm64。但当您执行 uname -m 时,它仍然会报告 aarch64
因此,对于 32 位 ARM CPU,应该使用字符串 AArch32,但有时它也可能是 arm 或 armv7。同样,对于 64 位 ARM CPU,应该使用字符串 AArch64,但有时它也可能是 arm64 或 ARMv8 或 ARMv9。
RISC-V
RISC-V 是 CPU ISA 的开源规范。这并不意味着 CPU 本身是开源的!它是一种标准,有点像以太网。以太网规范是开源的,但购买的电缆、路由器和交换机确实要花钱。RISC-V CPU 也是如此。
尽管如此,这并没有阻止人们创建在开源许可下免费提供的 RISC-V 内核(作为设计,而不是作为物理内核/SoC)。
就像其他 CPU 架构一样,RISC-V 也有 32 位和 64 位 CPU 架构。由于 RISC-V 非常新(就 CPU ISA 而言),消费者/客户端的所有主要 CPU 内核通常都是 64 位 CPU。32 位设计主要是具有非常特定用例的微控制器。
在字符串 rv64i 中,rv 代表 RISC-V,64 表示这是 64 位 CPU 架构,i 是强制基本整数指令集的扩展。 之所以将rv64i写在一起,是因为,尽管i扩展是一个“扩展”,但它是强制性的。
PowerPC
PowerPC 是苹果、IBM 和摩托罗拉合作初期非常流行的 CPU 架构。苹果公司在其整个消费产品线中都使用这种 CPU 架构,直到他们从 PowerPC 转向英特尔的 x86。
PowerPC 最初采用大端内存排序。后来,当引入 64 位架构时,添加了使用小端字节序的选项。这样做是为了与 Intel 的内存顺序(以防止软件错误)兼容。
由于字节顺序也是一个因素,PowerPC 有 3 种架构:
- powerpc:32 位 PowerPC 架构
- ppc64:采用大端内存排序的 64 位 PowerPC 架构
- ppc64le:具有小尾数内存排序的 64 位 PowerPC 架构
目前,ppc64le 被广泛使用。
市面上有多种 CPU 架构。对于每种 CPU 架构,都有 32 位和 64 位子集。
有些 CPU 提供 x86、ARM、RISC-V 和 PowerPC 架构。
x86 是最广泛、最容易使用的 CPU 架构,因为 Intel 和 AMD 使用的是 x86。
ARM 的产品几乎专门用于移动电话和可访问的 SBC。
RISC-V 正在不断努力使硬件更易于使用。
PowerPC 主要用于服务器,至少目前是这样。