【计算机理论基础】计算机是如何做运算的

由低向上的学习计算机是一条比较漫长的道路。但是,得来的知识却是体系化的。而且越到上边,学习的理解的效率是越高的(暂且自我欺骗,毕竟还没达到那高度)
下面就最近研究和学习做一个复盘。以问题出发为脉络。
1、计算机是怎么做运算的?
关键字:二进制、逻辑门
2、在问题1的基础上又问:为什么是二进制?
3、CPU是如何工作?

1、计算机是怎么做运算的?

回答这个问题,要先弄懂人类在使用10进制做计算时的方法,不赘述。
10进制方法迁移到二进制。基本的加法、乘法(可转成进位的加法),减法转成加法实现,除法转成乘法实现(这个我还没深究)。
进制之间可以平滑的换算。

数和进制的抽象

(这是我独立思考得出的,未见有人说过,或者有但我不了解)。
位和进制大小、进位。是三个基本元素。
位是进位中的位,是进制数的承载单元。位只能承载(0到进制-1)的数。比如:10进制中,一个位可以放0-9的数字,到10的时候就需要进位。二进制,最大放1,到2就要进位。
进制大小:就是所谓的2、10、16。
进位:位中承载的数等于进制大小时,发生的高位+1行为。

所以,可以有5进制。甚至可以有100进制,当然如果能够找到这么多数字的象征,恐怕人类的大脑处理起来也是费尽的。
问题又来了,为什么人类有进制这种抽象,我觉得主要还是来源于认知的范围是有限的,而认知的对象是无限的。之所以说认知范围是有限的,主要是人的身体机能决定的,不能同时(并行)思考和处理多个问题。以有限的认知认识无限,只能将无限的进行分而治之。数字是对现实世界和数量有关的一种抽象。位,就是数字抽象的基本单元。对于人类来说,现实世界的物质是无限的,小到分子原子、大到宇宙万物。所以用进制数可以表示一个特定的数量的概念。

如果存在一个主体(比如上帝),ta使用的是无限进制,宇宙万物都囊括在其中,它不用进位。每个事物都有是唯一的,那么人类的进制就已经没有了意义,ta能使用无限进制的前提是掌握了无限事物的信息,超人类思维的存在。这就是无限这个抽象的力量。

什么是运算

传送门
人类为什么要做运算呢?因为人类的认知是有限的啊,为了得到暂时无法获得的信息,基于已有的信息进行信息的变化和组合,就生成了运算。所以,如果人类可以直接获得任何信息,比如看到一个平面物体,便知道它的面积和体积,那基于几何学的长宽高、积分之类的运算就不再具有它的价值,但这目前还只是一种思维游戏,人类还是渺小的。
这里举个例子:
国王统治了100个小城邦,他欲了解各城邦的粮食产量这个信息,以备决策。最简单的方式就是,统计各城邦的产量,然后全部相加。
如果没有数字和运算,他要得到信息,需要把100个城邦的粮食搬到一起,进行称重了。
插个题外话,统计出来的数字只是一种近似值,为什么呢?因为在实操的过程中,城邦是可以谎报数量的,可以报大或报小,加起来的数已经不是国王心中想要的那个数了,但是这也没有办法,先解决有和无的问题,只要偏差不大的离谱,是可以容忍和妥协的。妥协这词在计算机的实现中也是常见的。
物理学中的很多问题都是靠运算得出的,比如光速是怎么得来的(人类一开始测量得到的光速也只是近似值)?天体物理学又靠什么说宇宙在膨胀?
所以,再不要把运算限定在10进制了,它只是众多进制中人类习以为常的一种而已。
结合进制和运算:
比如5进制的23+12=40,它的10进制是多少呢?

23的10进制为:2x51+3x50=13
12的10进制为:1x51+2x50=7
40的10进制为:4x51+0*50=20

数字的实际意义则有进行运算的人赋予,抽象的作用便在于此。

逻辑门和它们的电路实现

计算机使用二进制,为什么是二进制呢?
早期的计算机有3进制、还有5进制的,都是电驱动,用简单的电子元件来构建。
这里写图片描述
电信号的电压强弱来表征数字,如上图,如果是5进制,那么不稳定的电压,必然导致不稳定的数。不稳定代表了不可信。
二进制就不同了,电压不稳定,只要在范围内,取值就确定的。所以二进制被优胜劣汰的剩下来了。

