找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5143

积分

0

好友

712

主题
发表于 2 小时前 | 查看: 2| 回复: 0

最近,NASA 正式将 1969 年阿波罗 11 号(Apollo 11)所使用的 AGC(Apollo Guidance Computer)导航计算机系统源码公之于众,并以“公有领域”(Public Domain)的形式托管在 GitHub 上。

回顾当年,这套系统的硬件资源极其有限:仅依赖 4KB RAM、74KB ROM 以及一颗主频为 1.024MHz 的处理器,便成功支撑了人类首次登月这一壮举。要知道,在1969年,像 Intel 4004 这样的微处理器尚未面世。AGC 系统是基于约 2800 个双输入 NOR 门构建的集成电路,指令长度为 16 位,每秒大约能执行 4 万次加法运算。

这 4KB RAM 采用的是 Magnetic Core Memory(磁芯内存),容量大约相当于 2000 个字(Words)。而配套的 74KB ROM 则使用了 Core Rope Memory(芯绳存储器),其制造过程非常独特——由纺织厂女工手工将导线穿过磁芯编织而成。导线穿过磁芯代表逻辑“1”,绕过去则代表“0”。这意味着程序是真正物理意义上的“硬编码”,几乎不可能因辐射或断电而被篡改。

整台计算机重约 32 公斤,功耗约 70 瓦。对比之下,如今一个普通 USB-C 充电器或电子烟内置的微控制器,其算力都可能轻松达到 AGC 的数十甚至上百倍。然而,正是这 2800 个 NOR 门,成就了人类迈向太空的关键一步。

由于硬件资源极度紧张,AGC 的全部 源码 体积仅有 72KB,甚至放不下一张现代的高清图片。但这区区 72KB 却包含了完整的导航、控制、着陆与返回地球的全部逻辑。当年的开发人员完全手写汇编语言,每一行代码都经过精心设计,力求不浪费任何一个比特。

在这份六十多年前的代码中,可以看到仅用三十多行汇编指令,就实现了高精度的正弦/余弦(Sine / Cosine)计算函数,这在当时堪称一项惊人的技术成就。更令人惊叹的是,代码中还实现了超前的“多任务处理”与“错误恢复”机制。

在阿波罗 11 号登月过程中,AGC 曾因雷达数据过载触发著名的“1202 报警”,几乎耗尽了 4KB 的 RAM。幸亏程序内置了优先级调度系统,能够自动丢弃低优先级任务,优先保障最关键的发动机控制与导航任务,并在处理后自动重启。这种“优雅降级”的设计理念,可以说是现代操作系统稳定性的早期雏形。

此外,源码中的注释也展现了当年工程师们的幽默感。例如,在点火程序里,直接写入了当时流行的电台 DJ 口号“BURN_BABY_BURN”;在处理登月雷达的子程序中,注释写着“SEE IF THE SILLY THING IS STILL ON”;甚至还引用了莎士比亚《亨利六世》中的台词来吐槽繁琐的数据输入流程。

宇航员站在月球表面,头盔面罩反射出登月舱轮廓

值得一提的是,在此次 NASA 公开 AGC 源码后,已有开发者制作出了 AGC 模拟器,让现代人也能体验这套登月系统是如何运行的。

最近发生的一件趣事形成了鲜明对比:NASA 的阿尔忒弥斯 II 号(Artemis II)任务在飞往月球途中,竟然遇到了 Microsoft Outlook 软件故障,需要地面控制中心远程修复。在当今软件动辄消耗数 GB 内存的时代,回看六十多年前那精巧的 72KB 登月代码,它不仅仅是一份历史档案,更深刻地阐明了一个道理:优秀的软件架构与极致的编程艺术,能够极大地弥补硬件能力的不足。这对于当今的软件工程师而言,依然具有深刻的启发意义。

“That’s one small step for man, one giant leap for mankind.”
向六十多年前打造 AGC 导航计算机系统的软件工程师们致敬。

项目地址与代码:


Apollo-11
https://github.com/chrislgarry/Apollo-11?tab=readme-ov-file



上一篇:工程师文化与技术创新的巅峰:Sun公司兴衰史的启示与反思
下一篇:NVIDIA利用强化学习工具NB-Cell,AI一夜完成芯片单元库工艺迁移
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-15 06:17 , Processed in 1.076399 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表