《三体节选》——计算机的运行原理

Mr Chou 2019年12月22日06:28:09 评论 2,142

在三体世界当中,天空有着三个太阳。

当天空中有一个太阳,会风调雨顺;当有两个时候,会酷热难耐;当没有太阳或是三个太阳,那几乎是世界末日。

所以,预测太阳的轨迹就是一件非常重要的事。

在那个世界,有个叫“牛顿”的人发现了力学三定律,由此可以预测太阳的运动轨迹。但是计算量实在太大,人的大脑根本运算不过来。

刚好,此时有一个叫“冯-诺依曼”的人,发明了计算机技术,可以解决海量的计算问题。

于是,他们来到了遥远的东方,寻找帝王“秦始皇”来帮助他们制造一个“计算机”。

这个故事,可以帮助我们很好地理解计算机运行原理。

——本文节选自科幻作家刘慈欣作品《三体-17》,为大家理解,有轻微改动。
《三体节选》——计算机的运行原理

正文

“朕当然需要预测太阳的运行,但你们让我集结三千万大军,至少要首先向朕演示一下这种计算如何进行吧。”

“陛下,请给我三个士兵,我将为您演示。”冯·诺伊曼兴奋起来。

“三个?只要三个吗?朕可以轻易给你三千个。”秦始皇用不信任的目光扫视看着冯·诺伊曼。

“伟大的陛下,您刚才提到东方人在科学思维上的缺陷,就是因为你们没有意识到,复杂的宇宙万物其实是由最简单的单元构成的。我只要三个,陛下。”

秦始皇挥手召来了三名士兵,他们都很年轻,与秦国的其他士兵一样,一举一动像听从命令的机器。

“我不知道你们的名字,”冯。诺伊曼拍拍前两个士兵的肩,“你们两个负责信号输入,就叫‘入1’、‘入2’吧。”他又指指最后一名士兵,

“你,负责信号输出。就叫‘出’吧,”他伸手拨动三名士兵,“这样,站成一个三角形,出是顶端,入1和入2是底边。”

“哼,你让他们成楔形攻击队形不就行了?”秦始皇轻蔑地看着冯·诺伊曼。牛顿不知从什么地方掏出六面小旗。三白三黑,冯·诺伊曼接过来分给三名士兵,每人一白一黑,说:“白色代表0,黑色代表1。好,现在听我说,出,你转身看着入1和入2,如果他们都举黑旗,你就举黑旗,其他的情况你都举白旗,这种情况有三种:入l白,入2黑;入l黑,入2白;入1、入2都是白。”

“我觉得你应该换种颜色,白旗代表投降。”秦始皇说。

兴奋中的冯。诺伊曼没有理睬皇帝,对三名士兵大声命令:“现在开始运行!入1入2,你们每人随意举旗,好,举!好,再举!举!”

入1和入2同时举了三次旗,第一次是黑黑,第二次是白黑,第三次是黑白。出都进行了正确反应,分别举起了一次黑和两次白。

“很好,运行正确,陛下,您的士兵很聪明!”

“这事儿傻瓜都会,你能告诉联,他们在干什么吗?”秦始皇一脸困惑地问。

“这三个人组成了一个计算系统的部件,是门部件的一种,叫‘与门’。”冯·诺伊曼说完停了一会儿,好让皇帝理解。

秦始皇面无表情地说:“联是够郁闷的,好,继续。”

冯·诺伊曼转向排成三角阵的三名士兵:“我们构建下一个部件。你,出,只要看到入1和入2中有一个人举黑旗,你就举黑旗,这种情况有三种组合——黑黑、白黑、黑白,剩下的一种情况——白白,你就举白旗。明白了吗?好孩子,你真聪明,门部件的正确运行你是关键,好好干,皇帝会奖赏你的!下面开始运行:举!好,再举!再举!好极了,运行正常,陛下,这个门部件叫或门。”

