【计算机科学速成课】笔记一

devtools/2024/10/18 8:29:04/

文章目录

      • 写在前面
      • 1.计算机的早期历史
      • 2.电子计算机
      • 3.布尔运算和逻辑门
      • 4.二进制
      • 5.算术逻辑单元-ALU
      • 6.寄存器和内存

写在前面

所有的一切源于这样一个网站——CS自学指南。
这是新手小白入门计算机科学必要了解的知识——【计算机科学速成课】[40集全/精校] - Crash Course Computer Science。
无笔不读书,记录自己的学习笔记如下:

电子计算机系统的 抽象层次:
物理(电子)——>器件(晶体管、二极管)——>模拟电路(放大器、滤波器)——>数字电路(与门或门)——>逻辑(加法器、储存器)——>微体系结构(数据路径控制器)———>体系结构(指令寄存器)——>操作系统(设备驱动程序)——>应用软件(程序)

1.计算机的早期历史

算盘——>打孔机(人口普查10年一次,但是手工编排需要13年之久,于是出现了IBM,发明了打孔机是时间缩短到了2.5年)
以前的computer是指一种职业,后面才变成一种机器
在这里插入图片描述

2.电子计算机

在这里插入图片描述

3.布尔运算和逻辑门

CPU制作者无需在物理层面考虑,只需要在逻辑器件方面下功夫即可

在这里插入图片描述

4.二进制

在这里插入图片描述

32位电脑,64位电脑,指的是一块块处理数据,每块数据32位或者64位。
Instagram的图像色彩很棒,因为用了32位处理图像。

5.算术逻辑单元-ALU

在这里插入图片描述

ALU——计算机的数学大脑,是现代计算机的基石。是负责计算的组件,几乎所有的部件都用到了它。
,我们来看看ALU的真面目,下面是英特尔的74181ALU——
在这里插入图片描述

下面我们用上面学的布尔逻辑门来做一个简单的ALU逻辑电路,功能与74181相同。之后我们从头开始造一台电脑。

ALU有两个单元——1个算术单元和1个逻辑单元。

先讲第一个单元——运算单元:
算数单元负责所有数字操作,比如加减法。今天的重点是一切的根本——如何将两个数相加
会用到AND、OR、NOT、XOR等逻辑门电路。最简单的就是将两个比特相加。假设有2个输入A、B,1个输出OUTPUT,也就是结果。需要注意的是,这三个都是比特(0或1).所以总共会有3种可能——
在这里插入图片描述
结合二进制里面的0=TRUE,1=FALSE,所以上面的三个算法结果与XOR门一致,如下:
所以我们将XOR门用做1位加法器(adder)
在这里插入图片描述

但是第四个组合是一个特例——1+1=10,上面的1位加法器无能为力。所以需要做调整,即当两位全是1时,会出现进位1,我们便需要额外的线来输出这个1。加一个AND门刚好可以做到,故调整如下——
carry为进位。调整后的器件叫半加器(HALF ADDER)——就是两个逻辑门而已:
在这里插入图片描述
将其抽象化后,得到如下图示——
在这里插入图片描述

但是如果想处理超过1+1的运算,比如1+1+1我们需要全加器
这可以在半加器的基础之上实现。如下——
在这里插入图片描述

全加器表格如下
在这里插入图片描述
这样我们就又得到了一个全加器,下面再次提升抽象,将其封装成一个独立组件。
全加器会把 A,B,C 三个输入加起来,输出"总和”和“进位”。
现在有了新组件,我们可以相加两个8位数字了。假如叫做数字A和B。
先将A、B的最后一位A0、B0相加,得到sum0,因为没有来自前面的进位,所以只用半加器就好。
下面将A1、B1相加,因为A0、B0可能会有进位与之相加,所以这里用全加器,并输出sum1。
下面的各个位依次进行之
在这里插入图片描述

就这样,我们将8位全相加。这也叫做行波进位加法器
注意这里可能会有溢出,即最后一位有进位,代表数字太大,超过了8位,发生了溢出。这会导致不可预料的结果。
在这里插入图片描述

比较著名的溢出现象就是吃豆人游戏用8位存储游戏关卡数,当打超过256之后,就是这样一幅画面,溢出出现BUG。
在这里插入图片描述