最好理解的电子元件:二极管

传送门
二极管有个特性,就是在某个电压值Uon之前,不导电,一旦突破,则通电,如下图。死区电压不导电。
这里写图片描述

晶体二极管为一个由p型半导体和n型半导体形成的pn结,在其界面处两侧形成空间电荷层,并建有自建电场。当不存在外加电压时,由于pn结两边载流子浓度差引起的扩散电流和自建电场引起的漂移电流相等而处于电平衡状态。当外界有正向电压偏置时,外界电场和自建电场的互相抑消作用使载流子的扩散电流增加引起了正向电流。当外界有反向电压偏置时,外界电场和自建电场进一步加强,形成在一定反向电压范围内与反向偏置电压值无关的反向饱和电流I0。当外加的反向电压高到一定程度时,pn结空间电荷层中的电场强度达到临界值产生载流子的倍增过程,产生大量电子空穴对,产生了数值很大的反向击穿电流,称为二极管的击穿现象。pn结的反向击穿有齐纳击穿和雪崩击穿之分。

PN结的工作原理传送门
P是多电子的一个,N是缺电子的一个,他们都导电,P是多电子要对外输出,N是缺电子要对内吸纳。电子多和少是工程师们利用化学原理制造出来的。它们中间隔了一道空气墙,适当电压可以打通,就导电了。

于是:二极管的导电性就可以抽象出1和0,1为通,0为不通。而通和不通,可以被人类(用电压大小的方式)掌控,下图是3个1。有没有觉得像位的抽象?

通电的二极管111

从二极管到逻辑门

传送门
我不知道是谁发明或发现了这种转换,五体投地。但其中的核心逻辑:由简单到复杂。
将2个二极管,按照不同的线路布线,就可以得到逻辑运算中的“或、与、非”运算。
下面是盗图,盗图源链接
注意下图表示的电流方向。
“与”门
“与”门
“或”门
“或”门
“非”门
“非”门

最后那些常用的电路都有了固定的接线模式,逻辑门的电路被抽象成了符号,它们共有一个特点:实现了抽象逻辑符号,在物理世界的正确表达:
盗图
“非”门

还可以看看这个网站的逻辑门
Basic Gates and Functions

逻辑门到加法运算

下面这个电路设计图,实现了单个位的二进制计算逻辑,sum是输出,carry是进位。——专业术语,或者叫抽象名“半加器”。
这里写图片描述
这里贴张这个逻辑电路的真值表:

A输入B输入sum输出carry输出
0000
0110
1010
1101

上边电路解决了一位的加法,那么多位的呢?
把电路单元连接起来!
所以引出另一个电路图——全加器,由半加器(上边提到的半加器单元用HALF ADDER来表示了)进化而来。
这里写图片描述

上图实现了,进位场景下(三个输入:低位进位的位、高位的两位),两个输出(sum和carry)的计算单元。

所以继续复杂深化,得到2位的计算电路。下图A0 A1分别代表第1位,第二位的二进制数。
这里写图片描述
继续下去得到一个8位的加法电路:
这里写图片描述

所以,这个图很清晰告诉了一个编程中经常出现的名字:“溢出”。装不下了就溢出了。

自己设计一个4位的乘法运算的电路

乘法运算,是带进位的加法运算。首先要搞定的是位乘法运算。使用And运算即可。比如A*B,前置条件是假设不会溢出。所以限定A和B都小于1进制的4,结果用8位二进制来保存。如下图:原谅我画图不专业。。核心就是B乘Ai的时候,根据B当前位,为结果进位(左移),我仔细想了想,比较low的是接线的时候,按位来接(比如B1就进1位接在结果线路)。加法器这里,抽象了一把,把所有结果加起来。(里面是应该有3个加法器串联在一起)

这里写图片描述
以上,运算有关的就到此为止(逻辑的没有写就略过了)。

关于计算机的可计算性等价于Lambda算子,请百度。本人还未深刻理解Lambda。

如果您觉得还不错,可以到本人自己搭建的博客看看。

续:上手造个CPU

文章写完后的2年,我继续深入,使用模拟电路造出了一个八位的简单CPU。
可阅读:造个CPU玩玩——从硬件到软件的设计

