知乎日报

每日提供高质量新闻资讯

头图

NASA 登月时全部计算机的计算能力加起来不如现在一部手机吗?

Pixabay / CC0

和尚洗头用飘柔,百科全书爱好者/白日梦想家

相差 1.2 亿倍

很多人喜欢将阿波罗的制导计算机与家用电脑甚至 iphone 进行比较。大家都觉得像登月这么牛逼复杂的任务,计算机的功能却并不比电子表、袖珍计算器和文曲星强,简直是不可思议。。。

论随机存取存储器(RAM),阿波罗 11 号的导航计算机只有 2~4KB 内存;而现在多百万倍的 4G 手机内存都不好意思和人说。论存储空间,阿波罗计算机仅有 72KB;而 iPhone Xs Max 最高可有 512GB,是阿波罗计算机存储容量的 700 万倍。论处理器处理能力,阿波罗计算机运行速度为 0.43MHz,而 iPhone 手机处理器比它的处理能力高了十万八千倍。更不用说 iPhone 的 A8 芯片架构可容纳约 16 亿个晶体管,每秒可处理 22.6 亿个指令,这比阿波罗的导航计算机快了近 1.2 亿倍(还不是和目前最新的 A12 相比)。

误解

但这种比较是对计算机的特性以及它们如何工作有误解。

尽管资源有限,但阿波罗计算机在机器代码级进行了精心编程。它不需要巨大的资源,因为它的各项功能规定得很窄。不需要现代编程中将高级语言翻译成低级代码的多个抽象层,也不需要计算能力支持视频显示这样的复杂外设。没有 word,没有 excel,没有 photoshop 和 PS,甚至没有 QWER 键盘。阿波罗计算机更像是一台嵌入式控制器,紧密地与飞船系统集成在一起。

就硬件而言,也很难对今昔直接进行比较。在计算机的核心部分那时没有单片处理器。处理单元是一个布满简单芯片的板子,其处理频率表面上看只有可怜的 80000 次 / 秒。在计算机中传递的数据是 15 位字长(加上 1 个奇偶检错位),而后来几代计算机设为 8、16、32 或 64 位。其匮乏的内存被精心和高效地编程,用大量例程来辅助宇航员操作他们的飞船。加载到阿波罗 15 号指令舱计算机中的软件巨人三号,总共包括 44 个程序,装进相当于 64 千字节的计算机内存,存储在一种非常古老的用机绕磁芯线做成的内存中。

但这种设置是相当安全可靠的,甚至都用不上备份系统。对于太空任务来说,安全可靠比屏幕好看更重要。

它是怎么记录 0 和 1 的?

在没有 SSD 没有磁盘的年代,如何存储最基本的 0 和 1 的信息?上图展示的就是 AGC 电脑中由所谓编织女工们手工编的用于体现 0 与 1 的智慧的线缆。下图中被称为“磁芯”的部件位于导线矩阵的行和列的交点处,我们把能改变铁质磁芯所需的最小电流大小定义为 1 个单位:

每个磁芯环中都有两条垂直的导线,如果穿过磁芯内部的每条导线都被加上 1/2 单位的电流,就可以改变磁芯的磁场 - 这两个 1/2 单位的电流之和等于 1 个单位的完整电流,从而可以修改铁制磁芯的磁场。如果仅有其中一根电线被加上一半的电流,而另一根电线没有的话,那么仅靠这一半的电流不足以改变磁芯的磁场。

当磁芯被负极性磁化,并且负电流通过交叉导线传输时,磁芯的磁场将保持不变;穿过核心的检测线什么都检测不到;然后计算机就知道该内核上存储了“0”。

相反的,如果磁芯被正极性磁化,并且负电流通过交叉线传输时,磁芯的磁场将发生变化,并且这种变化会在检测线上产生短脉冲,计算机就知道该内核中存储了“1”。

它牛逼么?

那和现在不能比的话,在当年是什么水平?是不是有机会用更牛的配置?

