大家好,我是鹤涵。
大家最近看三体电视剧版别了吗?跟原著复原度十分高,甚至超过原著(画面震慑呀)!
其间第15集,竟然呈现了冯.诺依曼+秦始皇的组合,用3000w名战士组成了一台人形核算机。
作为程序员我可不困了,下面盘盘他的原理是啥?这玩意能核算复杂的三体运动?
人列核算机
电脑装好了,开机
这鳞次栉比便是3000w战士模仿的电路组成的人形核算机。
我第一次看到这个局面你是大受震慑的!
上图展现了与门的逻辑。赤色代表0,白色代表1。输入全为1,输出才为1,否则输出0。
常见的仍是有或门,非门,异或门。
输入1 | 输入2 | 输出 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
上面这个门电路有啥用呢?
举个:完结二进制加法
在输入的两位是 00 和 11 的情况下,对应的输出都应该是 0;在输入的两位是 10 和 01 的情况下,输出都是 1。成果你会发现,这个输入和输出的对应联系其实便是“异或门(XOR)”。
算完个位的输出还不算完,输入的两位都是 11 的时分,咱们还需要向更左边的一位进行进位。那这个就对应一个与门,也便是有且只要在加数和被加数都是 1 的时分,咱们的进位才会是 1。对应着”与门“
其实,异或门便是一个最简略的整数加法,所需要使用的根本门电路。
1 | 0 | 0 | 1 | |
---|---|---|---|---|
+ | 0 | 1 | 0 | 1 |
进位 | 0 | 0 | 0 | 1 |
和 | 1 | 1 | 0 | 0 |
经过一个异或门核算出个位,经过一个与门核算出是否进位,咱们就经过电路算出了一个一位数的加法。咱们把两个门电路打包,给它取一个名字,就叫作半加器(Half Adder)。
由于咱们半加器只能完结两个数的相加,要是有多位数组并且发生进位,就会发生三个数相加的情况,这时分就需要“全加器”登场。
两个半加器和一个或门,就能组合成一个“全加器”。第一个半加器,咱们用和个位的加法一样的办法,得到是否进位 X 和对应的二个数加和后的成果 Y,这样两个输出。然后,咱们把这个加和后的成果 Y,和个位数相加后输出的进位信息 U,再衔接到一个半加器上,就会再拿到一个是否进位的信号 V 和对应的加和后的成果 W。
8bit的加法咱们就能够串联8个全加器,假如要支持更多的位数的加法就再多串联几个全加器就ok了
正是经过这些简略的,很多的门电路,相互紧密协作,创造了巨大的价值。
冯.诺依曼系统
这个核算机是怎么组装起来的呢?
整个核算机世界的地基:冯.诺依曼系统
冯诺依曼系统结构(Von Neumann architecture),也叫存储程序核算机。
什么是存储程序核算机呢?这里边其实暗含了两个概念,一个是“可编程”核算机,一个是“存储”核算机。
- 可编程
在“可编程”核算机之前,“程序”是固定在电路板上的,只能作业指定的核算程序。一旦要修正“程序”,就只能重装电路,这样本钱十分大,十分不灵活。这样的核算机是“不可编程”的,比方咱们的老式核算机只能核算固定的加减乘除。
- 存储
程序自身是存储在核算机的内存里,能够经过加载不同的程序来处理不同的问题。早年的“Plugboard”这样的插线板式的核算机。整个核算机便是一个巨大的插线板,经过在板子上不同的插头或许接口的位置插入线路,来完结不同的功用。
这样是“可编程”了,但想用前次写好的程序就不可能了,“程序”的状态是存储在板子组成的物理电路上的。
程序和硬件绑定就无法灵活编程
他的这种规划思想导致了硬件和软件的分离,即硬件规划和程序规划能够分开履行,才干呈现软件工程师这个作业!!!
所以咱们的冯祖师爷,基于其时在秘密开发的 EDVAC 写了一篇陈述First Draft of a Report on the EDVAC,描述了他心目中的一台核算机应该长什么样。这篇陈述在历史上有个很特殊的简称,叫 First Draft,翻译成中文,其实便是《第一份草案》。
冯.诺依曼确认了”核算机结构“中的5大部件:
运算器、操控器、存储器、输入设备、输出设备
或许简化为3个组件:
CPU(运算器,操控器)、存储(内存,外存)、输入输出设备(输入设备,输出设备)
CPU
1.运算器
算术逻辑单元(Arithmetic Logic Unit,ALU),咱们真实完结运算,处理数据全靠它去干活!
ALU的主要功用便是在操控信号的效果下,完结加、减、乘、除等算术运算以及与、或、非、异或等逻辑运算以及移位、补位等运算。
运算器的主要部件便是ALU,运算器的处理对象是数据,所以数据的长度以及数据的表示办法,对运算器的影响很大。大多数通用核算机是以16、32、64位数据作为运算器一次处理数据的长度。能够对一个数据的一切位一起处理运算器称为并行运算器,一次只能对数据的一个位处理的运算器称为串行运算器。
运算器与其他部分的联系:
核算机运算时,运算器的操作对象和操作种类由操控器决定。运算器操作的数据从内存中读取,处理的成果再写入内存(或许暂时寄存在内部寄存器中),并且运算器对内存数据的读写是由操控器来进行的。
2.操控器
操控器又称为操控单元(Control Unit),是核算机的神经中枢和指挥中心,只要在操控器的操控下,整个核算机才干够有条不紊地作业、主动履行程序。
操控器的作业流程为:从内存中取指令、翻译指令、剖析指令,然后根据指令的内存向有关部件发送操控指令,操控相关部件履行指令所包含的操作。
操控器和运算器一起组成中央处理器(Central Processing Unit),CPU是一块超大规模集成电路,是核算机运算核心和操控核心,CPU的主要功用是解释核算机指令以及处理数据。
存储
3.存储器
存储器的主要功用是存储程序和各种数据,并且能够在核算机作业进程高速、主动地完结程序或许数据的存储,存储器是有回忆的设备,并且采用俩种安稳状态的物理器材来记录存储信息,所以核算机中的程序和数据都要转换为二进制代码才干够存储和操作。
存储器能够分为内部存储器(内存)和外部存储器,两者在核算机系统中各有用处。
3.1.内部存储器
内部存储器称为内存或许主存,是用来寄存欲履行的程序和数据。
在核算机内部,程序和数据都是以二进制代码的形式存储的,它们均以字节为单位(8位)存储在存储器中,一个字节占用一个存储单元,并且每个存储单元都有仅有的地址号。
CPU能够直接使用指令对内部存储器依照地址进行读写俩种操作。
读:将内存中某个存储单元的内容读出,送入CPU的某个寄存器中;
写:在操控器的操控下,将CPU中某寄存器内容传到某个存储单元中。
3.2外部存储器
外部存储器主要来寄存”暂时“用不着的程序和数据,能够和内存交换数据。存储本钱最低,容量最大,速度最慢。
一般是U盘、硬盘(固态硬盘SSD,机械硬盘HDD)等。
运算速度的瓶颈在于存储速度远慢于CPU,性能优化的宗旨便是尽量少访问慢系统
咱们把CPU比作是咱们飞速作业的大脑。
那么寄存器便是其时在考虑和处理的数据。
L1~L3Cache便是短期到长期回忆,需要十分少的时间就能读取。
内存就相当于咱们的家里的书架,虽然容量大了不少,但是比起从回忆里读取旧慢了25倍。
磁盘相当于图书馆,容量比内存更大,但是速度比内存也更慢了,比内存还要慢1000倍。
从寄存器、CPU Cache,到内存、硬盘,这样一层层下来的存储器,==速度越来越慢,空间越来越大,价格也越来越便宜。==咱们往往就要在本钱和速度之间进行权衡(trade-off)
输入输出设备
4.输入输出设备
实践上咱们操作核算机都是与输入输出设备在打交道。
鼠标键盘是输入设备、显示器是输出设备;
手机触摸屏即时输入设备又是输出设备;
服务器中网卡既是输入设备又是输出设备;
一切的核算机程序都能够笼统为输入设备读取信息,经过CPU来履行存储在存储器中的程序,成果经过输出设备反馈给用户。
总线,各个设备接入的高速公路
核心是为了削减多个模块之间交互的复杂性和耦合度。
在实践的硬件层面,总线其实便是一组衔接电路的线路。由于不同设备之间的速度有差异,所以一台核算机里边往往会有多个总线。
常见的就有在 CPU 内部和高速缓存通讯的本地总线,以及和外部 I/O 设备以及内存通讯的前端总线。前端总线一般也被叫作系统总线。它能够经过一个 I/O 桥接器,拆分红两个总线,分别来和 I/O 设备以及内存通讯。自然,这样拆开的两个总线,就叫作 I/O 总线和内存总线。总线自身的电路功用,又能够拆分红用来传输数据的数据线、用来传输地址的地址线,以及用来传输操控信号的操控线。
核算机软件
上面咱们介绍了冯.诺依曼系统核算机由哪几部分组成,以及他们如何协同作业的。但这时分它只是一个会核算的“机器”。
硬件和软件的联系相当于琴和曲谱只要琴是无法发生价值的。
原始时代
现在咱们还没有任何编程言语,只能了解CPU指令的二进制,将程序以二进制的办法刻录在存储上(ROM或硬盘)。
这时分变成是极端苦楚的,效率低的可怕。不要说修正和迭代程序了,连把想法表达出来都十分麻烦。
首要要把履行指令翻译成二进制的比特数据,然后刻录在存储上。其时软件与硬件的边界不清晰(还没有软件工程师,程序员这一说法),编写程序需要进行电气操作。
为了处理这个问题,汇编言语和编译器的呈现使编程变得更简略,编译器能够将程序编写在汇编言语上的代码编译成为CPU指令,并存储在外部存储设备上。
汇编言语与核算机的CPU指令十分类似,一条汇编指令与一条CPU指令根本相对应。
汇编言语是什么
第一款编程言语诞生。 汇编言语是把程序编写和程序履行进程中的履行效率双重提高了。汇编言语经过文本符号(symbol)表示机器指令,内存地址,函数,和跳转方针地址,大大简化了程序的编写进程,避免了由于过多的关注机器完结的细节而形成的精力浪费,一起给程序员更多的考虑空间。
别的,汇编言语还具有高效的特点,由于它是依照硬件的实践结构来编写程序的,程序员能够经过汇编言语充分利用硬件的资源,以最快的速度完结程序的履行。别的,汇编言语还具有高度的可读性,程序员能够经过读代码来快速了解程序的履行进程,从而更快的定位和处理程序问题。
总的来说,汇编言语是一种高效,简洁,有用,易于阅读的编程言语,为程序员提供了很多方便。
咱们把三体问题的编写成代码,经过打孔卡进行输入,作业在咱们的核算机上,咱们就能够高兴的核算“三体”问题啦!~
总结
冯.诺依曼系统咱们核算机世界的地基。高级编程言语(C,Java,Go,Python),操作系统,中间件,框架,还有咱们日常使用的微信,抖音都,离不开冯.诺依曼系统。
它使得咱们核算机的硬件可扩展,软件和硬件分离才干让软件这么多年迅猛发展。