CPU 是一台计算机核心且异常复杂的部件,当我们操作电脑,它以极快的速度执行着我们预设的每一条指令,但往往一些即使是作为程序员的专业人员也对其知之甚少,了解它的一些基本术语和基本执行步骤将会接近与 CPU 之间的距离。
1. 时钟周期
我们通常看到的 CPU 主频。时钟脉冲由晶振发出,一般用来作同步信号使用,例如在脉冲的上沿控制器发给执行部件一些微命令,也就是在各管脚加上电压,在脉冲持续时间中,这些微命令被执行,然后将结果输出到相应的管线上,稳定后,在脉冲下沿就可以去读取相应的状态了,像这样有条不紊地进行下去。
2. 指令,微指令,微操作
指令:机器指令,对应唯一机器码。
微指令:机器指令被读入指令寄存器(IR)后经过指令译码器(ID),根据不同的操作码和操作数会得到很多微指令,微指令可在一个时钟周期内完成。
微操作:一个微操作可能包含一个或多个微操作,它们在同一个时钟周期内完成。
3. 机器周期,CPU 周期
机器周期,一般也叫CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如,取指令、存储器读、存储器写等),每一阶段完成一项工作(称为一个基本操作)。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。
例如,一个取指周期就是一个机器周期,就包含 4个时钟,每个时钟周期内就会完成取指的一个微指令(包含一个或多个微操作);
4. 其它
CPU 包括控制器和运算器。
指令译码器是控制器中重要的一部分。
5. 指令执行的流程
IR(指令寄存器) ID(指令译码器) MAR(存储器地址寄存器) MDR(存储器数据寄存器)
PC(程序计数器) ALU(算术逻辑单元)
取指阶段:第一个机器周期 M1。主要完成将指令读取到 IR中。
微指令1:(T1)(微操作)指令地址送 MAR;
微指令2:(T2)(微操作)Read Memory;
微指令3:(T3)(微操作)指令送 MDR;
(微操作) 调整 PC;
微指令4:(T4)(微操作) MDR 里面取到的指令头 IR;
译码阶段:第二个机器周期 M2。主要完成由 IR 中的指令送到 ID 中,ID 根据指令(包括操作码和地址码)反译出相应的操作送往操作控制器中,操作控制器产生一系列控制信号到不同的执行单元。
执行阶段:第三个机器周期 M3。主要根据产生的控制信号完成不同的执行操作。
如送住 ALU ,进行算术运算,移位操作,跳转操作等。与周期 M1 类似。
以上就是一个指令在你的 CPU 中真正被运行的情况,但是时代变了,当一个指令取完时,进入译码阶段,那么取指令的单元就闲置了,为了增加效率,引入了流水线的概念。
通过精心设计,把整个代码执行过程分为不同的阶段,每个阶段由独立的电路实现,然后在每个阶段中间加入流水线寄存器,例如经典的五级流水线:
IF (IF/ID reg) ID (ID/EX reg) EX (EX/MEM reg) MEM (MEM/WBreg) WB
括号里面为流水线寄存器,并且取设置一个时钟周期来同步每步的操作,那么就要使这个时钟周期内,每一步都能完成,即选择其中最耗时的一步的周期来设时钟周期,当一个时钟周期结束时,读取流水线寄存器的值,就可以作为下一步的输出了。那么理论情况下,当流水线完全运行起来,每一个时钟周期就会有一个指令执行完毕。那么时钟周期就不像没有流水线那样同步的是微指令了,而是同步的是流水线的每一个级。当时钟周期确定,一个 CPU 的主频就确定了,不难看出,当每一级时间相差大时,由于短板效应,每一级并没有充分利用,这时就应该拆分耗时较长的级,使每一级平均,那么每一级的耗时将缩短,主频就提高了,就也就是为什么 P4 拥有 31 级流水线,且拥有较高主频的原因。但流水线级增加也会导致流水线冲突,当冲突发生时,有时需要等待或清空流水线,反而会使效率降低,这也就是为什么现在处理器流水线级低,主频也降低,反而效率高的原因。
原文:http://blog.csdn.net/henzox/article/details/41080169