当前位置: 首页 > Linux

处理器架构

时间:2023-04-06 18:53:01 Linux

前面我们主要研究了程序的机器级表示,信息的表示和处理,汇编指令和数据的组织,以及软件部分。后来主要研究处理器架构、内存层次结构、链接、异常、虚拟内存、程序优化等,重点研究硬件部分。处理器体系结构主要讲处理器内部的基本设计思想和设计方法,从抽象的角度研究处理器是如何工作的。InstructionSetArchitecture(ISA)InstructionSetArchitecture:处理器所能支??持的指令,以及这些指令在字节级别的编码方式(即二进制级别对应的编码方式)。理解为人为定义的规范,规定了处理器可以运行哪些指令,可以实现哪些功能,而没有具体说明这些功能是如何实现的。指令集体系结构只是一种规范,而不是一种硬件设计方法。微架构是一种硬件设计方法,需要考虑如何设计出高效率的处理器;而指令集架构不关心如何设计,只关心这些指令提供什么功能。指令集体系结构主要描述四个方面:描述命令语法。描述语法的语义。描述指令执行期间的行为和执行结果。结果,包括受影响的寄存器和标志,定义了程序员可见的状态,即,从程序员的角度来看,可以在计算机上控制什么。例如,汇编语言可以操作内存、寄存器、程序计数器和条件代码,所以这些都是可见的。两类指令集架构的设计概念在实际应用中,厂商生产的处理器有很多种(比如X86处理器就是常见的处理器),每一种都有对应的架构,可以分为两个概念,多个familyofComplexInstructionSetArchitecture(CISC)在通用计算机系统中,X86家族是CISC的代表处理器;在嵌入式系统中也有很多,典型的8051单片机嵌入式系统是一个专用的计算机系统,嵌入式系统用于执行专门的任务,比如智能冰箱和智能电视。嵌入式系统性能低,处理任务单一,不同于家用的通用计算机系统,可以做多项任务。值得注意的是,CISC是一个比较早的指令集架构设计理念。在通用计算机系统中,X86处理器现在占据主导地位,其余的精简指令集架构(RISC)处理器已经基本消失。IBM大型机使用功率处理器。大型机是高度可靠和高度可用的计算机。高可靠性需要长期不间断停机。高可靠性需要大规模计算,用于银行等领域。微软开发的Xbox游戏机后期也开始采用威力处理器ARM指令集架构。高通和苹果处理器都采用这种指令集架构MIPS指令集架构。主要用于低端路由器;我国龙芯国产处理器采用的loongISA架构也是由MIPS扩展而来。龙芯处理器是一款专用处理器,应用于工业控制、国防安全等领域,代表了我国处理器设计中RISC-V(五)指令集架构的最高水平。它是开源指令集架构,处理器内部设计是开源的。公司可以免费获得开源处理器,然后根据自己的需要进行修改。物联网领域主要使用RISC-V系列,这将是未来的热门话题。阿里旗下的平头哥公司去年下半年发布了面向互联网终端的人工智能处理器,就是基于这种实现。CISC特性和设计理念所支持的指令是栈操作的指令。例如,过程调用中过程的返回地址先入栈;在X86-64位处理器中,前6个参数入寄存器,后入栈;X86-32位处理器的所有参数都是通过显式入栈、Pop指令的栈传递的。减法指令+mov可以实现入栈,加法+mov可以实现入栈。不过CISC中还是有专门的出栈指令,使用四元组进行内存寻址,非常灵活。Quad不仅可以同时进行内存读取和内存写入,还可以处理算术运算。抽象能力强,相当于多条带有条件码的简单指令。对于零标志、符号标志、溢出标志等CISC指令集处理器,对于常用和典型的运算任务,虽然比较复杂,但仍然会以一条指令的形式实现(如四重内存寻址).其本质是一条指令相当于多条简单指令,将软件问题转化为硬件解决方案。因为早期软件太差,而硬件实现快,所以用硬件来加速软件。由于CISC指令集是用一条指令来表达典型的操作,所以指令很多,比如X86手册就有2000多页。而且指令长度不同,这是变长RISC的特点,设计理念是面向寄存器的程序设计。指令与寄存器相关,与堆栈无关。RISC的参数传递和返回地址是通过寄存器传递的,不是栈。相应地,RISC处理器的寄存器更多,至少有32个。操作寄存器而不是堆栈也可以加快处理器的处理速度。地址访问很简单,只有加载和存储指令可以访问地址。地址计算也很简单,只有基地址和偏移量两部分,没有条件码。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的复杂指令虽然是对外接收的,但对内会翻译成多个微码(microinstructions,microcodes)。其实就是把cisc的复杂指令转换成包含多条微指令的微程序。单周期处理器的实现单周期处理器模型的左侧是CPU中用于计算的电路,输入部分包括指令和数据。右边是内存。计算出来的数据就存放在这里,从内存中获取指令和数据,传递给左边的计算电路。时钟周期是指一条指令从开始到结束所需要的最短时间。在此过程中,时钟周期不能低于320ps。单周期处理器:一条指令的执行需要一个时钟周期。指令的执行分为六个步骤。(InstructionFetch):根据处理器中程序计数器所指向的地址,首先从存储器中读取指令进入CPUDecoding:准备操作数,并生成操作码对应的控制信号Execution:执行基本的算术和逻辑operations,calculatetheresultandaccessmemory:对内存进行操作,读写操作在这个阶段完成并回写:如果结果影响到寄存器,在这个阶段更新寄存器更新PC寄存器:更新程序计数器,一般更新到下一个;如果有跳转指令,更新到其他指令的6步不是必须的,比如3、4、5是可选的,1、2、6一般是必须执行的。用两个例子理解指令执行的6步add指令寻址:这条指令是三个字节,读取三个字节解码:准备ra和rb中的数据,准备add指令信号,送处理器执行:加法运算的结果写回:更新rb寄存器pc:程序计数器加3,(该指令占用三个字节)mov指令,将数据移动到ra寄存器寻址:四字节指令,读四bytes解码:准备rb寄存器数据执行:做地址加法操作内存访问:读内存并写回:写ra寄存器pc:更新程序计数器,pc+4以上考虑的是RISC指令执行过程。CISC指令的执行在X86系统中比较麻烦。需要分解成微指令,然后执行微指令。从资源利用的角度看:指令从进入到完成,译码阶段和寻址阶段什么都不做。下面同样如此,之前的部分电路已经不工作了。这些部分中只有一个在同一时间积极工作,即使这六个部分组成了处理器。因此,单周期处理器从资源利用的角度来看,利用率非常低。处理器的六个部分看成是生产线工序,指令看成是产品。流水线比单周期更有效。所以,解决单周期处理器的基本思路就是流水线处理的思路。