什么是指令集
First of first,你要知道指令集(instruction set)是一个什么东西。指令集就像是计算机硬件和软件之间的桥梁,它定义了处理器可以执行的基本操作。操作系统和应用软件必须根据指令集来编写,才能在特定的处理器上运行。这意味着我们熟悉的操作系统和软件都与CPU的架构密不可分,而CPU的架构本质上就是由其对应的指令集决定的。
通常情况下,当你使用电脑时,操作系统已经预装并与CPU绑定。同样地,商店里提供的软件通常也是预先配置好以支持你的平台的。然而当我们自己去Githup上找一些软件的时候,就会发现琳琅满目的版本:例如:
如何看自己电脑架构
尽管一般我们无脑选x86_64/x64/AMD64就行了,但是这并不适合所有人,你如何看自己的架构是什么呢。
要确定你的电脑使用的是什么版本的芯片,你可以根据不同的操作系统采取以下步骤:
对于 Windows:
按下 “Win + R” 键,打开 “运行” 对话框。
输入 “msinfo32” 并按下回车键,打开 “系统信息” 窗口。
在 “系统摘要” 部分,查看 “系统类型” 一项,它会显示你的架构信息。
这里可以看到我们的系统是x64的,
对于 macOS:
点击屏幕左上角的苹果菜单,选择 “关于本机”。
在打开的窗口中,你可以看到你的 Mac 型号和处理器信息。
如果你使用的是较新的 Mac 设备(如采用 Apple M1 芯片的设备),处理器信息将显示为 “Apple M1” 或类似的名称。
对于 Linux:
打开终端(Terminal)。
- 输入以下命令并按下回车键:
lscpu
- lscpu 该命令将显示有关你的 CPU 的详细信息,包括架构、型号和速度等。
这里可以看到我们的服务器是x86_64的,这和前面windows的x64实际上是一个东西。
如何基于架构选择软件
确定了你的架构就可以基于你的架构选对应的软件了,一般情况下,不同的架构常常对应不同用途的设备:
arm64和aarch64对应64位ARM架构(ARMv8),常见于移动设备和嵌入式系统。
armv7l和arm对应32位ARM架构(ARMv7),常见于较旧的移动设备和嵌入式系统。
x86_64、x64和amd64对应64位x86架构,常见于个人电脑和服务器。
x86和i386对应32位x86架构,常见于较旧的个人电脑。(基本上可以淘汰了)
dmg和zip通常表示macOS和Windows平台的安装包格式。
下面是一个常见架构名称的等价关系清单:
ARMv8 = ARM64 = AArch64
ARMv7 = armv7l = ARM
x86_64 = x64 = amd64
x86 = x86_32
x86前世AMD今生
现在进入正题,我们知道了结论,再来看看为什么是这样。1978年6月8日,Intel发布了8086处理器,开启了x86架构的时代。8086是一款16位微处理器,它不仅是Intel最成功的处理器系列的开端,也标志着x86指令集的诞生。x86指令集是一套用于Intel兼容微处理器的计算机语言指令集,它定义了处理器的基本功能和编程模型。随着8086的推出,x86架构开始了其长达数十年的发展历程,并最终成为个人计算机和服务器领域的主流架构之一。随后,Intel不断发展x86指令集,推出了8086、80186、80286、80386(进入32位时代)、80486、80586等处理器。
其实官方没有用过80586这个名字,80856就是你熟知的Pentium奔腾系列品牌中的第一款CPU,“Pentium” 这个名称最初源于希腊语单词 pente(πεντε),意为 “五”,这是对英特尔之前 80x86 处理器(8086–80486)数字命名方式的引用,并添加了拉丁语词尾 -ium,否则按照之前的命名规则,这个处理器本应被命名为 80586,奔腾在1993年3月22日推出。
我们可以发现之前cpu命名就是 80-x-86的格式,所以也叫80x86,后来叫着叫着就变成了x86。当然后续尽管Pentium改了名字,但是仍然是基于x86的这套指令集下发展的。
8086图片
在这个过程中,AMD作为Intel的竞争对手,也开始生产兼容x86指令集的处理器。特别是在386和486时代,AMD作为Intel的第二源供应商,为x86架构的发展做出了贡献。
进入90年代后,随着计算需求的增长,Intel和AMD都意识到32位架构的局限性,开始着手开发64位扩展。1999年,AMD率先发布了x86_64指令集,作为x86架构的64位扩展。x86_64保持了与现有32位x86代码的兼容性,同时提供了更大的寻址空间和更多的寄存器,使得应用程序可以利用更多的内存。
与此同时,Intel也推出了自己的64位架构IA-64,即安腾(Itanium)。但与x86_64不同,IA-64走了另一条路线,当时他们规划的是未来是高性能计算才需要64位的计算,在那个家用电脑的内存通常在 64MB 到 128MB 的年代,64位理论支持128GB内存是超乎想象的。因此IA-64设计之初,就是一种全新的架构,与x86不兼容。它采用了EPIC(Explicitly Parallel Instruction Computing)设计,更侧重于服务器和高性能计算领域。
不过计算机的发展,往往是生态大于技术先进性的,就像OSI的7层网络模型虽好,但是市场上的TCP/IP 模型已经成为事实上的主流标准了。由于AMD的x86_64的向下兼容性和更平滑的迁移路径,它很快在市场上占据了主导地位。微软、Linux等主要操作系统都提供了x86_64版本。相比之下,IA-64由于其独特的架构和有限的软件生态,一直处于小众地位。
随着x86_64的成功,AMD将其重命名为AMD64,以强调自己的贡献和品牌。虽然Intel后来也采用了x86_64标准(称为Intel 64),但AMD64这个名字已经深入人心。时至今日,x86_64/AMD64已经成为了服务器、桌面电脑和笔记本电脑的主流架构,而IA-64则主要局限于某些特定的服务器领域。
AMD64不仅提供了64位计算能力,而且具有出色的向下兼容性。这意味着在AMD64平台上,64位应用程序可以与16位和32位应用程序共存。这一特性在现实世界中非常有利,因为它允许逐步过渡到64位环境,而不会带来兼容性问题。AMD64还以其能够同时支持32位和64位计算而闻名,而且不会影响性能。
从架构设计的角度来看,AMD64展现了兼容性和生态系统的重要性。通过在现有x86架构上添加64位扩展,AMD在保持连续性的同时引入了创新,最终赢得了市场的认可。相比之下,Intel的IA-64则因其全新的架构和有限的软件生态,未能获得广泛的成功。
总的来说,AMD64的历史反映了Intel和AMD在x86架构发展上的竞争与合作。AMD在关键时刻推出了x86_64,满足了市场对64位计算的需求,并最终成为业界标准。这一历史也表明,在计算机体系结构的发展中,兼容性、连续性和生态系统往往比纯粹的技术创新更为重要。