0%

深入了解CPU架构

1. CPU是什么

中央处理单元(CPU)主要由运算器、控制器、寄存器三部分组成,从字面意思看运算器就是起着运算的作用,控制器就是负责发出CPU每条指令所需要的信息,寄存器就是保存运算或者指令的一些临时文件,这样可以保证更高的速度。

CPU有着处理指令、执行操作、控制时间、处理数据四大作用,打个比喻来说,CPU就像我们的大脑,帮我们完成各种各样的生理活动。因此如果没有CPU,那么电脑就是一堆废物,无法工作。移动设备其实很复杂,这些CPU需要执行数以百万计的指示,才能使它向我们期待的方向运行,而CPU的速度和功率效率是至关重要的。速度影响用户体验,而效率影响电池寿命。最完美的移动设备是高性能和低功耗相结合。

2. CPU的架构

从CPU发明到现在,有非常多种架构,从我们熟悉的X86,ARM,到不太熟悉的MIPS,IA64,它们之间的差距都非常大。但是如果从最基本的逻辑角度来分类的话,它们可以被分为两大类,即所谓的“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。

Intel和ARM处理器的第一个区别是,前者使用复杂指令集(CISC),而后者使用精简指令集(RISC)。属于这两种类中的各种架构之间最大的区别,在于它们的设计者考虑问题方式的不同。

我们可以继续举个例子,比如说我们要命令一个人吃饭,那么我们应该怎么命令呢?我们可以直接对他下达“吃饭”的命令,也可以命令他“先拿勺子,然后舀起一勺饭,然后张嘴,然后送到嘴里,最后咽下去”。从这里可以看到,对于命令别人做事这样一件事情,不同的人有不同的理解,有人认为,如果我首先给接受命令的人以足够的训练,让他掌握各种复杂技能(即在硬件中实现对应的复杂功能),那么以后就可以用非常简单的命令让他去做很复杂的事情——比如只要说一句“吃饭”,他就会吃饭。但是也有人认为这样会让事情变的太复杂,毕竟接受命令的人要做的事情很复杂,如果你这时候想让他吃菜怎么办?难道继续训练他吃菜的方法?我们为什么不可以把事情分为许多非常基本的步骤,这样只需要接受命令的人懂得很少的基本技能,就可以完成同样的工作,无非是下达命令的人稍微累一点——比如现在我要他吃菜,只需要把刚刚吃饭命令里的“舀起一勺饭”改成“舀起一勺菜”,问题就解决了,多么简单。这就是“复杂指令集”和“精简指令集”的逻辑区别。

3. CPU常见架构

X86

978年6月8日,Intel发布了史诗级的CPU处理器8086,由此X86架构传奇正式拉开帷幕。首次为8086引入X86作为计算机语言的指令集,定义了一些基本使用规则,X86架构使用的是CISC复杂指令集。同时8086处理器的大获成功也直接让Intel成为了CPU巨头.

IA64(Intel Architecture 64,英特尔架构64)

哇,IA64听起来好陌生,是的,虽然同出Intel之手。但这可以说是失败品。当年X86过渡到64位指令集时,一个不小心被AMD弯道超车,最后只能联合惠普推出了属于自己的IA64指令集,但这也仅限于服务器上,也是Itanium安腾处理器的来历(现在已经凉了)

至于IA64究竟是RISC还是CISC指令集的延续,这个真的很难说清楚,但单纯以IA64基于HP的EPIC(Explicitly Parallel Instruction Computers,精确并行指令计算机)来看,似乎更偏向于RISC体系。

MIPS(Microprocessor without interlockedpipedstages,无内部互锁流水级的微处理器)

在上世纪80年代由美国斯坦福大学Hennessy教授的研究小组研发,它采用精简指令系统计算结构(RISC)来设计芯片。和Intel采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。

MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。MIPS自己只进行CPU的设计,之后把设计方案授权给客户,使得客户能够制造出高性能的CPU。

让MIPS出名的,可能是在2007年,中科院计算机研究所的龙芯处理器获得了MIPS的全部专利、指令集授权,中国开始走上了一MIPS为基础的CPU研发道路。

PowerPC

PowerPC是有蓝色巨人IBM联合苹果(早期mac用的就是这个)、摩托罗拉公司研发的一种基于RISC精简指令集的CPU,PowerPC架构最大优点是灵活性非常好,核心数目灵活可变,因此在嵌入式设备上具有很高效益,可以针对服务器市场做超多核,针对掌机做双核,因此它具有优异的性能、较低的能量损耗以及较低的散热量。

