Processo de desenvolvimento usado para o código nas missões Apollo 11?

57

As missões Apollo tinham tecnologia não mais complicada do que uma calculadora de bolso.

No link aqui , há informações sobre o Apollo Guidance Computer (AGC)

O computador de orientação Apollo (AGC) de bordo tinha cerca de 1 pé cúbico com 2K de RAM de 16 bits e 36K de memória de núcleo de corda com fios com fios de cobre enfiados ou não através de minúsculos núcleos magnéticos. As palavras de 16 bits eram geralmente 14 bits de dados (ou dois códigos op), 1 bit de sinal e 1 bit de paridade. O tempo de ciclo foi de 11,7 microssegundos. A programação foi realizada em linguagem assembly e em linguagem interpretativa, em polonês reverso.

Então, eu me deparei com algum código-fonte quando pesquisei o que havia lá em cima e notei ótimos comentários (por exemplo: TEMPORÁRIO, ESPERO ESPERAR ESPERANÇA)

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

Os programas atuais da espaçonave eram armazenados na memória do cabo principal , uma tecnologia de memória antiga feita (literalmente) por tecer um tecido / corda, onde os bits eram anéis físicos de material de ferrita. A memória "central" é resistente aos raios cósmicos. O estado de um núcleo não muda quando bombardeado por radiação no espaço sideral.

O software Virtual Apollo Guidance Computer (AGC) também está no GITHUB!

Alguma parte da documentação está aqui.

Outro exemplo de código fonte com ótimos comentários.

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

Minha pergunta aqui é esta:

  • Como as equipes que escreviam esse código conseguiram torná-lo funcional, dadas as ferramentas da época?

Porque se você compilar tanto código usado no Apollo 11 ... levaria dias, até semanas. Eu duvido seriamente que os programadores da época deixassem tudo acontecer por acaso.

Josip Ivic
fonte
4
Eu tive uma edição bastante significativa para tornar isso mais esperançoso no tópico. Eu acho que é uma pergunta fascinante e espero que as pessoas sejam capazes de responder com eficácia!
enderland
3
Leia Hackers e o mês do homem mítico . Há bastante material lá - não tenho certeza de que ele se encaixe em uma resposta aqui.
2
Os títulos das perguntas no estilo "Tag - Pergunta" são desencorajados no Stack Exchange. Por favor, deixe o título como está.
4
Não houve ciclo de compilação / correção, como sugere sua pergunta. Você não criou uma memória de corda, teste-a e refaça-a se não funcionar; você acertou na primeira vez.
Robert Harvey
7
@RobertHarvey você HOPE HOPE HOPEacertou na primeira vez.

Respostas:

13

Havia um documentário adorável que estou tentando descobrir sobre John 'Jack' Garman teve que "inventar" um "sistema operacional de multiprogramação com prioridade programada". Isso pode ter sido relacionado ao módulo lander. A história era que, quando você estava pousando na sonda, é melhor você dar prioridade à orientação, porque outras coisas, como a temperatura na cabine pelos próximos 15 segundos, realmente não importavam se você batesse e queimasse. Na primeira tentativa, eles sobrecarregaram o computador e os alarmes começaram a acontecer porque algumas sub-rotinas não estavam sendo executadas. Havia muitos carregados, mas graças ao conceito de prioridade, que Garman previu e incorporou porque achava que era uma boa ideia, as rotinas de baixa prioridade não atrapalharam a rotina de pouso de maior prioridade.

Assistindo ao documentário na época, fiquei impressionado com como era fazer uma grande refatoração no código sem avisar a gerência e quase ser demitido porque você estava atrasado no que deveria estar trabalhando. Nesse caso, no entanto, a refatoração veio à tona quando o motivo dos alarmes foi investigado. (E a gerência ainda estava chateada! :-)

Alguns links:

Não, um “erro de lista de verificação” quase não atrapalhou o primeiro pouso na lua

CONTOS DO COMPUTADOR DE ORIENTAÇÃO DO MÓDULO LUNAR

Como eles o construíram: o software da Apollo 11

Projeto de História Oral do NASA Space Center da NASA Transcrição da História Oral editada

Breve histórico do trecho do programa Apollo da NASA : Cinco minutos depois da queimadura de descida e 1.800 m acima da superfície da Lua, o computador de navegação e orientação LM produziu o primeiro de vários alarmes inesperados do programa "1202" e "1201". O engenheiro de computação do Mission Control Center em Houston, Jack Garman, disse ao oficial de orientação Steve Bales que era seguro continuar a descida. Esses alarmes eram indicações de "excesso de executivos", o que significa que o computador de orientação não pôde concluir todas as suas tarefas em tempo real e teve que adiar algumas delas.

Recordando o trecho do 'Salto Gigante' : sabíamos o que era e que não deveria estar acontecendo. Mas projetamos um sistema que tentou se recuperar de qualquer condição de sobrecarga. Então me lembro de ouvir [o engenheiro de computação da NASA] Jack Garman gritando: "Vá, vá!" E eles foram. Em seguida, ouvimos Neil voar com o LEM e tentar encontrar um bom local para o touchdown. Nossa nova preocupação era a falta de combustível restante. Mas finalmente ouvimos o aviso de contato e depois "A Águia pousou".

Entrevista com Jack Garman

EDIT: Talvez este tenha sido o documentário: Apollo 11: The Untold Story (2006)

