编程世界观:程序和数据都会进内存
第 7 课:编程世界观:程序和数据都会进内存
开场
大家好,我是村长。
有没有想过一个问题:
你双击一个游戏,它为什么,能自己跑起来?
加载资源,创建角色,计算血量,再到渲染画面。
一环扣一环,分毫不差。
可问题是:计算机不会思考。它不是人,没有脑子,没有意识。
那到底是谁,在指挥它?
是CPU吗?可CPU,也是一堆沙子做的芯片。它凭什么知道"下一步该做什么"?
要回答这个问题,得把时间拨回到二战之前。
人类为什么发明计算机
计算这件事,伴随了人类几千年。
远古时期,人们用结绳、刻痕记录数量。
古代,中国人发明了算盘。靠手拨算珠,完成计算。
近代,随着大航海与殖民扩张、天文与物理学发展、商业与金融繁荣,计算,变得越来越复杂,复杂到人脑开始跟不上。
于是,人们又发明了机械式计算机。利用齿轮转动,完成加减乘除,一个电子元件也没有。
每一次进步,速度,虽然又快了一些,但本质从未改变——还是人在操作,机器只是辅助工具。
真正改变这一切的,是电流。
第二次工业革命后,计算不再依靠齿轮咬合,而是靠电信号。
尤其是二战时期,炮弹轨迹、密码破译——这些计算量,大到人脑完全跟不上。
科学家开始认真思考:能不能把计算这件事,彻底交给机器自己去完成?
1946年,世界上第一台电子计算机ENIAC正式公布,计算速度第一次有了质的飞跃。
但,eniac有个致命的缺陷。
ENIAC有个致命缺陷
ENIAC长30米,重30吨,看上去确实是个庞然大物,非常厉害。
但,致命的问题是:它根本不会自动执行程序。
奇奇: 不会吧?不会自动执行程序,那它算什么电子计算机?
村长: 电子计算机的“电子”,只是代表它用电信号表示数据,代替了机械齿轮。至于程序?ENIAC的程序是外挂式的,一堆线缆,需要有人手动插拔才能运行。
那时候,有个岗位叫操作员,工作内容就是:通过插线、拔线,来指挥计算机完成计算。
上午算炮弹轨迹,操作员插线。 下午算天气预测,操作员拔线。 明天算工资,操作员继续拔线。 那时候的程序员不会写代码,他们考的是电工证。
每换一个任务,操作员要花费几个小时,重新布线。
奇奇:按照当时的思路,程序不属于计算机吗?
村长:没错!在他们眼里,程序属于操作员。
那时,人们的思维是:数据,是“要被处理的东西”——需要存储在计算机内部。
而程序只是“处理数据的步骤”——那是操作员的工作,不是机器内部的东西。
从来没有人想过:把操作员的操作步骤,也存储在计算机内部。
一个改变世界的想法
1945年的某一天,参与 ENIAC 项目的冯·诺依曼盯着ENIAC发呆。
操作员蹲在地上,满头大汗,像拆弹一样拔掉三根线,再插上五根。
换个任务,还需要再来一遍。
冯·诺依曼越看越来气。 这玩意儿算得飞快。 加法会、减法会、乘除法也会。 但就有一点,操作方式太反人类。 换一个任务。操作员要花几小时吭哧吭哧拔线、插线。
计算机都会算原子弹了,换个任务居然还得人工拔线?
越琢磨越上头,突然,一道闪电劈中了冯诺依曼的天灵盖,火星四溅,
等等!
计算机需要的,无非两样东西:数据,和处理数据的步骤。
既然数据能存储,那处理步骤为什么不能存储?
如果把操作员,工作的每一步:加法、减法、跳转、判断统统变成0 和 1,和数据一起塞进内存。
那计算机,是不是就可以不需要人控制,交给程序自动控制?计算机自己读一步,执行一步,一路狂飙,直到程序结束?
冯·诺依曼当场石化,嘴里蹦出一句:“程序,本身就是一种数据啊“
原来操作员插的那些线,本质上也是数据。
就在这一刻,现代计算机最重要的思想在他脑子里炸开了。
他颤颤巍巍, :
"程序指令和数据,都应该放在同一个存储器中。"
这就是著名的"存储程序"思想。
今天你看这句话,大概率会觉得:这不就是常识么。
但在1945年,全人类只有这个头发快掉光的男人敢这么想
从那一刻起,计算机终于拥有了真正自动工作的能力。
冯·诺依曼机
存储程序的思想,解决了"程序能不能存"的问题。 但程序存进计算机内部之后: 谁来读?谁来算? 谁来存储结果? 这就是接下来要解决的问题。
于是,现代计算机的基本结构,逐渐清晰了起来。 从逻辑上看,计算机由五部分组成: 控制器、运算器、存储器、输入设备和输出设备。 其中,存储器就是内存;控制器加运算器,就是CPU。 控制器像指挥中心,负责从内存取指令、分析指令,再指挥运算器计算,指挥存储器存储结果。 五部分各司其职,自动运行。 遵循这套结构,设计的机器,就叫冯·诺依曼机。 直到今天,你手机里、电脑里、甚至你手腕上的智能手表里,那颗小小的芯片,仍然跑在这个框架上。 冯·诺依曼,也因此被称为“现代计算机之父”。
结束语
最后,请记住一句话:
程序指令与数据,都会进内存。
CPU沿着内存里的指令,一步一步,永不疲倦地执行下去。
这就是计算机自动运行的终极秘密。
下一节课,我们打开内存的大门,看看数据在里面到底是怎么安家的——《直接量与变量》。
我们下期见。