当前位置: 代码迷 >> 综合 >> 计算机科学 Computer Science
  详细解决方案

计算机科学 Computer Science

热度:92   发布时间:2023-11-22 13:26:08.0

计算机科学

 

哈弗 MARK1 号 最早用于二战,它被用来给“曼哈顿计划”跑模拟。这台计算器的大脑是继电器。

继电器是用电控制的机械开关。

 

控制线路:控制电路是开还是关。

控制线圈还连一个线圈,当电流流过线圈,线圈产生电磁场,从而吸引金属臂,从而闭合电路

因为继电器有重量无法快速的开关还要考虑到齿轮磨损所以被淘汰。

Bug 的来源:

1947年9月 哈弗马克2型的操作员从故障继电器中,拔出一直死虫 ,所以从那时起每当电脑出了问题

我们就说它出了 bug(虫子)。

 热电子管:把两个电极装在一个气密的玻璃灯泡里,这是世界上第一个真空管,其中一个 电极可以加热,从而发射电子

这叫热电子发射,另外一个电极会吸引电子,形成“电龙头”的电流,但只有带正电荷才行,如果是负电荷或是中性电荷,电子

就没有办法吸引,越过真空区域,因此就没有电流。电流只能单向流动的电子部件叫“二极管”。

1906年美国发明家 李德富雷斯特他在弗莱明设计的两个电极之间,加入了第三个控制电极,

想控制电极事假正电荷,他会允许电子流动,如果施加负电荷,它会阻止电子流动,因此,通过控制线路,、

可以断开或闭合电路。它和继电器的功能是一样的但是 真空管内没有会动的组件。提高了每秒可以开闭的次数,而且没有机械磨损。因此这些三级真空管成为了无线电,长途电话,以及其他电子设备的基础,持续了近半个世纪。

但是它们也有缺点,并且像灯泡一样会被烧坏.

电子管得发明标志着 计算机从机电转向电子。

第一个大规模使用真空管的计算机是 “巨人一号”,他被用来在英国的 布莱切利园破解纳粹的通信,

听起来可能有点熟,因为2年前 阿兰图灵他常常被称为计算机科学之父,图灵也在布莱奇利圆 做了台机电装置

叫 Bombe 它的设计目的是破解纳粹英格码 通讯加密设备。

  巨人一号有1600个真空管,它被认为是第一个可编程的电子计算机,编程方法是把几百根电线插入插板,

1946年在宾夕法尼亚大学由John Mauchly 和 J.Presper Eckert建造完成的   ENIAC   

这是世界上第一个真正的通用,可编程,电子计算机.

美国空军的 AN/FSQ-7 计算机与1955年完成。

1947年贝尔实验室科学家发明了晶体管,它就像之前提过的继电器或真空管,他是一个开关,可以用控制线路来控制开或关,

晶体管有两个电极,电极之间有一种材料无隔开他们,这种弄材料有时候会导电有时候不导电这叫半导体。

控制线连到一个“门”电极,通过改变“门”的电荷我们可以控制半导体材料的导电性来允许或者不允许电流流动。

晶体管每秒可以开关10000次。

它是第一个完全用晶体管制作的计算器。

 

硅谷的诞生: 很多晶体管和半导体的开发在“圣克拉拉谷”这个地方在加州,位于旧金山和圣荷西之间

而生产半导体最常见的材料是“硅”,所以这个地区被称为“硅谷”这里的员工后来

创立了英特尔 ,当今世界上最大的计算机芯片制造商。

继电器--------》真空管------》晶体管。

二进制:只用开/关两种状态也可以代表信息。电路闭合电流通过,代表true 电路断开,无电流流过,代表假。

晶体管的确可以不只是开/关,还可以让不同的大小的电流通过。

有一整个数学分支存在,专门处理“真”和“假”,它以及解决了所有法则和运算,叫布尔代数,由乔治布尔发明。

布尔代数中有三个基本操作, NOT,AND,OR

NOT 操作吧布尔值反转,把true 进行NOT 变成false反之亦然。

    

 

 

异或操作 XOR

二转十、

128+32+16+4+2+1 =183

1个字节=8位

1 bytes = 8bits

32 位或是64位:

bit     电脑记忆体中最小的单位,在二进位电脑系统中,每一bit 可以代表0 或 1 的数位讯号。 
Byte   一个Byte由8 bits 所组成,可代表一个字元(A~Z)、数字(0~9)、或符号(,.?!%&+-*/),是记忆体储存资料的基本单位,至于每个中文字则须要两Bytes

意思是一块块处理数据,每块是32或是64位。32 位所能表示的最大数:43亿左右,也就是32个1

大部分计算机用第一位表示正负:1是负,0是正 ,用剩下31位来表示数字,能表示的数字范围是正20亿到付20亿

64位所能表示的最大位数是9.2*10^18

计算机必须给内存中每一个位置,做一个标记,这个标记叫做“位址”,目的是为了方便存取数据,

第一位表示正负,后八位表示存指数,最后23位存有效位数,

ASCII 美国信息交换标志码 1963年  7 位代码 足够存128个不同的值,可以表示大小写字母,数字0-9,特殊符号和标点符号

通过交换信息的能力叫做,互用性.

Unicode 是16位的 有超过1百万个位置,对所有语言的每个字符都够了 100 多种字母表加起来占了12万个位置。还有位置放数学符号,

 ALU  是计算器的数学大脑(算术逻辑单元) 计算器里负责运算的组件

ALU 有两个单元, 1个算术单元,和1个逻辑单元,

算术单元: 它负责计算机里所有数字操作。比如加减乘除或者增量运算

