本系列为作者学习记录
感谢Jack-Cui视频的启发
视频地址:【计算机科学速成课】[40集全/精校] - Crash Course Computer Science
前言
本文内容包括:
- 计算机的早期历史-Early Computing
- 电子计算机-Electronic Computing
- 布尔逻辑和逻辑门-Boolean Logic & Logic Gates
- 二进制-Representing Numbers and Letters with Binary
- 算数逻辑单元-How Computers Calculate-the ALU
一、计算机的早期历史
计算机最早起源于算盘(与我们常说的算盘不同,更像一个计数器)。
计算机先驱Charles Babbage说过:
随着知识的增长和新工具的诞生,人工劳力会越来越少。
——Charles Babbage
最早“Computer”是一个职业的名称,而不是一个工具,之后才逐渐开始代表机器,最有名的是步进计算器,实际上就是一个计数器。但是它们的计算耗时通常很久,且价格昂贵,因此大多数人都使用预先计算好的计算表(Pre-computed Table),查表得到计算结果。
后来Charles Babbage构思了差分机,但是由于建造困难就夭折了。在建造差分机的时候,他还构思了更复杂的机器——分析机,其自动运行的模式变成了现在可编程计算机的雏形。英国数学家Ada Lovelace给分析机写了假想的程序,被认为是第一个程序员。
Herman Hollerith发明了打孔卡片制表机,用打孔来表示数据,其速度是手动的10倍。从此企业开始认识到了计算器的价值,Hollerith成立了制表机器公司,后来经过几次合并,成为了大名鼎鼎的IBM。
二、电子计算机
最大的机电计算器哈佛马克一号(Harvard Mark Ⅰ),受到继电器的限制,维修很不方便,且这种发热的机器很容易吸引昆虫,在哈佛马克二号的维修过程中,就从中取出一只死虫,这便是BUG的由来。
Grace Hopper曾说:
从那时起,每当计算机出现问题,我们就说它出了BUG
——Charles Babbage
所以如果想提高计算速度,需要找到某种器件代替继电器。三极真空管应运而生,但是由于其比较容易损坏且成本昂贵。后来其成本和可靠性得到改进,可用于计算机,标志着计算机从机电到电子的跨越。
第一个大规模使用真空管的计算机是巨人一号,它被认为是第一个可编程的电子计算机。后来还出现了ENIAC、AN/FSQ-7等使用真空管的计算机,真空管计算机的性能几乎达到了极限。
1947年,贝尔实验室的科学家发明了晶体管,计算机进入了一个全新的时代。晶体管的诸多优点,使得计算机更小更便宜,第一个完全使用晶体管的计算机是IBM 608,后来IBM将所有产品都转向了晶体管。
现在,计算机里的晶体管小于50纳米(一张纸约厚10万纳米),每秒可以切换上百万次,并且可工作几十年。
三、布尔逻辑和逻辑门
之前提到的计算机多为十进制,但是越多的进制越难区分状态。布尔代数是一个专门处理“True”或“False”的数学分支,在这个体系中,变量的取值只有2个,即真和假,来进行逻辑操作。
布尔代数中有3个基本运算,NOT 、AND、OR,就我们常说的与或非。
NOT,非门,即将变量取反。
AND,与门,输入都为真输出才为真,就像电路串联,只需要把晶体管串联即可实现。
OR,或门,只要有一个输入为真,输出就真,就像电路并联,把晶体管并联即可实现。
另外还有一个运算,XOR,异或,两个输入不一致输出为真。异或在实现时通常需要几个基本的逻辑门组合,但是在使用它设计电路时,我们不会考虑它是如何实现的,使用了几个逻辑门,而是把它看成一个器件使用。
同理,工程师在设计处理器时,也很少在晶体管的层面上思考,而是使用更大的组件。
四、二进制
上节提到,布尔型变量只有两个状态,因此可以把这两个状态用1和0表示,想表示更多的东西,增加位数即可。
二进制数通常都是8位的,1位为1比特(bit),8位为1字节(byte)。在表示负数时通常使用最前面那一位作为符号位,1表示负,0表示正。存储浮点数时,通常采用IEEE754标准,使用类似科学计数法的方法,存储浮点数,例如
625.9
625.9
625.9可以写为
0.6259
×
1
0
3
0.6259×10^3
0.6259×103,需要存储的即
.
6259
.6259
.6259,称为有效位数,以及指数上的
3
3
3,称为指数。以32位浮点数为例,第一位为符号位,接下来8位为指数位,剩余23位为有效位。
在表示字母符号时,通常使用ASCII码,ASCII是7位码,可存储字母、数字、符号等。后来又诞生了Unicode,统一了所有编码标准,解决了不同国家的有不同标准问题。
五、算数逻辑单元-ALU
算数逻辑单元ALU全称Arithmetic & Logic Unit,是计算机里负责运算的组件。
ALU有2个单元,1个算数单元和1个逻辑单元。
算数单元负责计算机里所有数字操作。考虑2输入1位加法,用XOR门即可表示运算结果,用AND门即可表示进位输出,这样就组成一个半加器。但是当有3个输入需要相加时,不仅需要考虑当前位的数字,还需要考虑来自低位的进位,这就是全加器,以3位加法距离,使用一个半加器对2个输入进行加法运算,然后将运算结果输入第二个半加器与第3个输入运算,再将2个半加器的进位输出使用OR门连接就构成了一个全加器。然后我们需要制作一个8位的加法器,从最低位开始,2个输入的最低位通过半加器相加后的结果作为低位的输出,低位的进位与高位的2个输入通过全加器相加,相加结果作为高位的输出,高位的进位再输入到更高位,依次类推就可完成8位行波进位加法器。需要特别注意的是,若最后一位有进位输出,则表示2个输入相加的结果太大了,产生了溢出。现代计算机的加法电路略有不同,叫作超前进位加法器,速度更快。乘法和除法在简单的处理器下当做多次加法或是减法,更好的处理器有专门做乘法的单元。
逻辑单元执行逻辑操作,用来处理NOT、AND、OR、XOR等逻辑运算。
ALU的结构如下图所示,包括2个8位输入,4位的操作码,8位的输出,以及一些标志(Flag)。
总结
本文讲述了计算机的起源,电子计算机的发展,布尔逻辑与基本的逻辑门,用二进制表示数字和字母,算术逻辑单元五个方面的基本内容。