如果想避免溢出,我们可以加更多的全加器,如16位、32位。但是也有缺点,每次都要进位,会导致时间消耗,但是电子移动相当之快,影响不大。但是目前的运算是每秒几十亿的量级,也会造成相应影响。为了克服之,现代计算机用的加法器有所不同,叫做**“超前进位加法器”**。做的事仍然是将二进制相加,但是更快。
以上就是ALU如何将两个数相加的全过程。但是ALU还可以做其他更多运算,都是逻辑电路组成的。

下面来讲ALU的另一个单元——逻辑单元。
逻辑单元执行逻辑操作比如之前讲的AND、OR、NOT、XOR之类

比如下面的所有电路输入必须全为0,输出才为1——
在这里插入图片描述

让我们回到开头的英特尔74181,和我们的不同,他只能处理4位输入,意味着我们的ALU比英特尔的还好!
在这里插入图片描述
工程师们常用一个大V代表ALU运算单元,又一层抽象!
在这里插入图片描述

现在我们知道了计算机是如何在没有齿轮和杠杆的情况下进行运算的了。接下来我们会用ALU做成CPU,不过在这之前,会先学习计算机的“记忆”——内存。

6.寄存器和内存

我们在上面一章中说到可以根据ALU算出来数据,但如果算出来就扔掉就没有意义了。所有需要找东西将算出来的数据存起来,已进行接下来有可能的步骤。这就是内存/存储的工作。
在这里插入图片描述
计算机中的很多事情,底层其实都很简单,难的是理解一层又一层的精妙的抽象

今天我们来做出只能存储一位的电路,然后在扩大做出内存模型,下次再和ALU结合起来做成CPU:

我们之前的电路都是单向永远向前流动的,现在我们来做成回环的电路,我们拿一个OR门将输出连回输入,如下:

首先两边都输入0,结果输出是0
在这里插入图片描述

之后将输入调成10,结果是1,之后结果1会很快传回至输入为0的地方,所以很快就会看到输入全是11。

如果将输入变成01,结果是1,之后也一直是1,上面的0不会影响输出1.所以现在存住了信息1,而且这是永久的。无论怎么试,都不会将1变回0
在这里插入图片描述

接下来看看换成与门AND会怎么样
首先将输入全设置为1,输出为1。但是将输入任意之一变成0之后,输出永远为0,所以这个电路能记录0,与之前的相反。
在这里插入图片描述
现在我们有了能存储01的电路,为了做出有用的存储(memory),我们将他们结合起来,叫做锁存器(AND-OR Latch)。
在这里插入图片描述
在这里插入图片描述

这有两个输入,设置输入1,将结果变成1
复位输入1,将结果变成0
如果结果和复位都是0,那么电路会输出最后放入的内容。也就是说,他存住了1位信息!这就是memory的原型!
这叫“锁存器”,因为他“锁”住了一位信息。放入数据的动作叫“写入”,拿出数据的动作叫“读取”。

然而,用设置与复位来输入,有点让人难以理解。为了更容易使用,我们只希望用一条输入数据线(DATA INPUT),一个允许写入线(WRITE ENABLE)来控制信息存取。也就是下面的样式,这叫做“门锁”(Gated Latch)。

在这里插入图片描述

我们不想关注底层原理,提升一层抽象,将“门锁”封装做成一个盒子,这个盒子能存一个bit。如下:
只有允许写入线打开时,器件才开始工作。
在这里插入图片描述

然而这只是一个锁存器做成的门锁器件,只能存一个bit,我们可以将8个并排的锁存器并用,这样就可以存8bit。一组这样的锁存器叫“寄存器”,寄存器能存一个数字,这个数字有多少位叫做“位宽”。位宽从8一直发展到现在的64。

启动寄存器之前,要先启动里面所有锁存器。将所有的允许写入线设置为1后,数据输入线写入值,再将允许写入线设置为0,这样值就存储了。

在这里插入图片描述

存入10110101进寄存器——
在这里插入图片描述

为了节约并排时的线路,将锁存器做成矩形排列,以下是256个锁存器以矩形形态展示。要启动哪一个锁存器,就打开相应的行线和列线。