Elenco: John R. Garman ...
Ele mesmo - Engenheiro de computação Apollo 11 (como Jack Garman)

(Entre outros).

Atualização: Um hacker da África do Sul resgatou o primeiro computador da NASA no espaço

K.Nicholas
fonte
Eu sabia que essa história parecia familiar! A seção "Apollo 11" tem mais sobre esta história em en.wikipedia.org/wiki/Margaret_Hamilton_(scientist)
hydo 9/16
31

Se bem entendi, o processo de desenvolvimento foi a revisão por pares e a experimentação.

A equipe era formada por pessoas como "Math Doctors" - pessoas extremamente dedicadas, inteligentes, apaixonadas e detalhistas, cujas vidas eram dedicadas ao seu trabalho. Então, quando digo revisão por pares, quero dizer muitas revisões por pares ao longo de muitos meses (mais de um ano).

Esses desenvolvedores "executaram as simulações em suas cabeças", "depuraram o software no papel" e trabalharam em grupos com muitos desenvolvedores que olhavam o mesmo código repetidamente até se convencerem de que estava correto. Havia várias equipes - cada uma trabalhando em uma parte do todo.

Meu professor de Métodos Numéricos da Universidade Estadual de Ohio (primavera de 96) escreveu o código que decidia quando iniciar um estágio do foguete auxiliar. Ele descreveu a impressão como sendo do tamanho da lista telefônica (portanto, talvez com 2,5 a 3,5 polegadas de espessura de papel 8,5 x 11 polegadas - ele não descreveu o tamanho da fonte) do código Fortran.

Quando convencidos, lançaram um míssil não tripulado (foguetes tecnicamente não possuem giroscópios) com um rádio a bordo que emitia um sinal sonoro em intervalos regulares. Eles ouviram os bipes até o ponto em que esperavam que o rádio atingisse a lua (colidisse com ela e se destruísse) e parassem de apitar. Eles sabiam que, se perdessem, o rádio continuaria emitindo um bipe muito além do tempo calculado de impacto. O impacto ocorreu 15 segundos após o tempo calculado.

Esta história admitidamente anedótica são minhas lembranças de uma visita ao consultório com o médico. Ele era muito velho e fazia muito tempo. Esta é a minha melhor lembrança.

Lyle S.
fonte
2
Ele descreveu a impressão como sendo do tamanho da lista telefônica (então, talvez com 2,5 a 3,5 polegadas de espessura de papel de 8,5 x 11 polegadas) Geralmente, o código era impresso no modo paisagem com cerca de 55 a 60 linhas por página. Uma resma (100 folhas) de papel de impressão é de cerca de 1,75 polegadas de espessura.
Gilbert Le Blanc
@ GilbertLeBlanc Uma resma é tipicamente 500 folhas. (às vezes 480)
joshp 17/02
@joshp: Você está certo. 500 folhas de papel de impressão têm cerca de 1,75 polegadas de espessura.
Gilbert Le Blanc
15

O AGC é controlado com verbos e substantivos

O software de comando Apollo não está escrito em nenhuma sintaxe que os usuários reconheceriam hoje. Os astronautas inserem comandos numericamente, com cada número de dois dígitos representando um verbo ou um substantivo. O verbo descreve a ação a ser executada e o substantivo especifica os dados a serem afetados pela ação do verbo.

Os astronautas odiavam a configuração de verbo e substantivo

Ramón Alonso, um dos desenvolvedores de hardware originais da AGC, disse que a interface foi inventada para impressionar os visitantes de seu laboratório, mas permaneceu nos vôos quando ninguém desenvolveu uma interface melhor. Os críticos disseram que não era "científico", e os primeiros astronautas - todos os pilotos de elite - preferiram seletores e interruptores, semelhantes a um painel de controle de avião.

"O AGC foi muito lento, mas muito confiável e muito pequeno para a época na história dos computadores digitais. Foi o primeiro a usar circuitos integrados".

O software como ele foi projetado foi construído basicamente do zero pelo MIT.

Você pode baixar e instalar o programa emulador Apollo Guidance Computer em seu computador pessoal, sem problemas. Aqui está o que parece no Mac OS X.

insira a descrição da imagem aqui

Josip Ivic
fonte
8

Como praticamente todos os outros projetos de software, ele foi realizado sob prazo agressivo e pressão de qualidade. Felizmente, um grande arquivo de material do gerente de projetos de software Howard W. "Bill" Tindall, Jr. está disponível aqui .

Se você provar os memorandos, poderá ter uma noção muito boa do conflito normal entre tempo, recursos e defeitos. Vale a pena notar que o desenvolvimento prosseguiu ao longo de vários anos, como o restante do projeto.

O design do sistema começou no segundo trimestre de 1961 e a NASA instalou uma versão do Bloco I em uma espaçonave em 22 de setembro de 1965. O lançamento do software original (chamado CORONA) ocorreu em janeiro de 1966, com o primeiro vôo em 25 de agosto de 1966. Menos de três anos depois disso, os designers alcançaram o objetivo final do programa ( http://history.nasa.gov/computers/Ch2-5.html )

Não consigo encontrar referências específicas de como o software foi criado, mas, dada a data, só posso presumir que grande parte foi feita em papel e caneta, com "simulações" feitas manualmente. Parece que havia um sistema para carregar programas no AGC com cartões perfurados, presumivelmente para testes "rápidos" no solo, sem a necessidade de fabricar memória de corda.

pjc50
fonte