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

文章目录

      • 写在前面
      • 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.mzph.cn/bicheng/9055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Dragonfly 拓扑的路由算法

Dragonfly 拓扑的路由算法 1. Dragonfly 上的路由 (1)最小路由(2)非最小路由 2. 评估3. 存在问题 (1)吞吐量限制(2)较高的中间延迟 references Dragonfly 拓扑的路由算法 John Kim, William J. Dally 等人在 2008 年的 ISCA 中提出技术驱动、高度可扩展的 Dragonfly 拓扑。而…

在做题中学习(53): 寻找旋转数组中的最小值

153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode) 解法:O(logn)->很可能就是二分查找 思路:再看看题目要求,可以画出旋转之后数组中元素的大小关系: 首先,数组是具有二段性的(适配二分查…

数据库(MySQL)—— 索引

数据库(MySQL)—— 索引 什么是索引创建索引使用 CREATE INDEX 语句使用 ALTER TABLE 语句在创建表时定义索引特殊类型索引注意事项 举个例子无索引的情况有索引的情况为什么索引快索引的结构 今天我们来看看MySQL中的索引: 什么是索引 MyS…

财政部、交通运输部:推动北斗导航等新技术与交通基础设施融合

财政部、交通运输部:推动北斗导航等新技术与交通基础设施深度融合 近日,为深入贯彻落实中共中央、国务院关于加快建设交通强国、数字中国等决策部署,推进公路水路交通基础设施数字转型、智能升级、融合创新,加快发展新质生产力&a…

VisualGDB:Linux动态库项目创建、编译及库的使用

此篇接上篇 《VisualGDB:为Linux项目添加系统依赖库》,在本篇中我们重点分享一下如何基于VisualGDB 在VS中创建Linux动态库项目,如何编译及使用创建的动态库。 一、VisualGDB创建Linux动态库项目 如下,我们创建一个Linux下的动态库项目MyMath 二、编译动态库 我们稍微…

哈夫曼编码python算法实现(图片版)

一、问题: 请使用哈夫曼编码方法对给定的字符串,进行编码,以满足发送的编码总长度最小,且方便译码。“AABBCCDDEEABCDDCDBAEEAAA” 二、过程: 三、结果:

手动实现简易版RPC(四)

手动实现简易版RPC(四) 往期内容 手动实现简易版RPC(一):RPC简介及系统架构 手动实现简易版RPC(二):简单RPC框架实现 手动实现简易版RPC(三):mock数据生成 前言 接上几篇博客我们实现了最…

【6D位姿估计】FoundationPose 跑通demo 训练记录

前言 本文记录在FoundationPose中,跑通基于CAD模型为输入的demo,输出位姿信息,可视化结果。 然后分享NeRF物体重建部分的训练,以及RGBD图为输入的demo。 1、搭建环境 方案1:基于docker镜像(推荐&#xf…

重置密码之后无法ssh登录

背景描述 我这边有个服务器S,我从ServerA可以ssh上去,但是我从堡垒机B无法ssh上去;一开始以为是密码问题,手动重置密码,但是依然无法登录进去;一直提示密码错误;改了好几次密码都不行 问题原因…

5.9号模拟前端面试10问

5.9号模拟前端面试10问 1.html语义化的理解 HTML语义化是指使用具有明确含义的HTML标签来描述内容&#xff0c;而不仅仅是使用<div>和<span>等通用容器标签。语义化的HTML代码更易于阅读和维护&#xff0c;同时也有助于搜索引擎优化&#xff08;SEO&#xff09;。…

达梦数据库限制用户登录IP测试

达梦数据库创建用户时可以限制登录ip和时间段。 创建测试测试用户 create user test1 identified by Test_1234 ALLOW_IP "192.168.100.101"; 限定该用户只能通过192.168.100.101地址登录数据库 连接测试 上图可见&#xff0c;192.168.100.101客户端可以连接上19…

wish、亚马逊怎么给店铺引流?怎么运用自养号测评提高流量的转化率?

作为全球知名的跨境电商平台&#xff0c;wish、亚马逊为卖家提供了一个拓展海外市场的机会。然而&#xff0c;在wish、亚马逊平台上建立和经营一家成功的店铺需要有效的引流策略。那么&#xff0c;Wish、亚马逊怎样才能给店铺引流呢&#xff1f; 一、Wish、亚马逊怎么给店铺引…

C++学习笔记——仿函数

文章目录 仿函数——思维导图仿函数是什么仿函数的优势理解仿函数仿函数的原理举例 仿函数——思维导图 仿函数是什么 使用对象名调用operator&#xff08;&#xff09;函数看起来像是在使用函数一样&#xff0c;因此便有了仿函数的称呼&#xff1b;仿函数存在的意义是&#x…

javaMail快速部署——发邮件喽~

目录 功能阐述 前序步骤 &#xff08;1&#xff09;到QQ邮箱中获取到授权码 代码实现 坑 今天在写一个修改密码的功能的时候要用到邮箱的发送&#xff0c;然后因为这个项目比较老旧了&#xff0c;采用的是javaWeb和jsp的配置&#xff0c;对于我只使用过springBoot整合的ja…

苹果新款 M4 芯片专注于 AI

爆炸性消息&#xff01;苹果的新一代 M4 芯片来了&#xff01;这家伙拥有 38 万亿次操作的超强神经引擎&#xff0c;速度比苹果 A11 芯片的 NPU 快 60 倍&#xff01;虽然它的速度还没有达到 Snapdragon X Elite 的 45 TOPS&#xff0c;但苹果自夸 M4 将提供与最新 PC 芯片相同…

带你入门React

目录 前言一&#xff0c;基本配置1.1 环境搭建1.2 页面初始化渲染二&#xff0c;基础学习2.1 结构与样式开发2.2 数据展示2.3 行内样式2.4 条件渲染2.5 列表渲染2.6 点击事件 三&#xff0c;页面更新3.1 组件数据3.2 组件数据共享 总结 前言 笔者之前的工作经验都局限于Vue&am…

ICode国际青少年编程竞赛- Python-2级训练场-for循环中的变量

ICode国际青少年编程竞赛- Python-2级训练场-for循环中的变量 1、 for i in range(4):Dev.turnLeft()# 将i1作为Dev移动的步数Dev.step(i 1)2、 for i in range(4):Spaceship.step(i 1)Dev.step(3)Dev.step(-3)3、 for i in range(5):Dev.step(5 - i)Dev.turnRight()4、 …

开源文档管理系统Paperless-ngx如何在Linux系统运行并发布至公网

文章目录 1. 部署Paperless-ngx2. 本地访问Paperless-ngx3. Linux安装Cpolar4. 配置公网地址5. 远程访问6. 固定Cpolar公网地址7. 固定地址访问 Paperless-ngx是一个开源的文档管理系统&#xff0c;可以将物理文档转换成可搜索的在线档案&#xff0c;从而减少纸张的使用。它内置…

【Pytorch】1.读取训练数据集

导入Dataset类 from torch.utils.data import Dataset # 注意是Dataset&#xff08;大写&#xff09;的才是类通过jupyter我们可以阅读一下Dataset类的具体使用方法 help(Dataset) # 或者直接 Dataset??我们可以看到具体对Dataset类的解释 从蓝色字体我们可以得出 所有的代…

释放创造力,低成本实现您的梦想应用 —— 尽在我们的开源低代码平台!

在数字化时代&#xff0c;每个企业都渴望拥有自己的专属应用&#xff0c;但传统开发模式的高成本和技术壁垒让许多梦想搁浅。现在&#xff0c;我们为您带来了革命性的解决方案 —— 一个开源、免费、且功能强大的低代码开发平台&#xff01; 为什么选择我们的低代码平台&#…