什么叫「架构」?INTEL面临的移动市场逆袭
2016年7月时,软银(SoftBank) 宣布斥资234亿英镑买下全球最大移动芯片设计授权商安谋(ARM),写下「欧洲科技企业史上最大笔收购案」的纪录。
软银董事长孙正义指出,预计未来20 年内,ARM 芯片的年产量将达到1 兆片的规模。
等等,到底什么叫ARM 芯片?
你听过Android、iOS 手机,那你知道无论Android 还是iOS 手机都是用ARM 架构的芯片、连NVIDIA 的CPU 芯片也是使用ARM 架构吗(可惜现在已经退出)?所以ARM 到底是在干麻?
你知道你自己正在用的手机的CPU,正是ARM 架构吗?
那你知道你的手机如果不是iPhone 或三星,很有可能就是用高通设计的芯片吗?蛤?那 ARM 和高通又有什么关系?
听说,是ARM 卖架构给高通这家IC 设计公司、高通买回来再设计自己的芯片… 所以讲来讲去,到底什么是「架构」?(芯片架构、处理器架构… 到底这个「架构」是在讲什么?)
听说,伺服器用的芯片架构主要是x86、手机芯片用的则都是ARM,到底为什么?
怎么那么多的为什么啦!吼,绕来绕去听不懂啦。别急,看完这篇文章就知道ARM 和Intel 在干麻、又是怎么在移动通讯市场上打群架的了ˋ_ˊ
对电脑下命令: 高级语言与低级语言
CPU (Central Processing Unit, 中央处理器) 是驱动整台电脑运作的中心枢纽,就像是电脑的大脑;若没有CPU,电脑就无法使用。
CPU 的功能主要是执行电脑的指令、以及处理电脑软件中的资料。
什么是指令呢?指令是低级语言的命令。我们可以对电脑以程式下达命令,比如加减乘除的运算;在高级语言中的命令称为「叙述」 (statements),在低级语言中则称为「指令」 (instructions)。
所谓的程式,就是指我们要电脑完成某一项工作,所下达的一连串命令。
等等!什么又是高级语言和低级语言呢?
高级语言是目前最常见的程式语言,平常我们听到的程式语言,比如C/C++、都是高级语言。高级语言以人类的日常语言英文为基础,使用一般人易于接受的文字来表示,可读性高。
然而电脑是看不懂高级语言的,因此我们需要将高级语言透过编译器(Complier) 将高级语言再转成能直接与硬体沟通的低级语言。
电脑唯一能读懂的语言就是二进位制的「机器语言」 (Machine Language),由0与1组成,比如00101001010101100111…. 别说你会撰写到发疯,连看懂都有困难。
因此后来又发展出了「组合语言」 (Assembly Language),改用较短的字串取代机器语言的0与1,让人类比较好看的懂。
由于CPU只认得机器语言,因此组合语言所撰写的程式依然需要经由「组译器」 (Assembler) 来转译为机器码。组合语言每一行直接对应到的几乎就是一个机器码,高级语言则无。
这个流程简单来说,就是高级语言(C/C++) 得透过编译器(Complier) 转成组合语言(Assembly Language)、再透过组译程式(Assembler) 转译成机器码(Machine Code),机器才能读得懂。
低级语言不用耗费编译流程、即可被CPU 所执行,因此以低级程式语言编写的程式,其运作效率会较高级语言更高。
然而可能别人写两三行就解决的程式、你要写数十行数百行而已。就是看人类方便(高级语言)、还是机器方便(低级语言)。
这么讲大家可能很难理解,来做个示范吧!如果我们希望电脑输出「Hello, World!」这行字,在高级语言中会这样写(范例为C语言):
这时候电脑会输出Output结果:Hello, World!。
同样的一行字,来看看在组合语言中是怎么写的:
这时候你可能已经有:「这东西是什么!!!」的想法了… 别急,最后来看看机器语言会怎么写:
…天啊。这谁看得懂。
我们可以明显发现,高级语言的一个叙述可以对应到多个低级语言的指令,比低级语言更易撰写、也较好阅读。这样的话,为什么还要有低级语言呢?
事实上,不是「为什么还要有低级语言」,而是一开始的电脑就只有低级语言!高级语言是后面才发展出来的东西,方便人类好写且好读懂。
可以说:「低级语言是要给机器看的、高级语言是给人看的」。如果是底层的嵌入式系统,有些工程师还是要直接去写组合语言。
也就是说,高级语言和低级语言的功能不同,不能直接相比。高级语言是来帮助我们进行抽象化的设计、让我们能描述出需要的行为,而不是去Micro Control 每一行机器要跑的指令。
但高级语言要让机器理解,还须经过编译器的「编译」这个步骤。编译后的结果,会直接影响电脑执行该程式的效能。
就像是一个翻译人员把中文翻成英文一样,如果翻的好的话一样很优美、能达到最理想的效果;如果翻不好的话,就会变得很糟糕。台湾一家新创 Skymizer 就是在做编译器的优化,让相同的程式码经过更优化的编译器后、能在电脑上跑更快噢!
低级语言虽然难懂,但硬件能不经编译器、直接执行。(不过机器只能看懂0/1,所以如果是组合语言的话,还要经过组译器翻译=>机器语言噢~)
也因为低级语言对硬件直接操作,一种组合语言会专用于某种电脑架构,而不像许多高级语言可以在不同系统平台之间移植。根据这种特性,我们能透过组合语言订定「指令集」,和该指令集依附的「指令集架构」。