处理器体系结构

      前边我们主要学习了程序的机器级表示、信息的表示与处理,讲的是汇编指令与数据的组织,偏软件部分。后边主要学习处理器体系结构、存储器层次结构、链接、异常、虚拟存储器、程序优化等部分,偏硬件部分。

       处理器体系结构主要讲的是处理器内部基本的设计思想和设计方法,从抽象角度研究处理器如何工作

指令集体系结构(ISA)

  • 指令集体系结构:处理器能够支持的指令,以及这种指令在字节级别的编码方式(即对应二进制级别的编码方式)。理解为一种人为定义的规范,规定处理器可以运行哪些指令,进而实现哪些功能,而不需要说明这些功能是具体如何实现的。
  • 指令集体系结构只是一种规范,而不是硬件设计方法。微体系结构是硬件设计方法,需要考虑如何设计高效率的处理器;而指令集体系结构不关系如何设计,只关心这些指令提供了何种功能
  • 指令集体系结构主要描述了4方面的内容:
  1. 描述了指令语法。
  2. 描述了语法的语义。
  3. 描述了指令执行过程中的行为,以及执行完的结果。结果包括影响的寄存器和标志位
  4. 定义了程序员可见的状态,即从程序员角度能够控制计算机的哪些东西。如汇编语言可以操作内存、寄存器、程序计数器、条件码,所以这些都是可见的。

两类指令集体系结构的设计理念

  • 在实际应用中,厂商生产了许多型号的处理器(如X86处理器就是一种常见的处理器),他们各有对应的体系结构,可分为两种理念,多个家族

复杂指令集体系结构(CISC)

  • 在通用计算机系统中,X86家族是CISC的代表处理器;在嵌入式系统中也有很多,典型的是8051单片机
  • 嵌入式系统是专用的计算机系统,用于执行专门的任务,如智能冰箱、智能电视都使用嵌入式系统。嵌入式系统性能较低,处理任务单一,不同于家庭使用的通用计算机系统,可以做多种任务。
  • 值得注意的是,CISC是比较早期的指令集体系结构的设计理念。通用计算机系统中,现在占统治地位的就是X86处理器,其余的基本已经消失

精简指令集体系结构(RISC)

  • power处理器。IBM大型机使用power处理器,大型机是高可靠、高可用的计算机,高可靠要求长时间不断机,高可靠要求可实现大规模计算,应用于银行等领域。由微软开发的Xbox游戏机,在后期也开始使用power处理器
  • ARM指令集体系结构。高通、苹果处理器均使用这种指令集体系结构
  • MIPS指令集体系结构。主要用于低端路由器;我国的龙芯国产处理器使用的loongISA体系结构,也是由MIPS拓展而来。龙芯处理器是专用处理器,应用于工业控制 、国防安全领域,代表我国处理器设计的最高水平
  • RISC-V(five)指令集体系结构。是一个开源指令集体系结构,处理器内部设计是开源的。公司可以免费拿到开源处理器,再根据自己需求改造。物联网领域主要使用RISC-V系列,是以后的一大热门。阿里的平头哥公司在去年下半年发布的面向互联网终端的具备人工智能的处理器,即是基于此实现。

CISC特点及设计理念

  • 支持的指令为面向栈操作的指令。如过程调用中过程的返回地址先入栈;X86-64位处理器中参数前6个走寄存器,后边的入栈;X86-32位处理器所有的参数均用栈传递
  • 有显式的入栈、出栈指令。入栈可以用减法指令+mov实现,出栈可以用加法+mov实现,尽管如此,在CISC中仍有专用的入栈、出栈指令
  • 用四元组进行内存寻址,非常灵活。四元组不仅同时进行了内存读和内存写,而且处理了算数运算。抽象能力强,相当于多条简单指令
  • 有条件码。零标志位、符号标志位、溢出标志位等
  • CISC指令集处理器,对于常用的、典型的操作任务,尽管较为复杂,仍然会以一条指令的形式实现(如四元组内存寻址)。它的实质是一条指令相当于多条简单指令,把软件问题转化为硬件解决,因为早期软件太差,而硬件实现快,所以用硬件加速软件。
  • 由于CISC指令集将典型的操作均用一条指令表示,所以指令非常多,如X86手册有2000多页。而且指令长度不一,是变长的

