Mongoose House Technical Edition

1202 alarm

今天美国总统奥巴马为两位科技界的杰出女性 —— 玛格丽特·汉密尔顿和格蕾斯·哈珀授予了总统自由勋章。玛格丽特·汉密尔顿,NASA 的软件工程师,40年前编写的程序将阿姆斯特朗等三名宇航员送上了月球,实现了「人类文明一大步」的梦想。

汉密尔顿

1969年7月20日,在阿姆斯特朗和奥尔德林登上月球的前几分钟,此时,阿波罗11号的计算机应该切换程序,开始引导下降引擎,并向机组人员提供着陆信息。但是由于雷达开关设置的一个错误,阿波罗11号的计算机要不断处理交会雷达的数据。如果照此下去,阿波罗11号将无法启动登陆程序,登陆月球的计划也不得不中止进行。而汉密尔顿领导设计的「1202 alarm」避免了此次失败的发生。

「1202 alarm」突破了一般计算机程序的设计方法,它使计算机可以停止处理不重要的任务,而专注处理更重要的任务。正是由于「1202 alarm」,阿波罗11号的计算机停止处理雷达数据,开始引导下降引擎,并向机组人员提供着陆信息。

最为可贵的是,这个貌似有一定智能的程序是运行在40年前的计算机上。

当时,阿波罗11号的计算机配置有36864个15位的 ROM 和2048个字节的 RAM(大致相当于 72kb 的硬盘和 2kb 的内存)。为了节省空间,阿波罗11号的计算机经常是在一块存储区域上,即要存储海拔高度,又要存储水平坐标,并且需要在两者之间不断地切换。可想而知,要在这么小的计算机上实现一个多任务系统是很难的(现在的系统基本上都是多任务系统,譬如,我在写这篇文章的同时,还在听着音乐),而阿波罗11号的计算机确实实现了多任务调度。

那么「1202 alarm」到底是什么?

1202 alarm

「1202 alarm」是一个失败恢复(Fail-Over)设计,被设计成计算机可以从任何错误中恢复,并且具有失败恢复后,作业流程不中断的能力。

当时,因为雷达开关设置的错误,阿波罗11号的计算机重复处理交会雷达数据,很快作业占满了调度需要的核心组(可以想象成内存满了)。汉密尔顿的程序被设计为,当没有可用核心组时,触发1202警报。阿波罗11号检测到1202警报,就重新启动计算机。计算机重启后,执行重要的任务(如,引导下降引擎),丢弃不重要的任务(如,处理雷达数据)。

【参考】

  1. Margaret Hamilton, Apollo Software Engineer, Awarded Presidential Medal of Freedom
  2. Apollo 11 Program Alarms