¿Proceso de desarrollo utilizado para el código en las misiones Apollo 11?

57

Las misiones Apolo tenían una tecnología no más complicada que una calculadora de bolsillo.

Desde el enlace aquí , hay información sobre Apollo Guidance Computer (AGC)

El Apollo Guidance Computer (AGC) a bordo tenía aproximadamente 1 pie cúbico con 2K de RAM de 16 bits y 36K de memoria de cable duro con cables de cobre roscados o no a través de pequeños núcleos magnéticos. Las palabras de 16 bits eran generalmente 14 bits de datos (o dos códigos de operación), 1 bit de signo y 1 bit de paridad. El tiempo del ciclo fue de 11,7 microsegundos. La programación se realizó en lenguaje ensamblador y en un lenguaje interpretativo, en polaco inverso.

Entonces, me topé con un código fuente cuando investigué lo que había allí arriba, y noté excelentes comentarios (por ejemplo, TEMPORAL, ESPERO ESPERO ESPERANZA)

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

Los programas reales en la nave espacial se almacenaron en la memoria de la cuerda central , una tecnología de memoria antigua hecha (literalmente) tejiendo una tela / cuerda, donde los pedazos eran anillos físicos de material de ferrita. La memoria "núcleo" es resistente a los rayos cósmicos. El estado de un bit de núcleo no cambiará cuando sea bombardeado por radiación en el espacio exterior.

¡El software Virtual Apollo Guidance Computer (AGC) también está en GITHUB!

Alguna parte de la documentación está aquí.

Otra muestra de código fuente con excelentes comentarios.

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

Mi pregunta aquí es esta:

  • ¿Cómo fueron los equipos que escribieron este código capaz de hacerlo funcional dadas las herramientas en ese momento?

Porque si compilas tanto código que se usó en Apollo 11 ... tomaría días, incluso semanas. Dudo seriamente que los programadores en ese entonces dejaran que todo sucediera por casualidad.

Josip Ivic
fuente
44
Tuve una edición bastante significativa para hacer esto con suerte más sobre el tema. ¡Creo que es una pregunta fascinante y espero que la gente pueda responder de manera efectiva!
enderland
3
Lea Hackers y el Mes del hombre mítico . Hay bastante material allí, no estoy seguro de que encaje en una respuesta aquí.
2
Los títulos de preguntas de estilo "Etiqueta - Pregunta" no se recomiendan en Stack Exchange. Por favor, deje el título como está.
44
No hubo un ciclo de compilación / reparación como sugiere su pregunta. No creó una memoria de cuerda, pruébela y luego vuelva a hacerla si no funcionó; Lo entendiste bien la primera vez.
Robert Harvey
77
@RobertHarvey, lo HOPE HOPE HOPEhaces bien la primera vez.

Respuestas:

13

Hubo un documental encantador que estoy tratando de perseguir acerca de que John 'Jack' Garman tuvo que "inventar" un "sistema operativo de multiprogramación programado por prioridad". Sin embargo, esto puede haber estado relacionado con el módulo de aterrizaje. La historia era que cuando aterrizabas en el módulo de aterrizaje, es mejor que le des prioridad a la orientación porque otras cosas, como la temperatura en la cabina durante los siguientes 15 segundos, realmente no importaban si te caes y te quemas. En el primer disparo sobrecargaron la computadora y las alarmas comenzaron a suceder porque algunas subrutinas no se ejecutaban. Había demasiados cargados, pero gracias al concepto de prioridad, que Garman previó e incorporó porque pensó que era una buena idea, las rutinas de baja prioridad no bloquearon la rutina de aterrizaje de mayor prioridad.

Al ver el documental en ese momento, me sorprendió lo que era hacer una refactorización importante del código sin decirle a la gerencia y casi ser despedido porque llegaste tarde en lo que se suponía que estabas trabajando. Sin embargo, en este caso, la refactorización salió a la luz cuando se investigó el motivo de las alarmas. (¡Y la gerencia todavía estaba enojada! :-)

Algunos enlaces:

No, un "error de la lista de verificación" casi no descarriló el primer alunizaje

CUENTOS DE LA COMPUTADORA DE ORIENTACIÓN DEL MÓDULO LUNAR

Cómo lo construyeron: el software del Apolo 11

Proyecto de Historia Oral del Centro Espacial Johnson de la NASA Transcripción de Historia Oral Editada

Breve historia del Extracto del Programa Apolo de la NASA : cinco minutos después de la quemadura de descenso y 1.800 m sobre la superficie de la Luna, la computadora de navegación y guía LM produjo la primera de varias alarmas inesperadas del programa "1202" y "1201". El ingeniero informático del Centro de Control de la Misión en Houston, Jack Garman, le dijo al oficial de orientación Steve Bales que era seguro continuar el descenso. Estas alarmas fueron indicaciones de "desbordamientos ejecutivos", lo que significa que la computadora de guía no pudo completar todas sus tareas en tiempo real y tuvo que posponer algunas de ellas.

Recordando el extracto del 'salto gigante' : sabíamos qué era eso y que no debería estar sucediendo. Pero habíamos diseñado un sistema que intentaba recuperarse de cualquier condición de sobrecarga. Así que recuerdo haber escuchado al [ingeniero informático de la NASA] Jack Garman gritar: "¡Ve, ve!" Y continuaron. Luego escuchamos mientras Neil voló el LEM y siguió tratando de encontrar un buen lugar para aterrizar. Nuestra nueva preocupación era la falta de combustible restante. Pero finalmente escuchamos el aviso de contacto y luego, "El águila ha aterrizado".

Entrevista a Jack Garman

