虚拟世界的创世哲学——冯诺依曼体系

越是我们习以为常的事情中,可能往往蕴藏着伟大的哲学,越是简单的事情当中,可能往往蕴藏着巨大的智慧。

今天我们就来讲一讲支撑起整个计算机虚拟世界,支撑起整个互联网,支撑起我们耳熟能详的腾讯,阿里,微软,谷歌这些互联网巨头的基础——冯诺依曼体系。

我们一起看看它有多简单,但同时又是多么的伟大,一起感受其中的哲学。

冯诺依曼体系是什么

我们现在常说,有两个世界,一个是现实世界,一个是虚拟世界,现实世界是大自然的产物,是造物主的杰作,它自带无穷无尽的规律,比如同性相斥,异性相吸,万有引力,光速不变等等。但是这些规律不是我们制造的,只是我们发现的。

而虚拟世界不同,我们就是虚拟世界的造物主,虚拟世界的规则是我们制定的而不是发现的,而这个世界最基础的规则之一就是冯诺依曼体系。

当我们去审视整个信息科技时,仅把它形容为一座大厦显得如此不贴切,甚至你也不能用“一个城市”去形容它,事实上,它更像是一个无中生有的全新世界:是冯诺依曼体系从虚无中造出了虚拟世界

用道家的话“道生一,一生二,二生三,三生万物”,这个冯诺依曼体系就是这个道,我们平时所接触的具体的信息时代的产物就是这个万物。

为解决一切问题而生

冯·诺依曼体系结构的迷人之处在于,从需求来说,它想解决一切问题。解决一切可以用“计算”来解决的问题。这是一个多么伟大的而又令人着迷的出发点

“计算”的边界在哪里?今天我们还没有人能够真正说得清。计算能不能解决“智能”的问题?通过计算能力,计算机是否终有一天可以获得和人类一样的智能?

今天人工智能热潮的兴起,证明对于这个问题我们很乐观:计算终将解决智能的问题。尽管我们不能确定什么时候能够达到,但是让人欣慰的是,我们一直在进步 —— 如果人类智能无法完成进一步的进化,那么我们就一直一直在前进,最终无限逼近甚至超越人类智能。

冯诺依曼体系的规格

为了实现“解决一切可以用‘计算’来解决的问题”这个目标,冯·诺依曼引入了五类基础零部件:

  • 运算器

  • 控制器

  • 存储器

  • 输入设备

  • 输出设备

中央处理器就是我们平时所说的CPU,它内部集成了运算器,控制器,等等,

冯诺依曼体系中的存储器指的是我们CPU可以直接读取的存储器,指的是内存,分为两部分,RAM和ROM,其中ROM是只读的,也就是出场后就不能改了,一般用于存储我们的BIOS,也就是我们按下开机键,CPU就会从这里读取系统启动程序,RAM则是我们平时所说的内存,比如电脑卡了你会说内存不够了,其实指的就是这个RAM。

而输入输出设备就是我们平时的鼠标键盘显示器等等,不过要注意一点,那就是我们的硬盘,U盘,其实对于冯诺依曼体系而言,并不是存储器,而是输入输出设备

冯诺依曼体系是如何解决一切问题的

这一部分内容涉及到了软件开发领域的另一个核心问题,需求分析。

但这个问题的解决思路并不仅仅适用于软件开发领域,它的思路更像是哲学,一种信息时代的哲学,也就是遇到一个问题,我要怎么分析出它的解决方案。

比如现在,我的需求就是,我需要一种机制,可以解决一切问题(现在是不是更加感受到冯诺依曼体系的伟大之处?从无到有,并且能解决一切,所以说它从虚无中创造了虚拟世界)。

让我们一起分析一下。

首先,需求可以大致分为两部分,一部分是变化的需求,另一部分是稳定的需求。

对于这个问题,需求的变化点在于,要解决的问题是五花八门包罗万象的。如何以某种稳定但可扩展的架构来支持这样的变化?而另一方面,需求的稳定之处在于,电脑的核心能力是固定的,怎么表达电脑的核心能力?

