CPU的架构:x86是什么?arm又是哪儿来的?
文章目录
- CPU架构
- 常见架构
- x86
- arm
- RISC-V
- 比较
- 同样架构CPU一定是一样的……吗?
- 跨平台
- 梳理
- 结尾
本文由Jzwalliser原创,发布在CSDN平台上,遵循CC 4.0 BY-NC-SA协议。
因此,若需转载/引用本文,请注明作者并附原文链接,不得用于商业用途。
违者必究,谢谢配合。
个人主页:blog.csdn.net/jzwalliser
CPU架构——一直是困扰大家很长时间的问题。今天,咱们就重拳出击细细拆解CPU的架构。快点开始吧!
CPU架构
CPU,作为电脑中最核心的计算单元,肯定有着自己的一套“语言”——而电脑中运行的软件则使用CPU听得懂的“语言”,给CPU发送指令,然后CPU负责执行。
这种“语言”,就叫“指令集架构”,简称“架构”。就像世界上有汉语、英语、德语、法语、俄罗斯语等等各种语言,在CPU的世界里,也有很多“语言”——即很多种架构。
当然,别理解错了——虽然说C++、Python等也是一种“语言”,但这都不是CPU所“看得懂”的“语言”。CPU唯一能够识别的,就是无穷无尽的0和1。至于C++、Python脚本是怎么变成CPU看得懂的0和1,这就是后话了,我们在这篇文章中先不讨论。
而CPU的不同架构,从根本上来自于其不同的内部电路。有的CPU内部电路复杂,晶体管数量多,功能也随之强大;有的CPU内部电路简单些,晶体管数量少,但耗能也低——这就有了不同的架构。
所以,到这里,你只需理解CPU的架构是什么——它可以看作是CPU使用的“语言”。
常见架构
x86
x86就是一种指令集架构。它最早来源于Intel在1978年上市的Intel 8086。
该系列较早期的处理器都是用数字来表示的——如Intel 8086、80186、80286、80386、80486。这些名称都符合“80x86”的“通式”,后来就被称为“x86”。刚开始的x86也很弱鸡,其中8086~80286都是16位的,到了80386才开始出现32位——而著名的“i386”便来自于这里:Intel 80386。
图片来自Turnoff,CC 4.0 BY-NC-SA
后来,1999-2003年间,AMD干了个大活:他们把x86架构做成了64位的,并把它取名为“AMD64”。然后Intel又“抄”了回去,也给它取了自己的名字……这才有了现在这些形形色色但都表示64位(x86)的缩写:x86-64,AMD64,x64,Intel 64,EM64T等等。
今天,我们看到的绝大多数电脑芯片都使用的是x86架构——包括但不限于Intel的Core系列(i5、i7、i9)和AMD的Ryzen系列。大多数超级计算机也使用它,因为它功能丰富,速度也快。而现在生产x86处理器的厂家几乎只有AMD和Intel了。
arm
arm架构,则来自于一位物理学家Hermann Hauser和另一位工程师Chris Curry。他们手下有一家公司,叫Acorn,专门生产电子设备。有一次,他们想在一款电子设备上使用摩托罗拉公司的16位芯片,但是发现:太TM贵啦!于是他们找替代品,问Intel公司要80286芯片的设计,结果对方不鸟他们……没办法,他们只好自己设计:基于当时新兴的RISC(精简指令集)设计理念,研发出自己的处理器——而这,就是ARM架构的雏形。
当然,由RISC理念衍生出的架构还有很多——比如RISC-V、SPARC、MIPS等等。但其中最最最重要的便是arm了(Advanced RISC Machine)——因为你现在手上拿的手机,里面就是arm架构的芯片。
刚开始的arm是32位的——叫armv7。后来,arm也走上了64位之路,有了arm-v8a。现在,绝大部分的手机都是64位arm(arm-v8a)的了。
arm架构用得有多广泛呢?几户所有移动设备(安卓手机、iPhone、iPad)、开发版(包括Orang Pi、Raspberry Pi)用的都是arm芯片。甚至有些电脑使用的芯片(如Apple M系列)都是arm。
而至于苹果的M芯片——它几乎是个“行业炸弹”:它向世界证明,arm架构的芯片不仅能用于手机,也能在高端电脑上提供强大性能和优秀续航,打破了x86在个人计算领域的绝对统治。
arm芯片的生产方式和x86不太一样。arm公司(即改名后的Acorn公司)本身不再生产芯片了,而负责把这一切授权给其他公司,然后由其它公司生产芯片。
RISC-V
这里还是稍微说一下RISC-V吧:与前面的x86、arm不同,它开源、免费、可自由扩展,因而被看作未来的重要变量,尤其在物联网和新兴领域。
比较
分别介绍完了x86和arm,就要对比一下了。
首先,没有太多优劣之分:不同的架构服务于不同的目的。
x86属于CISC(Complex Instruction Set Computing),可以简单理解为复杂指令集。它的运行速度快,指令也很繁多——代价是耗能高。不过,毕竟它大多是用在电脑上的,就没有那么追求省电了。
而arm属于RISC(Reduced Instruction Set Computing),可以认为是精简的指令集。它的指令比较少,不过耗能也低。在相同半导体工艺和性能目标下,arm架构通常能实现更高的能效比(性能/功耗),这是其在移动设备上取得统治地位的根本原因。
这里可以类比理解一下:x86和arm就像是两个不同级别的厨师——x86就是“高级厨师”,你只需要告诉他“给我来个煮鸡蛋”,很快做好的煮鸡蛋就端上来了。而arm则不同,它像是“新手厨师”,你需要告诉他“拿来锅子,往里面放水,将一个鸡蛋放进去,开火烧,烧滚之后再过一会儿关火,然后把鸡蛋拿出来,放到盘子里,端到我的桌上”。虽然最后结果是一样的,但是中间过程不一样——很明显,如果需要达到同样的目的,高级厨师只需要很少的指令就行,但是新手厨师需要接受大量的指令。他俩工资也不一样:高手厨师一个月赚2w(耗能高),新手厨师一个月只拿8k(耗能低)。
现在明白了不?x86复杂高速高功耗,arm精简中速低功耗。
同样架构CPU一定是一样的……吗?
于是有人会觉得很好奇:既然AMD、Intel生产的都是x86架构的处理器,那么它们的内部构造是否也几乎一样?
答:非也。这就是“微架构”的差异。就像同一种语言(指令集)下的不同“方言”或“表达风格”。Intel的Core和AMD的Ryzen都是x86,但内部电路设计(微架构)却有很大的不同,造就了不同的性能与体验。
对于arm芯片也是同理——生产arm芯片的厂商有一大堆:联发科、高通、苹果等等,但CPU的内部电路实现是不一样的!
跨平台
前面提到了x86大多是放在电脑上的,arm基本服务于移动设备。而大多电脑上运行的是Windows,多数手机(先不谈iOS)运行的是Android——这么看来,Windows与x86有什么联系吗?Android和arm又有什么关系吗?
事实上,Windows在x86上已经扎根很长时间了。而且几户所有Windows 的exe软件都是x86架构的。不过微软后来也做了大量工作,制作了Windows on arm,即WOA,使Windows可以成功运行在arm的架构CPU上。
而Android也几乎是一样的情况——它在arm架构上生根发芽,现在已经长成了参天大树。和Windows一样,总有些人热衷于把本来只能运行在arm上的Android通过各种技术手段移植到其它架构上——比如x86架构。于是就有了今天的Android x86,包括一些著名的操作系统,如Bliss OS、Phoenix OS等等。而因为Android的开源特性,它甚至还被移植到了RISC-V上呢!
但你一定会觉得奇怪:Windows on arm既然是运行在arm架构的处理器上,它又该如何运行专为x86写的软件呢?
所以,就出现了一个东西,叫做“转译层”。它负责“同声传译”,在软件运行过程中,把一条条x86的指令迅速翻译成arm指令,这样CPU不就能运行了吗?
对于Android x86也是同理:那些只能运行在arm上的软件,也可以通过转义层,将arm指令翻译成x86指令,从而运行在x86上。
再深入一些:Windows on arm上有Prism转义层;而在Android x86上,就有libndk和houdini。它们做着同样的事情:“同声传译”。
梳理
好啦,CPU架构就先说到这里了,给大家梳理一下,并拓展些其它架构(这里感谢Deepseek供图):
结尾
好啦,就介绍到这里,先溜了~记得点赞关注哦!