EDITAR: Tal vez este fue el documental: Apollo 11: The Untold Story (2006)

Elenco: John R. Garman ...
Él Mismo - Apollo 11 Computer Engineer (como Jack Garman)

(Entre otros).

Actualización: Un pirata informático de Sudáfrica acaba de rescatar la primera computadora de la NASA en el espacio

K.Nicholas
fuente
¡Sabía que esa historia me sonaba familiar! La sección "Apolo 11" tiene más información sobre esta historia en en.wikipedia.org/wiki/Margaret_Hamilton_(scientist)
hydo
31

Si entiendo correctamente, el proceso de desarrollo fue la revisión por pares y la experimentación.

El equipo estaba formado por personas como "Médicos de Matemáticas", personas extremadamente dedicadas, inteligentes, apasionadas y orientadas al detalle cuyas vidas estaban dedicadas a su trabajo. Entonces, cuando digo revisión por pares, me refiero a muchas revisiones por pares en el transcurso de muchos meses (más de un año).

Estos desarrolladores "ejecutaron las simulaciones en sus cabezas", "depuraron el software en papel" y trabajaron en grupos con muchos desarrolladores mirando el mismo código una y otra vez hasta que se convencieron de que era correcto. Había varios equipos, cada uno trabajando en una parte del todo.

Mi profesor de Métodos Numéricos en la Universidad Estatal de Ohio (Spring '96) escribió el código que decidió cuándo comenzar una etapa del cohete de refuerzo. Describió que la impresión era del tamaño de la guía telefónica (por lo tanto, tal vez de 2.5 a 3.5 pulgadas de grosor de papel de 8.5 x 11 pulgadas, no describió el tamaño de la fuente) del código Fortran.

Cuando se convencieron, lanzaron un misil no tripulado (los cohetes técnicamente no tienen giroscopios) con una radio a bordo que emitía un pitido a intervalos regulares. Escucharon los pitidos hasta el punto en que esperaban que la radio impactara en la luna (chocara contra ella y se destruyera a sí misma) y dejara de sonar. Sabían que si fallaban, la radio seguiría sonando mucho más allá del tiempo calculado de impacto. El impacto ocurrió 15 segundos después del tiempo calculado.

Esta historia ciertamente anecdótica son mis recuerdos de una visita al consultorio con el médico. Era muy viejo, y fue hace mucho tiempo. Este es mi mejor recuerdo.

Lyle S.
fuente
2
Describió que la impresión era del tamaño de la guía telefónica (por lo tanto, tal vez de 2.5 a 3.5 pulgadas de grosor de papel de 8.5 x 11 pulgadas). Generalmente, el código se imprimió en modo horizontal con aproximadamente 55 - 60 líneas por página. Una resma (100 hojas) de papel impreso tiene un grosor de aproximadamente 1.75 pulgadas.
Gilbert Le Blanc
@GilbertLeBlanc Una resma suele ser de 500 hojas. (a veces 480)
joshp
@joshp: Tienes razón. 500 hojas de papel de impresión tienen aproximadamente 1.75 pulgadas de grosor.
Gilbert Le Blanc
15

El AGC se controla con verbos y sustantivos.

El software del comando Apollo no está escrito en ninguna sintaxis que los usuarios reconocerían hoy. Los astronautas ingresan comandos numéricamente, y cada número de dos dígitos representa un verbo o un sustantivo. El verbo describió la acción a realizar, y el sustantivo especificó los datos a ser afectados por la acción del verbo.

Los astronautas odiaban la configuración de verbos y sustantivos

Ramón Alonso, uno de los desarrolladores originales de hardware de AGC, dijo que la interfaz había sido inventada para impresionar a los visitantes de su laboratorio, pero se quedó para los vuelos cuando nadie desarrolló una mejor interfaz. Los críticos dijeron que no era "científico", y los primeros astronautas —todos los pilotos de élite— prefirieron diales e interruptores, similares a un panel de control de un avión.

"El AGC fue muy lento, pero muy confiable y muy pequeño para ese tiempo en la historia de las computadoras digitales. Fue el primero en usar circuitos integrados".

El software tal como fue diseñado fue construido básicamente desde cero por el MIT.

Puede descargar e instalar el programa emulador de computadora Apollo Guidance en su computadora personal, no hay problema. Así es como se ve en Mac OS X.

ingrese la descripción de la imagen aquí

Josip Ivic
fuente
8

Como casi cualquier otro proyecto de software, se realizó bajo una fecha límite agresiva y una presión de calidad. Afortunadamente, un gran archivo de material del gerente de proyectos de software Howard W. "Bill" Tindall, Jr. está disponible aquí .

Si prueba los memos, puede tener una idea muy clara del conflicto normal entre tiempo, características y defectos. Vale la pena señalar que el desarrollo continuó durante varios años como el resto del proyecto.

El diseño del sistema comenzó en el segundo trimestre de 1961, y la NASA instaló una versión Block I en una nave espacial el 22 de septiembre de 1965. El lanzamiento del software original (llamado CORONA) fue en enero de 1966, con el primer vuelo el 25 de agosto. 1966. Menos de 3 años después de eso, los diseñadores lograron el objetivo final del programa ( http://history.nasa.gov/computers/Ch2-5.html )

No puedo encontrar referencias específicas sobre cómo se creó el software, pero dada la fecha, solo puedo suponer que gran parte se realizó en lápiz y papel, con "simulaciones" hechas manualmente. Parece que había un sistema para cargar programas en el AGC con tarjetas perforadas, presumiblemente para pruebas "rápidas" en el terreno sin la necesidad de fabricar memoria de cuerda.

pjc50
fuente