体系结构: RISC, CISC, x86, ARM, MIPS_gaijf的博客-程序员ITS203_正交指令集

技术标签: 软件开发  

硬件体系结构(Architecture)

软件操作系统(Operating System)

一、RISC与CISC

 1.CISC(Complex Instruction SetComputer,复杂指令集计算机

复杂指令集(CISC,Complex Instruction Set Computer)是一种微处理器指令集架构(ISA),每个指令可执行若干低阶操作,诸如从内存读取、储存、和计算操作,全部集于单一指令之中。

  • CISC特点:

1.指令系统庞大,指令功能复杂,指令格式、寻址方式多;

2.绝大多数指令需多个机器周期完成;

3.各种指令都可访问存储器;

4.采用微程序控制;

5.有专用寄存器,少量;

6.难以用优化编译技术生成高效的目标代码程序;

在CISC指令集的各种指令中,大约有20%的指令会被反复使用,占整个程序代码的80%。而余下的80%的指令却不经常使用,在程序设计中只占20%。

 

2.RISC(reduced instruction setcomputer,精简指令集计算机)

精简指令集这种设计思路对指令数目和寻址方式都做了精简,使其实现更容易,指令并行执行程度更好,编译器的效率更高。它能够以更快的速度执行操作。

这种设计思路最早的产生缘自于有人发现,尽管传统处理器设计了许多特性让代码编写更加便捷,但这些复杂特性需要几个指令周期才能实现,并且常常不被运行程序所采用。此外,处理器和主内存之间运行速度的差别也变得越来越大。在这些因素促使下,出现了一系列新技术,使处理器的指令得以流水执行,同时降低处理器访问内存的次数。

实际上在后来的发展中,RISC与CISC在竞争的过程中相互学习,现在的RISC指令集也达到数百条,运行周期也不再固定。虽然如此,RISC设计的根本原则——针对流水线化的处理器优化——没有改变,而且还在遵循这种原则的基础上发展出RISC的一个并行化变种VLIW(包括Intel EPIC),就是将简短而长度统一的精简指令组合出超长指令,每次执行一条超长指令,等于并行执行多条短指令。

  • RISC特点:

1.统一指令编码(例如,所有指令中的op-code永远位于同样的位元位置、等长指令),可快速解译;

2.泛用的暂存器,所有暂存器可用于所有内容,以及编译器设计的单纯化(不过暂存器中区分了整数和浮点数);

3.单纯的寻址模式(复杂寻址模式以简单计算指令序列取代);

4.硬件中支援少数资料型别(例如,一些CISC电脑中存有处理字节字串的指令。这在RISC电脑中不太可能出现)。

 

二者区别:

  CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。RISC和CISC是设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时间等诸多因素中做出某种平衡,以求达到高效的目的,但采用的方法不同,因此,在很多方面差异很大,它们主要有:

  (1)指令系统:RISC设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不常用的功能,常通过组合指令来完成。因此,在RISC机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而CISC计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。

  (2)存储器操作:RISC对存储器操作有限制,使控制简单化;而CISC机器的存储器操作指令多,操作直接。

  (3)程序:RISC汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计;而CISC汇编语言程序编程相对简单,科学计算及复杂操作的程序社设计相对容易,效率较高。

  (4)中断:RISC机器在一条指令执行的适当地方可以响应中断;而CISC机器是在一条指令执行结束后响应中断。

  (5)CPU:RISCCPU包含有较少的单元电路,因而面积小、功耗低;而CISCCPU包含有丰富的电路单元,因而功能强、面积大、功耗大。

  (6)设计周期:RISC微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术;CISC微处理器结构复杂,设计周期长。

  (7)用户使用:RISC微处理器结构简单,指令规整,性能容易把握,易学易用;CISC微处理器结构复杂,功能强大,实现特殊功能容易。

  (8)应用范围:由于RISC指令系统的确定与特定的应用领域有关,故RISC机器更适合于专用机;而CISC机器则更适合于通用机。


二、x86、ARM、MIPS架构   

x86、ARM、MIPS算是是目前最常见也相对最知名的处理器架构了。

  • x86架构

x86或80x86是英特尔首先开发制造的一种微处理器体系结构的泛称。该系列较早期的处理器名称是以数字来表示,并以“86”作为结尾,包括Intel 8086、80186、80286、80386以及80486,因此其架构被称为“x86”。

x86架构于1978年推出的Intel 8086中央处理器中首度出现,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。8086在三年后为IBM PC所选用,之后x86便成为了个人电脑的标准平台,成为了历来最成功的CPU架构。

8086是16位元处理器;直到1985年32位元的80386的开发,这个架构都维持是16位元。接着一系列的处理器表示了32位元架构的细微改进,推出了数种的扩充,直到2003年AMD对于这个架构发展了64位元的扩充,并命名为AMD64。后来Intel也推出了与之兼容的处理器,并命名为Intel 64。两者一般被统称为x86-64x64,开创了x86的64位时代。

值得注意的是Intel早在1990年代就与惠普合作提出了一种用在安腾系列处理器中的独立的64位架构,这种架构被称为IA-64IA-64是一种崭新的架构,和x86架构完全没有相似性。(对于Intel和AMD的处理器技术,打算专门挑些典型的区别总结一篇文章)

x86架构是重要地可变指令长度的CISC。字组(word, 4字节)长度的内存存取允许不对齐内存位址,字组是以低位字节在前的顺序储存在内存中。向后相容性一直都是在x86架构的发展背后一股驱动力量(设计的需要决定了这项因素而常常导致批评,尤其是来自对手处理器的拥护者和理论界,他们对于一个被广泛认为是落后设计的架构的持续成功感到不解)。但在较新的微架构中,x86处理器会把x86指令转换为更像RISC的微指令再予执行,从而获得可与RISC比拟的超标量性能,而仍然保持向前兼容。

如今,我们面前的PC机基本都是x86架构计算机。如果你想尝试其他架构的计算机,首先要考虑的是放弃Windows系统。(好消息是即将正式发布的Windows 8 将支持x86和ARM两种架构)

  • ARM架构

ARM架构(进阶精简指令集机器(AdvancedRISC Machine),较早称作Acorn RISCMachine)是一个32位元精简指令集(RISC) 处理器架构,其广泛地使用在许多嵌入式系统设计。由于节能的特点,ARM处理器非常适用于移动通讯领域,符合其主要设计目标为低耗电的特性。

ARM架构包含了下述RISC特性:

1.读取/储存 架构

2.正交指令集(任意存取指令可以任意的寻址方式存取数据Orthogonal instruction set)

3.大量的16 × 32-bit 寄存器阵列(register file)

4.固定的32 bits 操作码(opcode)长度,降低编码数量所产生的耗费,减轻解码和流水线化的负担。

5.大多均为一个CPU周期执行。

为了补强这种简单的设计方式,相较于同时期的处理器如Intel 80286和Motorola68020,还多加了一些特殊设计:

1.大部分指令可以条件式地执行,降低在分支时产生的负重,弥补分支预测器(branch predictor)的不足。

2.算数指令只会在要求时更改条件编码(conditioncode)

3.32-bit筒型位移器(barrelshifter)可用来执行大部分的算数指令和寻址计算而不会损失效能

4.强大的索引寻址模式(addressing mode)

5.精简但快速的双优先级中断子系统,具有可切换的暂存器组

在今日,ARM家族占了所有32位元嵌入式处理器75%的比例,使它成为占全世界最多数的32位元架构之一。ARM处理器可以在很多消费性电子产品上看到,从可携式装置(PDA、移动电话、多媒体播放器、掌上型电玩、计算机)到电脑周边设备(硬盘、桌上型路由器)甚至在导弹的弹载计算机等军用设施中都有他的存在。

对于智能机爱好者们,ARM处理器的大名一定早有所闻。

  • MIPS架构

MIPS架构(英语:MIPSarchitecture,为“无内部互锁流水级的微处理器Microprocessorwithout Interlocked Pipeline Stages的缩写,也是Millionsof Instructions Per Second的相关语),是一种采取精简指令集(RISC)的处理器架构,1981年出现,由MIPS科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。

MIPS是出现最早的商业RISC架构芯片之一。MIPS的系统结构及设计理念比较先进,强调软硬件协同提高性能,同时简化硬件设计。

2002年,中国科学院计算所开始研发龙芯处理器,采用MIPS架构,但未经MIPS公司的授权,遭到侵权的控告。2007年,中国科学院与MIPS公司达成和解,得到正式授权。中国龙芯2和前代产品采用的都是64位MIPS指令架构。过去,MIPS架构的产品多见于工作站领域,索尼PS2游戏机所用的“Emotion Engine”也采用MIPS指令,这些MIPS处理器的性能都非常强劲,而龙芯2也属于这个阵营,在软件方面与上述产品完全兼容。




另:

  • ARM与MIPS对比:

与当前商业化最成功的ARM架构相比,MIPS的优势主要有以下几点:

1,MIPS支持64bit指令和操作,ARM目前只到32bit

2,MIPS有专门的除法器,可以执行除法指令

3,MIPS的内核寄存器比ARM多一倍,所以同样的性能下MIPS的功耗会比ARM更低,同样功耗下性能比ARM更高

4,MIPS指令比ARM稍微多一点,稍微灵活一点

5,有观点认为MIPS的bank寄存器性能也要好于ARM,不过没见过能反映出来的测试

以上为MIPS对比ARM架构的优势,接下来我们再看一看MIPS架构的不足之处,

与ARM架构相比,MIPS架构也存在着以下几点不足

1,MIPS的内存地址起始有问题,这导致了MIPS在内存和cache的支持方面都有限制,现在的MIPS处理器单内核面对高容量内存时有问题

2,MIPS今后的发展方向是并行线程,类似INTEL的超线程,而ARM未来的发展方向是物理多核,目前看来物理多核占优。由此来看,我国的龙芯向多核发展还是颇具远见的。

3,MIPS虽然结构更加简单,但是到现在还是顺序单发射,ARM已经进化到了乱序双发射,甚至NV的丹佛已经是乱序三发射了。

商业上二者差别也大,ARM很昂贵,而且不能随意自行更改内核。而MIPS就要开放的多了。(这也算龙芯为什么不采用ARM架构的原因了。)

    龙芯为何选择MIPS?这还要从这三大架构的拥有者谈起。

    x86架构的拥有者intel可以算作是技术合作上最抠门儿的一位,在推出x86架构之后,intel就只将这一架构授权给过AMD和VIA等几个芯片公司。而在VIA退出x86架构处理器竞争之后,intel便不再给任何公司x86架构授权。所以从x86架构上入手,龙芯处理器显然是行不通的。intel的x86架构行不通,那么ARM架构是否就能行得通呢?答案当然也是否定的。

    ARM公司是一家非常优秀的芯片设计公司,但自身并不生产处理器,而是将自身的设计licensing卖给需要处理器的公司,而后交给他们生产或者是找人代工。也许有人要问了,既然ARM向外卖出架构设计,那么为何龙芯不去选择ARM架构呢?其实不然,ARM之所以能够发展成为一家非常成功的商业性公司,靠的就是芯片的架构设计,倘若架构设计被别人夺走了,那么自己就丢掉了赖以生存的饭碗。所以ARM虽然对外进行licensing授权,却不允许购买者进行任何对ARM架构有更改的设计。倘若个更改了设计,那么这便违反了合作协定。ARM便有权撤回licensing授权。我国的龙芯要是选择了ARM架构的话,那么基本上也就被捆住了脚步,无法发展出属于自己的高性能处理器了。

    自身虽然强大,但因考虑到市场发展的问题ARM也对外妥协过。目前高通,苹果和NVIDIA这三家公司便是ARM体系中较为特殊的几个。因为这三家公司在芯片设计领域的特殊地位,ARM为了能够拉拢他们站立在自己的阵营中,对这三家公司开出了特别通行证。在其他芯片公司只能使用licensing去生产芯片的时候,高通,苹果和NVIDIA却能够自行设计基于ARM架构的处理器。也正是拉拢到了高通,苹果和NVIDIA,才使得ARM拥有了更多的支持者。但即便这样,我们也不得不佩服ARM的老狐狸作风,在给出架构授权后,ARM依然会通过升级下一代架构为由让高通,苹果和NVIDIA再掏一回钱购买架构授权。这样ARM就可以再赚一把。相信看到这里您应该了解到龙芯不选择ARM的原因了。

    那么是什么本领让MIPS最终成为了我国龙芯处理器的设计架构呢?答案非常简单,那就是架构授权。也许有人又问了,ARM不也是给授权吗?那为什么还选MIPS呢?MIPS和ARM虽然都是对外进行架构授权的公司,但意义完全不同。ARM对外出售的是设计方案授权(licensing),与ARM的商业化相比,MIPS倒像是学院派的公司。MIPS的架构授权,并不限制任何对MIPS架构的更改。换句话说,就是MIPS公司给授权者一张白纸,而白纸上仅仅写着一行字,MIPS公司同意你设计生产MIPS架构处理器,至于你设计成什么样,性能有多高,经过多少代更改,MIPS一概不管,只要你不把架构彻底改变就行了。与ARM相比,MIPS是一个完全开放的架构,对龙芯未来的发展没有任何的限制,这与intel给AMD x86架构授权,而不是给设计图纸的道理是完全一样的。在加上MIPS本身经过几十年的发展,已经拥有了众多的应用软件,综合考虑来看,MIPS是最为适合龙芯处理器发展的架构选择。

    但是MIPS的学院派作风令MIPS失去了早期发展市场的大好时机。RISC平台是诞生于MIPS早先产品的,也正是RISC平台的诞生,才最终发展成为了我们现在的智能手机与平板机这样强大的产品。然而作为RISC系统的创始人,MIPS的商业化发展并非一帆风顺,也许是受公司前身是大学科学实验室的影响。公司高层对商业化发展嗤之以鼻,这才令本身技术要落后于MIPS的ARM得到了发展时机。

    中国作为全球最大的芯片需求市场也得到了MIPS的重视。除了龙芯这样的大型科研项目外,一家名为君正的民营芯片公司也成为了MIPS的客户,这也是MIPS在中国市场的第二个客户。与龙芯不同,君正是一家彻彻底底面向商业化的企业型公司,其生产的MIPS芯片主要面向MP3MP4智能手机。除了这两家正规企业外。还有众多的山寨厂商也在使用MIPS的芯片,由此可见,中国芯片市场还是非常庞大的。

  • ARM与x86对比:

X86指令集有以下几个突出的缺点:

通用寄存器组——对CPU内核结构的影响X86指令集只有8个通用寄存器。所以,CISC的CPU执行是大多数时间是在访问存储器中的数据,而不是寄存器中的。这就拖慢了整个系统的速度。

RISC系统往往具有非常多的通用寄存器,并采用了重叠寄存器窗口和寄存器堆等技术使寄存器资源得到充分的利用。

解码——对CPU的外核的影响

解码器,这是x86CPU才有的东西。其作用是把长度不定的x86指令转换为长度固定的类似于RISC的指令,并交给RISC内核。解码分为硬件解码和微解码,对于简单的x86指令只要硬件解码即可,速度较快,而遇到复杂的x86指令则需要进行微解码,并把它分成若干条简单指令,速度较慢且很复杂。

寻址范围小——约束了用户需要

ARM指令集的特点:

  1. 体积小,低功耗,低成本,高性能;
  2. 支持 Thumb ( 16 位) /ARM ( 32 位)双指令集,能很好的兼容8 位 /16 位器件;
  3. 大量使用寄存器,指令执行速度更快;
  4. 大多数数据操作都在寄存器中完成;
  5. 寻址方式灵活简单,执行效率高;
  6. 指令长度固定;
  7. 流水线处理方式
  8. Load_store结构:在RISC中,所有的计算都要求在寄存器中完成。而寄存器和内存的通信则由单独的指令来完成。而在CSIC中,CPU是可以直接对内存进行操作的。

ARM的一些非RISC思想的指令架构:

  1. 允许一些特定指令的执行周期数字可变,以降低功耗,减小面积和代码尺寸。
  2. 增加了桶形移位器来扩展某些指令的功能。
  3. 使用了16位的Thumb指令集来提高代码密度。
  4. 使用条件执行指令来提高代码密度和性能。
  5.  使用增强指令来实现数据信号处理的功能。

小结:

X86采用CISC,具有大量的复杂指令、可变的指令长度、多种的寻址方式这些CISC的特点,也是CISC的缺点,因为这些都大大增加了解码的难度,而在现在的高速硬件发展下,复杂指令所带来的速度提升早已不及在解码上浪费点的时间。除了个人PC市场还在用X86指令集外,服务器以及更大的系统都早已不用CISC了。x86仍然存在的理由就是为了兼容大量的x86平台上的软件,同时,它的体系结构组成的实现不太困难。

ARM采用的RISC体系最大特点是指令长度固定,指令格式种类少,寻址方式种类少,大多数是简单指令且都能在一个时钟周期内完成,易于设计超标量与流水线,寄存器数量多,大量操作在寄存器之间进行,因此有较快运行速度。因此,ARM处理器才成为是当前最流行的处理器系列,是几种主流的嵌入式处理体系结构之一。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gaijf/article/details/8571084

智能推荐

ESLint(JavaScript代码校验)_cybozu开发者的博客-程序员ITS203

概要关于JavaScript的代码校验,2016年5月以来大家一直使用jswatchdog,2018年4月以后,从运维的角度上来说,我们更推荐使用ESLint。关于ESLint的设置,我们更推荐有利于kintone自定义开发的eslint-config-kintone。这篇文章,我们将面向初学者来讲解如何安装ESLint的操作方法。ESLint是什么ESLint是2013年...

Vue tree 懒加载(结合联动情况)_诛仙89的博客-程序员ITS203_vue3tree懒加载自定义叶子节点和复选框结合

一、官方实例由于在点击节点时才进行该层数据的获取,默认情况下 Tree无法预知某个节点是否为叶子节点,所以会为每个节点添加一个下拉按钮,如果节点没有下层数据,则点击后下拉按钮会消失。同时,你也可以提前告知Tree 某个节点是否为叶子节点,从而避免在叶子节点前渲染下拉按钮。代码实例<el-tree :props="props1" :load="loadNode1" l...

pycharm激活码 用服务器激活方法_雙重底的博客-程序员ITS203

server选项里边输入: http://idea.liyang.io 本人测试到了这个有效参考网址

Banner轮播图_码农壹号的博客-程序员ITS203_banner轮播图

一、前序AlinBanner是一款Android轮播控件、引导页面滑动框架。支持有限、无限循环,可以自动、收动播放,支持自定义指示器,支持各种样式的自定义和多种图片类型,如Url、drawable加载。也可以选择酷炫切换动画的切换和自定义动画的扩张。是一款简单,易扩展、易使用框架。 虽然市面上已经有很多人在写这个图片轮播框架了,但是质量参差不齐,有很多功能都不全面,或多或少都由这样或者那样的...

iOS 自定义封装WKWebView,可以网页回退转跳,与网页交互事件监听,解决内存释放问题_明似水的博客-程序员ITS203_ios wkwebview 自定义

自己封装的WKWebView,功能如下:1、加载网页URL2、网页转跳返回3、与网页之间的交互事件4、退出界面清除缓存5、释放内存,防止内存溢出使用方法:HBWebViewVC *vc = [[HBWebViewVC alloc]init];vc.url = @"https://www.baidu.com"; [self.navigationController pushViewController:vc animated:YES];部分关键代码:#pragma mark 初始化we

二叉搜索树的C++实现_digta的博客-程序员ITS203

尚未写完,删除没写#ifndef BINARYTREE_H#define BINARYTREE_H#include namespace binaryTree{ template class btNode { public: btNode(); inline btNode(const T& value) :val(value){} ~btNode(); btNod

随便推点

新版Windows Server 2019的IIS配置websocket_阿赛工作室的博客-程序员ITS203_iis websocket

本文将向您阐述一个简单而快速的在Windows Server 2019中使用Powershell安装和启动IIS的方法,本方法也适用于Windows Server 2012、Windows Server 2016或Windows 10/8/7,包括如何使用命令去重启IIS 或获取服务状态。当然,我们也可以通过Powershell安装包含身份认证的IIS。不管是家庭版的Windows 10/8/7还是服务器版的Windows Server 2019/2016/2012,Internet Informati

基于php015网络考试在线考试系统_qq_1262330535的博客-程序员ITS203_php在线考试系统源代码

本系统采用BS模式,系统主要分为前台用户考试部分主要包括包括考试系统登录,考试限时交卷,自动评卷;后台教师管理部分主要包括考试系统登录,考试限时交卷,自动评卷,教师出题、修改试题、删除试题。同时确保不能通过修改地址方式进入高级页面。经测试,该系统实现了在线考试的基本功能,具有一定的实用性,基本达到了预期效果。本系统技术介绍:php,mysql,apache,dreamweaver.运行环境wamp,appserv,xammp等php集成环境考试系统分为前台考生用户界面和后台教师用户界面。1.前台功能需

评测了10款画流程图软件,这4款最好用!(完全免费)_阿虚同学的博客-程序员ITS203_免费画流程图

最近在做项目和复习的时候,用了不少流程图软件给我帮了大忙,所以今天就来分享分享你在网上搜索一下流程图软件,能找到很多很多:但这些软件多数并不是专门绘制流程图的软件,它可能是一些思维导图软件、或者说一些产品交互原型图软件,使用时或多或少有些麻烦。而且,普遍这些软件缺点也很多,比如:只有在线版:ProcessOn(https://www.processon.com)导出功能收费:迅捷流程图软件体积庞大:VISIO就没有一款简单易用、绿色免费的流程图软件吗?阿虚花了不少时间,挨着

在timer.elapsed里边调用button.click事件_cdefg198的博客-程序员ITS203

System.Timers.Timer time = new System.Timers.Timer();public Form1() { InitializeComponent(); time.Elapsed

C++win32控件,组合框的封装_裴英轩的博客-程序员ITS203

组合框是程序的重要功能,几乎所有的软件都有组合框,使得软件更加人性化。下面我封装了一个简单的类,实现创建组合框,更改组合框选项。离吃透MFC又近了一步!运用一个简单的win32对话框程序,使用我封装的类CComBox,创建了三个组合框显示在窗口左上角。(第三个组合框没有成功创建)效果如下:废话少说,上代码:1、定义CComBox类的头文件:CComBox.h#pragma once#include <windows.h>#include<vector>#inclu

JVM学习笔记(2) 垃圾收集器与内存分配策略_MustangJy的博客-程序员ITS203_refill_waste

Java技术体系中所提倡的自动内存管理,最终可以规划为自动化地解决了两个问题:给对象分配内存、以及回收分配给对象的内存。一、回收内存:垃圾管理器(GC,Garbage Collector)关于G1收集器,详细的内容可以参照:详解 JVM Garbage First(G1) 垃圾收集器二、内存分配与回收策略对象的内存分配,往大方向讲,就是在堆上分配(但也可能经过JIT编译后被拆散为标量...

推荐文章

热门文章

相关标签