【计算机科学速成课】b站课程学习与整理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

b站课程《计算机科学速成课》笔记整理: https://www.bilibili.com/video/av21376839/


1. 计算机早期历史

  • 公元前 2500 年,算盘出现,为十进制,功能类似一个计数器。
  • 公元前 2500 年-公元 1500 年:星盘、计算尺等依靠机械运动的计算设备出现。
  • 公元 1613 年:computer 的概念出现,当时指的是专门做计算的职业。
  • 1694 年:步进计算器出现,是世界上第一台能自动完成加减乘除的计算器。
  • 1694-1900 年:计算表兴起,类似于字典,可用于查找各种庞大的计算值。
  • 1823 年:差分机的设想出现,可以做函数计算,但计划最后失败。
  • 19 世纪中期:分析机的设想出现,设想存在可计算一切的通用计算机
  • 1890 年:打孔卡片制表机,速度上约是手动制表的十倍,两年半就完成了人口普查统计。原理:在纸上打孔→孔穿过针→针泡入汞→电路连通→齿轮使计数+1。用于人口普查

各企业开始认识到计算的价值,发现可以通过改进数据密集型任务以减少劳动力投入,从而提高利润的潜力。
计算机早期历史

2. 电子计算机

  1. 电子计算机元器件变化:继电器→真空管→晶体管
  2. 计算机的出现背景:20 世纪人口暴增,科学与工程进步迅速,航天计划成形。以上导致数据的复杂度急剧上升、计算量暴增,对于计算的自动化、高速有迫切的需求
  3. 电子计算机的发展:
  • 1945 年 哈佛马克 1:使用约3500个继电器,用电磁效应,控制机械开关,每秒可以做3次加减法,但一次乘法需要花费6秒时间,除法需要15秒,更复杂的操作如三角函数等可能要超过一分钟。运行中持续遇到齿轮磨损造成延迟。
    最早还因为有虫子飞进去导致故障,引申出 bug=故障的意思。
  • 1943 年 巨人 1 号:使用1600个真空管(三极管),制造出世界上第一个可编程的计算机。
  • 1946 年 ENIAC:第一个电子通用数值积分计算机,每秒可执行5000次十位数加减法。
  • 1947 年 晶体管出现,每秒可以打开关闭10000次,使用的是固态的半导体材料,相对真空管更可靠,而且更小,促生了更小更便宜的计算机出现。
  • 1957 年 IBM 608: 第一个消费者可购买的晶体管计算机出现,3000个晶体管,约每秒80次乘除。

在这里插入图片描述

3. 布尔逻辑与逻辑门

1. 计算机为什么使用二进制:

  1. 计算机的元器件晶体管只有 2 种状态,通电(1)&断电(0),用二进制可直接根据元器件的状态来设计计算机。
  2. 而且,数学中的“布尔代数”分支,可以用 True 和 False(可用 1 代表 True,0 代表 False)进行逻辑运算,代替实数进行计算。
  3. 计算的状态越多,信号越容易混淆,影响计算。对于当时每秒运算百万次以上的晶体管,信号混淆是特别让人头疼的的。

2. 布尔代数&布尔代数在计算机中的实现变量:

  1. 没有常数,仅 True 和 False 这两个变量。
  2. 三个基本操作:NOT/AND/OR。
  3. 为什么称之为“门”:控制电流流过的路径

NOT 操作:

  • 命名:称为 NOT 门/非门。
  • 作用:将输入布尔值反转。输入的 True 或 False,输出为 False 或 True。
  • 晶体管的实现方式:半导体通电 True,则线路接地,无输出电流,为 False。半导体不通电 False,则输出电流从右边输出,为 True。
    在这里插入图片描述

AND 操作:

  • 命名:AND 门/与门
  • 作用:由 2 个输入控制输出,仅当 2 个输入 input1 和 input2 都为 True 时,输出才为 True,2 个输入的其余情况,输出均为 False。
    在这里插入图片描述