然后,冯·诺伊曼又用三名士兵构建了与非门、或非门、异或门、同或门和三态门,最后只用两名士兵构建了最简单的非门,出总是举与入颜色相反的旗。

冯·诺伊曼对皇帝鞠躬说:“现在,陛下,所有的门部件都已演示完毕,这很简单不是吗?任何三名士兵经过一小时的训练就可以掌握。”

“他们不需要学更多的东西了吗?”秦始皇问。

“不需要,我们组建一千万个这样的门部件,再将这些部件组合成一个系统,这个系统就能进行我们所需要的运算,解出那些预测太阳运行的微分方程。这个系统,我们把它叫做……嗯,叫做……”

“计算机。”牛顿说。

“啊——好!”冯·诺伊曼对牛顿竖起一根指头,“计算机,这个名字好,整个系统实际上就是一部庞大的机器,是有史以来最复杂的机器!”

游戏时间加快。三个月过去了。

秦始皇、牛顿和冯,诺伊曼站在金字塔顶部的平台上,这个平台上架设着大量的天文观测仪器,其中有一部分是欧洲近代的设备。在他们下方,三千万秦国军队宏伟的方阵铺展在大地上,这是一个边长六公里的正方形。在初升的太阳下,方阵凝固了似的纹丝不动,仿佛一张由三千万个兵马俑构成的巨毯,但飞翔的鸟群误入这巨毯上空时,立刻感到了下方浓重的杀气,鸟群顿时大乱,惊慌混乱地散开或绕行。

“陛下,您的军队真是举世无双,这么短的时间,就完成了如此复杂的训练。”冯·诺伊曼对秦始皇赞叹道。

“虽然整体上复杂,但每个士兵要做的很简单,比起以前为粉碎马其顿方阵进行的训练来,这算不了什么。”秦始皇按着长剑剑柄说。

“那么,请陛下发出您伟大的号令吧!”冯·诺伊曼用激动得发颤的声音说。

秦始皇点点头,一名卫士奔跑过来,握住皇帝的剑柄向后退了几步,抽出了那柄皇帝本人无法抽出的青铜长剑。然后上前跪下将剑呈给皇帝,秦始皇对着长空扬起长剑,高声喊道:

“成计算机队列!”

金字塔四角的四尊青铜大鼎同时轰地燃烧起来,站满了金字塔面向方阵一面坡墙的士兵用宏大的合唱将始皇帝的号令传诵下去:

“成计算机队列——”

下面的大地上,方阵均匀的色彩开始出现扰动,复杂精细的回路结构浮现出来,并渐渐充满了整个方阵,十分钟后,大地上出现了一块三十六平方公里的计算机主板。

冯·诺伊曼指着下方巨大的人列回路开始介绍:“陛下,我们把这台计算机命名为‘秦一号’。请看,那里,中心部分,是CPU,是计算机的核心计算元件。由您最精锐的五个军团构成,对照这张图您可以看到里面的加法器、寄存器、堆栈存贮器;外围整齐的部分是内存,构建这部分时我们发现人手不够,好在这部分每个单元的动作最简单,就训练每个士兵拿多种颜色的旗帜,组合起来后,一个人就能同时完成最初二十个人的操作,这就使内存容量达到了运行‘秦1.0’操作系统的最低要求;你再看那条贯穿整个阵列的通道,还有那些在通道上待命的轻转兵,那是BUS,系统总线,负责在整个系统间传递信息。”

“总线结构是个伟大的发明,新的插件,最大可由十个军团构成,能够快捷地挂接到总线上运行,这使得‘秦一号’的硬件扩展和升级十分便利;再看最远处那一边,可能要用望远镜才能看清,那是外存,我们叫它‘硬盘’,那是由三百万名文化程度较高的人构成,您上次坑儒时把他们留下是对了,他们每个人手中都有一个记录本和笔,负责记录运算结果,当然,他们最大的工作量还是作为虚拟内存,存贮中间运算结果,运算速度的瓶颈就在他们那里。这儿,离我们最近的地方,是显示阵列,能显示计算机运行的主要状态参数。”

