1. 计算机发展史
计算的需求在人类的历史中是广泛存在的,发展大体经历了从一般计算工具到机械计算机到目前的电子计算机的发展历程。(以下是计算机的发展历程)
1、公元前2500 年前,算盘已经出现了;除此之外,人类还创造了各种工具以辅助计算
2、1694 年,德国博物学家 戈特弗里德·莱布尼兹建造了“步进计算器”。
3、1822 年,英国科学家 查尔斯·巴贝奇设计了“差分机”模型;1991年,才被现代科学家根据手稿建造完成
4、十九世纪三十年代,英国科学家 查尔斯·巴贝奇更进一步设计了“分析机”模型;是第一台“通用计算机”。
5、1890 年,美国科学家为了解决人口普查中的计算问题,发明了“打孔卡片制表机
6、1943年,英国制造了第一个大规模使用“真空管”的计算机 —— 巨人一号,用于破解纳粹通信密码。
7、1944 年,IBM 公司为二战同盟国制作了最大的“机电计算机” —— 哈佛 Mark一号,用于给“曼哈顿计划”跑模拟。
8、1945年,ENIAC在“宾夕法尼亚大学”完成建造,被视为第一台电子通用计算机。
9、1955年,AN/FSQ-7计算机,是“SAGE”防空计算机系统的一部分。
10、1947年,贝尔实验室科学家发明了“晶体管”,一种新的电子开关诞生了。也就是我们平时所谓的“半导体”材料
人类对计算的需求,驱动我们不断的发明、改善计算机。目前这个时代是“电子计算机”的时代,发展的潮流是:更快速、更稳定、更微型。
故此计算机是有软件和硬件两部分组成的,大概公式就是:计算机=软件+硬件,其中硬件部分主要依赖于冯诺依曼体系结构
2. 冯诺依曼体系(Von Neumann Architecture)
现代的计算机, 大多遵守冯诺依曼体系结构,且该体系结构图如下所示:
简单的词汇讲解:
1、CPU 中央处理器: 进行算术运算和逻辑判断.
2、存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)
存储器(存储器主要有内存+外存,下面是内存和外存的相关比较):
内存存储空间小,外存更大;
内存访问速度快,外存更慢;
内存的成本更高,外存更便宜;
内存的数据断电后会丢失,外存不会;
3、输入设备: 用户给计算机发号施令的设备.(鼠标,键盘)
4、输出设备: 计算机个用户汇报结果的设备.(显示器,音箱)
番外:
1、关于x86架构和arm架构的若干知识小点:
1.1 关于x86:
设计cpu有很多不同的方案就称为架构,且不同的架构都会有不同的指令集,这些指令集就会对上层应用程序产生直接的影响。
所谓编程,就是通过编程语言描述出一些逻辑,这些逻辑最终被转化成cpu能识别的指令最终执行。故此我们现在用java写的代码,先编译成jvm字节码文件,jvm再把这些字节码文件转换成x86架构下的指令。
1.2 关于arm
相比之下,苹果,高通搞得cpu是另外一套架构,arm架构
Arm的特点:更适合适用于低功耗的机器上。苹果电脑的续航能力是十分强的,但是其性能比x86要弱一些。
我们要知道计算机的功耗和性能是对立的,且相互关联的。
2、关于软件:
软件(是一个广义的概念,并非仅仅是指有图形化的界面,同时一个软件的难易程度,和图形化界面没有关系)
软件,其实就是通过代码,来解决一些实际的问题。
3、Cpu基本适用情况
X86架构:intel amd ---->家用pc,服务器
Arm架构:苹果,高通 ------>苹果电脑。智能手机
现在的x86的cpu都是64位的(cpu的位数,就和代码中内存地址用几个字节表示,是密切相关的---16位的cpu,就是2个字节)
Windows的特殊处理:windows64位版本,可以兼容32位的程序
3. CPU 基本工作流程
关于cpu是怎么构成的:
晶体管->门电路 -> 半加器 ->全加器 -> ALU运算器->如此差不多构成cpu
接下来,我们用一个从无到有的过程,一步步搭建一个 CPU 出来,通过借助这个过程,理解CPU、内存等计算机主要部件的工作原理 ;
3.1 逻辑门
3.1.1 电子开关 —— 机械继电器(Mechanical Relay)
整个过程,类似一个水龙头:打开水龙头开关,有水流出;关闭水龙头开关,水流停止。
我们可以通过以下电子开关下方线圈通电,产生磁场,吸引上方机械臂闭合,完成上方电路闭合;下方线圈断电,磁场消失,导致上方机械臂弹起,断开上方电路闭合
通过电子开关,我们可以实现 1 位(bit) 的看似无用的逻辑运算。我们接来下会做进一步的学习了解怎么使用电子开关组合出真正有用的逻辑组件。
3.1.2 门电路(Gate Circuit)
1、NOT GATE(非门)
2、AND GATE(与门)
3、OR GATE(或门)
4、XOR GATE(异或门)
3.2 算术逻辑单元 ALU(Arithmetic & Logic Unit)
ALU 是计算机中进行算数、逻辑运算的核心部件,是计算机的数学大脑;
1、算术单元(Arithmetic Unit)
算数单元,负责计算机里的所有数字操作,比如四则运算,当然它能做的远远不止这些。
2、逻辑单元(Logic Unit)
逻辑单元主要用来进行逻辑操作,最基本的操作就是 与、或、非操作,但不只是一位(bit)数的比较
3、ALU 符号
3.3 寄存器(Register) 和内存(RAM)
Ram:内存。
寄存器:是cpu上的存储数据的单元。(cpu上能直接存的数据比较少,这些寄存器主要是为了支持cpu完成一些计算,保存中间结果的,虽然寄存器空间有限,但是访问速度很快,是内存访问速度的三到四倍的)
光有 ALU 还是远远不够的,我们无法为 ALU 提供存储的部件,这些存储都是要求必须保持通电状态的,即也就是这些存储都是易失的(volatile),上图的最后的效果就是:使能线置位时,输入为 1,保存 1;输入为 0,保存0。使能线不置位时,则写入无效。我们可以利用门锁,构建我们需要的寄存器和内存
内存的构建的基本原理与上述大概一致。如此构建的内存被称为RAM(Random AccessMemory),可以支持 O(1) 时间复杂度访问任意位置的数据,这也就是我们数组下标访问操作是 O(1)的硬件支持。
3.4 控制单元 CU(Control Unit)
我们现在有 ALU、存储了,但这还是不足以让我们的计算机工作起来,我们需要有一个部件来指挥 ALU进行何种的运算,而这个部件就是控制单元(CU)且两者关系如下所示:
关于 CU 如何由门电路从无到有搭建,我们就进行抽象了,我们只需要理解 CU 可以驱动 ALU 进行具体的计算工作即可
3.5 指令(Instruction)
首先,我们先介绍下我们需要到的指令(instruction)。所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。指令本身也是一个数字,用二进制形式保存在内存的某个区域中
3.6 CPU 的基本工作流程
接下来,我们演示指令运行的一个周期
执行周期经过以下阶段:
当然,电子计算机中的 CPU 可不像我们刚才那样,靠自己来驱动这个周期的运转,而是靠背后一个时钟来进行周期驱动的
最后,ALU + CU + 寄存器 + 时钟就组成了我们平时经常看到的一个词汇:中央处理器(Center ProcessUnit)简称 CPU
番外:
1、cpu如何执行指令代码的
咱们写好的代码,最终想要运行,就需要让操作系统先把写好的并编译好的指令集加载到内存中,然后cpu才能执行。
1.1 默认情况下,cpu执行内存中的指令,是顺序执行的,当然也会遇到一些跳转指令。
1.2 当前的计算机,从cpu执行指令的时候,要经历从内存读取数据这样的操作。(本质上,依据于冯诺依曼体系结构,是将“执行”和“存储”分开了,这么做主要是为了“解耦合”降低硬件设计的成本),但现在的cpu执行速度越来越快,内存跟不上cpu的速度了(所谓的表演5分钟,通勤两小时),由此就有了缓存(临时安置一下,cpu附近的区域,之前的缓存在南北桥上,后来都集成到cpu上了)
2、Cpu的执行结论:
2.1 cpu要执行的指令,是在内存中。(冯诺依曼体系,基本设定让执行单元和存储单元解耦合)
2.2 cpu要想执行指令,就需要先取指令,在解析指令,然后才能执行指令。
2.3 取指令需要从内存中读取指令到cpu的寄存器中,取指令的操作是相当耗时的,cpu中通过缓存,流水线等技术,来优化这里的效率。
2.4 Cpu在解析指令的时候要用到解析表,不同架构的cpu支持的指令表不同(x86和arm等都是不同的),指令表的细节,已经写死到了cpu中了,cpu是可以识别的。
2.5 指令在执行的过程中,可能会遇到一些操作数,不同的指令,操作数的个数含义都会有所不同
2.6 Cpu重要的参数,主频,主频的含义,近似看成1s之内,cpu能够执行的指令个数。
3、关于cpu的相关知识
3.1 Cpu是多核+超线程技术加持的产物(4核8线程)
Cpu的好坏,要多维度来衡量:有的cpu核心多,但是单核频率不高,性能也就一般,同架构下,频率越高越好。
3.2 其他
频率:描述单个cpu核心工作的速度。(1khz = 1024hz,1mhz=1024khz,1ghz =1024mhz)
睿频技术:cpu的频率动态发生变化,看当前任务多不多。
衡量一个cpu的单核性能,既要看基础频率(下限),最大睿频(上限)。
ps:本次学习就到这里了,如果大家感兴趣的话就请一键三连哦!!!