因为在课程中第七、八、九课联系较紧密,故在同一文档中梳理。
笔记结合课程、上网查询、个人理解整理,如有错误,恳请指正。

第七课 中央处理器基础知识

一、简单总结

CPU的主要功能有:处理指令、执行操作、控制时间、处理数据

CPU主要由 ①运算器(计算逻辑单元ALU)②控制器(控制单元)③寄存器组 ④时钟 组成 而在其中:

①ALU主要完成处理数据的任务。
②控制单元包含寄存器(指令寄存器、指令地址寄存器)、指令译码器、操作控制器,主要完成上述处理指令、执行操作的任务。
③寄存器组用来临时存储数据和操作数据。
④时钟主要管理CPU执行程序的节奏 ,CPU 执行“取指令→解码→执行”中每一步的速度叫做“时钟速度”,单位赫兹Hz,表示频率,超频的概率就是从中而来的。当今很多计算机都能能够做到动态调整频率。

CPU的大致过程为:取指令阶段-解码阶段-执行阶段-结束

Lena

  • 这是图1 主要展示CPU的构成

二、具体步骤举例

  • 这里的例子仅仅是例子,指令不一定是八位
    在例子中,指令前四位是操作码,后四位是CPU内寄存器的地址或者从RAM获取数据、向RAM输入数据的地址等等

Lena

  • 这是图2
    Lena
  • 这是图3

1.取指令阶段

在图3中我们看到,此时指令地址寄存器中的地址为0000 0010,对应的数字是2。
于是RAM的地址2的数据1000 0100进入到指令储存器中。

2.解码阶段

由逻辑门组成的控制单元对指令进行解码,同时检验操作码
Lena

  • 这是图4 主要是该部分的逻辑门组成方式(不过图中指令并不是本笔记中举出的)

3.执行阶段

根据图1,1000 0100指令前四位所代表的操作是将两个寄存器的值相加,再将结果传输进第二个寄存器当中。
再看后四位,0100代表的并不是RAM地址 01代表的是CPU中寄存器B,00代表的是寄存器A。

  • 因为00在01后面 所以实际上寄存器A代表的是指令中的“第二个寄存器”。

所以A中的0000 0011(3)和B中的00001110(14)经过控制单元 通过ALU进行相加,ALU再将相加所得的数据返回回A。
这里就类似于编程当中可能会出现的A=A+B了,如果不停止的话,这个过程会无穷无尽加下去。而在这里,控制单元会用一个寄存器暂时保存结果,关闭ALU,然后再返回值到A中。
Lena

  • 这是图5,可以看到3+14=17 也就是A中的10001

4.最后地址寄存器数值+1 执行结束

三、RAM和CPU的关系

RAM在CPU之外,CPU 和 RAM 之间用“地址线”、“数据线”和“允许读/写线”进行通信。


第八课 指令和程序

一、相关概念

1.指令:指示计算机要做什么的代码,有多种分类,比如数学指令、内存指令。
2.程序:由多条指令共组成。
3.指令集:记录指令名称、用法、操作码以及所需 RAM 地址位数的表格(如七-2)。

二、一些基础的指令

1.LOAD指令:读取地址中的指令并存储到指定位置。
2.ADD指令:相加多处数据并存到指定位置(第七课笔记举的例子)。
3.JUMP 指令:让程序会跳转至对应的 RAM 地址读取数据。可以是无条件跳转:
Lena

  • 这是图1,表现出编程中的循环
    也可以进行有条件的跳转。(如 JUMP-negative,若目标值为负数才执行跳转。)
    4.HALT指令:停止程序。

三、指令的发展

课程当中举出的指令都只有8位,能表示的内容太少,有如下两个解决方法。
1.最直接的是用增加指令位数,如 32 位或 64 位。
2.其次是采用“可变指令长度”,令不同的指令的长度不同,尽量节约位数。假设 1 个字为 16 位,如果某指令不需要操作内存,则可以省去寻址的位数。(该情况下,部分指令,如 JUMP,后面需要跟的数据称为立即值。)


第九课 高级CPU设计(CPU的升级)

一、背景

早期计算机提速是通过减少晶体管切换的时间进行的(但是这种方式具有瓶颈),或者是设计专门的复杂电路进行某个操作(比如除法电路),让CPU更大更复杂,但也运行速度更快。

二、通过优化单个指令流来进行改进

1.缓存的运用

缓存是在 CPU 中的小块 RAM,用于存储批量指令。在缓存未被发明出来的时候,CPU从RAM通过总线BUS获取数据时,只能一条一条传输。但缓存发明之后,可以一次性传一批数据存放在缓存中,缓存中的数据再传给CPU的速度快很多。
Lena

  • 这是图1
    如果想要的数据在缓存中,叫做缓存命中,反之叫做缓存未命中。缓存可以当临时空间,存一些中间值,适合长\负责的运算。
    计算完的数据不会立马返回RAM,而是存在缓存中。缓存里的数据要对RAM里的数据进行更新,缓存里每块空间,有一个特殊标记,叫“脏位”。
    当缓存满了,计算机会检查缓存中的脏位,如果是脏的(即缓存中的数据与RAM中的不同),便会先把被标记为脏位的数据优先写回RAM中,再传输下一批数据进缓存。

2.指令流水线(并行处理)

使CPU在处理指令时,不一定要完全按照串行流程,可以按照并行方式进行。例如,当此条指令正在“执行”时,可以处理下一个指令的“解码”,下下条指令的“读取”,这样可以同时利用上CPU里的所有部分。增大吞吐量
Lena

  • 这是图2,串行流程
    Lena
  • 这是图3,并流程
  • 但这个可能会面临一些问题,比如说 ①数据可能具有依赖性:上一条指令可以会改变下一条指令的运行方式,同时进行可能导致执行时非常混乱 或者是 ②条件跳转,一般来说简单的流水线处理器,看到JUMP指令会停一会,等待条件值确定下来,条件结果出了,才能判断是否进行JUMP,这个等待会消耗很多时间。结局方案如下
    针对问题①:可以进行对有依赖关系指令的动态排序,即“乱序执行”。
    针对问题②:高级的流水线处理器会提前猜测哪个条件可能性大,然后提前把指令放在流水线上,这叫“推测执行”。如果猜测正确,则立即执行,错误则会清空刚才加载的指令,重新加载。为了减少清空次数,CPU开发了高级方法来猜测哪条分支更有可能,叫“分支预测”。现代计算机的猜测正确率高达90%。

三、多个指令流的使用

多核处理器

让CPU芯片具有多个独立处理的单元,同时运行多个指令流。当然,核不够时,可以用多个CPU。超级计算器神威·太湖之光,有40960个CPU,每个CPU有256个核心,总共超过1千万个核心。(强!)