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

文章目录

      • 写在前面
      • 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://xiahunao.cn/news/3017448.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

HTML_CSS学习:尚硅谷——尚品汇

一、index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>荣耀</title> <!-- 引入页签图标--><link rel"shortcut icon" href"./HONOR%20.ico" type&qu…

navicat premium16.3.9重置

软件下载 官网地址&#xff1a;https://navicat.com.cn/products/ # 准备脚本 1、建一个txt 2、复制以下代码 3、修改文件格式为bat 4、运行bat文件 5、重新打开navicat&#xff0c;试用期重置为14 经测试16.2.3以上版本均可用 echo off set dnInfo set dn2ShellFolder set r…

展开说说:Android线程池解析

何谓线程池&#xff1f;本人理解是存放和管理线程的一个容器。 线程池存在的意义是什么&#xff1f; 第一&#xff1a;前面博客提到过创建和销毁线程的操作本身是有性能开销的&#xff0c;如果把使用的线程对象存起来下次用的时候直接取出来用就省去了一次创建和销毁的成本&a…

0基础学PHP有多难?

php作为web端最佳的开发语言&#xff0c;没有华而不实&#xff0c;而是经受住了时间考验&#xff0c;是一门非常值得学习的编程语言。 目前市场上各种网站、管理系统、小程序、APP等&#xff0c;基本都是使用PHP开发的&#xff0c;也侧面反映了PHP的需求以及学习的必要性&…

程序员的神器指南!揭秘软件开发必备工具

在软件开发的广袤海洋中&#xff0c;程序员们像是驾驶着帆船探索未知的航海者。他们面对的不仅仅是代码的挑战&#xff0c;还有项目管理、协作沟通和时间限制的压力。为了应对这些挑战&#xff0c;程序员们需要一系列强大的工具&#xff0c;就像是海中的指南针&#xff0c;帮助…

4.4网安学习第四阶段第四周回顾(个人学习记录使用)

本周重点 ①Linux系统提权 ②Linux权限维持 ③Windows 提权 ④Windows权限维持 ⑤SSRF利用 ⑥内网环境 ⑦内网扫描 ⑧漏洞利用 ⑨内网代理 ⑩获取主机控制权其他方案 ⑩①vuln靶场 ⑩②CS代理与ICMP隧道 本周主要内容 ①Linux系统提权 系统提权是成功入侵系统之…

PHPStudy 下载PHP提示“当前网络不稳定,下载失败”

错误信息 当前网络不稳定&#xff0c;下载失败 获取下载链接失败&#xff0c;请检查网络 假查网络 问题原因 xp.cn服务器的网络不稳定&#xff0c;不是你电脑的网络问题。 解决办法 第一步&#xff1a;下载现成的PHP文件 直接下载现成的文件&#xff0c;放到php目录。 将…

SparkSql介绍

概述 SparkSQL&#xff0c;顾名思义&#xff0c;就是Spark生态体系中的构建在SparkCore基础之上的一个基于SQL的计算模块。SparkSQL的前身不叫SparkSQL&#xff0c;而叫Shark&#xff0c;最开始的时候底层代码优化&#xff0c;sql的解析、执行引擎等等完全基于Hive&#xff0c…

避雷!这本7.7分毕业神刊,影响因子狂涨6.179,最新分区上升,却沦为风险期刊!

近日&#xff0c;科睿唯安又连续对多本期刊进行重新评估&#xff0c;多本「JCR Q1」沦为风险期刊。 值得注意的是&#xff0c;又一本中科院顶刊COMPUTERS IN BIOLOGY AND MEDICINE被打上“On Hold”标签&#xff0c;这是目前“黑名单”收入的第三本中科院TOP刊。 此前&#xff…

【Qt QML】ComboBox组件