OR 操作:

  • 命名:OR 门/或门
  • 作用:由 2 个输入控制输出,只要其中一个输入为 True,则输出 True。
    用晶体管实现的方式

特殊的逻辑运算——异或

  • 命名:XOR 门/异或门
  • 作用:2 个输入控制一个输出。当 2 个输入均为 True 时,输出 False,其余情况与 OR 门相同。

在这里插入图片描述

逻辑门的符号表示

  • 作用:将逻辑门简化,将逻辑门用于构建更大的组件,而不至于太复杂。
  • 图示:
    • 非门:用三角形+圆圈表示
    • 与门:用 D 型图案表示
    • 或门:用类似 D 向右弯曲的图案表示
    • 异或门:用或门+一个圆弧表示

在这里插入图片描述

在这里插入图片描述
常用的逻辑门,可以参阅:https://zh.wikipedia.org/wiki/%E9%82%8F%E8%BC%AF%E9%96%98

抽象的好处

  • 使得分工明确,不同职业的工程师各司其职,而不用担心其他细节。
  • 思考的重心从原始的电子流动,转向了以数据表示为替代:true or false。

布尔值:没有常数,仅 True 和 False 这两个变量

4. 二进制

二进制的原理,存储单元 MB/GB/TB 解释

引入:

  • 十进制与二进制的图示:十进制的 263
    在这里插入图片描述

  • 二进制的 10110111
    在这里插入图片描述

  • 计算机中的二进制表示:单个数字 1 或 0,1 位二进制数字命名为位(bit),也称 1 比特

  • 字节(byte)的概念:1byte=8bit,即 1byte 代表 8 位数字。最早期的电脑为八位的,即以八位为单位处理数据。为了方便,将八位数字命名为 1 字节(1byte)

  • 十进制与二进制的区别:

    • 十进制有 10 个数字,0-9,逢 10 进 1(不存在 10 这个数字),则每向左进一位,数字大 10 倍。
    • 二进制有 2 个数字,0-1,逢 2 进 1,(不存在 2 这个数字),则每向左进一位,数字大 2 倍。
  • byte 在电脑中的单位换算:1kb=2^10 bit = 1024byte =1000b

    • 1TB=1000GB
    • 1GB=十亿字节=1000MB=10^6KB
  • 32 位与 64 位电脑的区别

    • 32 位的最大数为 43 亿左右 在32位操作系统下int类型取值范围如下: 1、Int32 //等于int, 占4个字节(-2147483648~2147483647)
    • 64位 2的64次方bytes,计算后其可寻址空间达到了18446744073709551616 Bytes,即16384PB(PebiByte)或16777216TB(TebiByte)。

正数、负数、正数、浮点数的表示

  • 计算机中表示数字的方法

    • 整数:
      • 表示方法:
      • 第 1 位:表示正负 1 是负,0 是正(补码)
      • 其余 31 位/63 位: 表示实数
  • 浮点数(Floating Point Numbers):

    • 定义:小数点可在数字间浮动的数(非整数)
    • 表示方法:IEEE 754 标准下用类似科学计数法的方式,存储十进制数值
    • 浮点数=有效位数*指数
    • 32 位数字中:第 1 位表示正负,第 2-9 位存指数。剩下 23 位存有效位数eg.625.9=0.6259(有效位数)*10^3(指数)

在这里插入图片描述

美国信息交换标准代码-ASCⅡ,用来表示字符

  • 全称:美国信息交换标准代码
  • 作用:用数字给英文字母及符号编号
  • 内容:7 位代码,可存放 128 个不同的值。
    在这里插入图片描述

UNICODE,统一所有字符编码的标准

  • 诞生背景:1992 诞生,随着计算机在亚洲兴起,中文日语有太多字符,需要解决 ASCⅡ不够表达所有语言的问题。为提高代码的互用性,而诞生的编码标准。
  • 内容:UNICODE 为 17 组的 16 位数字,有超过 100 万个位置,可满足所有语言的字符需求。

在这里插入图片描述

5. 算术逻辑单元

