计算机系列之一条指令的执行

1、大话 CPU执行一条指令

首先要知道的是 指令是放在内存里面的。

在这里插入图片描述

PC (指令计数器,Program Counter)存放的总是下一个指令的内存地址。

一个指令执行时,CPU 会自动修改 PC 的内容,以便使其保持的总是将要执行的下一条指令的地址。

在这里插入图片描述

想要执行下一条指令时,就将下一条指令的地址传递给内存。

然后内存通过数据线返回需要的数据(指令),将指令从内存取到数据寄存器(DR)中。

在这里插入图片描述

CPU 拿到这条指令需要把指令先找个地方保存着。(从数据寄存器(DR)传送至 IR 中)

这个地方就是 IR 寄存器(指令寄存器)(从数据寄存器(DR)传送至 IR 中),即 IR 寄存器用于保存指令,保存当前正在执行的一条指令。

在这里插入图片描述

保存到 IR(指令寄存器) 后, CPU 就开始翻译这条指令(将 IR 中的 操作码 传送到指令译码器进行移码),翻译完这条指令就知道这条指令想要做什么了。(控制器发出操作信号的控制下,计算机各有关部件执行操作码规定的操作)

ADD(R1),R0

比如:

R1 寄存器的内容为 2234(内存地址),而内存地址为 2234 对应的内容为 4

R0 寄存器的内容为 3

同时 有个 ALU(算术逻辑单元) 可以用来做比如加法操作。

在这里插入图片描述

然后就可以开始执行了,执行的步骤为:

1、根据 R1 找到主存中对应的位置,即 将 R1 的 2234 通过地址线传递给内存

2、内存根据地址 2234 ,找到该地址,并获取到对应的内容,比如这里为 4

3、然后数据 4 通过数据线 跑到/暂存到 暂存器中(该暂存器为累加寄存器)

在这里插入图片描述

4、这时 第一个 运算数 4 就已经在 ALU 的输入端了,再将另一个运算数 3 放到 ALU 的输入端:即 取出 寄存器 R0 的 值

5、两个输入参数都在 ALU 输入端了,此时只需要给 ALU 一个 加法信号,那么结果 7 便会直接输出到寄存器中。(该寄存器为 累加寄存器)

在这里插入图片描述

6、最终需要将结果数据输出到主存中。结果数据 7 通过数据线传递到内存,数据 7 传递到数据线时,就会根据 R1 的地址 2234,将 2234 的地址的对应内容写为 结果数据 7(即该地址的数据由原来的 4 变为了 7)。

至此一个指令就执行完成了。

在这里插入图片描述

控制器包括 指令寄存器(IR)、程序计数器(PC)、地址寄存器(AR)、指令译码器(ID)。

地址寄存器(AR):保存当前 CPU 所访问的内存单元的地址,由于内存和CPU存在着操作速度上的差异,所以需要使用 AR 保持地址信息,直到内存的读/写操作完成。

注意指令: ADD(R1),R0,ADD 为操作码,R1 为地址码

指令系统

计算机指令的组成:一条指令由操作码和操作数两部分组成,操作码决定要完成的操作(如 ADD 加法),操作数指参加运算的数据及其所在的单元地址。

在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中。

计算机指令执行过程:取指令——分析指令——执行指令,三个步骤:

首先将程序计数器PC中的指令地址取出,送入地址总线,CPU 依据指令地址取内存中取出指令内容存入指令寄存器IR;

而后由指令译码器进行分析,分析指令操作码;

最后执行指令,取出指令执行所需的源操作数。

1、指令寻址方式

顺序寻址方式:当执行一段程序时,是一条指令接着一条指令地顺序执行。

跳跃寻址方式:指下一条指令的地址码**不是由程序计数器给出,而是由本条指令直接给出。**程序跳跃后,按新的指令地址开始顺序执行。因此,程序计数器的内容页必须相应改变,以便及时跟踪新的指令地址。

2、指令操作数的寻址方式(考点:立即、直接、间接)

立即寻址方式:指令的地址码字段指出的不是地址,而是操作数本身。

直接寻址方式:在指令的地址字段中直接指出操作数在主存中的地址。

**间接寻址方式:**指令地址码字段指向的存储单元中存储的操作数的地址。

**寄存器寻址方式:**指令中的地址码是寄存器的编号。

