Skip to main content

编程世界观:程序和数据都会进内存

第 7 课:编程世界观:程序和数据都会进内存

开场

大家好,我是村长。

有没有想过一个问题:

你双击一个游戏,它为什么,能自己跑起来?

加载资源,创建角色,计算血量,再到渲染画面。

一环扣一环,分毫不差。

可问题是:计算机不会思考。它不是人,没有脑子,没有意识。

那到底是谁,在指挥它?

是CPU吗?可CPU,也是一堆沙子做的芯片。它凭什么知道"下一步该做什么"?

要回答这个问题,得把时间拨回到二战之前。

人类为什么发明计算机

计算这件事,伴随了人类几千年。

远古时期,人们用结绳、刻痕记录数量。

古代,中国人发明了算盘。靠手拨算珠,完成计算。

近代,随着大航海与殖民扩张、天文与物理学发展、商业与金融繁荣,计算,变得越来越复杂,复杂到人脑开始跟不上。

于是,人们又发明了机械式计算机。利用齿轮转动,完成加减乘除,一个电子元件也没有。

每一次进步,速度,虽然又快了一些,但本质从未改变——还是人在操作,机器只是辅助工具。

真正改变这一切的,是电流。

第二次工业革命后,计算不再依靠齿轮咬合,而是靠电信号。

尤其是二战时期,炮弹轨迹、密码破译——这些计算量,大到人脑完全跟不上。

科学家开始认真思考:能不能把计算这件事,彻底交给机器自己去完成?

1946年,世界上第一台电子计算机ENIAC正式公布,计算速度第一次有了质的飞跃。

但,eniac有个致命的缺陷。

ENIAC有个致命缺陷

ENIAC长30米,重30吨,看上去确实是个庞然大物,非常厉害。

但,致命的问题是:它根本不会自动执行程序。

奇奇: 不会吧?不会自动执行程序,那它算什么电子计算机?

村长: 电子计算机的“电子”,只是代表它用电信号表示数据,代替了机械齿轮。至于程序?ENIAC的程序是外挂式的,一堆线缆,需要有人手动插拔才能运行。

那时候,有个岗位叫操作员,工作内容就是:通过插线、拔线,来指挥计算机完成计算。

上午算炮弹轨迹,操作员插线。 下午算天气预测,操作员拔线。 明天算工资,操作员继续拔线。 那时候的程序员不会写代码,他们考的是电工证。

每换一个任务,操作员要花费几个小时,重新布线。

奇奇:按照当时的思路,程序不属于计算机吗?

村长:没错!在他们眼里,程序属于操作员。

那时,人们的思维是:数据,是“要被处理的东西”——需要存储在计算机内部。

而程序只是“处理数据的步骤”——那是操作员的工作,不是机器内部的东西。

从来没有人想过:把操作员的操作步骤,也存储在计算机内部。

一个改变世界的想法

1945年的某一天,参与 ENIAC 项目的冯·诺依曼盯着ENIAC发呆。

操作员蹲在地上,满头大汗,像拆弹一样拔掉三根线,再插上五根。

换个任务,还需要再来一遍。

冯·诺依曼越看越来气。 这玩意儿算得飞快。 加法会、减法会、乘除法也会。 但就有一点,操作方式太反人类。 换一个任务。操作员要花几小时吭哧吭哧拔线、插线。

计算机都会算原子弹了,换个任务居然还得人工拔线?

越琢磨越上头,突然,一道闪电劈中了冯诺依曼的天灵盖,火星四溅,

等等!

计算机需要的,无非两样东西:数据,和处理数据的步骤。

既然数据能存储,那处理步骤为什么不能存储?

如果把操作员,工作的每一步:加法、减法、跳转、判断统统变成0 和 1,和数据一起塞进内存。

那计算机,是不是就可以不需要人控制,交给程序自动控制?计算机自己读一步,执行一步,一路狂飙,直到程序结束?

冯·诺依曼当场石化,嘴里蹦出一句:“程序,本身就是一种数据啊“

原来操作员插的那些线,本质上也是数据。

就在这一刻,现代计算机最重要的思想在他脑子里炸开了。

他颤颤巍巍, :

"程序指令和数据,都应该放在同一个存储器中。"

这就是著名的"存储程序"思想。

今天你看这句话,大概率会觉得:这不就是常识么。

但在1945年,全人类只有这个头发快掉光的男人敢这么想

从那一刻起,计算机终于拥有了真正自动工作的能力。

冯·诺依曼机

存储程序的思想,解决了"程序能不能存"的问题。 但程序存进计算机内部之后: 谁来读?谁来算? 谁来存储结果? 这就是接下来要解决的问题。

于是,现代计算机的基本结构,逐渐清晰了起来。 从逻辑上看,计算机由五部分组成: 控制器、运算器、存储器、输入设备和输出设备。 其中,存储器就是内存;控制器加运算器,就是CPU。 控制器像指挥中心,负责从内存取指令、分析指令,再指挥运算器计算,指挥存储器存储结果。 五部分各司其职,自动运行。 遵循这套结构,设计的机器,就叫冯·诺依曼机。 直到今天,你手机里、电脑里、甚至你手腕上的智能手表里,那颗小小的芯片,仍然跑在这个框架上。 冯·诺依曼,也因此被称为“现代计算机之父”。

结束语

最后,请记住一句话:

程序指令与数据,都会进内存。

CPU沿着内存里的指令,一步一步,永不疲倦地执行下去。

这就是计算机自动运行的终极秘密。

下一节课,我们打开内存的大门,看看数据在里面到底是怎么安家的——《直接量与变量》。

我们下期见。