美文网首页嵌入式
一文带你分分钟掌握ARM前世今生及相关技术,带你拨开云雾见天空

一文带你分分钟掌握ARM前世今生及相关技术,带你拨开云雾见天空

作者: 瓶子哥_ | 来源:发表于2017-05-07 12:01 被阅读227次

    你对过去知道的越多,对未来就看的越远。

    1.引言

    当关于前段时间小米在北京发布了它的首款自研芯片--松果澎湃S1处理器性能讨论的余音还尚未离去,当华为时下热销的旗舰手机P10正遭遇“疏油层”和“闪存门”而饱受花粉的争议时,我们的雷布斯又马不停蹄的在前几天发布了称之为性能怪兽的米6,老王感慨,互联网针对手机的话题真的是从来没有沉寂过,它们总能给我等屌丝茶余饭后提供有趣的议题。而这些话题的主角无疑都是手机。

    手机提供给了我们多样化生活,它让我们随时随地和世界保持连接,就象呼吸空气一样平常。我们每天起来第一件事就是打开手机,晚上睡前最后一件事是放下手机。几分钟不点开微信,知乎,游戏,就如同自己被世界遗忘了,或自己遗忘了世界,我们无时无刻不在刷手机,公交地铁里、上班开会时、吃饭闲聊中……如果我们不得不离开一段时间,那回来之后第一件事就是急不可耐的看看手机有没有新的消息。

    看似我们和手机亲密无间,但是我们真正了解它吗?或者说真正了解带给我们这一切多样化生活的幕后英雄吗?说到这个幕后英雄,大家应该都不陌生-处理器。无论手机厂商发布哪一款手机,我们第一时间都会去扒一扒它的内芯SoC,而说起手机芯片厂商,相信大家第一时间会想起高通、三星、联发科、海思以及当前红极一时的松果等,而无论是哪一家都要受益于顶级幕后推手-ARM公司,因为他们的手机芯片均是基于ARM的指令集,采用ARM的公版内核架构,亦或者是基于ARM的指令集自研架构。

    作为混迹于IT行业的码农们,我想大家肯定都或多或少的知道arm处理器,然而你对ISA指令集,处理器微架构、ARM处理器的家族分类了解吗?绝大多数的码农肯定是一脸懵逼的。

    今天老王就带大家通过讲解ARM以及相关的技术背景点来揭开这些知识谜底,话说以后出去装X就靠它了!否则当外行们问起关于ARM处理器的相关技术点而无法从容应答的时候,我等屌丝该如何面对码农这等高大上的职业呢?

    就像多年前朋友让老王帮忙攒一台能打LOL的台式机电脑的时候,当时我竟无言以对,然后匆忙从网上到处去现扒相关的资料。虽然我很想说哥虽然是学计算机的,但是攒机真的是另外一门学问好不好,个中滋味我想大家应该能理解。

    而对于我们职场的嵌入式码农君们来说,深层次的了解ARM无疑对嵌入式开发有很大的裨益,比如在立项的时候针对不同的产品形态,我们可以更快,更好的进行芯片选型,做到物尽其用。

    好了,说了这么多,终于引出我们今天课堂上要讨论的话题:让我们一起来扒一扒ARM处理器的前世今生。今天的课主要是讲讲ARM处理器的发展以及处理器相关的概念知识点。不会有过多的技术性论证,所以大家可以轻松活跃些。“狗蛋,虽然老师说了这节课不会涉及太多的技术论证,但是并不代表你们某些同学就可以打酱油哈,要知道老师的每节课都是为后面的知识做铺垫的,要想跟着老师一起飞,一定要凝神定气,打起十二分精神,OK,Everybody坐好了,我们要飞了!”

    2.今生ARM的大动作

    2016年,日本软银同意斥资243亿英镑(约合人民币2155亿元))收购英国芯片设计公司ARM,这则消息再一次把这家低调而不失内涵的世界性的科技公司推向了公众面前。ARM被誉为英国的苹果,最成功的科技公司,一个敢和英特尔拍桌子的竞争对手,和互联网浪潮中默默无闻的英国一样,低调到很少有人听说过这个名字,但这并不影响他“统治全球”的节奏:2017年宣布正式达成1000亿芯片出货量的里程碑。全世界95%的智能手机和80%的数码相机都在使用ARM技术。在一些新兴领域,如扩增实境头戴显示器、自动驾驶汽车、智能手表以及无人机中也不会缺少这家技术公司的身影,成为全球消费品电子产品的绝对幕后推手。作为整个智能移动硬件行业的绝对上游,ARM凭借超过90%的市场份额几乎掌握了决定行业下一步走向的能力。而在软银的领导下,ARM又将在智能硬件领域掀起一场怎样的血雨腥风呢?

    3. ARM的身世

    1978年12月5日,物理学家赫尔曼·豪泽(Hermann Hauser)和工程师Chris Curry,在英国剑桥创办了CPU公司(Cambridge Processing Unit),主要业务是为当地市场供应电子设备。

    巨人们的青葱岁月

    1979年,CPU公司改名为AcornRISCMachine计算机公司。Acorn公司打算使用摩托罗拉公司的16位芯片,但是发现这种芯片太慢也太贵。"一台售价500英镑的机器,不可能使用价格100英镑的CPU!"他们转而向Intel公司索要80286芯片的设计资料,但是遭到拒绝,于是被迫只能赶鸭子上架自己研发,不知道现在的Intel会不会为当时的决定而后悔呢。

    ARM公司前身Acorn

    1985年,RogerWilson和SteveFurber设计了他们自己的第一代32位、6MHz的处理器,RogerWilson和SteveFurber用它做出了一台RISC指令集的计算机,简称ARM(Acorn RISC Machine)。这就是ARM这个名字的由来。

    RISC的全称是"精简指令集计算机"(reduced instructionset computer),它支持的指令比较简单,所以功耗小、价格便宜,特别合适移动设备。由于Acorn芯片符合低功耗的特性,苹果当时正在开发新的PDA设备「Newton」就直接选用了Acorn的芯片。Acorn为苹果公司后来设计出成功的产品iPhone打下了良好的基础。

    1990年11月,Acorn、Apple和VLSI共同出资创建了ARM。Acorn RISC Machine正式更名为Advanced RISC Machine。被人称作“英国的苹果电脑公司”。由于缺钱,ARM公司的第一个办公室不得不设在剑桥乡下的一座改建过的18世纪的谷仓中,公司的办公地点非常简陋,就是一个谷仓。

    公司成立初期缺乏资金,业绩是寸步难行,鉴于此种情况,ARM做了一个影响时代的决定:ARM不制造芯片,只将芯片的设计方案(IP)授权给半导体合作伙伴(高通、苹果、MTK及三星等),后者使用ARM的架构、设计以及开发工具推出自己的处理器,然后再供应给OEM客户(各种手机、平板厂商),各芯片公司再根据自己的需求进行一些改进。从此,ARM的公司在商业上开启了设计授权之路,殊不知此决定在十几年后改变了智能手机芯片市场,也正是借由此模式的开展,使得ARM芯片业务遍地开花,甚至连PC领域的老大英特尔也不由感叹。

    1993年,Cirrus Logic和德州仪器公司先后加入ARM阵营。当年ARM7问世。

    1997年,ARM里程碑产品ARM9发布,标志着ARM处理器正式进入微处理器领域。

    1998年4月17日,ARM在英国伦敦证交所和美国纳斯达克上市。

    2004年,Cortex系列处理器诞生,从此不再用数字为处理器命名。它分为A、R和M三类,面向不同的市场。

    2008年,ARM芯片的出货量正式突破100亿片

    2010年6月,苹果表示有意以80亿美元的价格收购ARM,但遭到拒绝。ARM公司CEO

    Warren East称“ARM公司作为独立公司更具价值”。

    2011年,ARM推出了旗下首款64位架构ARMv8,还推出了big.LITTLE技术,高性能核心与节能核心相结合。

    2013年12月13日,ARM收购著名光引擎技术公司Geomerics,扩大在图形技术行业的领先地位。

    2015年,ARM基于ARMv8架构推出了面向企业级市场的新平台标准,此外还开始在物联网领域发力。同年,福布斯杂志将ARM评为世界上五大最具创新力的公司之一。

    2016年,日本软银同意斥资243亿英镑收购ARM。

    2017年3月,ARM发布了针对人工智能以及机器学习进行优化的DynamIQ技术作为下一代ARM Cortex-A系列处理器的基础,正式发力AI领域。

    ARM的生态链公司

    4.机器指令

    我们看看为什么基于x86 linux OS下的软件不能直接运行在AndroidARM平台设备上?

    我们都知道计算机只能识别0,1这样的二进制机器语言。所以最早的计算机程序都是用机器语言来写的,那个时候的码农真的才叫大神,他们需要去记忆大量的机器指令码,老王称之为编程的石器时代,后来巨人们发明了高级语言,于是乎鸟枪换炮,这才真正的解放了我等码农,现在想想我们能够在明亮的办公司里面对着电脑敲hello world是一件多么美好的事情呀!为了缅怀下巨人们的卓越贡献,我们用我们码农的方式再表达下敬意:

    码农们都知道我们写的高级语言需要通过编译工具执行一系列的处理最终才能生成机器识别的二进制文件。所以我们的hello.c需要经过预编译,编译,链接后,最终才生成机器识别的二进制。

    在执行程序的时候,需要CPU将这些指令码根据它们之前定义好的规则翻译成机器能够识别的语句(译码),这样最终CPU才能够按照我们的代码思想为我们服务。

    但是类似X86和ARM平台它们所定义的规则肯定是不同的,所以相同的代码经过不同平台的编译链工具交叉编译处理后会生成特定平台的二进制码,二者的交流语言规则不同,所以定然无法沟通。

    图:Hello.c ARM汇编指令和X86汇编指令对比

    从上图可以看出ARM的语言规则和X86的语言规则完全是不一样的,简直无法沟通啊。

    5.指令集

    2009年6月17日,老牌处理器架构厂商美普思(MIPS)宣称,龙芯所属的中科院计算技术研究所(简称计算所)获得MIPS32、MIPS64的架构授权,双方开展长期战略性合作。这个消息翻译下就是:龙芯采用了MIPS的指令集。

    龙芯作为我国自主研发的处理器。都希望能够全部自主创新不被外界牵制,然而它还是不得不采用现存的指令集,为什么呢?归根到底是指令集的威力太大。用写文章来打个比喻,你用自己造的文字写一篇文章,人家认识吗?创造全新的指令集技术上并不难实现,难得是会不会有人支持你。使用新的指令集意味着与之配套的编译器、操作系统、应用软件全部都要重新编写。这个工作量无疑是巨大的。指令集的强大不在于它所属的公司,而在于它的背后有一个强大的生态链,如芯片、软件、工具等等。

    那么什么是指令集呢?

    ISA:一款处理器所支持的指令以及指令的字节级编码方式成为该处理器的指令集体系结构。如X86,ARM指令集,它是处理器的设计规范,定义处理器能够做什么,是处理器的抽象描述。从我们程序猿的角度看,ISA就是一些指令集以及寄存器的描述。ARM指令集是基于精简指令集计算机(RISC)设计的。

    图:ARMv8 A64 LDR指令描述。

    6 ARM的家族

    到目前为止,ARM共8种ISA版本,也就是ARMv1

    ~ ARMv8。其中ARMv1和ARMv2地址范围只到26 bits,自ARMv3开始则采用了32 bits地址范围,这种32-bit CPU架构一直延续到ARMv7,ARMv8开始,CPU架构则更改为64-bit

    对比看下我的三星s6手机CPU的信息看能看到哪些信息呢?

    ARM9之前的版本采用的是冯诺依曼结构(von

    Neumann architecture)。而从ARM9以后都使用的是哈佛架构(Harvard architecture)。

    冯诺依曼结构:一种将程序指令存储器和数据存储器合并在一起的存储结构。取指令和取操作数都在同一总线上,通过分时复用的方式进行。缺点是在高速运行时,不能达到同时取指令和取操作数,从而形成了传输过程的瓶颈。

    哈佛结构:是一种将程序指令存储和数据存储分开的存储器结构,它的主要特点是将程序和数据存储在不同的存储空间中,即程序存储器和数据存储器是两个独立的存储器,每个存储器独立编址、独立访问,目的是为了减轻程序运行时的访存瓶颈。中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行),执行时可以预先读取下一条指令。达到数据和指令的存取可以同时进行,同时可以使指令和数据有不同的数据宽度。

    自ARMv7起处理器命令以Cortex开头。

    Cortex-A—高性能,面向性能密集型系统的应用处理器内核。

    Cortex-R—快速响应,面向实时应用的高性能内核。

    Cortex-M—小型、低功耗,面向各类嵌入式应用的微控制器内核。

    最新的ARM Cortex-X系列见如下:

    ARM根据不同的状况增加了许多种ISA的扩充,比如在Java很火红的年代,为了提升JVM执行的效率,而引入了Jazelle指令集,用来协助增强Java bytecode运算的速度/占用空间(不过由于Android的dalvik并未将Java程序转换成bytecode的形式,因此在Android平台上Jazelle指令集并未有任何显着的效能提升)

    各个不同的ARM版本对应的扩充指令集架构信息如下:

    ARMv8-A将64位架构支持引入ARM架构中,其中包括:

    ·64位通用寄存器、SP(堆栈指针)和PC(程序计数器)

    ·64位数据处理和扩展的虚拟寻址

    ·两种主要执行状态:

    AArch64 - 64位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持

    AArch32 — 32位执行状态,包括该状态的异常模型、内存模型、程序员模型和指令集支持

    这些执行状态支持三个主要指令集:

    A32(或ARM):32位固定长度指令集,通过不同架构变体增强部分32位架构执行环境现在称为AArch32。

    T32:(Thumb)是以16位固定长度指令集的形式引入的,随后在引入Thumb-2技术时增强为16位和32位混合长度指令集。部分32位架构执行环境现在称为AArch32。

    A64:提供与ARM和Thumb指令集类似功能的32位固定长度指令集。随ARMv8-A一起引入,它是一种AArch64指令集。

    7.处理器架构

    3月22日,高通公司以“强者·愈强”为主题,在北京举办骁龙835亚洲首秀。作为业界第一款商用10纳米FinFET制程的移动平台,骁龙835拥有更为强大的性能与能效,而前不久小米推出了米6,也成为了国内首发骁龙835的手机厂商。这也预示着2017年,新一轮的智能手机大战正在徐徐拉开,而作为基础平台的应用处理器,开始进入10nm的军备竞赛,处理器临新一轮的激战。

    目前市场流传有5颗10nm移动处理器,分别是骁龙835、Helio X30、麒麟970、苹果A10X和三星Exynos 8895。

    高通:骁龙835采用了Kryo 280 8核架构,4大核最高主频2.45GHz,4小核最高频1.9GH。

    联发科:Helio X30使用三丛十核结构,包括两个Cortex-A73 2.8GHz强力核心,四个Cortex-A53 2.3GHz大核心,四个Cortex-A35 2.0GHz小核心。是全球首款三架构混合big.LITTLE架构三丛集十核心处理器。

    华为:麒麟970 CPU由8个核心组成,分别是4核ARM

    Cortex-A73和4核ARM Cortex-A53,最高主频为2.8GHz。

    三星:Exynos8895,采用最新的自研4核猫鼬M2架构+4核高效能A53核心CPU。

    那么这场军备竞赛到底谁能笑傲江湖呢?

    早期在多核时代来临的时期,大家都卯足劲了的拼核,4核、8核,MTK甚至搞出了10核。

    然而手机多核处理器本身就和电脑处理器有着巨大的差别,它面临着手机巨大的功耗压力,因此手机处理器需要综合考虑。并不是核越多,性能就越强。如今手机圈里流传着这样一个笑话:一核有难九核围观,就是指的MTK上代的旗舰机处理器X20,X20很容易发热,一发热就玩锁核降频来降温,所以才会有网友这样调侃。

    而同样基于10nm工艺的高通835,MTK X30,三星8895,华为970 4者性能又会是谁胜出呢?

    我们直接拿网上的一个针对三星S8手机的评测数据来看下,Galaxy S8搭载了两种版本的SoC:一个是三星Exynos 8895,另一个则是高通骁龙835。从跑分来看,单核成绩Exynos 8895为1978, 骁龙835为1916,两者差距不是很大。而多核成绩,三星6375 VS骁龙6011,两者之间的差距就有些大了。这可以印证三星Exynos 8895性能上要强于高通骁龙835,而可以预见的是8895和835将会吊打MTK X30。为什么基于同样的10nm工艺,不同厂商的8核之间的性能差异会比较大,而10核更是会输给8核呢?根本原因就在于它们处理器的架构不同。也可以简单的理解为处理器的工作方式。这是不同等级的处理器最重要的划分。

    那么何为架构,它和ARM又是怎样的关系呢?

    CPU架构是CPU厂商给属于同一系列的CPU产品定的一个规范,主要目的是为了区分不同类型CPU的重要标示。目前市面上的CPU分类主要分有两大阵营,一个是intel、AMD为首的复杂指令集CPU,另一个是以IBM、ARM为首的精简指令集CPU。两个不同品牌的CPU,其产品的架构也不相同,例如,Intel、AMD的CPU是X86架构的,而IBM公司的CPU是PowerPC架构,ARM公司是ARM架构。你可以这样理解:处理器微架构相当于建筑物的设计图,指令集相当于建筑材料。建筑材料有钱都好买,但是卢浮宫只有贝聿铭能做出那么棒的设计。

    8.公版架构核VS自主架构

    ARM牛逼的地方就在于它不仅有指令集,还设计处理器架构,比如Cortex-A53/A73,像三星、MTK、英伟达、海思这些厂商拿到这些架构授权后,只需要选择核心数、总线互联、缓存等就基本完成CPU部分的设计。我们把这种直接使用ARM设计好的内核方案叫做公版架构。如高通骁龙810,MTK,三星exynos7420,海思等。

    但是面对日新月异的行业应用需求,一些有能力的芯片厂商不甘于平庸,或者有特殊要求,为了形成差异化的竞争,就拿ARM提供的指令集架构如ARMv7/ARMv8,去研发自己的内核架构,之后再完成整个CPU的搭建,开启了自主设计处理器架构的道路。

    目前业界能够自己设计处理架构的也就 苹果、高通、三星。其他如MTK、海思、英伟达以及最新的松果都还是直接采用的ARM的公版IP核,如Cortex-A73,Cortex-A53等。所以ARM的授权方式也就分为指令集授权和IP核授权。

    高通Kyro架构

    Kryo是Qualcomm推出的首款ARMv8指令集定制设计的64位CPU,是广受欢迎的定制基于ARMv7指令集Krait CPU的延续—KraitCPU支持骁龙800、801和805处理器。

    苹果Swift &Cyclone&Typhoon架构

    到了iPhone5的A6开始,苹果就自己设计了Swift架构,采用ARMv7-A指令集,到了A7首次使用64位的ARMv8指令集的Cyclone内核架构。仅仅双核的配置性能就等同于四核的A15处理器。在到iPhone 6配备的A8芯片时,改进的Typhoon架构单核性能超A57,多核只稍微落后八核A57+A53的骁龙810。可见架构的不同影响是多么大。

    三星猫鼬M1 & M2架构

    对一直注重研发的三星而言,肯定是不甘心只看着别人玩自主架构风生水起的,所以配备在三星S7上的Exynos 8890,就采用了基于ARMv8指令集自研的Mongoose内核取代了A57,性能同样强于A72,和高通kryo不相上下,而Exynos8895采用三星自主研发的第二代“猫鼬”架构。

    当然,不管自主还是公版称王称霸,而作为消费者,只要能够提供给我们很好的性价比产品就行了,实在没必要去锱铢必较那多几百的跑分。

    好了,通过这堂课我想码农朋友们终于弄懂了ARM的前世今生,以及什么是ISA指令集,什么是CPU内核架构,以及移动处理器芯片厂商的争霸格局。ARM既然都在不断的引领着科技的发展。通过这节课,老王希望下次再有朋友问到咋们相关的ARM技术点问题,我希望我们大家的是这样的回答的:

    OK,everybody,下课。

    (欢迎关注老王的公众号:码农职场加油站(ID:coder51up)关注更多技术干货,更多精彩的职场经验技术文章我会第一时间在公众号上发布,希望能够在一些技术点上为大家抛砖引玉更多干货技能,更多精彩咱们下回分解。)

    相关文章

      网友评论

      本文标题:一文带你分分钟掌握ARM前世今生及相关技术,带你拨开云雾见天空

      本文链接:https://www.haomeiwen.com/subject/eweutxtx.html