冯·诺伊曼和牛顿搬来一个一人多高的大纸卷,在秦始皇面前展开来,这是一张写满符号的大纸,那些符号都是蝇头大小,密密麻麻,看上去与下面的计算机阵列一样令人头晕目眩。

“陛下,这是就我们开发的‘秦1.0’版操作系统,计算软件将在它上面运行。陛下您看——”冯·诺伊曼指指下面的人列计算机,“这阵列是硬件,而这张纸上写的是软件,硬件和软件,就如同琴和乐谱的关系。”说着他和牛顿又展开了一张同样大小的纸,“陛下,这就是数值法解那一组微分方程的软件,将天文观测得到的三个太阳在某一时间断面的运动矢量输入,它的运行就能为我们预测以后任一时刻太阳的运行状态。我们这次计算,将对以后两年太阳的运行做出完整预测,每组预测值的时间间隔为一百二十小时。”

秦始皇点点头:“那就开始吧。”

冯·诺伊曼双手过顶,庄严地喊道:“奉圣上御旨,计算机启动!系统自检!”

在金字塔的中部,一排旗手用旗语发出指令,一时间,下面大地上三千万人构成的巨型主板仿佛液化了,充满了细密的粼粼波光,那是几千万面小旗在挥动。在靠近金字塔底部的显示阵列中,一条由无数面绿色大旗构成的进度条在延伸着,标示着自检的进度。十分钟后,进度条走到了头。

“自检完成!引导程序运行!操作系统加载!!”

下面,贯穿人列计算机的系统总线上的轻转兵快速运动起来,总线立刻变成了一条湍急的河流。这河流沿途又分成无数条细小的支流,渗入到各个模块阵列之中。很快,黑白旗的涟漪演化成汹涌的浪潮,激荡在整块主板上。中央的CPU区激荡最为剧烈,像一片燃烧的火药。突然,仿佛火药燃尽,CPU区的扰动渐渐平静下来,最后竟完全静止了,以它为圆心,这静止向各个方向飞快扩散开来,像快速封冻的海面,最后整块主板大部分静止了,其间只有一些零星的死循环在以不变的节奏没有生气地闪动着,显示阵列中出现了闪动的红色。

“系统锁死!”一名信号官高喊。故障原因很快查清,是CPU状态寄存器中的一个门电路运行出错。

“系统重新热启动!”冯。诺伊受胸有成竹地命令道。

“慢!”牛顿挥手制止了信号官,转身一脸阴毒地对秦始皇说,“陛下,为了系统的稳定运行,对故障率较高的部件应该采取一些维修措施。”

秦始皇拄着长剑说:“更换出错部件,组成那个部件的所有兵卒,斩!以后故障照此办理。”

冯·诺伊曼厌恶地看了牛顿一眼,看着一组利剑出鞘的骑兵冲进主板,“维修”了故障部件后,重新发布了热启动命令。这次启动十分顺利,二十分钟后,三体世界的冯·诺伊曼结构人列计算机在“秦1.0”操作系统下进入运行状态。

“启动太阳轨道计算软件‘ThreeBody l.0’!”牛顿声嘶力竭地发令,“启动计算主控!加载差分模块!加载有限元模块!加载谱方法模块……调入初始条件参数!计算启动!!”

主板上波光粼粼,显示阵列上的各色标志此起彼伏地闪动,人列计算机开始了漫长的计算。

“真是很有意思。”秦始皇手指壮观的计算机说,“每个人如此简单的行为,竟产生了如此复杂的大东西!欧洲人骂朕独裁暴政,扼杀了社会的创造力,其实在严格纪律约束下的大量的人,合为一个整体后也能产生伟大的智慧。”

“伟大的始皇帝,这是机器的机械运行,不是智慧。这些普通卑贱的人都是一个个0,只有在最前面加上您这样一个1,他们的整体才有意义。”牛顿带着奉承的微笑说。

