Linux学习笔记:002ARM指令流水线

Posted 黄树超

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习笔记:002ARM指令流水线相关的知识,希望对你有一定的参考价值。

指令的处理

在CPU中,对于指令的处理一般分为:

1.取指令阶段

  取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。

  程序计数器PC中的数值,用来指示当前指令在主存中的位置。

  当一条指令被取出后,PC中的数值将根据指令字长度而自动递增:

  若为单字长指令,则(PC)+1àPC;

  若为双字长指令,则(PC)+2àPC,依此类推。

2.指令译码阶段

  取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。

  在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。

  在组合逻辑控制的计算机中,指令译码器对不同的指令操作码产生不同的控制电位,以形成不同的微操作序列;

  在微程序控制的计算机中,指令译码器用指令操作码来找到执行该指令的微程序的入口,并从此入口开始执行。

  在传统的设计里,CPU中负责指令译码的部分是无法改变的。

  不过,在众多运用微程序控制技术的新型CPU中,微程序有时是可重写的,可以通过修改成品CPU来改变CPU的译码方式。

3.执行指令阶段

  在取指令和指令译码阶段之后,接着进入执行指令(Execute,EX)阶段。

  此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU的不同部分被连接起来,以执行所需的操作。

  例如,如果要求完成一个加法运算,算术逻辑单元ALU将被连接到一组输入和一组输出,输入端提供需要相加的数值,输出端将含有最后的运算结果。

4.访存取数阶段

  根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。

  此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。

5.结果写回阶段

  作为最后一个阶段,结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式:

  结果数据经常被写到CPU的内部寄存器中,以便被后续的指令快速地存取;

  在有些情况下,结果数据也可被写入相对较慢、但较廉价且容量较大的主存。

  许多指令还会改变程序状态字寄存器中标志位的状态,这些标志位标识着不同的操作结果,可被用来影响程序的动作。

  在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器PC中取得下一条指令地址,开始新一轮的循环,下一个指令周期将顺序取出下一条指令。

 

什么是指令流水线

在CPU中,指令流水线(Instruction pipeline)是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。

各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均执行速度。

流水线对于单条指令的处理速度并没有增加,

 

以上是关于Linux学习笔记:002ARM指令流水线的主要内容,如果未能解决你的问题,请参考以下文章

ARMV8 datasheet学习笔记1:概述

沁恒CH32学习——RISC-V架构学习笔记

arm-linux内存管理学习笔记-内核临时页表的建立

五搭建S3C6410开发板的测试环境—学习笔记

arm-linux内存管理学习笔记-内存页表的硬件原理

Linux内存从0到1学习笔记(二,ARM64 物理内存)