阿波罗13号登月失败

阿波罗11号登月代码公开 AGC计算机内存仅3.75KB


前言

当你打开手机随手刷一条短视频时,你的手机内存可能已经超过了8GB。然而,就是这样一台内存仅有3.75KB的计算机,却在1969年将人类送上了月球。这不是科幻小说,这是真实发生的历史奇迹。阿波罗导航计算机(AGC)的源代码在多年后被公开,引发了全球工程师和极客们的广泛热议——人类究竟是如何用如此有限的计算资源,完成了20世纪最伟大的壮举?


AGC计算机 一台改变历史的"弱鸡"机器

阿波罗导航计算机(Apollo Guidance Computer,简称AGC)由麻省理工学院仪器实验室研发,专门为阿波罗任务设计。它的硬件参数放在今天几乎令人难以置信:

阿波罗导航计算机(Apollo Guidance Computer,简称AGC)

  • 内存(RAM): 约4KB(精确为4096个字,每字15位,约合3.75KB)
  • 只读存储器(ROM): 约72KB,用于存储固化程序
  • 处理器频率: 约2MHz
  • 重量: 约32千克

这台机器的运算能力,甚至不如今天一块几毛钱的单片机。但它在执行任务时的可靠性与稳定性,至今仍被工程界奉为传奇。


代码公开之后 工程师们震惊了

2016年,软件工程师克里斯·加里(Chris Garry)将AGC的完整源代码上传至GitHub平台,迅速引发了技术社区的轰动。代码一经公开,网友们发现了一个令人忍俊不禁的细节——在某段注释中,程序员留下了一句幽默的提示语,暗示该模块"不要删除,否则你可能会失联在宇宙中"。

这些代码由玛格丽特·汉密尔顿(Margaret Hamilton) 领导的团队编写,她也是"软件工程"这一概念的奠基人之一。在物理条件极度受限的情况下,团队采用了高度优化的汇编语言,将每一字节的内存都用到了极致。

代码中的每一行,背后都是无数次测试、调试与取舍的结果。


3.75KB如何承载登月任务

这是一个真实的工程挑战:如何在不到4KB的RAM中,完成导航计算、姿态控制、故障处理等复杂任务?

答案在于极致的优先级管理。AGC采用了一套叫做"Executive"的实时操作系统,它能够根据任务紧急程度动态分配计算资源。当资源紧张时,系统会自动抛弃优先级较低的任务,保证关键指令优先执行。

1969年7月20日,阿波罗11号登月舱下降过程中,导航计算机突然连续触发1202报警码。这是一个"执行溢出"错误,意味着系统任务量超出处理能力。但正是由于优先级机制的存在,系统自动剔除了次要任务,保留了控制登月舱下降的核心程序,最终成功着陆。

这一细节被后来的软件工程教材反复引用,成为实时系统容错设计的经典案例。


从AGC到现代 软件工程的启示

AGC的代码公开,不仅仅是一次历史文献的数字化归档,它更像是一面镜子,折射出软件工程发展的底层逻辑。

资源约束,往往是创造力的催化剂。 正因为内存只有3.75KB,工程师们不得不反复推敲每一个算法,精简每一段逻辑。这种极致优化的思维方式,在今天的嵌入式开发、航天系统乃至物联网领域依然具有深远的参考价值。

从某种意义上说,AGC的设计哲学与当下流行的"最小可行产品"理念不谋而合——用最少的资源,实现最关键的功能,并确保系统在极端条件下依然可靠运行。