“恶心的哲学。”冯·诺伊曼瞥了牛顿一眼说,“如果到时候,按你的理论和数学模型计算出的结果与预测不符,你我可就连零都不是了。”

“对,那时你们可真的什么都不是了!”秦始皇说着,拂袖而去。

时光飞逝,人列计算机运行了一年零四个月,除去程序的调试时间,实际计算时间约一年两个月,这期间,只因乱纪元过分恶劣的气候中断过两次,但计算机存贮了中断现场数据,都成功地从断点恢复了运行。当秦始皇和欧洲学者们再次登上金字塔顶部时,第一阶段的计算已经完成,这批结果数据,精确地描述了以后两年太阳运行的轨道状况。

这是一个寒冷的黎明,彻夜照耀着巨大主板的无数火炬已经熄灭,计算机完成后,“秦1.0”进入待机状态,主板表面汹涌的浪涛变成了平静的微波。

冯·诺伊曼和牛顿将记录着运行结果的长卷呈献给秦始皇,牛顿说:“伟大的始皇帝,本来计算在三天前就已完成,之所以今天才将结果献给您,是因为按照计算结果,这一段漫长的寒夜就要结束,我们将迎来一个长恒纪元的第一次日出,这个恒纪元将持续一年之久,从太阳轨道参数看,气候宜人,请让您的王国从脱水中复活吧。”

“朕的国家自计算开始后从来就没有脱水过!”秦始皇一把抓过纸卷,没好气地说,“朕倾大秦之国力来维持计算机的运行,已经耗尽了所有储备,到现在,为此饿死累死和冻死热死的人不计其数。”秦始皇用纸卷指指远方,晨光中,可以看到从主板各个边缘,有几十条白线在大地上辐射向各个方向,消失在遥远的天边,那是全国各地向主板运送供给品的道路。

“陛下,您将发现这是值得的,在掌握了太阳的运行规律后,秦国将飞速发展,很快会比计算开始之前强大许多倍。”冯·诺伊曼说。

“按照计算,太阳就要升起来了,陛下,享受您的荣耀吧!”

仿佛是回应牛顿的话,一轮红日升出地平线,将金字塔和人列计算机笼罩在一片金光中。主板上爆发出一阵海潮般的欢呼声。

这时,一个人急匆匆地跑来,可能跑得太急了,下跪时气喘吁吁地趴到了地上,这是秦国的天文大臣。

“圣上,不好了,计算有误!大难将临!!”他哭喊道。

“你胡说些什么?!”没等秦始皇答话,牛顿就踹了天文大臣一脚,“没看到太阳精确地按照计算结果的时间升起了吗?”

“可……”大臣半直起身,一手指着太阳,“那是几颗太阳?!”

所有的人看着正在上升的太阳,都莫名其妙。“大臣,你是受过正统西洋教育的剑桥留学博士,不会愚蠢到不识数吧,太阳当然是一颗,而且气温适宜。”冯。诺伊曼说。

“不,是三颗!!”大臣抽泣着说,“另外两颗,在这一颗的后面!”

人们再次看着太阳,对大臣的话都感到很茫然。

“帝国天文台的观测表明,现在出现了亘古罕有的‘三日连珠’,三颗太阳成一条直线,以相同的角速度围绕我们的行星运行!这样,我们的行星和三颗太阳,四者始终处于一条直线上!我们的世界始终在这条线的顶端!”

“你肯定观察无误?”牛顿抓住大臣的衣领问。

“当然无误!观测是由帝国天文台的西洋天文学家进行的,其中有开普勒和赫歇尔,他们使用从欧洲进口的世界上最大的望远镜!”

牛顿松开天文大臣直起身来,汪淼发现他脸色发白,但表情却欣喜若狂,他两手抱在胸前对秦始皇说:“最伟大的、最尊敬的皇帝,这可是吉兆中的吉兆啊!现在,三颗太阳围绕着我们的行星旋转,您的帝国成了宇宙中心!这是上帝对我们努力的奖赏!待我去再详细查阅一下计算结果,我会证实这一点的!”说完,趁所有人都还在茫然中,他顾自溜走;稍后,有人报告说牛顿爵士偷了一匹快马去向不明。

