2024 年 4 月,NASA 喷气推进实验室的工程师完成了一项史无前例的远程维护任务:向距离地球超过 240 亿公里的旅行者 1 号探测器上传代码补丁,修复因芯片失效而中断长达五个月的工程数据传输。信号单程传输需要 22.5 小时,这意味着每一次指令发送与确认之间的往返延迟高达 45 小时。这次修复不仅是一次技术胜利,更揭示了在极端约束条件下维护 legacy 系统的核心工程原则。
70 年代硬件架构与汇编代码的持久挑战
旅行者号探测器搭载的计算机系统诞生于 1970 年代,其设计哲学与现代嵌入式系统截然不同。机载计算机并非运行在高抽象层的操作系统之上,而是直接操作定制硬件的汇编语言程序。这种架构选择在当时是合理的 —— 它最大限度地减少了资源开销,确保了在有限计算能力和能源预算下的可靠运行。
然而,这种设计也为长期维护埋下了隐患。飞行数据子系统(FDS)负责将科学仪器和工程传感器的数据打包,通过通信系统传回地球。该子系统的内存容量极其有限,甚至小于现代智能手机的可用内存。更为关键的是,这些内存芯片经过 48 年的深空辐射暴露和持续运行,已经开始出现物理退化。
2023 年 11 月 14 日,旅行者 1 号突然停止发送可读的工程和科学数据。任务控制人员能够确认探测器仍在接收指令并正常运行,但返回的数据流变成了无法解析的乱码。经过数月的排查,工程团队于 2024 年 3 月确认问题的根源:FDS 中负责存储部分内存的单个芯片已经失效,其中包括 FDS 计算机的部分软件代码。
2024 年修复:代码重定位的工程实践
面对无法物理修复的硬件故障,JPL 工程师采取了一种在软件工程中常见但在深空探测中极为罕见的策略:代码重定位。由于失效芯片所在的内存区域无法使用,团队需要将受影响的代码迁移到 FDS 内存的其他位置。
这一方案面临多重约束。首先,FDS 内存中没有单个连续区域足够大以容纳完整的代码段。其次,代码在内存中的位置变化会影响所有指向该代码的引用地址。第三,任何修改都必须确保代码在分割后仍能作为一个整体正常运行。
工程团队的解决方案体现了模块化设计的价值。他们将受影响的代码分割成多个部分,分别存储到内存的不同位置。同时,他们需要更新 FDS 内存中其他部分对该代码位置的引用,确保调用链的完整性。这种工作类似于在运行中的系统上进行 "开胸手术"—— 任何错误都可能导致探测器永久失联。
2024 年 4 月 18 日,团队首先迁移了负责打包工程数据的代码段。45 小时后,即 4 月 20 日,当返回信号确认修改成功时,旅行者 1 号恢复了工程数据的正常传输。这是五个月以来地面首次能够检查探测器的健康状态。后续几周,团队继续迁移和调整其他受影响的代码段,最终恢复了科学数据的传输。
跨代知识传承与向后兼容机制
旅行者号任务面临的另一个隐性挑战是知识传承。原始设计团队中的工程师大多已退休,部分甚至已经离世。维护工作依赖于跨代工程师对 1970 年代设计决策的理解,以及文档化知识的完整性。
这种场景在企业 IT 系统中同样存在,只是时间尺度不同。一个运行了 20 年的核心业务系统,其原始开发者可能已经离职,文档可能已经过时或丢失。旅行者号的经验表明,应对此类风险需要建立系统化的知识管理机制。
NASA 的做法包括:维护详细的任务日志和决策记录;建立 mentorship 机制,由资深工程师向新成员传授系统知识;以及保留原始设计文档和源代码的完整档案。这些措施确保了即使原始团队不在,后续工程师仍能理解和修改系统。
深空软件维护的工程参数清单
从旅行者号的维护实践中,可以提炼出一套适用于长期运行系统的工程参数和检查清单:
内存管理策略
- 预留足够的未分配内存区域,以应对未来可能的代码重定位需求
- 采用模块化设计,确保代码可以分割和重新组合而不影响功能
- 维护完整的内存映射表,记录所有代码和数据的物理位置
容错与冗余
- 关键功能应能够在部分硬件失效的情况下降级运行
- 建立代码重定位的标准操作流程,包括地址引用更新机制
- 设计通信协议时考虑极端延迟场景,支持异步确认和状态恢复
知识管理
- 建立系统化的文档更新机制,确保设计决策和修改历史可追溯
- 实施跨代知识传承计划,包括定期的技术培训和 mentorship
- 维护可运行的模拟环境,用于验证修改而不影响生产系统
变更管理
- 所有代码修改必须经过离线验证,考虑到通信延迟,不支持快速回滚
- 建立分阶段部署策略,优先恢复核心功能,再逐步恢复完整服务
- 维护回退方案,确保在修改失败时能够恢复到已知稳定状态
旅行者号的故事提醒我们,软件系统的生命周期可能远超最初的预期。在 1977 年发射时,任务的设计寿命仅为五年 —— 足够完成木星、土星、天王星和海王星的飞掠探测。然而,近 50 年后,这对探测器仍在星际空间中运行,成为人类制造的最遥远物体。它们的持续运行不仅依赖于硬件的可靠性,更依赖于工程师们不断适应和修复软件系统的能力。在极端约束条件下维护 legacy 代码,需要的不仅是技术能力,更是对系统本质的深刻理解和长期承诺。
资料来源
- NASA Jet Propulsion Laboratory. "NASA's Voyager 1 Resumes Sending Engineering Updates to Earth." April 22, 2024. https://www.jpl.nasa.gov/news/nasas-voyager-1-resumes-sending-engineering-updates-to-earth/
- NASA Voyager Mission Blog. "Engineers Pinpoint Cause of Voyager 1 Issue, Are Working on Solution." April 4, 2024.
内容声明:本文无广告投放、无付费植入。
如有事实性问题,欢迎发送勘误至 i@hotdrydog.com。