一文解析,Linux内核——Intel CPU体系结构

一、CPU指令的执行过程

  • 几乎所有的冯·诺伊曼型计算机的 CPU,其工作都可以分为 5 个阶段:取指令、指令译码、执行指令、访存取数、结果写回。

图1 CPU指令的执行阶段


1.取指令阶段

  • 取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。 程序计数器 PC 中的数值,用来指示当前指令在主存中的位置。当一条指令被取出后,PC 中的数值将根据指令字长度而自动递增:若为单字长指令,则(PC)+1->PC;若为双字长指令,则(PC)+2->PC,依此类推。


2.指令译码阶段

  • 取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。 在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。在组合逻辑控制的计算机中,指令译码器对不同的指令操作码产生不同的控制电位,以形成不同的微操作序列;在微程序控制的计算机中,指令译码器用指令操作码来找到执行该指令的微程序的入口,并从此入口开始执行。 在传统的设计里,CPU中负责指令译码的部分是无法改变的。不过,在众多运用微程序控制技术的新型 CPU 中,微程序有时是可重写的。


3.执行指令阶段

  • 在取指令和指令译码阶段之后,接着进入执行指令(Execute,EX)阶段。 此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU 的不同部分被连接起来,以执行所需的操作。 例如,如果要求完成一个加法运算,算术逻辑单元 ALU 将被连接到一组输入和一组输出,输入端提供需要相加的数值,输出端将含有最后的运算结果。


4.访存取数阶段

  • 根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。 此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。


5.结果写回阶段

  • 作为最后一个阶段,结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到某种存储形式:结果数据经常被写到 CPU 的内部寄存器中,以便被后续的指令快速地存取;在有些情况下, 结果数据也可被写入相对较慢、但较廉价且容量较大的主存。许多指令还会改变程序状态字寄存器中标志位 的状态,这些标志位标识着不同的操作结果,可被用来影响程序的动作。
  • 在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器 PC 中取得下一条指令地址,开始新一轮的循环,下一个指令周期将顺序取出下一条指令。许多新型 CPU 可以同时取出、译码和执行多条指令,体现并行处理的特性。


【文章福利】小生推荐自己的Linux后台/内核技术交流群【318652197】整理了一些个人觉得比较好的学习书籍,视频资料共享在群文件里面,有需要的自行添加哦!!!前100名进群领取,额外赠送一份价值699的内核资料包(含视频、电子书、实战项目及代码)

资源免费领

全网最详细Linux内核技术解析【附视频教程和源码资料】​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp​docs.qq.com/doc/DS0tNTWdwZWJzeGNp

学习直通车

Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207​ke.qq.com/course/4032547?flowToken=1042207


二、CPU指令流水线

  • 在任一条指令的执行过程中,各个功能部件都会随着指令执行的进程而呈现出时忙时闲的现象。要加快计算机的工作速度,就应使各个功能部件并行工作,即以各自可能的高速度同时、不停地工作,使得各部件的操作在时间上重叠进行,实现流水式作业。 从原理上说,计算机的流水线(Pipeline)工作方式就是将一个计算任务细分成若干个子任务,每个子任务都由专门的功能部件进行处理,一个计算任务的各个子任务由流水线上各个功能部件轮流进行处理 (即各子任务在流水线的各个功能阶段并发执行),最终完成工作。这样,不必等到上一个计算任务完成, 就可以开始下一个计算任务的执行。 流水线的硬件基本结构如图2所示。流水线由一系列串联的功能部件(Si)组成,各个功能部件之间设有高速缓冲寄存器(L),以暂时保存上一功能部件对子任务处理的结果,同时又能够接受新的处理任务。在一个统一的时钟(C)控制下,计算任务从功能部件的一个功能段流向下一个功能段。在流水线中, 所有功能段同时对不同的数据进行不同的处理,各个处理步骤并行地操作。

  • 当任务连续不断地输入流水线时,在流水线的输出端便连续不断地输出执行结果,流水线达到不间断流水的稳定状态,从而实现了子任务级的并行。
  • 当指令流不能顺序执行时,流水过程会中断(即断流)。为了保证流水过程的工作效率,流水过程不应经常断流。在一个流水过程中,实现各个子过程的各个功能段所需要的时间应该尽可能保持相等,以避免产生瓶颈,导致流水线断流。
  • 流水线技术本质上是将一个重复的时序过程分解成若干个子过程,而每一个子过程都可有效地在其专用功能段上与其他子过程同时执行。采用流水线技术通过硬件实现并行操作后,就某一条指令而言,其执行速度并没有加快,但就程序执行过程的整体而言,程序执行速度大大加快。
  • 流水线技术适合于大量的重复性的处理。
  • 前面我提到过CPU 中一个指令周期的任务分解。假设指令周期包含取指令(IF)、指令译码(ID)、 指令执行(EX)、访存取数(MEM)、结果写回(WB)5 个子过程(过程段),流水线由这 5个串联的过程段 组成,各个过程段之间设有高速缓冲寄存器,以暂时保存上一过程段子任务处理的结果,在统一的时钟信号控制下,数据从一个过程段流向相邻的过程段。
  • 非流水计算机的时空图如下:

  • 对于非流水计算机而言,上一条指令的 5 个子过程全部执行完毕后才能开始下一条指令,每隔 5 个时 钟周期才有一个输出结果。因此,图3中用了 15 个时钟周期才完成 3 条指令,每条指令平均用时 5 个时钟周期。 非流水线工作方式的控制比较简单,但部件的利用率较低,系统工作速度较慢。

标量流水计算机工作方式

  • 标量(Scalar)流水计算机是只有一条指令流水线的计算机。图 4表示标量流水计算机的时空图。

  • 对标量流水计算机而言,上一条指令与下一条指令的 5 个子过程在时间上可以重叠执行,当流水线满 载时,每一个时钟周期就可以输出一个结果。因此,图4中仅用了 9 个时钟周期就完成了 5 条指令,每条指令平均用时 1.8 个时钟周期。
  • 采用标量流水线工作方式,虽然每条指令的执行时间并未缩短,但 CPU 运行指令的总体速度却能成倍 提高。当然,作为速度提高的代价,需要增加部分硬件才能实现标量流水。

超标量流水计算机工作方式

  • 一般的流水计算机因只有一条指令流水线,所以称为标量流水计算机。所谓超标量(Superscalar)流 水计算机,是指它具有两条以上的指令流水线。图 5表示超标量流水计算机的时空图。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值