我们取个巧,我们都知道电脑又叫计算机,它的核心能力是什么?就是计算。

什么是计算?就是针对一个输入进行变化,变为另一个输出,就像我们数学中的函数一样,实际上我们平时编码的东西也叫作函数。

到这里,我们分析出来了,我们需要一个计算的地方,就称之为运算器

接下来,第二个问题,我们函数的输入和输出可以是任何数据,文本,图片,视频,等等,对于计算机而言,它们都是二进制,只不过我们通过一系列手段赋予了二进制特殊的意义,比如110…110这段二进制,让记事本读取就是一段文本,让爱奇艺读取就是一段视频。

我们可以把函数抽象为:

1
y = F(x)

第二个问题来了,x,y在哪里,这个问题就引申出了存储器的设计。

然后就是F是如何表达的,F是否能表达一切,就是是否能解决一切的关键。

逻辑上来看,无论多复杂的自定义函数,都可以通过下面这些元素的组合来定义:

  • 内置函数,比如整数或小数运算(加减乘除、sin/cos 等);

  • 循环和条件分支;

  • 子函数(也是自定义函数)。

这样一来,对于任意的一个具体的计算(自定义函数)来说,都可以用一组指令序列来表达。

那么函数 F 物理上在哪里?以指令序列形式存放在存储里面。所以,存储不只存放计算所要操作的数据,也存放“计算”本身。

而这也是冯诺依曼体系的伟大创举,因为在此之前,函数是没法存储在之前的计算机体系中的。

只是,存储里面存放的“计算”只是数据,需要有人理解并执行这些数据背后的计算行为,才变成真正意义的“计算”。这个执行者,就是中央处理器(CPU)。

它支持很多计算指令,包括执行内置函数、循环和条件分支、执行子函数等,而这就需要用到了控制器,帮助我们去执行存储的指令。

只是如果电脑只有“中央处理器 + 存储”,那它就如同一个人只有头脑而没有四肢五官,尽管很可能很聪明,但是这种聪明无法展现出来,因为它没法和现实世界发生交互。

交互,抽象来看就是输入和输出。对人来说,输入靠的是五官:眼睛看、耳朵听、鼻子闻、舌头尝,以及肌肤接触产生的触觉。输出靠语言(说话)和各种动作,如微笑、眨眼、皱眉、手势等等。

输入设备可以是鼠标键盘,也可以是触摸板,摄像头,等等,只要信息是向计算机流的,就算是输入设备。

输出设备可以是屏幕,音响,也可以是灯光,打印机等等。

也就是说,除了纯正的“计算”能力外,中央处理器还要有“数据交换”能力(或者叫 IO 能力)。最终,电脑可以被看做由 “中央处理器 + 存储 + 一系列的输入输出设备” 构成

输入输出设备从根本上解决的问题是什么?是电脑无限可能的扩展能力

总结

我们为了从虚无中创造一个世界,那就必须让这个世界有能力去解决一切问题。

要解决一切,就要将所有问题抽象为最基础的几个问题,这几个基础的问题就是稳定的地方,而变化的地方在于,如何用这几个简单的问题组合出丰富的世界,去描述丰富的世界

解决一切问题的方法就是将问题抽象为一个个函数y=F(x)

这就类似于现实世界我们要解决一个问题,就要知道我们有什么,这就是x,我们要什么,这就是y,F就是我们如何利用已有的去获得想要的。

现实世界的x,y都有自己的物质载体,虚拟世界也要有,于是就有了存储器

现实世界的F是我们的做事方法,这个方法可能是很多的小步骤去组合完成的,在虚拟世界,这些小步骤就是简单地加减,我们需要运算器去做这些事,而我们需要有顺序地去做这些事,于是需要控制器

最终,为了让我们的表达能力更丰富,我们需要更加丰富多彩的输入输出设备,来描述我们的世界,描述我们不同的问题,是输入设备将现实世界的信息转化为二进制交给了存储器,CPU从存储器读取二进制计算,然后再返回给存储器,最终输出设备讲这些二进制再解释为现实世界的信息。

整个问题不仅仅是冯诺依曼体系,还包括如何进行需求分析。