计算机科学速成课

计算机科学速成课

2022.12.27

b站 【计算机科学速成课】[40集全/精校] - Crash Course Computer Science

网友的笔记:https://shimo.im/docs/vkCKkj3YxGtygrVg/readhttps://shimo.im/docs/PJAUY30F1uYksv0h/readhttps://www.processon.com/view/link/61ef6e8f0e3e7439ae917672#map

5.算术逻辑单元 ALU

8位行波进位加法器 8-bit ripple carry adder

加法时,A和B的每一位分别相加,输出sum和carry进位数,进位数再后面的A和B的位相加(通过full adder),输出sum和carry进位数。

image-20221227164420738

half adder、full adder都是由逻辑门构成(电流来控制不同的输出,电流作用类似开关)

现在计算机不用这个8位行波进位加法器,而是用“超前进位加法器” carry-look-ahead adder

寄存器 & 内存-Registers and RAM

把输出接回输入,当输入A输入1时,输出为1,接回来B也是1,输出1。之后如果A输入0,输出还是1,变得不管A是0或1,输出都是1。

image-20221227173010474 image-20221227173316947

image-20221227173342706

存储memory ,and-or 锁存器,锁存,因为它“锁定”(latch)了一个值

image-20221227173826032

一串锁存器组成寄存器register。

用矩阵(行、列)排列锁存器。对于256位的存储,只要35条线,即一条“数据线”,一条“允许写入线”,一条“允许读取线”,还有16行16列的线用于选择锁存器(16+16+3=35)。
因此4位表示行地址,4位表示列地址,就能得到某个锁存器的地址了。

实现的方法是通过 多路复用器 multiplexer。

内存的一个重要特性是:可以随时访问任何位置,因此叫“随机存取存储器”,简称 RAM(random-access memory)

7. 中央处理器(CPU)-The Central Processing Unit

指令地址寄存器:一个寄存器追踪程序运行到哪里了,存当前指令的内存地址。

指令寄存器:一个寄存器存当前指令。

image-20221227191530623

8. 指令和程序-Instructions & Programs

指令,就是程序的一条条命令,从第一条开始执行,比如把第一条指令里面的地址内容放到寄存器A,或者add,或者jump到某个指令,停止halt。

image-20221227225041097

9. 高级CPU设计-Advanced CPU Designs

指令集,就是类似jump等指令的集合,是固定数量的,如果不同cpu都有一份指令集,不同cpu要兼容各个指令集,指令数量就会越来越多。

即使cpu时钟很高可以处理指令很快,但是ram存储器和cpu交互、传输的数据线(叫 总线 bus)可能传输得不够快,有延迟。因此用到了“缓存”cache。

先把ram内存的一批地址的数据复制到cpu的缓存里。

image-20221227225336293

当缓存里的数和ram的同一个地址的内容不一致时,要记录下来,以便于后续ram的同步。因此缓存里每块空间都有一个特殊标记,叫“脏位”dirty bit。

同步一般发生在缓存满了,cpu要新的地址内容(缓存里没有)时,在清理缓存腾出空间之前,会先检查脏位。如果是脏的,在加载新内容之前,会把数据写回ram。

指令流水线 instruction pipeline

image-20221227230531536

乱序执行 out-of-order execution:解决指令之间的依赖关系(举例子:你在读某个数据,正在执行的指令会改这个数据,变成拿的旧数据了)。因此要动态排序有依赖关系的指令,以达到最小化流水线的时间。

分支预测 branch prediction:解决条件跳转(conditional jump instruction)(比如jump negative等指令)造成cpu空等的时间(cpu空等因为要等条件跳转的结果出来(结果是可能会跳转,也可能不会跳转))。jump想成“岔路口”branch,cpu会猜哪条路的可能性大一点,然后提前把指令放进流水线,这叫“推测执行”spectaculative execution。当jump的结果出了,cpu猜对的话,流水线已经塞满正确指令,可以马上执行(就没有延迟了),猜错了,就要清空流水线 pipeline flush,就像走错路掉头。这种猜测哪条分支更有可能的方法叫分支预测。

超标量处理器 superscalar 一个时钟周期完成多个指令。

超级计算机 supercomputer 很多个cpu组成。

10. 早期的编程方式-Early Programming