越是我们习以为常的事情中,可能往往蕴藏着伟大的哲学,越是简单的事情当中,可能往往蕴藏着巨大的智慧。
今天我们就来讲一讲支撑起整个计算机虚拟世界,支撑起整个互联网,支撑起我们耳熟能详的腾讯,阿里,微软,谷歌这些互联网巨头的基础——冯诺依曼体系。
冯诺依曼机(冯诺依曼机工作方式的基本特点是)
我们一起看看它有多简单,但同时又是多么的伟大,一起感受其中的哲学。
我们现在常说,有两个世界,一个是现实世界,一个是虚拟世界,现实世界是大自然的产物,是造物主的杰作,它自带无穷无尽的规律,比如同性相斥,异性相吸,万有引力,光速不变等等。但是这些规律不是我们制造的,只是我们发现的。
而虚拟世界不同,我们就是虚拟世界的造物主,虚拟世界的规则是我们制定的而不是发现的,而这个世界最基础的规则之一就是冯诺依曼体系。
当我们去审视整个信息科技时,仅把它形容为一座大厦显得如此不贴切,甚至你也不能用“一个城市”去形容它,事实上,它更像是一个无中生有的全新世界:是冯诺依曼体系从虚无中造出了虚拟世界。
用道家的话“道生一,一生二,二生三,三生万物”,这个冯诺依曼体系就是这个道,我们平时所接触的具体的信息时代的产物就是这个万物。
冯·诺依曼体系结构的迷人之处在于,从需求来说,它想解决一切问题。解决一切可以用“计算”来解决的问题。这是一个多么伟大的而又令人着迷的出发点。
“计算”的边界在哪里?今天我们还没有人能够真正说得清。计算能不能解决“智能”的问题?通过计算能力,计算机是否终有一天可以获得和人类一样的智能?
今天人工智能热潮的兴起,证明对于这个问题我们很乐观:计算终将解决智能的问题。
为了实现“解决一切可以用‘计算’来解决的问题”这个目标,冯·诺依曼引入了五类基础零部件:
中央处理器就是我们平时所说的CPU,它内部集成了运算器,控制器,等等,
冯诺依曼体系中的存储器指的是我们CPU可以直接读取的存储器,指的是内存,分为两部分,RAM和ROM,其中ROM是只读的,也就是出厂后就不能改了,一般用于存储我们的BIOS,也就是我们按下开机键,CPU就会从这里读取系统启动程序,RAM则是我们平时所说的内存,比如电脑卡了你会说内存不够了,其实指的就是这个RAM。
而输入输出设备就是我们平时的鼠标键盘显示器等等,不过要注意一点,那就是我们的硬盘,U盘,其实对于冯诺依曼体系而言,并不是存储器,而是输入输出设备。
这一部分内容涉及到了软件开发领域的另一个核心问题,需求分析。
但这个问题的解决思路并不仅仅适用于软件开发领域,它的思路更像是哲学,一种信息时代的哲学,也就是遇到一个问题,我要怎么分析出它的解决方案。
比如现在,我的需求就是,我需要一种机制,可以解决一切问题(现在是不是更加感受到冯诺依曼体系的伟大之处?从无到有,并且能解决一切,所以说它从虚无中创造了虚拟世界)。
让我们一起分析一下。
首先,需求可以大致分为两部分,一部分是变化的需求,另一部分是稳定的需求。
对于这个问题,需求的变化点在于,要解决的问题是五花八门包罗万象的。如何以某种稳定但可扩展的架构来支持这样的变化?而另一方面,需求的稳定之处在于,电脑的核心能力是固定的,怎么表达电脑的核心能力?
我们取个巧,我们都知道电脑又叫计算机,它的核心能力是什么?就是计算。
什么是计算?就是针对一个输入进行变化,变为另一个输出,就像我们数学中的函数一样,实际上我们平时编码的东西也叫作函数。
到这里,我们分析出来了,我们需要一个计算的地方,就称之为运算器。
接下来,第二个问题,我们函数的输入和输出可以是任何数据,文本,图片,视频,等等,对于计算机而言,它们都是二进制,只不过我们通过一系列手段赋予了二进制特殊的意义,比如110.....110这段二进制,让记事本读取就是一段文本,让爱奇艺读取就是一段视频,我们对同一件事情的不同解释,必将造成不同的结果,这一点放之四海皆准。
我们可以把函数抽象为:
第二个问题来了,x,y在哪里,这个问题就引申出了存储器的设计。
然后就是F是如何表达的,F是否能表达一切,就是是否能解决一切的关键。
逻辑上来看,无论多复杂的自定义函数,都可以通过下面这些元素的组合来定义(这就等同于物质都是由最基本的粒子组成,而逻辑世界的所有逻辑都由最基本的逻辑组成):
这样一来,对于任意的一个具体的计算(自定义函数)来说,都可以用一组指令序列来表达。
那么函数F物理上在哪里?以指令序列形式存放在存储里面。所以,存储不只存放计算所要操作的数据,也存放“计算”本身。
而这也是冯诺依曼体系的伟大创举,因为在此之前,函数是没法存储在之前的计算机体系中的,这一点极大解放了程序员的生产力。
只是,存储里面存放的“计算”只是数据,需要有人理解并执行这些数据背后的计算行为,才变成真正意义的“计算”。这个执行者,就是中央处理器(CPU)。
它支持很多计算指令,包括执行内置函数、循环和条件分支、执行子函数等,而这就需要用到了控制器,帮助我们去控制执行存储的指令。
只是如果电脑只有“中央处理器+存储”,那它就如同一个人只有头脑而没有四肢五官,尽管很可能很聪明,但是这种聪明无法展现出来,因为它没法和现实世界发生交互。
交互,抽象来看就是输入和输出。对人来说,输入靠的是五官:眼睛看、耳朵听、鼻子闻、舌头尝,以及肌肤接触产生的触觉。输出靠语言(说话)和各种动作,如微笑、眨眼、皱眉、手势等等。
输入设备可以是鼠标键盘,也可以是触摸板,摄像头,等等,只要信息是向计算机流的,就算是输入设备。
输出设备可以是屏幕,音响,也可以是灯光,打印机等等。
也就是说,除了纯正的“计算”能力外,中央处理器还要有“数据交换”能力(或者叫IO能力)。最终,电脑可以被看做由“中央处理器+存储+一系列的输入输出设备”构成
输入输出设备从根本上解决的问题是什么?是电脑无限可能的扩展能力。
我们为了从虚无中创造一个世界,那就必须让这个世界有能力去解决一切问题。
要解决一切,就要将所有问题抽象为最基础的几个问题,这几个基础的问题就是稳定的地方,而变化的地方在于,如何用这几个简单的问题组合出丰富的世界,去描述丰富的世界
解决一切问题的方法就是将问题抽象为一个个函数y=F(x)。
这就类似于现实世界我们要解决一个问题,就要知道我们有什么,这就是x,我们要什么,这就是y,F就是我们如何利用已有的去获得想要的。
现实世界的x,y都有自己的物质载体,虚拟世界也要有,于是就有了存储器。
现实世界的F是我们的做事方法,这个方法可能是很多的小步骤去组合完成的(或者F是我们现实世界的物质,所有物质都是由最基本的粒子组成),在虚拟世界,这些小步骤就是简单的加减(虚拟世界,这些粒子就是加减运算),我们需要运算器去做这些事,而我们需要有顺序地去做这些事,于是需要控制器。
最终,为了让我们的表达能力更丰富,我们需要更加丰富多彩的输入输出设备,来描述我们的世界,描述我们不同的问题,是输入设备将现实世界的信息转化为二进制交给了存储器,CPU从存储器读取二进制计算,然后再返回给存储器,最终输出设备讲这些二进制再解释为现实世界的信息。
整个问题不仅仅是冯诺依曼体系,还包括如何进行需求分析(如何看出事情的稳定点和不稳定点),我们如何去解决问题(解决任何问题都要看看自己有什么,要什么,做什么才能让自己有的变成自己想要的)。
发表评论