以二进制表示并存储数字是计算机的重要功能,但真正的目标是计算,或者说以有意义的方式处理存储数字,这些操作由计算机的算术逻辑单元处理。

什么是算术逻辑单元

  • 命名:简称 ALU,Arithmetic&Logic Unit
  • 组成:ALU 有 2 个单元,1 个算术单元和 1 个逻辑单元(Arithmetic Unit 和 Logic Unit)
  • 作用:计算机中负责运算的组件,处理数字/逻辑运算的最基本单元。

算术单元

  • 基本组件:
    • 由半加器、全加器组成
    • 半加器、全加器由 AND、OR、NOT、XOR 门组成
  • 加法运算
    • 组件:AND、OR、NOT、XOR 门
    • 元素:输入 A,输入 B,输出(均为 1 个 bit,即 0 或 1)

半加器:

- 作用:==用于计算个位的数字加减。==
- 输入:A,B
- 输出:总和,进位

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

全加器:

- 作用:==用于计算超过 1 位的加法(ex:1+1+1),由于涉及进位,因此有 3 个输入(C 充当进位)。==

在这里插入图片描述

如何用半加器与全加器做 8 位数的加法,以 8 位行波加法器为例

- 用半加器处理第 1 位数(个位)的加法,得到的和为结果的第 1 位。
- 将输出的进位,输入到第 2 位用的全加器的输入 C 中。
- 将第 2 位的 2 个数用全加器计算,得到的和为结果的第 2 位(sum)。
- 将第 2 位计算的进位连接到百位的全加器输入 C 中。
- 在第 3-8 位上,循环第 3-4 步的操作。

现在电脑使用的加法器叫“超前进位加法器,原理是类似的。
在这里插入图片描述
在这里插入图片描述
简单的ALU乘除法是也是用加减法实现的。

基础的8-bit ALU有两个输入,A和B,每个都是8bits,再加入4 bits的操作代码。
在这里插入图片描述

在这里插入图片描述

6. 寄存器和内存

通过ALU计算的结果需要保留下来,这就用到了计算机内存。当玩游戏、写文档时如果断电,进度会丢失,这是为什么?

  • 原因是这是电脑使用的是 RAM(随机存取存储器),俗称内存,内存只能在通电情况下存储数据。

概念梳理

  • 锁存器:锁存器是利用 AND、OR、NOT 逻辑门,实现存储 1 位数字的器件。
  • 寄存器:1 组并排的锁存器
  • 矩阵:以矩阵的方式来存放锁存器的组合件,nn 门锁矩阵可存放 n^2 个锁存器,但同一时间只能写入/读取 1 个数字。(早期为 1616 矩阵)
  • 位址:锁存器在矩阵中的行数与列数。eg.12 行 8 列
  • 多路复用器:一组电线,输入 2 进制的行址&列址,可启用矩阵中某个锁存器
  • 内存(RAM):随机存取存储器,由一系列矩阵以及电路组成的器件,可根据地址来写入、读取数据。类似于人类的短期记忆,记录当前在做什么事情。

锁存器

  • 作用:存储 1 位数字。
    在这里插入图片描述

门锁

锁存器需要同时输入 2 个数字,不太方便。
为了使用更方便,只用 1 根电线控制数据输入,发展了门锁这个器件。另外,用另一根电线来控制整个结构的开关。(和复位作用不同)
在这里插入图片描述
或者更简易的表示为:
在这里插入图片描述

寄存器

  • 作用:并排使用门锁,存储多位数字,问题是这样排线用的还是太多了
    在这里插入图片描述

门锁矩阵

通俗理解:

  • 16*16 的门锁矩阵,可理解为 1 个公寓,1 个公寓 256 个房间。
  • 8 个门锁矩阵并排放,则有了 8 个公寓。
  • 规定每一个公寓同一个编号的房间,都有一样的标记(地址),共同组成 8 位数字。
  • 那么 8 个公寓就能存 (8*256 / 8)个数字。
    原因:16*16 的门锁矩阵虽然有 256 个位置,但每次只能存/取其中 1 个位置的数字。因此,要表示 8 位数字,就需要同时调用 8 个门锁矩阵。
    在这里插入图片描述
    在这里插入图片描述