**基址寻址方式:**将基址寄存器的内容加上指令中的形式地址而形成操作数的有效地址,其优点是可以扩大寻址能力。

**变址寻址方式:**变址寻址方式计算有效地址的方法与基址寻址方式很相似,它是将变址寄存器的内容加上指令中的形式地址而形成操作数的有效地址。

3、CISC 和 RISC

CISC 是复杂指令系统,兼容性强,指令繁多、长度可变,由微程序实现;

RISC是精简指令系统,指令少,使用频率接近,主要依靠硬件实现(通用寄存器、硬布线逻辑控制)。

具体区别如下:

在这里插入图片描述

4、流水线(取指、分析、执行)时间计算(考点:记住以下四个公式)

**流水线周期:**指令分成不同执行段,其中执行时间最长的段为流水线周期。

**流水线执行时间:**1条指令总执行时间+(总指令条数 - 1) * 流水线周期

**流水线吞吐率计算:**吞吐率即单位时间内执行的指令条数。

公式:指令条数/流水线执行时间

**流水线的加速比计算:**加速比 即 使用流水线后的效率提升度,即 比不使用流水线快了多少倍,越高表明流水线效率越高。

公式:不使用流水线执行时间/使用流水线执行时间

在这里插入图片描述

第一题:

流水线周期:5段流水线中,一段的时间最长的,即 2ns

1条指令的总执行时间:2 + 4 = 6ns(1段2ns,其他4段每段1ns)

流水线执行时间 = 1条指令总执行时间+(总指令条数 - 1) * 流水线周期

​ = 6 + (100 - 1) * 2 = 6 + 198 = 204 ns

流水线吞吐率 = 指令条数 / 流水线执行时间 = 100 / 204 = 25/51 个/ns

1ns = 10-9

= 25 / (51 * 10-9) = (25/51) * 109 = 490 * 106

第二题:

流水线周期:15μs、5μs、1μs 中最长的:即 15μs

1条指令总执行时间:15μs + 5μs + 1μs = 21μs

流水线执行时间:1条指令总执行时间 + (总指令条数 - 1)* 流水线周期 = 21 + (10 - 1)* 15 = 21 + 135 = 156 μs

上式子 中的 10 是 10个磁盘块,即 10个指令。

以上为双缓冲区。因为只有在双缓冲区下才是三段流水线。

因为头两段都需要缓冲区:每个盘块读入缓冲区(第一段)、由缓冲区送至用户区(第二段)。

双缓冲区第一段和第二段是可以同时进行的:即第一段读入耗时15μs 期间 比如读的是磁块2,则可以同时将磁块1送至用户区(执行第二段)。

单缓冲区:不同的任务之间是不能并行的,即第一段和第二段不能同时进行。因为第一段的缓冲区没有空着,第二段还要用缓冲区,所以第二段就得等着第一段读完。

因此对于单缓冲区来说:上述的三段中的前两段应该合并为一段,即总共两段流水线:

第一段:读入缓冲区(15μs)并送至用户区(5μs),总计 20μs

第二段:在用户区内处理(1μs)

所以单缓冲区的流水线周期为:20μs

1条指令执行的总时间为:15 + 5 + 1 = 21μs

流水线执行时间 = 1条指令执行的总时间 + (指令条数 - 1) * 流水线周期 = 21 + (10 - 1) * 20 = 201

所以 单缓冲区需要花费 201μs,双缓冲区需要 156μs。

在这里插入图片描述

流水线周期:时间最长:t

1条指令执行时间:kt

指令执行时间:kt + (n - 1)t = (k + n - 1)t

加速比:不使用流水线执行时间/使用流水线执行时间

流水线执行时间:

流水线周期:时间最长 9

1条指令执行时间:6 + 7 + 8 + 9 + 6 = 36

流水线执行时间:36 + (n -1 )* 9

非流水线最大周期:时间之和:6 + 7 + 8 + 9 + 6 = 36;

非流水线执行时间: 36 + (n -1) * 36

加速比: (36 + (n - 1) * 36) / (36 + (n - 1) * 9) = 36n / (9n +27) = 4n / (n + 3) ,当 n 趋于无穷大时,+3 可以省略,所以为 4n / n = 4

所以最大加速比为:4

参考资料:

用动画带你理解 CPU 怎么执行一条指令

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

碳学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值