CPU原理(RISC指令系统,内部结构,流水线)

来源:互联网 发布:什么姿势最舒服 知乎 编辑:程序博客网 时间:2024/04/30 15:38

一、指令系统
指令系统是一个CPU所能够处理的全部指令集合,比如多数个人电脑采用的是x86指令集。

CPU对指令需要进行译码才能运行,指令一般包含操作码和地址码,简单的例子为:
某个指令系统的指令长度为32位,操作码长度为8位,地址长度也为8位,且第一条指令是加,第二条指令是减。当它收到一个“00000010000001000000000100000110”的指令时,先取出它的前8位操作码,即00000010,分析得出这是一个减法操作,有3个地址,分别是两个源操作数地址和一个目的地址。于是,CPU就到内存地址00000100处取出被减数,到00000001处取出减数,送到ALU中进行减法运算,然后把结果送到00000110处。

指令分为CISC(复杂指令集)和RISC(精简指令集)。

前面8位的操作码只能表示256个指令,为了扩展指令产生了CISC,它借用后面地址码的部分数位从而能表示更多的指令。CISC的特点是可变长度的指令、多种寻址方式,由于这种特点对于指令的译码来说就显得困难,并会消耗更多的时间。x86就是CISC。

与之对应的RISC的特点就是指令长度固定、指令种类少、寻址方式少,从而对指令的译码来说就很容易。RISC目前如日中天,在高速硬件的发展下,CISC的多指令优势越不明显,而RISC能使CPU发挥更卓越的性能,这个涉及CPU的内部结构,如下所示。

二、CPU内核结构
(一)运算器
1、算术逻辑运算单元ALU(Arithmetic and Logic Unit)
ALU主要完成对二进制数据的定点运算(加减乘除)、逻辑运算(与或非异或)以及移位运算。通常ALU有两个输入端一个输出端。通常所说的“CPU的位数”就是指ALU所能处理的位数。

2、浮点运算单元FPU(Floating Point Unit)
FPU主要负责浮点数的运算。

3、通用寄存器组
通用寄存器组是一组最快的储存器,用来保存参与运算的操作数和中间结果。RISC一般有较多的通用寄存器组,而CISC一般较少。

4、专用寄存器
通常是一些状态寄存器。

(二)控制器
1、指令控制器
指令控制器主要完成取指令、译指令等操作、然后交给执行单元(ALU/FPU)来执行,同时还要形成下一个指令的地址。

2、时序控制器
3、总线控制器
4、中断控制器

(三)CPU核心的设计
CPU 的性能是由什么决定的呢?单纯的一个ALU 速度在一个CPU 中并不起决定性作用,因为ALU 的速度都差不多。而一个CPU 的性能表现的决定性因素就在于CPU 内核的设计。 

1、超标量(Superscalar)
所谓超标量CPU就是集成了多个ALU、多个FLU、多个译码器和多条流水线的CPU,以并行处理的方式来提高性能。

2、流水线(Pipeline)
流水线是现代RISC核心的一个重要设计,它极大地提高了性能。
对于一条指令的执行过程,通常分为:取指令、指令译码、取操作数、运算、写结果。前面三步由控制器完成,后面两步由运算器完成。按照传统的做法,当控制器工作的时候运算器在休息,在运算器工作的时候控制器在休息。流水线的做法就是当控制器完成第一条指令的操作后,直接开始开始第二条指令的操作,同时运算器开始第一条指令的操作。这样就形成了流水线系统,这是一条2级流水线。

如果是一个超标量系统,假设有三个指令控制单元和两个运算单元,那么就可以在完成了第一条指令的取址工作后直接开始第二条指令的取址,这时第一条指令在进行译码,然后第三条指令取址,第二条指令译码,第一条指令取操作数⋯⋯这样就是一个5 级流水线。很显然,5 级流水线的平均理论速度是不用流水线的4 倍。 

总的来说流水线就是利用了空余的CPU资源
,使每个部件在每个时钟周期都工作,同一个时钟周期内有多条指令被激活,但是这些指令处于不同的状态,有的在取指、有的在译码、有的在执行,但从整体看来就有一条甚至是多条指令被完成,这样大大提高了效率。不过流水线有两个非常大的问题:相关和转移。

在一个流水线系统中,如果第二条指令需要用到第一条指令的结果,这种情况叫做相关。以上面哪个5 级流水线为例,当第二条指令需要取操作数时,第一条指令的运算还没有完成,如果这时第二条指令就去取操作数,就会得到错误的结果。所以,这时整条流水线不得不停顿下来,等待第一条指令的完成。目前解决这个问题的方法是乱序执行,在两条相关指令中插入不相关的指令,使整条流水线顺畅。当然,流水线的阻塞现象还是不能完全避免的,尤其是当相关指令非常多的时候。 

另一个大问题是条件转移。在上面的例子中,如果第一条指令是一个条件转移指令,那么系统就会不清楚下面应该执行那一条指令?这时就必须等第一条指令的判断结果出来才能执行第二条指令。条件转移所造成的流水线停顿甚至比相关还要严重的多。现在采用分支预测技术来处理转移问题。虽然我们的程序中充满着分支,而且哪一条分支都是有可能的,但大多数情况下总是选择某一分支。根据这些原理,分支预测技术可以在没有得到结果之前预测下一条指令是什么,并执行它。现在的分支预测技术能够达到90%以上的正确率,但是,一旦预测错误,CPU 仍然不得不清理整条流水线并回到分支点。这将损失大量的时钟周期。所以,进一步提高分支预测的准确率也是正在研究的一个课题。 

越是长的流水线,相关和转移两大问题也越严重,所以,流水线并不是越长越好,超标量也不是越多越好,找到一个速度与效率的平衡点才是最重要的。 

三、CPU 的外核 
1、解码器(Decode Unit) 
这是x86CPU 才有的东西,它的作用是把长度不定的x86 指令转换为长度固定的类似于RISC 的指令,并交给RISC 内核。Athlon 也好,PIII 也好,老式的CISC 的x86 指令集严重制约了他们的性能表现。 

2、一级缓存和二级缓存(Cache) 
一级缓存和二级缓存是为了缓解较快的CPU 与较慢的存储器之间的矛盾而产生的,一级缓存通常集成在CPU 内核,而二级缓存则是以OnDie 或OnBoard 的方式以较快于存储器的速
度运行。对于一些大数据交换量的工作,CPU 的Cache 显得尤为重要。 

摘自:125.71.228.229/wlxt/ncourse/micorcomputer/ppt/20060315144736.pdf


x86是什么?
x86是一个intel通用计算机系列的编号, 也标识一套通用的计算机指令集合。

-----------------------------
X86就是采用cisc(Complex Instruction Set Computer,复杂指令架构计算机)架构的处理器。大多数CPU厂商(如AMD,Intel)生产的就是这种处理器。与采用RISC(Reduced ...,精简指令架构计算机)架构的PowerPC(如苹果电脑)不同。intel的IA-32、x86-32、x86-64都是属于x86架构的。

-----------------------------
性能的改变只能靠在芯片上增加处理器的核,而不是靠增加它的运行速度。这就使对硬件性能的需求转换成为了对软件的需求。现在的关注点不在于制作出一个完美的单核,而是如何利用并管理好多个核。

原创粉丝点击