计算机速成课程笔记(一)

  1. 课程链接 https://www.bilibili.com/video/av21376839/?p=3

  2. 笔记:

    1. 第二集 电子计算机:

      1. 计算机的最核心最基本的部件的演进:继电器 -> 真空管 -> 晶体管。
      2. 演进方向是更小的尺寸,更快的开闭速度,更长的寿命,更小的故障率
    2. 第三集 布尔逻辑与逻辑门

      1. 二进制:起初的晶体管用来表示3进制,5进制。。。但二进制有易于区分,抗噪。
      2. 布尔代数:0,1 以及 NOT,AND,OR,通过晶体管的开闭和门电路来表示。其中XOR可以通过前三个的组合得到。
    3. 第四集 二进制(计算机如何存储和表示数字)

      1. 二进制的加减法,类比于十进制
      2. 二进制表示整数(类比于十进制),负数,浮点数,8位,32位,64位。。。
      3. 二进制表示符号:ASCII码,Unicode
    4. 第五集 计算逻辑单元 ALU(计算机如何计算)

      1. 计算的核心组件:ALU ,其封装了各种计算组件分为计算单元(加法器,减法器,自增,自减),逻辑单元(与或非)
      2. 逐层的封装抽象 : 门电路 -> ,门逻辑 -> 半加器 -> 全加器 ->八位加法器 -> ALU
    5. 第六集 寄存器&内存

      1. 逐层的抽象封装 :逻辑门 -> 锁存器 -> 1.寄存器(并列), 2.256位内存(矩阵) -> 小块内存- >  整块内存
      2. 矩阵压缩了引线的使用量
    6. 第七集 中央处理器(CPU)

      1. 负责执行程序
      2. CPU =  ALU + 寄存器(数据寄存器,指令寄存器,指令地址寄存器) + 控制器
      3. RAM独立于CPU之外,通过读写线,数据线,地址线交互
      4. 三个时钟周期完成一个指令:取指令 -> 解码(控制器) -> 执行
      5. 时钟:节奏掌控者。单位:赫兹。超频和降频
    7. 第八集 指令和程序

      1. 程序 = 指令的集合
      2. 硬件基本的指令 ADD JUMP SUB STROE LODA_X ...
      3. 通过增加寻址到位宽或是可变长的地址来扩展指令集
    8. 第九集 高级CPU设计(为CPU加速)

      1. 复杂度 vs 速度
      2. 早起提升晶体管的开闭速度
      3. 为特定的指令设计专门的电路:除法,视频解码,图像处理
      4. 为减少CPU的等待时间,增加了catch,可以将一批ram中的数据读入catch,而不是一个。在程序执行期间可以能修改catch内的数据,这就会造成catch和ram的数据不一致,通过标记dirty bit 来确定哪个位置的数据被修改了。
      5. cpu增加流水线,使得cpu能够在 取指令 -> 解码 -> 执行 期间不用等待。即执行某一个阶段的同时也在执行其他的阶段。但是弄清楚指令之间的依赖关系(有依赖关系就必须等待),通过动态排序来最小化流水线的停工时间,称之为乱序执行,当遇到跳转语句时要进行分支预测,提前把指令放入流水线。
      6. 同时执行多条执行 多个ALU -> 多核 -> 多个cpu -> 超级计算机
    9. 第十集 早期的编程方式

      1. 最早的编程:纺织机,一张串孔卡片表示不同的图案,可编程纺织机可以根据穿孔卡片来进行纺织。
      2. 用插线板来存储程序,不同的插线方式表示不同的程序
      3. 用内存来存储程序,计算机读取打孔卡片上的程序并存进程序。内存比插线板更加易用,体积小,复用性强。
      4. 用开关来存储程序。不同的开关组合表示不同的指令。
      5. 早期的编程(1980之前)是一件非常专业的事情,而且很繁琐。
  3. 总结

    1. 计算机的设计 封装,分层,抽象
    2. 硬件提供最基本的指令,软件在基本指令的基础上来实现更多的指令,可以将这些指令封装成软件的基本指令。硬件基本指令的多了会让硬件设计变的麻烦,少了一是可能无法通过软件来弥补指令的缺失,二是会让软件的设计变的麻烦。这是一个复杂度 vs 速度的平衡。最优的硬件基本指令集是图灵完备下的最小指令集?

你可能感兴趣的:(CS)