“如何给150亿英里外的软件进行升级?”
2015 年,NASA 发布了招聘启事,寻找具有特定技能的软件工程师。这个人必须是 FORTRAN 和汇编的专家,这两种 40 年代和 50 年代的编程语言大多数年轻毕业生都不知道。这项工作是加入一个致力于旅行者号Voyager太空探测器的小团队。
令人难以置信的是,两台旅行者号仍然运行在他们原来的50年前的计算机上,这些计算机的内存只有 70KB。这听起来可能不多,但足以让两个太空探测器穿过我们的太阳系,并一路上做出令人难以置信的发现。不出所料,Voyager 的计算机确实出现了问题。
就在去年,旅行者一号开始发回有关其太空方向遥测数据的乱码。
最重要的是,负责保持旅行者号指向正确方向的推进器开始显示出疲劳的迹象。每次使用推进器时,微小的联氨燃料碎片都会卡在管道中。随着时间的推移,这种情况逐渐累积,导致系统堵塞。
旅行者号已经启用其备用推进器,因此如果这些推进器失败,旅行者号将结束。在150亿英里的距离上,没有办法清理管道,但为了减缓累积速度并解决遥测问题,负责Voyager的小团队开始编写一个软件更新,该更新将发送到我们的宇宙中以修复它。
Voyager上有三台主要计算机。主计算机控制所有主要仪器,维持其健康和温度,并控制其他两台计算机。第二台计算机负责 Voyager 的方向,因此它会寻找预定的参考点,并启动推进器以保持Voyager 的天线指向地球。第三台计算机负责存储和处理仪器拍摄的所有科学数据和图像。Voyager 没有操作系统,任何一种编程语言都会占用太多空间。
海王星的光线比地球暗900倍,因此为了拍照,工程师必须重新编程以拍摄更长的曝光时间。一旦它离开海王星,NASA就会开始关闭相机和各种科学仪器等设备以节省电力,但由于计算机上只有70 KB内存,为失效仪器保留几行代码只是浪费空间。因此,工程师完全重写了Voyager的代码,并进行了软件更新,以确保它在可预见的未来继续运行。
为了对Voyager进行软件更新,NASA需要将新代码安装到其计算机中。
也许Voyager计算机最酷的地方就是内存。每台计算机都有自己的镀线存储器,以最基本的形式1和0存储Voyager的代码。该存储器由物理网格线和薄金属板组成。每个交点都可以被视为内存的单个位,它可以存储1或0。
通过使电流通过其中一个板和特定的电线,就会产生磁场。如果磁场沿这个方向,则被视为0。如果方向相反,则为1。通过沿相反方向传递电流,它会改变磁场方向并将该位翻转为零。通过对每个点执行此操作,您可以将这些1和0保存到内存中。
这种设计在当时是一个很好的选择,因为它意味着即使停电,这些 1 和 0 仍然会保存到内存中。这也意味着每一位都可以更新
Voyager上的总内存只有70KB,工程师必须极其高效地编写代码。除了基本机器代码之外,Voyager 还有自己的伪代码。基本上是一系列快捷命令,可以触发这些命令来执行重复性任务,而不会占用太多内存。主计算机上的解释器读取这些1和0。一旦遇到预定的代码,它就会启动伪代码来执行命令。这可以节省大量内存,并允许许多任务自动化,而无需编写长行代码。
数据以每秒16位的速率发送到 Voyager,几乎需要一整天才能真正到达Voyager。Voyager上的计算机是中断驱动的。这意味着软件会遍历其通常的指令列表,直到被中断。当更新发送到 Voyager 时,它会携带一个中断信号。
当 Voyager 收到此消息时,它会告诉主计算机停止正在执行的操作,转而执行更新指令。然后,它将新代码卸载到内存中,将所有位翻转到新位置。然后读取代码以检查一切是否正确,然后主计算机启动并返回正常操作。
多年来,Voyager收到了一长串更新和补丁,以修复和改进其操作方式。1995年编写了一个更新,如果某些组件出现故障,基本上会重新启动某些组件。2014 年,即代码编写大约20年后,当某个硬件发生故障时,该代码拯救了 Voyager 1。
2010年,旅行者号的内存中的一个位被翻转,从 0 变成了 1。这导致计算机彼此失去同步,命令开始发生的时间比预期晚了两个半小时。团队已经发送软件更新以将故障位翻转回其校正位置。
正是这些令人惊叹的故事让这些标志性的太空探测器在太空中存活了近50年。令人难以置信的是,Voyager计算机上的物理线路、晶体管和硬件在这么长时间之后仍然按预期运行。
原文始发于微信公众号(黑客与极客):150亿英里外的旅行者号软件升级
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
https://cn-sec.com/archives/2306664.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论