以下是具体的结构实现图
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我们想通过唯一的方法来指定上述的交叉路口(锁存器),即交叉点的地址。由于上面的排列最多16行16列,所以用4bit即可。我们刚才找的是12行,8列。则表示成地址就是12——>1100,8——>1000。则地址就是11001000
为了将地址转化行和列,我们需要“多路复用器”(MULTIPLEXER)——来将行列十进制转换为二进制代码,如下——
在这里插入图片描述
我们不妨把上面的256位内存当成一个整体,又提升一个抽象层级。
下面的8位地址前4个为代表行,后4个代表列,用于定位唯一的锁存器。
在这里插入图片描述
不幸的是,256bit仍然不能做什么,我们像之前寄存器的排列一样,并行排列8个256bit大小的内存单元,每次从里面存一位,这样就能一次读取8bit,也就是1byte了!
而这里一个内存单元共256位,所以总共能存256byte!
在这里插入图片描述
不管内部,我们再次将之抽象,将其看成一个可寻址内存条——
下面的内存条中,我们有256个地址,每个地址能存8位值的信息。我们下面做CPU时就会用到这个内存条。

在这里插入图片描述

这里的内存条有一个重要特性就是可以访问任何位置,所以叫做随机存取存储器(RAM)
内存就是RAM,就好比于人的短期记忆,记录当前在做的什么事

在这里插入图片描述

下面以一个真实的1980年代的真实内存条来结束本章:
下面的内存焊了8个内存模块
在这里插入图片描述

以下是详解:
在这里插入图片描述

今天我们用锁存器做了一个SRAM(静态随机存取存储器),还有其他类型的RAM,如:DRAM、闪存。他们功能相似,但使用不同电路存取单个位,比如用不同的逻辑门,电容器、电荷捕获或忆阻器。但根本上,这些都是矩阵层层嵌套来存取大量信息
就像计算机中的很多事情,底层其实都很简单,难的是理解一层又一层的精妙的抽象


http://www.ppmy.cn/devtools/36909.html

相关文章

MySQL从入门到高级 --- 5.DQL基本操作

文章目录 第五章:5.基本操作 - DQL5.1 运算符逻辑运算符位运算符算术运算符 5.2 条件查询5.3 排序查询5.4聚合查询5.4.1 聚合查询-NULL值处理 5.5 分组查询 - group by5.5.1 条件筛选 - having5.6 分页查询 - limit5.7 INSERT INTO SELECT 语句5.8 练习5.9 正则表达…

电脑提示“无法定位程序输入点kernel32.dll”怎么解决?分享kernel32.dll丢失的五个修复方法

打开游戏或者软件的时候,电脑提示由于找不到kernel32.dll,无法继续执行此代码怎么办,其实修复起来不难。首先需要先知道怎么是dll文件,dll文件可以简单的把库文件看成一种代码仓库,它提供给使用者一些可以直接拿来用的…

Upload-labs 靶场通关解析(上)

前言 文件上传漏洞是一种常见的网络安全漏洞,存在于许多Web应用程序中。攻击者利用这个漏洞可以上传恶意文件到目标服务器,从而执行各种恶意操作,如执行恶意代码、获取敏感信息、控制服务器等。 文件上传漏洞的原理是,Web应用程…

Summer ‘24来啦!15个最热门的功能抢先看!

Salesforce Summer 24即将发布!本篇文章我们将深入了解Summer 24最热门的声明性功能。 01 自动化Lightning应用程序 新的自动化Lightning应用程序中包含所有与自动化相关的内容。访问该应用程序的用户可以在主应用程序中看到Flow、错误信息和其他基于社区的链接。…

VALSE 2024 Workshop报告分享┆Open-Sora Plan视频生成开源计划——进展与不足

2024年视觉与学习青年学者研讨会(VALSE 2024)于5月5日到7日在重庆悦来国际会议中心举行。本公众号将全方位地对会议的热点进行报道,方便广大读者跟踪和了解人工智能的前沿理论和技术。欢迎广大读者对文章进行关注、阅读和转发。文章是对报告人…

30分钟打造属于自己的Flutter内存泄漏检测工具---FlutterLeakCanary

30分钟打造属于自己的Flutter内存泄漏检测工具 思路检测Dart 也有弱引用-----WeakReference如何执行Full GC?如何知道一个引用他的文件路径以及类名? 代码实践第一步,实现Full GC第二步,如何根据对象引用,获取出他的类…

LeetCode 面试经典150题 252.会议室

题目:给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。 思路:因为一个人在同一时刻只能参加一个会议,因此…

rust数据类型转换,as和TryInto使用

Rust 是类型安全的语言&#xff0c;因此在 Rust 中做类型转换不是一件简单的事&#xff0c;这一章节我们将对 Rust 中的类型转换进行详尽讲解。 as转换 先来看一段代码&#xff1a; fn main() {let a: i32 10;let b: u16 100;if a < b {println!("Ten is less tha…