内存

在这里插入图片描述
在这里插入图片描述
将一堆独立的存储模块和电路看做 1 个单元,组成内存方块,n 个内存方块组成内存模块。在一个电路板上所有的内存方块统称为内存(RAM)。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7. 中央处理器(CPU)

前面已经学习了ALU对输入的二进制数据执行计算,还学习了两种计算机内存,寄存器和RAM,是时候结合这两个部分造一个计算机的“心脏”(CPU)。

概念梳理

  • CPU(Central Processing Unit):中央处理单元,负责执行程序。每个程序都是由一系列单个操作指令组成的。CPU通常由寄存器/控制单元/ALU/时钟组成。与 RAM 配合,执行计算机程序。CPU 和 RAM 之间用“地址线”、“数据线”和“允许读/写线”进行通信。
    • 指令:指示计算机要做什么,多条指令共同组成程序。如数学指令,内存指令。
  • 时钟:负责管理 CPU 运行的节奏,以精确地间隔,触发电信号,控制单元用这个信号,推动 CPU 的内部操作。
    • 时钟速度:CPU 执行“取指令→解码→执行”中每一步的速度叫做“时钟速度”,单位赫兹Hz,表示频率。
    • 超频/降频:
      • 超频,修改时钟速度,加快 CPU 的速度,超频过多会让 CPU 过热或产生乱码。
      • 降频,降低时钟速度,达到省电的效果,对笔记本/手机很重要。
  • 微体系框架:以高层次视角看计算机,如当我们用一条线链接 2 个组件时,这条线只是所有必须线路的抽象。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

CPU 工作原理

  • 必要组件:
    • 指令表:给 CPU 支持的所有指令分配 ID
    • 控制单元:像指挥部,有序的控制指令的读取、运行与写入。
    • 指令地址寄存器:类似于银行取号。该器件只按顺序通报地址,让 RAM 按顺序将指令交给指令寄存器。
    • 指令寄存器:存储具体的指令代码。
  • 过程:
    • 取指令:指令地址寄存器发地址给 RAM→RAM发该地址内的数据给指令寄存器→指令寄存器接受数据
    • 解码:指令寄存器根据数据发送指令给控制单元 →控制单元解码(逻辑门确认操作码)
    • 执行阶段:控制单元执行指令(→涉及计算时→调用所需寄存器→传输入&操作码给ALU执行)→调用RAM特定地址的数据→RAM将结果传入寄存器→指令地址寄存器+1

图示:第一个 CPU

在这里插入图片描述

在这里插入图片描述

8. 指令和程序

CPU的强大在于它是可编程的,写不同序列的指令,CPU将执行不同的任务,也就是说,CPU是一个可以被轻松修改的软件控制的硬件。

概念梳理

  • 指令:指示计算机要做什么的代码(机器码),多条指令共同组成程序。如数学指令,内存指令。注:指令和数据都是存在同一个内存里的。
  • 指令集:记录指令名称、用法、操作码以及所需 RAM 地址位数的表格。
    在这里插入图片描述

指令的执行

  • 原则:
    • RAM 每一个地址中,都存放 0 或 1 个数据。
    • 特定的数字组合,就表示为一个指令,否则表示一个值。
  • LOAD 指令:
    • 计算机会按地址的顺序,读取 RAM 中所记录的指令/数据。
    • 计算机接受到指令后,如 LOAD_A,则通过数据线将数据传至寄存器 A。
      在这里插入图片描述
  • ADD 指令:
    • ADD B A 指令告诉 ALU,把寄存器 B 和寄存器中的数字加起来,存到寄存器 A 中。
  • JUMP 指令:
    • 遇到 JUMP 指令,程序会跳转至对应的 RAM 地址读取数据。
    • JUMP 指令可以有条件跳转(如 JUMP-negative),也可以无条件跳转。

计算机指令长度