参考:
【10分钟速成课:计算机科学】
Lambda算子简介
denallo学习笔记:λ演算(lambda calculate)

  • 20
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
### 回答1: 计算机系统基础计算机科学与技术领域中的一门重要课程,主要涵盖计算机系统的硬件、软件、操作系统、网络等方面的知识。在学习这门课程时,学生们会了解计算机系统的组成、设计原理以及工作原理。 首先,计算机系统由硬件和软件两个部分组成。硬件包括中央处理器(CPU)、内存、存储设备、输入输出设备等,它们共同协作完成计算机运算和数据存储功能。软件则包括操作系统、应用软件和编程语言等,它们使计算机硬件能够发挥作用并实现特定的功能。 其次,计算机系统基础还涉及到计算机的操作系统。操作系统是计算机系统的核心软件,它负责管理和控制计算机硬件资源,为用户和应用程序提供统一的接口。学习计算机系统基础,我们需要了解操作系统的基本功能、进程管理、内存管理、文件系统等重要知识,以便能够合理地利用和管理计算机系统资源。 在计算机系统基础课程中,还会学习计算机网络的基础知识。计算机网络是计算机系统之间相互连接和通信的基础设施,它使得分布式计算成为可能,并且提供了全球范围内的信息传输能力。学习计算机网络的基础知识,我们需要了解网络协议、网络拓扑、数据传输、网络安全等方面的内容。 总之,计算机系统基础课程对于我们掌握计算机科学与技术领域的基础知识至关重要。通过学习计算机系统基础,我们能够深入了解计算机系统的原理和工作方式,为进一步学习和研究计算机科学相关领域奠定坚实的基础。 ### 回答2: 计算机系统基础是指对计算机硬件、操作系统和计算机网络等方面的理论和知识进行研究和学习。在CSDN上,我们可以找到很多优质的相关资料和学习资源。 首先,计算机系统基础主要包含了计算机的硬件结构和原理,包括中央处理器(CPU)、内存、输入输出设备等硬件组成部分以及它们之间的工作原理和协调方式。我们可以在CSDN上找到很多关于计算机硬件的文章和教程,可以帮助我们更好地了解计算机的工作原理和性能优化等方面的知识。 其次,操作系统是计算机系统基础中的重要组成部分,它负责管理计算机的资源和提供各种服务。在CSDN上,可以找到很多关于操作系统的文章和教程,包括常见的操作系统原理、文件系统、进程管理、内存管理等内容,这些资料能够帮助我们深入理解操作系统的工作原理和使用方法。 此外,计算机网络也是计算机系统基础中的重要内容之一。计算机网络连接了各种计算机和设备,实现了信息的传输和共享。在CSDN上可以找到很多关于计算机网络的资料,包括网络协议、网络拓扑、网络安全等方面的内容,这些资料对于理解和应用计算机网络是非常有帮助的。 总结起来,计算机系统基础计算机科学的重要基础知识,通过在CSDN上学习相关内容,我们能够更好地了解计算机原理和系统工作方式,提升自己在计算机领域的知识和技能。 ### 回答3: 计算机系统基础是指对计算机系统的各个方面进行全面了解和学习的一门课程。它涉及到计算机硬件、操作系统、网络和计算机体系结构等方面的知识。 在计算机硬件方面,我们需要了解计算机的组成和工作原理,包括中央处理器(CPU)、内存、硬盘、显卡等硬件设备的作用和相互之间的关系。此外,我们还需要了解各种输入输出设备以及计算机系统的扩展和连接方式。 在操作系统方面,我们需要学习操作系统的功能和特点,如进程管理、文件系统、内存管理、设备管理等。我们还需要了解操作系统的启动过程和运行机制,了解不同操作系统的特点和使用方法。 在网络方面,我们需要了解计算机网络的基本概念、网络拓扑结构以及常见的网络协议。我们还需要学习如何利用网络进行数据传输和通信,并了解网络安全和数据保护的基本知识。 在计算机体系结构方面,我们需要了解计算机系统的层次结构、指令集和微指令的概念,以及计算机的运行模式和工作原理等。我们还需要了解不同的计算机体系结构和它们的特点,如单处理器、多处理器和分布式系统等。 通过学习计算机系统基础,我们能够深入了解计算机系统的各个方面,为我们进一步深入学习计算机科学和应用开发打下坚实的基础。它对我们理解计算机系统的工作原理、解决计算机系统中的故障和优化系统性能等都具有重要的意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

windanchaos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值