用于Apollo 11任务代码的开发过程?


57

阿波罗任务的技术并不比袖珍计算器复杂。

这里的链接中,有有关阿波罗制导计算机(AGC)的信息

机载阿波罗制导计算机(AGC)约为1立方英尺,带有2K的16位RAM和36K的硬线芯绳存储器,铜线穿过或不穿过微小的磁芯。16位字通常是14位数据(或两个操作码),1个符号位和1个奇偶校验位。循环时间为11.7微秒。用反向波兰语用汇编语言和解释性语言进行编程。

因此,当我研究那里的内容时,偶然发现了一些源代码,并且注意到了很多注释(例如,临时,我希望实现希望)

VRTSTART    TS  WCHVERT
# Page 801
        CAF TWO     # WCHPHASE = 2 ---> VERTICAL: P65,P66,P67
        TS  WCHPHOLD
        TS  WCHPHASE
        TC  BANKCALL    # TEMPORARY, I HOPE HOPE HOPE
        CADR    STOPRATE    # TEMPORARY, I HOPE HOPE HOPE
        TC  DOWNFLAG    # PERMIT X-AXIS OVERRIDE
        ADRES   XOVINFLG
        TC  DOWNFLAG
        ADRES   REDFLAG
        TCF VERTGUID

航天器中的实际程序存储在核心绳内存中,这是一种古老的存储技术,是(逐字地)编织一种织物/绳子,其中的位是铁氧体材料的物理环。“核心”内存可抵抗宇宙射线。当受到外层空间的辐射轰击时,核心钻头的状态不会改变。

GITHUB上也有虚拟阿波罗制导计算机(AGC)软件!

文档的某些部分在这里。

另一个带有注释的源代码示例。

033911,000064: 32,3017    06037        FLAGORGY        TC       INTPRET      #  DIONYSIAN FLAG WAVING

    034090,000243: 32,3241    13247        BZF      P63SPOT4               #  BRANCH IF ANTENNA ALREADY IN POSITION 1
    034091,000244: 
    034092,000245: 32,3242    33254        CAF      CODE500                #  ASTRONAUT:     PLEASE CRANK THE
    034093,000246: 32,3243    04616        TC       BANKCALL               #                 SILLY THING AROUND
    034094,000247: 32,3244    20623        CADR     GOPERF1                               
    034095,000248: 32,3245    16001        TCF      GOTOP00H               #  TERMINATE
    034096,000249: 32,3246    13235        TCF      P63SPOT3               #  PROCEED        SEE IF HE'S LYING


    034101,000254: 32,3251    04635        TC       POSTJUMP               #  OFF TO SEE THE WIZARD ...
    034102,000255: 32,3252    74126        CADR     BURNBABY

我的问题是这样的:

  • 在当时使用这些工具的情况下,团队如何编写这么多的代码以使其能够正常运行?

因为如果您编译了许多在Apollo 11上使用过的代码,那将需要几天甚至几周的时间。我严重怀疑程序员那时是否让一切都偶然发生。


4
我进行了相当重要的编辑,以期使之成为更多有关主题的文章。我认为这是一个有趣的问题,我希望人们能够有效回答!
芬德兰2015年

3
阅读黑客神话人月。那里有很多材料-我不确定这里是否适合答案。

2
在Stack Exchange上不建议使用“标签-问题”样式的问题标题。请保持标题不变。

4
没有您的问题所建议的编译/修复周期。您没有创建绳索存储器,对其进行测试,如果不起作用,请重做。您第一次就做对了。
罗伯特·哈维

7
@RobertHarvey,HOPE HOPE HOPE您第一次就正确。

Answers:


13