一阵紧张的沉默后,汪淼突然说:“陛下,请把您的剑抽出来。”

“干什么?”秦始皇不解地问,但还是对旁边他的抽剑兵做了个手式,那士兵立刻为皇帝抽出长剑。

汪淼说:“您挥一挥。”

秦始皇接过剑,挥了几下,面露惊奇之色:“咦,怎么这么轻?!”

“游戏的V装具不能模拟失重感觉,否则我们也会感觉到自己轻了许多。”

“看下面!看那马,那人!”有人惊叫,大家一齐向下看去,看到金字塔脚下一队行进中的骑兵,所有的战马似乎是在地面上飘行,飘很远四蹄才着地一次;他们又看到几个奔跑中的人,他们迈一步就能跃出十几米,但每一跃的下落很缓慢。金字塔上,一名卫士试着跳了一下,轻易地跳上了三米多的高度。

“怎么回事?!”秦始皇惊恐地看着那个刚刚跳上半空的人缓缓下落。

“圣上,三颗太阳成一线直对我们的行星。它们的引力以相同的方向叠加到这里……”天文大臣解释说,同时发现自己双脚离地已经横在半空,其他人也相继以不同角度倾斜着,双脚都离开了地面开始飘浮,他们像一群不会游泳的落水者那样笨拙地挥动者四肢试图稳定自己,但还是不时相撞。这时,他们刚刚飘离的地面像蛛网似的开裂了,裂缝迅速扩大,在弥漫的灰浆和天崩地裂般的巨响中,下面的金字塔裂解为组成它的无数块巨石。透过缓缓飘浮的巨石间的缝隙,汪淼看到了正在变形中的大殿,那尊煮过伏毅的大鼎和他曾被缚于其上的火刑柱在大殿正中飘浮着。

太阳升到了正空,飘浮着的一切:人、巨石、天文仪器、青铜大鼎,都开始缓缓上升,并在很快加速。汪淼无意中扫了一眼平原上的人列计算机,看到了一幅噩梦般的画面:组成主板的三千万人正在飘离地面,飞快上升,像一大片被吸尘器吸起的蚂蚁群。在他们飞离的大地上,竟清晰地留下了主板电路的印痕,那一大片只有从高空才能一览全貌的精细复杂的图纹,将在遥远的未来成为令下一个三体文明困惑的遗迹。汪淼抬头望去,天空被一片斑驳怪异的云层所覆盖,这云是由尘埃、石块、人体和其他杂物构成,太阳在云层后面闪耀着。在远方,汪淼看到了连绵的透明山脉在缓缓上升,那山脉晶莹剔透,在闪闪发光中变幻着形状,那是被吸向太空的海洋!

三体世界表面的一切都被吸向太阳。

汪淼环顾四周,看到了冯。诺伊曼和秦始皇,冯。诺伊曼在飘浮中对秦始皇大声说着什么,但没有声音发出,只出现了一行小小的字幕:“……我想到了,用电元件!用电元件做成门电路,组成计算机!那样计算机的速度要快许多倍!体积也要小许多,估计用一幢小楼就放下了……陛下,您在听我说吗?”

秦始皇挥着长剑砍向冯·诺伊曼,后者蹬着旁边飘浮的一块巨石躲开了,长剑砍在巨石上,迸出一片火花断成两截。紧接着,这块巨石与另一块相撞,将秦始皇夹在中间,碎石和血肉横飞,惨不忍睹,但汪淼没有听到相撞的巨响,周围已经一片死寂,由于空气散失,声音也不存在了。飘浮在空中的人体在真空中血液沸腾,吐出内脏,变成了一团团由体液化成的冰晶云围绕着的形状怪异的东西。由于大气层消失,天空已经变得漆黑,从三体世界被吸入太空的一切反射着太阳光,在太空中构成了一片灿烂的星云,这星云形成巨大的旋涡,流向最终的归宿——太阳。