ComboBox 是一个组合的按钮和弹出列表。它提供了一种以最小的屏幕空间呈现选项列表给用户的方式。ComboBox 使用数据模型填充。数据模型通常是一个 JavaScript 数组、一个 ListModel 或一个整数&#xff0c;但也支持其他类型的数据模型。 下面是一个简单的使用方式。 import …

【Three.js基础学习】15.scroll-based-animation

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 课程要点 结合html等场景 做滚动动画 1.遇到的问题&#xff0c; 在向下滚动时&#xff0c;下方会显白&#xff08;部分浏览器&#xff09; 解决&#xff1a;alpha:true …

【MATLAB源码-第204期】基于matlab的语音降噪算法对比仿真,谱减法、维纳滤波法、自适应滤波法;参数可调。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 语音降噪技术的目的是改善语音信号的质量&#xff0c;通过减少或消除背景噪声&#xff0c;使得语音更清晰&#xff0c;便于听者理解或进一步的语音处理任务&#xff0c;如语音识别和语音通讯。在许多实际应用中&#xff0c;如…

python中numpy库使用

array数组 生成array数组 将list转化为array数组 import numpy as np np.array([1,2],typenp.int32)其中dtype定义的是元素类型&#xff0c;np.int32指32位的整形 如果直接定义dtypeint 默认的是32位整形。 zeors和ones方法 zeros()方法&#xff0c;该方法和ones()类似&a…

网络 IO 模式

同步 IO 与异步 IO 同步 IO 和异步 IO 是关于数据读写方式的两种不同模式。 同步 IO 是指在程序读写数据时&#xff0c;需要等待操作完成后才能继续执行后面的程序。这种模式下&#xff0c;当程序使用阻塞式 IO 时&#xff0c;会一直等待IO操作完成&#xff0c;程序会暂停执行…

HarmonyOS实战开发-如何实现查询当前城市实时天气功能

先来看一下效果 本项目界面搭建基于ArkUI中TS扩展的声明式开发范式&#xff0c; 数据接口是和风&#xff08;天气预报&#xff09;&#xff0c; 使用ArkUI自带的网络请求调用接口。 我想要实现的一个功能是&#xff0c;查询当前城市的实时天气&#xff0c; 目前已实现的功能…

后仿真中的关于延时问题(物理特性角度)

大家都知道&#xff0c;后仿真讲究仿真时序。那么&#xff0c;在网表阶段&#xff0c;接触到后仿延时问题。今天总结一下。 一 延时概念和分类 1.1 分布式延迟&#xff08;Distributed Delays&#xff09; 一般用来指定模块内部信号通过逻辑单元或者线网耗费的时间。 1.2 模…

Python运维-日志记录、FTP、邮件提醒

本章目录如下&#xff1a; 五、日志记录 5.1、日志模块简介 5.2、logging模块的配置与使用 六、搭建FTP服务器与客户端 6.1、FTP服务器模式 6.2、搭建服务器 6.3、编写FTP客户端程序 七、邮件提醒 7.1、发送邮件 7.2、接收邮件 7.3、实例&#xff1a;将报警信息实时…

一、Redis五种常用数据类型

Redis优势&#xff1a; 1、性能高—基于内存实现数据的存储 2、丰富的数据类型 5种常用&#xff0c;3种高级 3、原子—redis的所有单个操作都是原子性&#xff0c;即要么成功&#xff0c;要么失败。其多个操作也支持采用事务的方式实现原子性。 Redis特点&#xff1a; 1、支持…

Vscode 实现代码跳转功能

随笔 目录 1. 安装Python 2. 安装Pylance 3. 选择解释器 1. 安装Python 2. 安装Pylance 3. 选择解释器 到此即可实现跳转功能

鸿蒙开发接口Ability框架:【@ohos.application.missionManager (missionManager)】

missionManager missionManager模块提供系统任务管理能力&#xff0c;包括对系统任务执行锁定、解锁、清理、切换到前台等操作。 说明&#xff1a; 本模块首批接口从API version 8开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 impo…