我试图讲述一部很棒的纪录片,内容是约翰·杰克·加曼(John'Jack)Garman必须“发明”“优先级调度的多程序操作系统”。不过,这可能与着陆器模块有关。故事是,在着陆器着陆时,您最好优先考虑引导,因为其他事情(例如接下来15秒钟的机舱温度)对坠毁和燃烧并不重要。乍一看,它们使计算机超负荷运行,并且由于未执行某些子例程而开始发生警报。负载太多了,但由于Garman预见并建立了优先级概念,因为他认为这是个好主意,所以低优先级的例程不会使较高优先级的降落例程陷入困境。

当时看着这部纪录片,令我感到震惊的是,对代码进行大型重构却又没有告诉管理层,这几乎是被解雇了,因为您在应做的工作上迟到了。但是,在这种情况下,在调查了警报原因后,重构就暴露出来了。(管理层仍然很生气!:-)

一些链接:

不,“清单错误”几乎没有使第一次登月降临

月球模块制导计算机的故事

他们是如何构建的:Apollo 11软件

美国宇航局约翰逊航天中心口述历史项目口述历史记录编辑

美国宇航局阿波罗计划 摘录的简史:下降燃烧五分钟,在月球表面上方1800 m,LM导航和制导计算机产生了多个意外的“ 1202”和“ 1201”计划警报中的第一个。休斯顿任务控制中心的计算机工程师杰克·加曼告诉制导官史蒂夫·巴尔斯,继续下降是安全的。这些警报表明“执行程序溢出”,这意味着制导计算机无法实时完成其所有任务,而不得不推迟其中的一些任务。

回顾“大跃进” 节选:我们知道那是什么,它不应该发生。但是我们设计了一个系统,试图从任何过载情况中恢复。所以我记得听到[NASA计算机工程师]杰克·加曼大喊:“走,走!” 然后他们走了。然后,当尼尔飞越LEM时,我们一直在努力寻找着地点的好方法。我们新的担心是燃料不足。但是最后我们听到了联系通知,然后说:“老鹰降落了。”

杰克·加曼访谈

编辑:也许这是纪录片:阿波罗11号:不为人知的故事(2006)

演员:约翰·R·加曼
(John R. Garman)... 本人-阿波罗11号计算机工程师(饰杰克·加曼(Jack Garman))

(还有其他)。

更新: 南非的一名黑客刚刚拯救了太空中的第一台NASA计算机


我知道这个故事听起来很熟悉!“阿波罗11号”部分在en.wikipedia.org/wiki/Margaret_Hamilton_
科学家

31

如果我理解正确,那么开发过程就是同行评审和试验。

该团队由“数学医生”之类的人组成,他们是非常敬业,聪明,热情,注重细节的人们,他们的一生致力于他们的工作。因此,当我说同行评审时,我的意思是在几个月(一年以上)的过程中进行了很多同行评审。

这些开发人员“在脑海中进行模拟”,“调试纸上的软件”,并与许多开发人员一起工作,反复地研究相同的代码,直到他们确信它是正确的为止。有多个团队-每个团队都参与整个团队。

我在俄亥俄州立大学(96春季)的数值方法教授编写了确定何时启动助推火箭阶段的代码。他说打印输出就是电话簿的大小(因此,Fortran代码的大小可能是8.5 x 11英寸纸张的2.5到3.5英寸厚-他没有描述字体的大小)。

当被说服时,他们发射了无人导弹(技术上说火箭没有陀螺仪),并带有无线电,并定期发出哔哔声。他们听着哔哔声,直到他们期望收音机会撞击月球(撞向月球并摧毁自身)并停止发出哔哔声。他们知道,如果他们错过了,无线电会在计算出的撞击时间之后继续发出哔哔声。在计算的时间之后15秒发生冲击。

这个公认的轶事故事是我对医生上门拜访的回忆。他很老,很久以前。这是我最好的回忆。


2
他描述打印输出是电话簿的大小(因此,可能是2.5到3.5英寸厚的8.5 x 11英寸纸)通常,该代码以横向模式打印,每页约55-60行。一张(100张)的打印纸厚约1.75英寸
Gilbert Le Blanc

@GilbertLeBlanc一张纸通常是500张纸。(有时480)
joshp

@joshp:你是对的。500张打印输出纸厚约1.75英寸。
吉尔伯特·勒布朗克

15

AGC由动词和名词控制

Apollo命令软件不是用用户今天能识别的任何语法编写的。宇航员以数字方式输入命令,每个两位数字代表动词或名词。动词描述了要执行的动作,名词指定了受该动词动作影响的数据。

宇航员讨厌动词和名词的设置

最初的AGC硬件开发人员之一拉蒙·阿隆索(RamónAlonso)说,该接口的发明是为了给实验室的参观者留下深刻的印象,但是当没有人开发出更好的接口时,他一直呆在飞机上。批评人士说,这不是“科学的”,第一批宇航员(所有的精英喷气机飞行员)都喜欢表盘和开关,类似于飞机控制面板。

“在数字计算机的历史中,那个时候的AGC速度很慢,但是非常可靠并且很小。这是最早使用集成电路的工具。”

设计的软件基本上是由MIT从头开始构建的。

您可以在个人计算机上下载并安装Apollo Guidance计算机仿真器程序,没有问题。这是在Mac OS X上的样子。

在此处输入图片说明


8

与几乎所有其他软件项目一样,它是在苛刻的期限和质量压力下完成的。幸运的是,此处有软件项目经理Howard W.“ Bill” Tindall,Jr . 的大量材料档案

如果您对备忘录进行采样,则可以很好地了解时间,功能和缺陷之间的正常冲突。值得一提的是,与项目的其余部分一样,开发工作已经进行了数

该系统的设计始于1961年第二季度,NASA于1965年9月22日在太空飞船中安装了Block I版本。原始软件(名为CORONA)的发布是1966年1月,首次飞行是8月25日, 1966年。不到3年,设计人员实现了最终程序目标(http://history.nasa.gov/computers/Ch2-5.html

我找不到有关软件创建方式的具体参考,但是给定日期,我只能假设大部分软件是用笔和纸完成的,而“模拟”则是手动完成的。似乎有一种系统可以通过打孔卡将程序加载到AGC中,大概可以在地面上进行“快速”测试,而无需制造绳索记忆。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.