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

文章目录

      • 写在前面
      • 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.rhkb.cn/news/321241.html

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

相关文章

Redis(Redis配置和订阅发布)

文章目录 1.Redis配置1.网络配置1.配置文件位置 /etc/redis.conf2.bind(注销支持远程访问)1.默认情况bind 127.0.0.1 只能接受本机的访问2.首先编辑配置文件3.进入命令模式输入/bind定位,输入n查找下一个,shift n查找上一个&…

恒创科技「5月活动」中国香港/美国服务器配置及价格汇总

值此 5 月,各大云服务商的促销活动也是接连不断。近日,恒创科技上线了 5 月出海乐购“惠”活动,从 4 月 28 日开始,持续整个 5 月份。活动分精选云产品、主流物理服务器、DDoS 防护、免费试用等四大专区,包含几十款企业…

一键生成AI数字人短视频工具推荐!

数字人是什么?是利用人工智能技术实现与真人直播形象的1:1克隆,即克隆出一个数字化的你自己,包括你的形象、表情、动作和声音都会被克隆下来,让你能够拥有接近真人的表现力。 怎样使用数字人一天生成上百条短视频,无需…

js浏览器请求,post请求中的参数形式和form-data提交数据时数据格式问题(2024-05-06)

浏览器几种常见的post请求方式 Content-Type 属性规定在发送到服务器之前应该如何对表单数据进行编码。 默认表单数据会编码为 "application/x-www-form-urlencoded" post请求的参数一般放在Body里。 Content-Type(内容类型),一般…

Elasticsearch:理解人工智能相似性搜索

理解相似性搜索(也称为语义搜索)的指南,这是人工智能最新阶段的关键发现之一。 最新阶段人工智能的关键发现之一是根据相似性搜索和查找文档的能力。相似性搜索是一种比较信息的方法,其基于含义而非关键字。 相似性搜索也被称为语…

5月5日智渍洁对江苏某公司冷却塔清洗-智渍洁

简报:5月5日智渍洁对江苏某公司冷却塔清洗 5月5日智渍洁对江苏某公司冷却塔清洗 - 重庆智渍洁环保科技有限公司简报:5月5日智渍洁对江苏某公司冷却塔清洗https://www.zhizijie.com/hl/zixun/gongsi/236.html

linux - 主次设备号自动申请

alloc_chrdev_region 原型如下,该函数向内核申请一个空闲的主设备号。 alloc_chrdev_region(&g_aputriger_dev, 0, APUTRIGER_MAX_NUM, "aputriger0"); 第四个参数是我们使用cat /proc/devices 看到的名称 /*** alloc_chrdev_region() - register a…

JAVA面向对象高级部分

内部类 内部类的四种形式 内部类概述、成员内部类 代码示例 创建对象的格式 通过对象名访问内部类方法 若内外部类的成员变量名冲突,如何在内部类分别访问外部成员变量。 总结 静态内部类 代码示例 访问静态内部类的方法 不能在静态内部类中访问实例成员变量 …

PE文件(四)FileBuffer-ImageBuffer作业

C语言实现如下功能 2.编写一个函数,将RVA的值转换成FOA 将文件加载到内存时,已知一个数据在内存中的地址,将此地址转化成文件在硬盘上时的相对于文件起始地址的文件偏移地址。即将虚拟内存偏移地址转换成文件偏移地址。 说明:这里…

并发容器(Map、List、Set)实战及其原理

Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map,大家熟知的这些集合类ArrayList、LinkedList、HashMap这些容器都是非线程安全的。所以,Java先提供了同步容器供用户使用。同步容器可以简单地理解为通过synchronized来…

Selenium自动化测试面试题全家桶

🔥 交流讨论:欢迎加入我们一起学习! 🔥 资源分享:耗时200小时精选的「软件测试」资料包 🔥 教程推荐:火遍全网的《软件测试》教程 📢欢迎点赞 👍 收藏 ⭐留言 &#x1…

Mybatis进阶4-权限管理

权限管理 1.权限 //相当于 职责 2.用户 //相当于 职员(职员就职于一个职位) 3.角色 //相当于 职位(有多个职责) 权限管理基础表:权限表,用户表,角色表 问题1:…

Unity 合并子物体获得简化Mesh

合并子物体获得简化Mesh 🥙环境🥪Demo 🥙环境 PackageManager安装Editor Coroutines 导入插件👈 🥪Demo 生成参数微调:Assets/EasyColliderEditor/Scripts/VHACDSettings/VHACDSettings.asset

如何做好一个活动策划?

活动策划的关键要素是什么? 首先,要明确一个概念:做活动就是走钢丝,没有保险的高空走钢丝!因为,活动没有“彩排”,只有现场"直播”! 无论什么类型的活动,人数是50人还是2000人,也不论预算…

我的256天之创作纪念日

目录 时光 数据的一些变化 开心的事 憧憬 时光 自上次CSDN的消息推送,又一个128天过去了,整天的工作和生活都在忙忙碌碌中度过,每到能静下来片刻,都倍感珍惜。因为一些原因,能够陪伴家人的时间越来越少&#xff…

[译]Elasticsearch _source Doc_values And Store Performance

原文地址 https://sease.io/2021/02/field-retrieval-performance-in-elasticsearch.html 在这篇博文中,我想从性能的角度探讨 Elasticsearch 为我们存储字段和查询时检索字段提供了哪些可能性。 事实上,Lucene(Elasticsearch 和 Solr 构建的…

SOL链DApp智能合约代币质押挖矿分红系统开发

随着区块链技术的不断发展和普及,越来越多的项目开始探索基于区块链的去中心化应用(DApp)。Solana(SOL)作为一条高性能、低成本的区块链网络,吸引了众多开发者和项目,其中包括了各种类型的DApp&…

SpringBoot实现Config下自动关联.xml、.properties配置信息的实例教程

本篇文章主要讲解在SpringBoot实现Config下自动关联.xml、.properties配置信息的实例教程。 日期:2024年5月4日 作者:任聪聪 .properties文件调用方法 步骤一、打开我们的 .properties 创建一个demo参数如下图: 步骤二、创建一个config的包&…

Windows系统安装MySQL数据库详细教程

【确认本地是否安装mysql】 (1)按【winr】快捷键打开运行; (2)输入services.msc,点击【确定】; (3)在打开的服务列表中查找mysql服务,如果没有mysql服务&am…

手撸Mybatis(三)——收敛SQL操作到SqlSession

本专栏的源码:https://gitee.com/dhi-chen-xiaoyang/yang-mybatis。 引言 在上一章中,我们实现了读取mapper配置并构造相关的mapper代理对象,读取mapper.xml文件中的sql信息等操作,现在,在上一章的基础上&#xff0c…