如果你没能读懂这个故事,那么我可以帮你做一点点解释。

在故事里,他们需要做大量的计算工作,人脑满足不了。那么这时候就有了发明计算机的需求。 理论上来说,我们会使用一个个电子元器件,来进行运算。
《三体节选》——计算机的运行原理
可他们用的方法是——人。让人来替代每个电元件的作用。 这会需要非常大量的人去做这件事,但是每个人干的活都特简单。

两三人一组,每人手里拿两个旗。按照我们预设的规则去举旗,他们能组成不同的最小逻辑运算单元——门。门包括(你不需要记住它们):与门,非门,与非门、或非门、异或门、同或门、三态门和非门。

这就好比使用电元件,两三个电元件为一组,电元件只能表达0或者1。然后让电元件按照我们预设的规则去显示0和1,它们能组成不同的最小逻辑运算单元——门。

像这种最小的逻辑运算单元,经过大量地堆砌,能够去处理相当复杂的运算。这种复杂度,几乎是无止境的——只要硬件能够支持。 就仿佛是你最早时候学的是加法1+1,但由1+1能够推演出更复杂的加法,再到减法,甚至是乘法、除法……

硬件堆砌完成,就变成你所见的硬件:CPU,内存,硬盘,系统总线……
《三体节选》——计算机的运行原理
硬件是具备运算能力的东西,但我们还需要运算规则——操作系统、软件就派上了用场。也就是小说里,牛顿和冯·诺依曼扛过来的那两卷纸。

你可知人类历史上的第一台计算机是什么模样?

第二次世界大战期间,美国军方要求宾州大学莫奇来博士和他的学生爱克特设计以真空管取代继电器的“电子化”电脑——ENIAC, 目的是用来计算炮弹弹道。

这部机器使用了18800个真空管,长50英尺,宽30英尺, 占地1500平方英尺,重达30吨(大约是一间半的教室大,六只大象重)。它的计算速度快,每秒可从事5000次的加法运算,运作了九年之久。吃电很凶, 据传ENIAC每次一开机,整个费城西区的电灯都为之黯然失色。
《三体节选》——计算机的运行原理
另外,真空管的损耗率相当高,几乎每15分钟就可能烧掉一支真空管,操作人员须花15分钟以上的时间才能找出坏掉的管子,使用上极不方便……

时光荏苒,你此刻所见的电脑已经远不是那么回事,但底层逻辑不改变——依然基于0和1,依然基于最简单的“门”运算。

最早期的代码全是用0和1写出来,我们将此称为“机器语言”。

计算机靠机器语言来直接运行,最早的输入方法是靠打孔带(一个条带上面有实心空心的小点,对应1和0)。后来出现了磁带,但指令输入的本质没有改变。
《三体节选》——计算机的运行原理
01010101010101010101010010101011010101010101010101010101010100001110011101101111……你很容易想到:靠这种办法写代码,那得敲到猴年马月呀!

一边是它又臭又长,一边是这代码写出来没几个人读得懂。好难。

人类聪慧,想出的解决方案,是在人和计算机的中间,多加一个“解释器”。

什么意思呢?粗暴地理解,就是我们去设计一套转换规则。它可以帮我们把人类能直接看懂的语言,转换成由0和1组成的机器语言。

那么我们就能用这种“人类能直接看懂的语言”,去编程!至此,你就不能把它叫做“机器语言”,你把它叫做“高级语言”。

像这种“高级语言”有许多种:C++,Java,php……都是。

这个解释器你看不到,安装它以后呢计算机也不会给你显示。但是,只要你安装了解释器,你用一些特定的软件(比如命令提示符软件)去写代码的时候,计算机就能懂并且执行你下达的命令。

我们把windows电脑的命令提示符,mac电脑的terminal,都叫做“终端软件”。它们允许我们直接输入代码或者指令,来让计算机做一些我们想要它做的事。

腾讯云学生服务器

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: