关于x86、x86_64、x64、amd64和arm64、aarch64的区别
前言
当我们在安装docker或选择docker image镜像时,都需要根据当前服务器的系统和CPU架构来选择对应的软件包或镜像,比如安装docker-compose:
- docker-compose-linux-aarch64
- docker-compose-linux-armv6
- docker-compose-linux-armv7
- docker-compose-linux-ppc64le
- docker-compose-linux-riscv64
- docker-compose-linux-s390x
- docker-compose-linux-x86_64
或在hub.docker上选择基础镜像时,考虑OS/ARCH:
- linux/386
- linux/amd64
- linux/arm/v6
- linux/arm64
- linux/ppc64le
...
等等,那常用的CPU架构都有哪些呢,下面我们就来进一步认识下常用的CPU架构。
不同CPU架构的区别:
CPU架构 | 描述 |
---|---|
i386 | 32位AMD/英特尔CPU |
x86_64/x86/amd64 | 64位AMD/英特尔 CPU的别称 |
AArch32/arm/ARMv1到ARMv7 | 32位ARM CPU的别称 |
AArch64/arm64/ARMv8/ARMv9 | 64位ARM CPU的别称 |
rv64gc/rv64g | 64位RISC-V CPU的别称 |
ppc64le | 64位PowerPC CPU(小端字节序存储) |
通常来说,以上列出的术语是描述CPU架构的,但严格讲,他们被计算机工程师视为CPU的指令集架构(ISA)。
CPU的ISA主要有以下几个分类:
- x86(AMD/英特尔)
- ARM
- RISC-V
- PowerPC(IBM仍在使用)
目前,基本上所有的新的硬件都是64位的了。
x86(AMD/英特尔)
x86 CPU的指令集架构主要源于英特尔,后来AMD加入了这个领域,并且一直紧随英特尔的步伐,直到AMD创建出了自己的超级64位架构,超过了英特尔。
x86架构的子集包括:
- i386:AMD/英特尔的x86架构的32位版本。
- x86_64/x86/amd64:这三个术语在不同的项目中可能会被交替使用。但它们都是指x86AMD/英特尔架构的64位版本。x86_64比x86和amd64使用的更广泛。
对于CPU ISA,x86这个字符串是一种特殊的情况。你要知道,在从32位的x86(i386)到64位的x86(x86_64)的过渡过程中,CPU制造商确保了CPU能够运行32位和64位指令。所以,有时你可能会看到x86也被用来表示:这款产品只能运行在64位的计算机上,但如果该计算机能运行32位指令,那么你也可以在它上面运行32位的用户软件。
Windows的兼容模式就是通过这种方式,支持在64位的系统上运行32位的软件。
ARM
ARM不仅是一家为CPU ISA制定规范的公司,它也设计并授权给其它厂商使用其CPU内核,甚至允许其他公司使用ARM CPU ISA设计自己的CPU内核。
最近,苹果从使用x86_64处理器转向了在其笔记本和台式机产品中使用自家设计的ARM处理器。
官方认定的32位和64位ARM架构分别是AArch32和AArch64。这里的AArch字符串表示“Arm架构”。
实际符合ARM的CPU ISA的指令规范被命名为ARMvX,其中X是规范版本的代表数字。目前为止:
- ARMv1到ARMv7定义了适用于32位CPU的架构。
- ARMv8、ARMv9是适用于64位CPU的架构。
你可能会困惑,为什么AArch64正式被ARM认定为64位ARM架构后,有些人仍然称其为arm64,原因主要有两点:
(1)arm64这个名称在ARM决定采用AArch64之前就已经广为人知了。
(2)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)的一个开源规范。
如果你在寻找运行于RISC-V消费级CPU上的软件,你应该寻找“rv64gc”这一字符串。这是许多Linux发行版所公认的。
像所有的CPU架构一样,RISC-V也拥有32位和64位CPU架构。但由于RISC-V是非常新的描述CPU ISA的方式,大部分主流消费端或客户端的CPU核心一般都是64位的。大部分32位的设计都是微控制器,用于非常具体的用例。
PowerPC
PowerPC曾是苹果、IBM、摩托罗拉早期合作时代的一种流行CPU架构。在苹果转向英特尔的x86架构之前,它一直被应用于苹果的全部消费品产品线。
最初,PowerPC采取的是大端字节序的内存排序。后来随着64位架构的引入,增加了使用小端字节排序的选项。这么做的目的是为了与英特尔的内存排序保持兼容(以防止软件错误),因为英特尔自始至终都一直采用的是小端字节序。
由于字节序在此也起到了一定的作用,PowerPC共有三种架构:
- powerpc:表示32位的PowerPC架构。
- ppc64:表示拥有大端字节序内存排序的64位PowerPC架构。
- ppc64le:表示拥有小端字节序内存排序的64位PowerPC架构。
目前ppc64le是被广泛使用的PowerPC架构。