由于早期计算机每个字只有 8 位,指令只占 4 位,意味着只能有 16 个指令,这远远不够。现代计算机有两种方式解决指令不够用的问题:最直接的是用更多位来表示指令,如 32 位或 64 位。

或者采用“可变指令长度”,令不同的指令的长度不同,尽量节约位数。假设 1 个字为 16 位,如果某指令不需要操作内存,则可以省去寻址的位数。该情况下,部分指令后面需要跟数据,如 JUMP,称为立即值。
在这里插入图片描述

9. 高级CPU设计

概念梳理

  • 缓存:在 CPU 中的小块 RAM,用于存储批量指令。
  • 缓存命中:想要的数据已经在缓存里
  • 缓存未命中:想要的数据不在缓存里
  • 脏位:缓存里每块空间,有个特殊标记,叫脏位,用于检测缓存内的数据是否与 RAM 一致。
  • 多核处理器:一个 CPU 芯片中,有多个独立处理单元。

现代 CPU 如何提升性能:

早期通过加快晶体管速度,来提升 CPU 速度。但很快该方法到达了极限。
后来给 CPU 设计了专门除法电路+其他电路来做复杂操作:如游戏,视频解码

缓存:

为了不让 CPU 空等数据,在 CPU 内部设置了一小块内存,称为缓存,让 RAM 可以一次传输一批数据到 CPU 中。(不加缓存,CPU 没位置放大量数据)
缓存也可以当临时空间,存一些中间值,适合长/复杂的运算。
脏位:储存在缓存中与 RAM 不一致的数据
空等原因:从 RAM 到 CPU 的数据传输有延迟(要通过总线,RAM 还要时间找地址、取数据、配置、输出数据)。

缓存同步

缓存同步一般发生在 CPU 缓存已满,但 CPU 仍需往缓存内输入数据。此时,被标记为脏位的数据会优先传输回 RAM,腾出位置以防被覆盖,导致计算结果有误。

指令流水线:

  • 作用:让取址→解码→执行三个步骤同时进行。并行执行指令,提升CPU性能。原本需要 3 个时钟周期执行 1 个指令,现在只需要 1 个时钟周期。
  • 设计难点:数据具有依赖性 跳转程序
  • 数据依赖性解决方法:乱序运行、预测分支(高端 CPU)

在这里插入图片描述

一次性处理多条指令

在这里插入图片描述

同时运行多个指令流(多核 CPU)

多核处理器:一个 CPU 芯片中,有多个独立处理单元。但因为它们整合紧密,可以共享一些资源。

超级计算机(多个 CPU)

在一台计算机中,用无数个 CPU,做怪兽级的复杂运算,如模拟宇宙形成。
在这里插入图片描述
在这里插入图片描述

10. 早期编程方式

早期,程序如何进入计算机

程序必须人为地输入计算机。早期,电脑无内存的概念,人们通过打孔纸卡等物理手段,输入数据(数字),进入计算机。

早期计算机的编程

  • 打孔纸卡/纸带:在纸卡上打孔,用读卡器读取连通电路,进行编程。原因,穿孔纸卡便宜、可靠也易懂。62500 张纸卡=5MB 数据
  • 插线板:通过插拔线路的方式,改变器件之间的连接方式,进行编程。
  • 面板开关(1980s 前):通过拨动面板上的开关,进行编程。输入二进制操作码,按存储按钮,推进至下一个内存位,直至操作完内存,按运行键执行程序。(内存式电脑)

现代计算机基础结构——冯诺依曼计算机

冯诺依曼计算机的标志是,一个处理器(有算术逻辑单元)+数据寄存器+指令寄存器+指令地址寄存器+内存

在这里插入图片描述

参考链接:
1 https://www.bilibili.com/video/BV1EW411u7th/?p=5&spm_id_from=pageDriver&vd_source=48c132c0271ba2d56edd866dc3230e91
2 https://shimo.im/docs/PJAUY30F1uYksv0h/read
3 https://www.processon.com/view/link/61ef6e8f0e3e7439ae917672#map

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值