zoukankan      html  css  js  c++  java
  • ARM 处理器:RISC与CISC 是什么?【转】

    转自:https://blog.csdn.net/willsun2017/article/details/83388990

    源文地址:传送门

    你知道iOSWindows PhoneAndroid这3大平台的手机共通点是什么吗?除了都可以打电话、传简讯、安装App之外,在硬件架构上最大的共同点,就是这些手机CPU全都是采用ARM架构。现在连Microsoft都相中这块逐渐成长中的市场大饼,下一代的微软视窗作业系统Windows 8也将会推出ARM版本,称为Windows RT。究竟ARM与行动装置的关系是什么?又如何在这竞争激烈的市场中存活下去,逐渐壮大在嵌入式产品的影响力?看下去就知道。

    快速目录:

    l ARM的开始、世界上首颗RISC处理器

    开始大卖的ARM7、更换哈佛架构

    被苹果相中的ARMv6、高中低阶Cortex

    部分ARM处理器家族、架构对照表

    1. 都是从不务正业开始

    如同Intel并不是以CPU起家,而是从存储器跨足到IC设计,至今成为x86处理器的龙头。ARM也是一样,这一切都要从Hermann Hauser和Chris Curry所创立的Cambridge Processor Unit开始说起。

    1978年,由物理学家Hermann Hauser和工程师Chris Curry一同在英国剑桥成立了一间公司,公司名称直接取作Cambridge Processor Unit(CPU),主要从事提供当地电子仪器设备的业务。第一份合约即是为ACE Coin Equipment公司开发一款水果盘,也就是拉霸的游戏机。

    ▲Cambridge Processor Unit为ACE Coin Equipment制造的水果盘游戏机。

    1979年,公司营运渐上轨道,便改名为Acron Computer有限公司。Acorn的中文翻译为橡子,就是在冰原历险记电影里,那只「鼠奎特」一直在追的果实,Acron Computer也以橡子为公司的标志。

    ▲Acorn Computer Ltd把橡子图案运用在自己的商标之中。

    2. 世界上首颗RISC处理器

    随着时间过去,渐渐地发现原本的硬件设计已不符需求,Acorn想要升级机器内的CPU。当时处理器的发展潮流是由8位元转向16位元,一开始有考虑使用美国国家半导体以及Motorola新的16位元芯片,但是经过评估后,发现2个缺点。

    执行上有点慢,中断的回应时间太长,而且太贵。

    一台500英镑的计算机,CPU售价高达100英镑。

    于是只好转向Intel,要求提供一些80286设计资料以及样品,但是却遭到Intel拒绝。这件事情后来直接导致Acorn决定设计自己需要的CPU,由于采用RISC架构的关系,名称就称为Acorn RISC Machine(ARM)。

    2.1. RISC与CISC的差异

    处理器的指令集可简单分为2种,CISC(complex instruction set computer)以及RISC(reduced instruction set computer)。一开始的处理器都是CISC架构,随着时间演进,有越来越多的指令集加入。由于当时编译器的技术并不纯熟,程序都会直接以机器码或是汇编语言写成,为了减少程序设计师的设计时间,逐渐开发出单一指令,复杂操作的程序码,设计师只需写下简单的指令,再交由CPU去执行。但是后来有人发现,整个指令集中,只有约20%的指令常常会被使用到,约占整个程序的80%;剩余80%的指令,只占整个程序的20%。于是1979年美国加州大学柏克莱分校的David Patterson教授提出了RISC的想法,主张硬件应该专心加速常用的指令,较为复杂的指令则利用常用的指令去组合。

    RISC的优点列举如下:

    指令长度固定,方便CPU译码,简化译码器设计。

    尽量在CPU的暂存器(最快的存储器元件)里操作,避免额外的读取与载入时间。

    由于指令长度固定,更能受益于执行线路管线化(pipeline)后所带来的效能提升。

    处理器简化,晶体管数量少,易于提升运作时脉。比起同时脉的CISC处理器,耗电量较低。

    RISC的缺点列举如下:

    复杂指令需要由许多的小指令去完成,程序变得比较大,存储器也占用比较多,这在硬盘昂贵,常常使用磁带储存的时代来说,是个大缺点。

    程序变长,代表着读取工作变得繁重,需要更多的时间将指令从存储器载入至处理器内。

    这里也提供一个小小的概念,CISC是在RISC出现之后才出现的相对名词,并不是从一开始就有CISC、RISC这2种处理器架构。

    3. 首颗RISC架构CPU

    于1985年,Acorn设计出了第一代处理器芯片,称为ARM1,由Sophie Wilson设计出类似于6502的指令集,因为当时Acorn为英国国家广播公司BBC所制造的BBC Micro计算机采用MOS 6502处理器,使用类似的指令集有助于缩短开发时间以及技术转移。Steve Furber则是负责设计硬件实作。ARM1以第二颗处理器的身分,安装在BBC Micro内部。

    ARM1在晶圆设计部分,规格为3微米制程、2层金属层、总计2万5千个晶体管、6MHz运作时脉、消耗功率120mW、芯片面积50mm2。当时Intel的80286使用1.5微米制程、13万4千个晶体管、6~12Mhz运作时脉,同时这2款处理器都不包含快取。

    同年10月,Intel发表80386处理器,与之相比,ARM1显得功能简单、能源消耗较少,在效能上不是80386的对手。这一差异导致ARM系列处理器往后的设计路线明显与Intel不同,Intel持续迈向x86高效能设计,ARM专注于低成本、低功耗的研发方向。

    ▲这是由VLSI制造的ARM1处理器,最外层那一圈不是CPU本体,而是必须焊在电路板上的连接座。

    4. 渐入佳境、架构变更

    真正商业化的处理器为ARM2,ARM1处理器架构为ARMv1,到了ARM2更新到ARMv2,这一代新增乘法器在核心之中。ARMv2的进阶版ARMv2a则是多包了存储器管理核心、绘图及I/O处理器。接下来的ARM3,处理器架构ARMv2a,是第一次于CPU里内建了4KB快取。1990年,Acorn开始与苹果计算机合作发展新一代的ARM芯片,特地还为此设立了一间公司,称为Advanced RISC Machines公司。最初财务吃紧,办公室仅为一个谷仓,成员也仅有12人。原本ARM所代表的Acorn RISC Machine,也在此时更换为Advanced RISC Machine。

    1991年发展出的ARM6,处理器架构更新为ARMv3,主要扩展存储器定址线。之前的ARM产品都只有26bit的存储器定址线,最大可支援64MB的存储器。从ARM6开始,完整支援32位元存储器定址,最大支援到4GB。在此离题一下,ARM6处理器家族下的ARM610处理器,曾经用在苹果计算机的Newton Message Pad上头,Newton也被视为现今PDA与Smart Phone的始祖。

    ▲Apple Newton Message Pad。

    延伸阅读:

    智能型手机拆光看清楚:24个重要元件解说,认识手机的内涵

    (后面还有开始大卖的ARM7)

    5. 开始大卖的ARM7

    1993年推出的ARM7延续着ARMv3核心,但是由于制程的进步,快取加大至8KB,时脉也一举拉高至40MHz。

    ARM7TDMI(处理器架构ARMv4T),除了原本的32位元指令集外,还新增了Thumb,也就是精简过的16位元指令集,让编译出来的程序可以缩小程序码体积,官方表示与标准的ARM指令集相比,可以缩小35%的程序码体积,又能享受32位元架构所带来的效能提升。Thumb指令在执行时会通过处理器内一个叫做Thumb译码器的东西,及时解压成32位元ARM指令,同时也可受惠于32bit的存储器总线,加速指令与资料的载入。

    但之后的ARM8家族和Digital Equipment Corporation向ARM买授权自行制作的处理器StrongARM,都不支援Thumb。

    ARM7EJ的处理器架构为ARMv5TEJ,直接加入称为Jazelle DBX的运算电路,能够以硬件加速大部分的Java bytecode,提升Java程序的执行效率;同时也新增适合处理DSP的指令,如饱和运算(saturated arithmetic)可以加速多媒体应用。

    5.1. Java的执行方式

    程序设计师以Java语言写出程序后,经过编译器编译成Java bytecode档,执行时便把这个Java bytecode丢入一个称作JVM(Java Virtual Machine)的模拟器里执行,在各种平台上都有不同的JVM,所以编译过后的Java bytecode能够跨平台执行。

    5.2. 饱和运算(saturated arithmetic)

    正常以二进制表示为11111111(255)+00000001(1)=100000000(256),但是一个8bit的加法器,当输入255+1的指令后,计算出来的结果将会是0。因为处理器只有8bit,最高位会产生数值溢位,实际交由8bit加法器运算将变成11111111(255)+00000001(1)=00000000(0)。但是当处理器支援饱和运算后,255+1的结果将变成255,经计算后的数值资料只会顶天立地(该资料类型的最大值或最小值),不会产生overflow或是underflow。

    6. 更换为哈佛架构

    ARM9处理器家族内部处理器架构为ARMv5TE,导入了相当重要的架构更新,以往ARM和x86处理器都是采用冯?纽曼架构,意即中央处理器和储存装置是分开的,中央处理器到储存装置中读取一段程序码执行,而不同程序码可以造成不同的执行结果。相较于古早时代的计算机,一旦要执行不同的程序码时,必须更动硬件设计,重新接线。约翰?冯?纽曼在1945年的论文中提出这个处理单元和储存单元分离的概念,对于后来计算机发展有相当重大的影响。

    哈佛架构则是冯?纽曼架构的延伸,哈佛架构更进一步定义了程序和资料是由两个独立的空间储存,同时也有两个存储器控制单元分别操作。读取程序后译码便得到资料位址,再到资料存储器中读取资料。此种架构好处在于指令和资料的存储器操作能够同时进行,当处理器在运算资料时,便可以先行撷取下一道指令。

    ▲冯?纽曼架构,程序和资料储存在同一个存储器中。

    ▲哈佛架构,程序和资料分开储存至不同的存储器中。

    在ARM10E的处理器架构升级为ARMv5TE,加入了VFP(矢量浮点架构)的协同处理器,提升浮点数运算能力。

    (后面还有智能型手机应用大爆发)

    7. 智能型手机应用大爆发

    被苹果相中的ARMv6

    在2007年的Macworld发生了一件大事,划时代的iPhone诞生了,直觉的使用者操作立刻席卷全球,App Store的商业模式解决以往PDA程序太少的窘况。而第一代的iPhone和其后的iPhone 3G便是采用ARMv6处理器架构,也是第一次让人感受到,原来ARM可以做到这么好的使用者体验。

    ARMv6架构在2001提出,对应ARM11处理器家族。新增SIMD处理功能,相当适合影片处理加速使用。同时也提出ARM11MPCore,首次将多核心的概念导入ARM处理器中。Thumb指令集也升级到第2代Thumb-2,将原先16bit的指令集部分扩展到32bit,变成同时拥有16bit和32bit指令长度的指令集。

    不过这个ARMv6架构有点短命,还没看到几颗多核的ARM11处理器(NVIDIATegra即为ARM11MPCore),就被ARM紧接而来的Cortex处理器给盖过去。

    7.1. 划分高中低阶的Cortex

    在ARM11之后的处理器家族,改采Cortex命名,并针对高、中、低阶分别划分为A、R、M三大处理器。象是高阶手机用的Coretex-A系列,或者是微控制器所使用的Coretex-M系列,需要较高性能、或是实时处理的系统则改用Coretex-R系列。

    除了Cortex-M0、Cortex-M1为ARMv6-M,冯?纽曼架构之外,其他Cortex的处理器架构更新到ARMv7,一样由高至低分成ARMv7-A、ARMv7-R、ARMv7-M三种,其中ARMv7-M不支援最原始的ARM指令集,仅支援16bit的Thumb指令集,却加入NVIC(Nested Vectored Interrupt Controller),提供更快的中断处理、还有负责CPU在深层睡眠时的中断处理WIC(Wake-up Interrupt Controller)。

    Cortex-A(ARMv7-A)和 Coretex-R(ARMv7-R)2种架构基本上是相同的,都支援更新的进阶型SIMD处理,称为NEON,ARM宣称效能至少是上一代处理器架构ARMv6的2倍。NVIDIA的Tegra 2处理器较为特殊,虽是采用Cortex-A的CPU,但没有包含NEON,反而使用自家的技术,内建专门的音讯处理器和视讯处理器。

    Cortex-A和 Coretex-R最大的差异在于存储器管理单元部分,Cortex-A使用MMU(memory management unit)、Cortex-R使用MPU(memory protection unit)。前者的存储器管理单元提供虚拟存储器的支援,后者只能运作在存储器保护模式。

    7.2. 存储器管理:real、protected、virtual

    最初的CPU存储器管理只有real mode,在这个模式下,所有程序都可以直接存取存储器、I/O、计算机附加的硬件。但是在这种模式下的存储器空间少(1MB),程序无法多工(如果2个程序同时喂给打印机资料,印出来会是什么鬼啊!)。到了80286处理器后,导入了protected mode,将作业系统和程序的存储器区块分开,如果程序想要存取存储器,必须经由作业系统中介。从而提升系统安全性和稳定性。virtual memory则是在protected mode下的产物,允许硬盘之类非实体存储器的装置能够模拟成存储器。逻辑上来说,可以在不增加硬件花费的情况下,直接加大实体存储器容量。但硬盘的存取速度却远不如实体存储器,目前SATA 6Gb/s界面频宽为6Gb/s,DDR3-1600双通道的界面频宽却有25.6GB/s,两者相差约43倍。

    8. 遍地开花的ARM

    ARM一开始与苹果、VLSI所投资的资金下成立,初期营运状况不佳,而英国当地也没有什么晶圆厂,同时ARM也决心将自行发展的技术成为业界的标准。在这些条件的加总之下,ARM选择了以IP授权的方式经营。

    IP(intellectual property智慧财产权)授权,即是把自己所创造的东西,以某种方式授权给其他人利用。例如我们在行人穿越线两旁所看到的小绿人走路灯号,当初的设计者便可以把此种想法授权给其它地区采用,借以收取授权费。而ARM也是透过此种方式营利,除了一开始的授权费之外,每卖出一颗芯片还需要付版权费。另一家较为知名采用IP授权营利的公司为MIPS,其产品常常可以在网络设备中见到。

    这种授权方式使得每家公司都可以依据自身需求,设计出客制化芯片。比如说产品并不需要绘图的部分,便可以把绘图IP核心拿掉,亦或者也可以在芯片里塞入其他家厂商做出的IP核心,让功能更多元。相较于Intel近年强迫中奖的显示核心,ARM的作法弹性许多。

    ▲常见的ARM授权制造模式,ARM将设计授权给设计公司(如Qualcomm),制造授权给晶圆代工公司(如台积电),最后生产出来的芯片再卖给其他厂商做成实际产品(如HTC)。

    ▲众多的合作伙伴,这些公司都有ARM的IP授权,你能找出哪几个较令人熟悉的牌子呢?

    9. 未来朝向64bit迈进

    如同 x86迈向x64一般,ARM也需要更大的总线来增加效能。在下一代的ARMv8架构中,也将加入64bit的支援,但是一切都还在讨论中。但是现在也不急,暂时还有个Coretex-A15可以拿来填一下发展时程,至于会增加哪些指令集则尚未确定。

    ARMv8处理器将有2个执行状态,AArch32和AArch64。前者将完全兼容ARMv7的指令集及架构,将原封不动地移植到ARMv8身上。后者AArch64则是全新的指令集与处理器架构。

    ARM目前也在积极建立并等待64bit的生态链完备,就如同x86转换到x64一般,AMD的64位元处理器早在2003年问世,但是等到64位元作业系统、程序真正普及,却也只是近几年的事情而已。更别说一般人计算机C槽里那个Program Files x86资料夹,放在里面的程序应该比Program Files还要多。

    最近开始身价上涨的硬件加解密功能,ARM也预计加入AES加解密的指令,利用进阶SIMD的128bit暂存器来实作,SHA-1和SHA-256也在支援中。

    9.1. AES算法

    Advanced Encryption Standard高级加密算法,是一种用来进行区块加密(将数值资料切割成等长,分别对个别区段分别加密)的技术,用以取代Data Encryption Standard(DES)的加密方式,目前DES已被SciEngines公司所制造的COPACOBANA RIVYERA硬件证实能够在1天的时间内被暴力破解完毕。

    9.2. SHA算法

    Secure Hash Algorithm安全杂凑算法,不同的资料数值,经过特定算法所运算出来的SHA值也不同,这个固定长度的值可视为这个资料的指纹,具有专一性。目前SHA算法用来检查档案完整性与否,是否经过有心人士的篡改;也用来检查从网络上下载回来的档案是否正确,特别是那些动辄几GB的档案。

    10. 附录

    (后面还有ARM处理器家族、架构对照表)

    10.1. 部分ARM处理器家族、架构对照表

    (资料来源:维基百科、ARM)

    10.2. ARM年度大事纪

  • 相关阅读:
    基于Python的人脸动漫转换
    let 与 var的区别
    【LeetCode】汇总
    【HDU】4632 Palindrome subsequence(回文子串的个数)
    【算法】均匀的生成圆内的随机点
    【LeetCode】725. Split Linked List in Parts
    【LeetCode】445. Add Two Numbers II
    【LeetCode】437. Path Sum III
    【LeetCode】222. Count Complete Tree Nodes
    【LeetCode】124. Binary Tree Maximum Path Sum
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/10725030.html
Copyright © 2011-2022 走看看