答案是,当年那是相当牛逼的配置。阿波罗的制导计算机,要求体积小,功耗低,计算力强。这样的性能,只能用美国研究实验室刚搞出来的新物件:集成电路和芯片才能搞定。

当年(1963-1969 年间),阿波罗计划 75 台设备消耗了全世界所有集成电路的一半。

不只是硬件牛,软件也很厉害。

在第一次登月之前,AGC 雇用了 350 名工程师(最后统计的工作量相当于一个工程师做 1400 年)。当时还没有程序员和码农的概念,甚至没有什么人理解软件是什么,导致走了很多弯路。

与今天不同,所有的代码都是手工“编”写的到海量的打孔卡中进行测试的。它基本上是汇编语言和解释性数学语言的组合,三位宇航员的生命,使得语言编码中任何微小的错误和失误,都是致命的。

就是靠着这些连 iphone 手机运算力的小脚趾头都赶不上的计算机,人类到达了月球。

美国人曾经这样调侃阿波罗计划:开着洗衣机,横渡太平洋

如何和计算机沟通?

50 年前的 1969 年,还没有 iOS,没有 windows,甚至没有 DOS,比尔盖茨还刚上中学,中国还是一片红。那个时候没人提人机交互 UI 界面,连软件工程这个术语也是在阿波罗计划期间被创造出来的。

用于运行阿波罗向导计算机(AGC)可以说是那个时代最先进的计算机之一。与同时代的其它机器不同,这台小型计算机不但可以同时处理许多任务,还能选择在多任务出现时选择优先处理哪些任务。

这个只能显示 7 节数字、按键并不比诺基亚多多少的、看上去像是个卡西欧计算器的东东,就是宇航员与计算机唯一的交流工具了,被称为 DSKY。它有十个数字键、1 个加号 1 个减号键,以及 7 个其它控制键。上面屏幕上是八进制或十进制数值,前二行是三组数,后三行每个能显示 5 位数字,但没有小数点(靠宇航员聪明的大脑来判断小数点的位置)。

在没有子菜单的情况下,肯定不能像 3310 那样点击功能表进入 menu 选择了。

这难不倒麻省理工学院的天才工程师们,他们就设计了一套针对登月的交互语言系统。

每次要向计算机输入指令的时候,宇航员以“动词 + 名词”的形式与计算机对话。比如先输入动词 06,再输入名词 62。06 代表着命令计算机以十进制显示所请求值,名词指向内存中的一组值,名词 62 代表速度、高度及高度变化率。所以 06+62 就是以十进制显示上面三个值。为了方便记忆和查询,会将相近的程序放在将近的数字段里,比如用于飞船降落至星球表面的程序编为 61 至 67,对准制导系统的四个程序编为 51 至 54,等等。

难记是难记了些,但熟能生巧,而且这样输入次数最低,错误率不高,时间最短,键盘也相应的不占地方(可以把按钮做得大一点,方便穿上宇航服手套也能操作。

当然,误操作也是有的。阿波罗 8 号返回的时候,吉姆·洛弗尔想进入导航程序 23,然后使用恒星 01(有兴趣的话以后可以讲讲飞船怎么靠恒星来定位),但他误操作直接按了 01,关键是还没有 delete 键也没有取消键。程序 01 只用于在任务开始时初始化惯性测量单元制导平台的,简单的说,就相当于小霸王学习机打坦克大战打到第 31 关的时候重启了。。。之前的所有数据很多都丢失了,只能全部重新输入大量的数据。他花了整整一小时才输完。。。

同船的博尔曼和安德斯为了让他牢记这次乌龙指,在剩下的旅途中不时的拿这一事件开他玩笑。

涟漪

阿波罗制导计算机虽然简陋,但成功的完成了它的使命。不仅如此,它还有力的推动了电子和计算领域关键技术的向前大突破。它对计算机操作的推进,就像是涟漪,跨越半个世纪荡漾至今,荡漾在每台计算机上,荡漾在你现在看这篇文章所用的机器中。