ARM(Advanced RISC Machine,进阶精简指令集机器)

ARM可以说是一个异军突起的CPU架构,采用了RISC精简指令集,而且ARM发展到今天,架构上非常灵活,可以根据面向应用场景不同使用不同设计的内核,因此可以广泛用于嵌入式系统中,同时它高度节能的特性,目前各种移动设备中全都是它的身影。据统计,使用ARM架构的芯片年出货量高达200亿片,随着物联网时代降临,对于低功耗性ARM芯片需求量会发生爆炸性增长。

4. CPU架构问题总结

CISC、RISC之争

从上面得知,历史的长河里面,有过许许多多的CPU架构,它们之间的差异性非常大,经过时间、用户的检验,我们平常所接触到CPU架构也就剩X86和ARM两者,按照最核心的不同可以被分为两大类,即“复杂指令集”与“精简指令集”系统,也就是经常看到的“CISC”与“RISC”。

要了解X86和ARM CPU架构,就得先了解CISC复杂指令集和RISC精简指令集 ,因为它们第一个区别就是X86使用了复杂指令集(CISC),而后者使用精简指令集(RISC)。造成他们使用不同该指令集的原因在于,面向的设备、对象、性能要求是不一样。

手机SoC普遍都是采用ARM提供的核心作为基础,依据自身需求改变SoC的核心架构,而ARM正正是RISC精简指令集的代表人物。CPU巨头Intel、AMD所采用的X86架构已经沿用了数十年,是CISC复杂指令集的典型代表。

为什么x86不叫x32

x86,x64,看似写法类似,但实际上代表了完全不同的含义。简单来说,x86指的是cpu的架构,x64是cpu位数。笼统的说,前者代表cpu的逻辑结构,后者是cpu运算能力。除了x86架构的cpu外,还有很多不同架构的cpu,其中最有名的就是IA架构,即intel安腾架构。两者之间的系统、软件不能通用。

而x64的全称叫x86-64,也就是说x64是x86架构的64位cpu。

x86架构中,最早的cpu是16位的,即8086,其前身还有8位的8008和4位的4004,但后两者是另外的架构。后出的80386已经升级到32位。

这样就可以解释开始的问题了。x86是一种架构的命名,代表所有的该架构下的cpu,包括16位,32位,64位,将来也许会有128位。之所以用x86代表32位系统,是一种通俗用法罢了,是不严谨甚至有误的。由于16位cpu早已淘汰不用了,而在64位出来前,32位cpu占据了很长一段时间,所以习惯性的用x86代表32位cpu。而x64是一个简写,告诉大家的是:我是x86架构中的64位cpu。

如果严谨的按命名规则来看,现在的x86应该叫x86-32,简称x32。以前16位的8086则应该叫x86-16,简称x16。因此,x86不叫x32,只是一种习称,一种误称。

IA架构下的cpu命名则比较严谨,32位就叫IA32,64就叫IA64。

mac上可以玩iphone的app吗

Xcode自带的iOS模拟器并不是真正意义上的模拟器,他没有运行arm指令的能力,之所以你可以用它调试你开发的app,是因为调试目标选为模拟器的时候,Xcode生成的代码是x86/x86_64架构用的,具体是x86还是x86_64取决于你选的机型,如果你选iPhone5S之前的机型的模拟器,那就是x86.

换个说法,就是这个模拟器并没有模拟arm处理器等硬件,只是在x86/x86_64架构上提供了和iOS一样的接口的SDK,其接口的行为也和iOS上几乎一样.之所以说几乎一样,是因为真的有不一样的地方.

好了,到这里你知道了,这个模拟器其实就是一个app,模拟下iOS的行为,那些跑在里面的app,其实也都是x86/x86_64的, 而app store上上架的那些app, 都不会包含x86/x86_64架构,只支持arm架构,所以无论如何你也没办法在电脑上运行他们.

至于为什么android可以,因为android是开源的,使用的处理器架构也是资料丰富,所以可以开发出来真正的可以虚拟arm处理器以及其它硬件的模拟器,这样就可以在电脑上运行android app了.而iPhone, iTouch, iPad使用的处理器估计目前还没有谁能真正模拟出来, 就算有这种能人, 他也未必有做模拟器的想法,就算有这个想法,那也未必有那个胆量.

最后说个常识:

在开发iOS app接入第三方sdk的时候, 偶尔会遇到模拟器无法正确link, 但是真机可以的情况.这其实就是因为sdk提供商提供的sdk,根本就没支持x86/x86_64,鄙视

给作者打赏,可以加首页微信,咨询作者相关问题!