有两个输入:最简单的加法电路就是拿2个bit 加在一起 有两个输入 A和B,1个输出:就是两个数字之和

1=true  0 =false

 

对于特殊的1+1=2 由于二进制没有二所以 

 

 但是我们需要一根二外的线代表“进位”

只有输入是1和1时,进位才是true 因为,算出来的结果用1个bit 存不下(0,1,2)2显然存不下

所以可以用逻辑门 处理:

这个电路叫“半加器”

 

 

两个输入 A 和 B 都是 1 位

两个输出 “总和”与“进位”

如果想处理超过1+1 的运算,我们就需要“全加器”

也就是三个 0,1 0,1 0,1

 

有三个输入: A,B,C 都是1个bit

所以最大可能是: 1+1+1

 

 

 

将 A和B 的值作为 A 和下面的C 进行运算

也就是说蓝色部分第一个A和 B的值我们给他个新的变量名,这个变量名我也叫A

 然后c这个变量我把它重新命名为B

然后让他在和上图中的A ,B之和,也就是新命名的A进行运算,

8位行波进位加法器:

注意:最后一个全加器,有“进位“的输出。

 

一般来说“溢出”的意思是,两个数字的和太大了,超过了用来表示的位数,

这回导致错误和不可预期的结果。

如果要想避免内存溢出,我们可以加更多全加器,可以操作16或32位数字

但是代价是更多逻辑门,另外一个缺点是,每次进位都要一点时间,如果是每秒几十亿次运算,

就会造成影响。

现代计算器用的加法电路有点不同叫“超前进位加法器”,它更快,所做的事情是一样的

把二进制数相加,

一般支持这8种运算,就像加法器一样,这些操作也是由逻辑门构成的,但是没有乘法和除法

因为简单的ALU 没有专门的电路来处理,而是把乘法用措辞加法来实现。

 

 

ALU 的另外一个部分:逻辑单元

逻辑单元比如说  AND OR NOT 等

我们的8位 ALU 有两个输入A和B 都是8位(bits)1个字节我们还需告诉ALU执行什么操作是加法还是减法

所以我们用四位的操作代码也就是半个字节的操作代码来表示

就假设 1000代表加法  1100代表减法

 

ALU还会输出一堆标志(Flag) 比如用来判断是否相等 ,是否内存溢出

  

通常电脑损失数据的原因是:电脑用的是“随机存取存储器”简称"RAM"

另外一种存储(memory)叫持久存储,电源关闭时,数据也不会丢失 

形成闭合电路后 OR 门无论如何存储的都是 1 而 AND 门存储的都是0

 为了做出有用的存储我们把两个电路结合起来,形成了 "AND-OR锁存器"

 

如果“设置”和“复位”都是0,电路会输出最后放入的内容,也就是说它存储了1位的信息,

这叫“锁存”因为它“锁住”了一个值,放入数据的动作叫“写入”,拿出数据的动作叫“读取”,

 

简单的从 0开始

数据输入从0换到1,从1 换到0 结果是什么都不会发生改变,输出依然为0,应为允许写入线为0 也就是说此时不允许写入,所以输出为0.所以要让允许写入线 输入 1 打开“门”后数据才能够存储进来,

此时如果输入为1 (允许写入线输入为1) 那么1就被存储起来了,现在可以关掉允许写入线

现在不管给数据输入什么值,数据输出的值都为1。

并联多个锁存器的一组锁存器,叫寄存器,寄存器能存一个数字,这个数字有多少位,叫“位宽”

早起电脑用 8位寄存器,然后是 16 32  64 位,写入寄存器前,要先启用里面所有的锁存器

 

我们可以用一更显链接所有“允许输入线”把它设为1,然后用8条数据线发送数据,然后将

允许写入线,设置 回0,这样就可以存一个8位的值了。

 

 

 

红色标识的线就是他们连接其他寄存器的线,如果使用它,只需打开交叉处锁存器的允许写入线

所有其他锁存器,保持关闭,

我们可以用and 门

所以可以使用选择单个锁存器,

这种 行/列排列法,用一根 允许写入线,连接所有锁存器.

为了将地址转成 行和列 我们需要多路复用器。

工作方式

一个复用器处理行,另外一个多路复用器处理列.

现在将256位内存当做一个整体,

每个地址存一位,意味着这里总共能存256个字节

将其看作一个整体的可寻址的内存,它有256个地址,每个地址能读或写一个8位值,

 

8位做多能代表256个内存地址,要给千兆或十亿字节的内存寻址,需要32位的地址

内存的一个重要特性: 可以随时访问任何位置,因此,随机存取寄存器 简称RAM

 

程序由一个个操作组成,这些操作叫 指令,因为他们只是计算机要做什么.

如果是数学指令, CPU 会让ALU进行数学运算,也可能是内存指令,CPU回合内存通信

,然后读/写值。

寄存器用来临时存储数据和操作数据,

我们需要两个寄存器来完成CPU,

它存贮当前指令的内存地址,

另外一个寄存器存当前指令,叫指令寄存器,

当计算机启动时,所有寄存器从0开始,

举例程序的运行过程:CPU的第一个阶段叫“取指令阶段”它负责拿到指令,首先将“指令地址寄存器”

连到RAM,寄存器的值为 0,因此 RAM返回地址0的值,所以

现在拿到了指令,还要知道是什么指令,才能执行(execute)而不是kill 这是解码阶段

 

意思是把RAM的值放入寄存器A

控制单元也是逻辑门的组成:

详细:https://www.bilibili.com/video/av21376839/?p=7

  相关解决方案