RISC特点及设计理念

  • 是面向寄存器的程序设计,指令与寄存器相关,而非栈。RISC的参数传递与返回地址均用寄存器传递,而非栈。与之对应,RISC处理器的寄存器较多,至少为32个。操作寄存器而非栈,也加速了处理器处理速度。
  • 地址访问简单,只有load、store两类可以访问地址的指令。地址计算也很简单,只有基地址和偏移量两部分组成
  • 没有条件码。
  • RISC精简指令集体系结构与CISC完全相反,希望在处理器中支持的指令越少越好。因此不支持抽象程度较高的指令,只支持最简单的指令,希望通过简单指令的组合完成复杂的指令任务。其手册只有56条指令,不到3页
  • RISC这样处理的优势在于可以加快处理器工作速度。处理器的工作速度取决于时钟周期,处理器按照时钟周期一条一条的执行指令,时钟周期越短,工作速度越快。而时钟周期与木桶原理的短板效应相似,由最慢的指令决定时钟周期。由于CISC中存在复杂指令,因此时钟周期长,处理器工作速度慢。

RISC、CISC指令集的比较

  • CISC指令集设计困难,优化也困难(指令复杂,时钟周期长);RISC指令集设计简单,优化简单,但是编译器设计复杂。因为RISC由简单指令组成,编译器对程序的优化空间更高
  • 尽管RISC处理器速度更快,但是桌面系统与服务器系统仍然以X86系统为主。这是由于Intel对自己的CISC已经进行了许多改造,性能很高;而且早期主要是CISC指令集处理器为主,所以已经有大量软件运行在此平台,为了软件生态,故而仍以X86系统为主。值得一提的是,x86的内部设计参考了许多RISC的设计,以致于64位系统的核心已经变成了RISC,只不过有个CISC的壳而已。如64位系统增加了许多寄存器,并且前六个参数用寄存器传递
  • 而在嵌入式市场领域,RISC已经占据主导地位。这是因为RISC处理器由于指令简单,小型化和设计的简单化,这使其成本下降,并且能量消耗少。而嵌入式设备对设备性能要求较低,但是由于使用电池,对能耗要求高,RISC恰好满足了需求

现在X86处理器的内部样子

  • 宏观上是CISC指令集处理器,但微观上看只是有CISC的壳,核心是RISC指令集。尽管外部接收的是cisc的复杂指令,但是在内部会被翻译成多条microcode(微指令、微码)。实际上是把cisc的复杂指令转换为含有多条微指令的微程序。

单周期处理器的实现

单周期处理器模型

处理器体系结构_第1张图片

  • 左侧是CPU中用于做计算的电路,输入的部分包括指令和数据
  • 右侧是存储器。计算后的数据存储到此中,指令和数据则是从存储器中得到,并传到左侧的计算电路中。
  • 时钟周期是指一条指令从开始到结束所需要的最短时间,在此过程中,时钟周期不能低于320ps
  • 单周期处理器:一条指令的执行需要花费一个时钟周期

指令的执行分为六步

处理器体系结构_第2张图片

  1. 取址(取指令):根据处理器中程序计数器指向的地址,从存储中把指令首先读取到cpu里
  2. 译码:准备好操作数以及生成对应操作码的控制信号
  3. 执行:执行基本的算数、逻辑运算,把结果算出来
  4. 访存:对内存进行操作,读操作、写操作均在此阶段完成
  5. 写回:若结果影响到寄存器,在此阶段更新寄存器
  6. 更新PC寄存器:更新程序计数器,一般更新到下一条;如有跳转指令,更新成其他指令
  • 这6步但并非必须执行,如3、4、5是可选的,而1、2、6一般必须执行

借助两个实例理解指令执行的6步

  • add加指令

处理器体系结构_第3张图片

  1. 取址:这个指令是三个字节,读三个字节
  2. 译码:将ra、rb中的数据准备好,add指令信号准备好,送到处理器中
  3. 执行:加法操作得到结果
  4. 写回:更新rb寄存器
  5. pc:程序计数器加3,(这条指令占三个字节)
  • mov指令,将数据搬运到ra寄存器

处理器体系结构_第4张图片

  1. 取址:四字节指令,读四个字节
  2. 译码:准备好rb寄存器中的数据
  3. 执行:做地址加法运算
  4. 访存:对内存进行读操作
  5. 回写:写入ra寄存器中
  6. pc:更新程序计数器,pc+4
  • 上述考虑的是RISC指令执行过程。CISC指令执行在X86系统中更为麻烦,需要先分解为微指令,微指令再执行上述过程
  • 从资源利用角度:指令从进入到完成,在译码阶段,取址阶段就啥也不做了。下边同理,前边的几部分电路已经不工作了。同一时刻,这些部件中有效工作的部件只有一个,尽管这六个才构成处理器。因此单周期处理器,从资源利用角度上,利用率非常低
  • 把处理器的六部分看成生产线工序,指令看成产品。流水线比单周期效率高得多。因此解决单周期处理器的基本思想就是流水线处理思想

你可能感兴趣的:(c,linux,ubuntu)